DeepSeek-R1-Distill-Qwen-1.5B模型全流程测试与服务化部署实践指南
一、实验目标概述
本次实验旨在全面掌握大语言模型从原生性能评估到服务化部署的完整技术链路,具体涵盖三个核心维度:首先是纯模型形态下的精度验证与性能基准测试,其次是基于昇腾平台的服务化部署实践,最后完成服务化环境下的精度一致性校验与性能压力测试。通过系统性实验,建立从模型研发到生产落地的标准化技术能力。
二、前置环境准备
2.1 推理环境搭建
2.1.1 镜像获取与配置
- 访问昇腾开发者社区镜像仓库(https://www.hiascend.com/developer/ascendhub),检索"mindie"关键字获取适配的推理镜像
- 完成企业用户权限申请后,根据硬件配置选择对应的镜像版本(建议选择包含Ascend-CANN 7.0+的版本)
2.1.2 容器部署与启动
使用如下命令创建并启动容器实例,确保挂载必要的设备与目录:
docker run -itd --privileged --name=llm_test_env --net=host --shm-size=500g \
--device=/dev/davinci0 \
--device=/dev/davinci1 \
--device=/dev/davinci2 \
--device=/dev/davinci3 \
--device=/dev/davinci4 \
--device=/dev/davinci5 \
--device=/dev/davinci6 \
--device=/dev/davinci7 \
--device=/dev/davinci_manager \
--device=/dev/devmm_svm \
--device=/dev/hisi_hdc \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /usr/local/Ascend/add-ons/:/usr/local/Ascend/add-ons/ \
-v /usr/local/sbin/:/usr/local/sbin/ \
-v /var/log/npu/slog/:/var/log/npu/slog \
-v /var/log/npu/profiling/:/var/log/npu/profiling \
-v /var/log/npu/dump/:/var/log/npu/dump \
-v /var/log/npu/:/usr/slog \
-v /etc/hccn.conf:/etc/hccn.conf \
-v /data/models:/model \
ascend-mindie:latest /bin/bash
通过docker exec -it llm_test_env bash命令进入交互终端
2.2 模型权重获取
创建个人工作空间并下载目标模型权重:
mkdir -p /home/developer/llm_workspace && cd /home/developer/llm_workspace
# 安装Git LFS支持大文件下载
apt update && apt install -y git-lfs
git lfs install
# 克隆模型仓库
git clone https://gitcode.com/hf_mirrors/deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B
建议克隆完成后校验文件完整性,特别是模型权重文件(.bin/.safetensors)的大小是否符合预期。
2.3 评估数据集准备
构建GSM8K数学推理能力评估数据集:
mkdir -p /home/developer/datasets/gsm8k && cd /home/developer/datasets/gsm8k
wget -O test_set.jsonl https://sail-moe.oss-cn-hangzhou.aliyuncs.com/open_data/gsm8k/test.jsonl --no-check-certificate
# 验证数据集完整性
md5sum test_set.jsonl # 预期输出:d41d8cd98f00b204e9800998ecf8427e
GSM8K数据集包含8000+道小学数学应用题,是评估语言模型逻辑推理能力的行业标准数据集,本次实验将用于模型精度验证。
三、纯模型测试流程
3.1 性能基准测试
3.1.1 环境变量配置
首先加载昇腾平台环境依赖:
source /usr/local/Ascend/mindie/set_env.sh
source /usr/local/Ascend/ascend-toolkit/set_env.sh
source /usr/local/Ascend/nnal/atb/set_env.sh
source /usr/local/Ascend/llm_model/set_env.sh
# 配置日志与Python环境
export MINDIE_LLM_LOG_TO_STDOUT=1
export PATH=/usr/local/python3.11.10/bin:$PATH
3.1.2 执行性能测试
切换至测试脚本目录,执行指定参数的性能测试:
cd /usr/local/Ascend/llm_model/tests/modeltests
# 基础性能测试命令模板
# bash run.sh [精度模式] performance [输入输出序列长度] [批处理大小] [模型类型] [权重路径] [设备数量]
# 单卡BF16精度测试示例
bash run.sh pa_bf16 performance [[256,256]] 1 qwen /home/developer/llm_workspace/DeepSeek-R1-Distill-Qwen-1.5B 1
测试过程中系统会自动采集关键性能指标:包括tokens per second(每秒处理token数)、首token响应延迟(First Token Latency)、平均批处理延迟等核心指标。
3.1.3 性能结果解析
性能测试日志默认保存于/var/log/npu/profiling/目录,关键结果可通过如下命令提取:
grep "Throughput" /var/log/npu/profiling/performance_20240520.log
# 预期输出格式:Throughput: 128.5 tokens/sec
建议执行3次测试取平均值,同时记录不同序列长度(如64/128/256/512)下的性能表现,绘制模型吞吐量随输入长度变化的曲线。
3.2 精度验证测试
3.2.1 环境变量复用
若已完成3.1.1节配置,可直接复用环境变量;否则需重新执行对应环境变量设置命令。
3.2.2 测试数据准备
将数据集复制到测试脚本工作目录:
cd /usr/local/Ascend/llm_model/tests/modeltests
cp -r /home/developer/datasets/gsm8k ./data/
3.2.3 执行精度测试
启动GSM8K数据集上的精度评估:
# 精度测试命令模板
# bash run.sh [精度模式] [数据集名称] [批大小] [模型类型] [权重路径] [设备数量]
bash run.sh pa_bf16 full_GSM8K 10 qwen /home/developer/llm_workspace/DeepSeek-R1-Distill-Qwen-1.5B 1
测试过程中模型将对数据集中的数学问题生成解答,系统会自动计算Pass@1指标(单次回答正确的比例),这是评估模型推理能力的核心指标。
3.2.4 精度结果查看
精度测试报告默认生成于./results/accuracy/目录下的JSON文件,关键指标提取命令:
jq '.pass_at_1' ./results/accuracy/gsm8k_results.json
通常情况下,DeepSeek-R1-Distill-Qwen-1.5B在GSM8K数据集上的Pass@1指标应达到35%-45%区间,具体数值受精度模式和优化策略影响。
四、服务化部署与测试
4.1 服务化部署流程
4.1.1 配置文件修改
进入MindIE服务配置目录并调整关键参数:
cd /usr/local/Ascend/mindie/latest/mindie-service
vim conf/application.json
需重点配置的参数包括:模型加载路径("modelPath")、推理精度模式("precisionMode")、最大并发数("maxConcurrency")、端口号("servicePort")等,建议初始配置时将日志级别设为"DEBUG"以便问题排查。
4.1.2 服务环境初始化
source /usr/local/Ascend/mindie/set_env.sh
source /usr/local/Ascend/ascend-toolkit/set_env.sh
source /usr/local/Ascend/nnal/atb/set_env.sh
source /usr/local/Ascend/llm_model/set_env.sh
# 服务化特有环境变量
export MINDIE_LLM_LOG_TO_STDOUT=1
export MINDIE_LOG_TO_STDOUT=1
export PATH=/usr/local/python3.11.10/bin:$PATH
4.1.3 启动服务实例
cd /usr/local/Ascend/mindie/latest/mindie-service
./bin/mindieservice_daemon start
服务启动成功后会显示"Daemon start success!",可通过ps -ef | grep mindie确认进程状态,日志文件位于/var/log/mindie/service.log。
4.1.4 基础功能验证
使用curl工具发送测试请求:
curl -X POST -d '{
"model": "qwen",
"messages": [{"role": "user", "content": "What is the square root of 625?"}],
"max_tokens": 50,
"stream": false
}' http://localhost:1025/v1/chat/completions
正常响应应包含正确答案"25"及相关推理过程,这表明服务化部署基本功能正常。
4.2 服务化性能测试
4.2.1 测试环境准备
开启新终端会话并配置环境变量:
export PATH=/usr/local/python3.11.10/bin:$PATH
export MINDIE_LOG_TO_STDOUT="benchmark:1; client:1"
4.2.2 执行压力测试
使用官方基准测试工具进行服务性能评估:
# 性能测试命令模板
benchmark --DatasetPath "/home/developer/datasets/gsm8k/test_set.jsonl" \
--DatasetType "gsm8k" \
--ModelName "qwen" \
--ModelPath "/home/developer/llm_workspace/DeepSeek-R1-Distill-Qwen-1.5B" \
--TestType "client" \
--Http "http://127.0.0.1:1025" \
--ManagementHttp "http://127.0.0.2:1026" \
--Concurrency 50 \
--TaskKind "stream" \
--Tokenizer "True" \
--MaxOutputLen 512
其中"Concurrency"参数指定并发用户数,建议从10逐步增加至200,观察系统吞吐量和响应延迟的变化趋势。
4.2.3 性能结果分析
服务性能测试结果包含:平均响应延迟(P50/P95/P99分位数)、每秒处理请求数(RPS)、Token吞吐量(TPS)等关键指标,可通过./benchmark_results/performance_summary.csv文件查看详细统计数据。
4.3 服务化精度测试
4.3.1 确定性环境配置
为确保精度测试结果可复现,需配置确定性执行环境:
export PATH=/usr/local/python3.11.10/bin:$PATH
export MINDIE_LOG_TO_STDOUT="benchmark:1; client:1"
export LCCL_DETERMINISTIC=1
export HCCL_DETERMINISTIC=true
export ATB_MATMUL_SHUFFLE_K_ENABLE=0
4.3.2 执行精度验证
启动服务化环境下的精度测试:
benchmark --DatasetPath "/home/developer/datasets/gsm8k/test_set.jsonl" \
--DatasetType "gsm8k" \
--ModelName "qwen" \
--ModelPath "/home/developer/llm_workspace/DeepSeek-R1-Distill-Qwen-1.5B" \
--TestType "client" \
--Http "http://127.0.0.1:1025" \
--ManagementHttp "http://127.0.0.2:1026" \
--Concurrency 1 \
--TaskKind "stream" \
--Tokenizer "True" \
--MaxOutputLen 512 \
--TestAccuracy "True"
与纯模型测试不同,服务化精度测试通过HTTP接口发送请求,更贴近真实应用场景,需重点关注与纯模型测试结果的一致性(建议Pass@1指标差异不超过2%)。
4.3.3 精度结果验证
服务化精度测试报告生成于./benchmark_results/accuracy/目录,通过对比纯模型测试的Pass@1指标,验证服务化部署对模型精度的影响。若差异超过阈值,需检查服务配置中的精度模式、量化参数等设置是否与纯模型测试保持一致。
五、实验总结与技术展望
本次实验完整实现了DeepSeek-R1-Distill-Qwen-1.5B模型从原生形态到服务化部署的全流程测试,关键收获包括:建立了昇腾平台上大语言模型的标准化测试流程,验证了服务化部署对模型性能与精度的影响规律,掌握了高并发场景下的性能优化方向。
未来可进一步拓展的方向:一是探索不同精度模式(FP16/BF16/INT8)下的性能-精度平衡策略;二是研究模型并行与张量并行等分布式部署方案在多卡环境下的扩展性能;三是构建更全面的评估体系,包括长文本处理能力、多轮对话连贯性等更贴近实际应用场景的测试维度。这些探索将为大语言模型的工业化落地提供更丰富的技术参考。
通过本次实践,不仅掌握了具体的操作流程,更重要的是建立了从模型评估到服务部署的系统性思维,这对于AI工程化人才培养具有重要意义。随着昇腾AI基础设施的不断完善,大语言模型的部署门槛将持续降低,推动AI技术在各行各业的深度应用。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



