当前位置: 首页 > news >正文

一个简单测试Deepseek吞吐量的脚本,国内环境可跑

一个简单测试Deepseek吞吐量的脚本,这里用DeepSeek-R1-Distill-Qwen-32B ,支持单卡4090 24G可跑,具体看你的硬件情况做调整,理论支持所有的模型,看你需要,可以修改模型名称,重点是pip使用国内的源,模型下载用阿里的ModelScope,无障碍下载,使用.
最后可以生成一个txt与html报表.
前提是你安装了python与python-venv,你可以不用venv来做,可动手改一下脚本.
 

#!/bin/bash
set -e
# 参数配置
MODEL_REPO="deepseek-ai/DeepSeek-R1-Distill-Qwen-32B"
BATCH_SIZES=(1 2 4 10 20 30 50)  # 32B模型显存需求大,batch_size调小
SEQ_LENGTHS=(256 512)
WARMUP_STEPS=3
MEASURE_STEPS=10
VENV_NAME="deepseek_test"
REPORT_FILE="benchmark_report.txt"
HTML_REPORT_FILE="benchmark_report.html"# 创建虚拟环境
echo "创建Python虚拟环境..."
python3 -m venv $VENV_NAME
source $VENV_NAME/bin/activate# 配置国内pip源
echo "配置国内pip源..."
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
pip config set global.trusted-host pypi.tuna.tsinghua.edu.cn# 安装依赖
echo "安装依赖包..."
pip install torch transformers modelscope accelerate# 测试函数
run_benchmark() {local batch_size=$1local seq_length=$2echo -e "\n测试配置: batch_size=${batch_size}, seq_length=${seq_length}"python3 - <<EOF
import torch
from modelscope import AutoModelForCausalLM, AutoTokenizer
import timemodel_name = "${MODEL_REPO}"
device = "cuda" if torch.cuda.is_available() else "cpu"# 加载模型和分词器
print("加载模型和分词器中...")
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(model_name,torch_dtype=torch.float16,device_map="auto",trust_remote_code=True
)# 显式设置 pad_token_id
if tokenizer.eos_token is None:eos_token = tokenizer.convert_ids_to_tokens(tokenizer.eos_token_id)tokenizer.add_special_tokens({'pad_token': eos_token})
else:tokenizer.pad_token = tokenizer.eos_token# 准备输入
input_text = "测试" * ${seq_length}
inputs = tokenizer(input_text, return_tensors="pt", padding=True, truncation=True)
input_ids = inputs.input_ids.repeat(${batch_size}, 1).to(device)
attention_mask = inputs.attention_mask.repeat(${batch_size}, 1).to(device)# 预热
print("预热中...")
for _ in range(${WARMUP_STEPS}):_ = model.generate(input_ids, attention_mask=attention_mask, max_length=input_ids.shape[1]+10)# 正式测试
print("性能测试中...")
start_time = time.time()
for _ in range(${MEASURE_STEPS}):_ = model.generate(input_ids, attention_mask=attention_mask, max_length=input_ids.shape[1]+10)
elapsed = time.time() - start_time# 计算指标
avg_latency = elapsed / ${MEASURE_STEPS}
tokens_per_sec = (${batch_size} * 10) / avg_latencyprint(f"平均延迟: {avg_latency:.3f}s")
print(f"吞吐量: {tokens_per_sec:.2f} tokens/s")
print(f"显存占用: {torch.cuda.max_memory_allocated()/1024**3:.2f} GB")
EOF
}# 主流程
echo "$MODEL_REPO 性能测试开始" > $REPORT_FILE
echo "GPU信息:" >> $REPORT_FILE
nvidia-smi --query-gpu=name,memory.total --format=csv >> $REPORT_FILEecho "<html><body><h1>DeepSeek-R1-Distill-Qwen-32B性能测试报告</h1>" > $HTML_REPORT_FILE
echo "<p>GPU信息:</p>" >> $HTML_REPORT_FILE
nvidia-smi --query-gpu=name,memory.total --format=csv | sed 's/^/<p>/' | sed 's/$/<\/p>/' >> $HTML_REPORT_FILEfor bs in ${BATCH_SIZES[@]}; dofor seq in ${SEQ_LENGTHS[@]}; doecho -e "\n测试配置: batch_size=${bs}, seq_length=${seq}" >> $REPORT_FILEecho "<h2>测试配置: batch_size=${bs}, seq_length=${seq}</h2>" >> $HTML_REPORT_FILErun_benchmark $bs $seq | tee -a $REPORT_FILE | sed 's/^/<p>/' | sed 's/$/<\/p>/' >> $HTML_REPORT_FILEdone
doneecho "</body></html>" >> $HTML_REPORT_FILEdeactivate
echo "测试完成"

文章转载自:
http://cambistry.lbooon.cn
http://catfall.lbooon.cn
http://augmentation.lbooon.cn
http://amesace.lbooon.cn
http://anyone.lbooon.cn
http://arcjet.lbooon.cn
http://bacalao.lbooon.cn
http://androgen.lbooon.cn
http://abbreviation.lbooon.cn
http://cambria.lbooon.cn
http://alcahest.lbooon.cn
http://caliginous.lbooon.cn
http://appellatively.lbooon.cn
http://blackbird.lbooon.cn
http://acold.lbooon.cn
http://admittance.lbooon.cn
http://beerpull.lbooon.cn
http://bilge.lbooon.cn
http://choreographist.lbooon.cn
http://alguazil.lbooon.cn
http://bayard.lbooon.cn
http://cariban.lbooon.cn
http://autolysis.lbooon.cn
http://behoove.lbooon.cn
http://carabin.lbooon.cn
http://aplanatic.lbooon.cn
http://caparison.lbooon.cn
http://attrahent.lbooon.cn
http://ameboid.lbooon.cn
http://annuli.lbooon.cn
http://www.dtcms.com/a/261722.html

相关文章:

  • 1.1 基于Icarus Verilog、ModelSim和Vivado对蜂鸟E203处理器进行仿真
  • HarmonyOS File和base64字符串转换
  • Note2.2 机器学习训练技巧:Batch and Momentum(Machine Learning by Hung-yi Lee)
  • C语言二级指针与多级指针
  • cannot import name ‘TextKwargs‘ from ‘transformers.processing_utils‘
  • 【LeetCode 热题 100】438. 找到字符串中所有字母异位词——(解法二)定长滑动窗口+数组
  • LeetCode Hot 100 找到字符串中所有字母异位词
  • 编译流程详解
  • 利用ROS打印novatel_msgs/INSPVAX
  • 滑坡监测接收机市场分析
  • libxlsxwriter: 一个轻量级的跨平台的C++操作Excel的开源库
  • 个人日记本小程序开发方案(使用IntelliJ IDEA)
  • python解释器 与 pip脚本常遇到的问题汇总
  • 【stm32】HAL库开发——CubeMX配置ADC
  • Minio入门+适配器模式(实战教程)
  • ZooKeeper深度面试指南三
  • uni-app subPackages 分包加载:优化应用性能的利器
  • uniapp上拉加载和下拉刷新组件mescroll-uni
  • 如何利用好doctor
  • JavaScript---字符串篇
  • 我的世界模组开发进阶教程——机械动力的数据生成(2)
  • ZooKeeper深度面试指南二
  • 【数据标注师】3D标注
  • WordPress最新版6.8.1安装教程
  • 解决cursor无法下载插件等网络问题
  • ReactNative【实战系列教程】我的小红书 2 -- 快捷登录、手机号密码登录
  • 前端react面试题之实现网页多选搜索框
  • 数据结构之——顺序栈与链式栈
  • 理解图像的随机噪声
  • 【unity游戏开发——网络】网络协议、TCP vs UDP 本质区别