
V100 上用 ms-swift 框架部署 DeepSeek-R1-Distill-Qwen-7B 超全攻略
本文详细介绍如何运用 ms - swift 框架在 V100 设备上部署 DeepSeek - R1 - Distill - Qwen - 7B 模型。开篇明确所需环境,如 x86_64 架构、ubuntu 22.04 或 centos 7 系统、V100 GPU 等。接着依次阐述依赖安装、模型下载步骤,还展示推理测试、部署测试及并发测试过程。
环境准备
本文基础环境如下:
----------------
x86_64
ubuntu 22.04 or centos 7
gpu: V100(32GB) * 1
python 3.10
cuda 12.4
----------------
本文默认已配置好以上 cuda、anaconda 环境,如未配置请先自行安装。
依赖安装
conda create -n DeepSeekR1-swift python=3.10 -y
conda activate DeepSeekR1-swift
首先 pip 换源加速下载并安装依赖包
python -m pip install --upgrade pip
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
pip install modelscope==1.22.3
pip install openai==1.61.0
pip install tqdm==4.67.1
pip install "vllm>=0.5.1" -U
pip install "lmdeploy>=0.5,<0.6.5" -U --no-deps
pip install autoawq -U --no-deps
pip install auto_gptq optimum bitsandbytes -U
pip install ms-swift[all]
pip install timm -U
pip install deepspeed==0.14.* -U
pip install qwen_vl_utils decord librosa pyav icecream -U
检查安装是否成功
python -c "import torch; print(torch.cuda.is_available())"
输出True这说明gpu版本的pytorch安装成功
模型下载
使用 modelscope 中的 snapshot_download 函数下载模型,第一个参数为模型名称,参数 local_dir 为模型的下载路径。
新建 model_download.py 文件并在其中输入以下内容,粘贴代码后记得保存文件。
from modelscope import snapshot_download
model_dir = snapshot_download('deepseek-ai/DeepSeek-R1-Distill-Qwen-7B', local_dir='deepseek-ai/DeepSeek-R1-Distill-Qwen-7B', revision='master')
然后在终端中输入 python model_download.py 执行下载,这里需要耐心等待一段时间直到模型下载完成。
注意:记得修改 local_dir 为你的模型下载路径
推理测试
CUDA_VISIBLE_DEVICES=2 swift infer \
--model /home/mnivl/apps/models/deepseek-ai/DeepSeek-R1-Distill-Qwen-7B \
--max_model_len 5000 \
--temperature 0.7 \
--infer_backend vllm
地心说为什么是假的
部署测试
- 运行部署命令
CUDA_VISIBLE_DEVICES=2 swift deploy \
--model /home/mnivl/apps/models/deepseek-ai/DeepSeek-R1-Distill-Qwen-7B \
--max_model_len 8192 \
--host 0.0.0.0 \
--port 10040 \
--infer_backend lmdeploy
- 通过 curl 命令查看当前的模型列表
curl http://localhost:10040/v1/models
得到的返回值如下所示
{
"data": [
{
"id": "DeepSeek-R1-Distill-Qwen-7B",
"object": "model",
"created": 1738832400,
"owned_by": "swift"
}
],
"object": "list"
}
- curl 对话测试
curl http://localhost:10040/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "DeepSeek-R1-Distill-Qwen-7B",
"messages": [
{"role": "user", "content": "地心说为什么是真的"}
],
"stream": true
}'
-
显存占用
并发测试
swift 的推理模式会更为极限一点,显存会顶到 31.5 (总32GB)
不确定会不会爆显存,不过也确实牛逼,速率可以飙升到700tokens/s
速率以整体处理的token计算,单次请求的速率不好计算(懒得写脚本),简单一点就是[ 速率 / 并发数 ]就是单个请求的速率了(不严谨)
设备 | 模型 | 上下文 | 并发 | 循环次数 | 速率(tokens/s) | 显存(GB) | 请求超时个数 |
---|---|---|---|---|---|---|---|
V100(32GB) * 1 | DeepSeek-R1-Distill-Qwen-7B | 2048 | 16 | 2 | 632.5 | 31.5 | 0 |
V100(32GB) * 1 | DeepSeek-R1-Distill-Qwen-7B | 4096 | 16 | 2 | 558.1 | 31.5 | 0 |
V100(32GB) * 1 | DeepSeek-R1-Distill-Qwen-7B | 8192 | 16 | 2 | 703.7 | 31.5 | 4 |
V100(32GB) * 1 | DeepSeek-R1-Distill-Qwen-7B | 8192 | 1 | 1 | 66.6 | 31.5 | 0 |
请求 timeout=60s
过程可能出现的报错
ValueError: Bfloat16 is only supported on GPUs with compute capability of at least 8.0
ValueError: Bfloat16 is only supported on GPUs with compute capability of at least 8.0. Your Tesla V100-PCIE-32GB GPU has compute capability 7.0. You can use float16 instead by explicitly setting thedtype flag in CLI, for example: --dtype=half.
- 数据类型不兼容:bfloat16(Brain Floating Point 16)是一种 16 位的浮点数数据类型,它在一些新的 GPU 架构上(计算能力至少为 8.0)被支持,用于加速深度学习训练和推理。而 Tesla V100 GPU 计算能力为 7.0,不支持 bfloat16。
解决办法
- 使用 float16 替代 bfloat16
错误信息中已经给出了提示,可以使用 float16 替代 bfloat16。具体做法是在命令行中显式设置 dtype 标志。
from vllm import LLM
....
# 初始化 vLLM 推理引擎
llm = LLM(model=model, ..., dtype="float16")
python -m vllm.entrypoints.openai.api_server \
--model /home/mnivl/apps/models/deepseek-ai/DeepSeek-R1-Distill-Qwen-7B \
.... \
--dtype float16
ImportError: libGL.so.1
ImportError: libGL.so.1: cannot open shared object file: No such file or directory
不知道为什么swift在推理语言模型时,使用vllm方式推理时,会调用openGL图像库
所以,如果不想麻烦,可以直接在推理和部署的指令中去除vllm选项即可
去除 --infer_backend vllm
改为 --infer_backend lmdeploy
模型指标
DeepSeek-R1 训练技术论文链接: DeepSeek-R1/DeepSeek_R1.pdf at main · deepseek-ai/DeepSeek-R1 · GitHub
- 使用 DeepSeek-R1 生成的推理数据,微调了研究界广泛使用的几个密集模型。评估结果表明,蒸馏的较小密集模型在基准上表现非常出色。开源了基于 Qwen2.5 和 Llama3 系列的 1.5B、7B、8B、14B、32B 和 70B 。
- 魔搭社区
DeepSeek-R1 Models
Model | #Total Params | #Activated Params | Context Length | Download |
---|---|---|---|---|
DeepSeek-R1-Zero | 671B | 37B | 128K | 🤗 HuggingFace |
DeepSeek-R1 | 671B | 37B | 128K | 🤗 HuggingFace |
DeepSeek-R1-Distill Models
Model | Base Model | Download |
---|---|---|
DeepSeek-R1-Distill-Qwen-1.5B | Qwen2.5-Math-1.5B | 🤗 HuggingFace |
DeepSeek-R1-Distill-Qwen-7B | Qwen2.5-Math-7B | 🤗 HuggingFace |
DeepSeek-R1-Distill-Llama-8B | Llama-3.1-8B | 🤗 HuggingFace |
DeepSeek-R1-Distill-Qwen-14B | Qwen2.5-14B | 🤗 HuggingFace |
DeepSeek-R1-Distill-Qwen-32B | Qwen2.5-32B | 🤗 HuggingFace |
DeepSeek-R1-Distill-Llama-70B | Llama-3.3-70B-Instruct | 🤗 HuggingFace |
ms-swift 特性
🍲 ms-swift是魔搭社区提供的大模型与多模态大模型微调部署框架,现已支持450+大模型与150+多模态大模型的训练(预训练、微调、人类对齐)、推理、评测、量化与部署。其中大模型包括:Qwen2.5、InternLM3、GLM4、Llama3.3、Mistral、DeepSeek-R1、Yi1.5、TeleChat2、Baichuan2、Gemma2等模型,多模态大模型包括:Qwen2.5-VL、Qwen2-Audio、Llama3.2-Vision、Llava、InternVL2.5、MiniCPM-V-2.6、GLM4v、Xcomposer2.5、Yi-VL、DeepSeek-VL2、Phi3.5-Vision、GOT-OCR2等模型。
🍔 除此之外,ms-swift汇集了最新的训练技术,包括LoRA、QLoRA、Llama-Pro、LongLoRA、GaLore、Q-GaLore、LoRA+、LISA、DoRA、FourierFt、ReFT、UnSloth、和Liger等。ms-swift支持使用vLLM和LMDeploy对推理、评测和部署模块进行加速,并支持使用GPTQ、AWQ、BNB等技术对大模型和多模态大模型进行量化。为了帮助研究者和开发者更轻松地微调和应用大模型,ms-swift还提供了基于Gradio的Web-UI界面及丰富的最佳实践。
为什么选择ms-swift?
- 🍎 模型类型:支持450+纯文本大模型、150+多模态大模型,All-to-All全模态模型的训练到部署全流程。
- 数据集类型:内置150+预训练、微调、人类对齐、多模态等各种类型的数据集,并支持自定义数据集。
- 硬件支持:CPU、RTX系列、T4/V100、A10/A100/H100、Ascend NPU等。
- 🍊 轻量训练:支持了LoRA、QLoRA、DoRA、LoRA+、ReFT、RS-LoRA、LLaMAPro、Adapter、GaLore、Q-Galore、LISA、UnSloth、Liger-Kernel等轻量微调方式。
- 分布式训练:支持分布式数据并行(DDP)、device_map简易模型并行、DeepSpeed ZeRO2 ZeRO3、FSDP等分布式训练技术。
- 量化训练:支持对BNB、AWQ、GPTQ、AQLM、HQQ、EETQ量化模型进行训练。
- RLHF训练:支持纯文本大模型和多模态大模型的DPO、CPO、SimPO、ORPO、KTO、RM、PPO等人类对齐训练方法。
- 🍓 多模态训练:支持对图像、视频和语音不同模态模型进行训练,支持VQA、Caption、OCR、Grounding任务的训练。
- 界面训练:以界面的方式提供训练、推理、评测、量化的能力,完成大模型的全链路。
- 插件化与拓展:支持自定义模型和数据集拓展,支持对loss、metric、trainer、loss-scale、callback、optimizer等组件进行自定义。
- 🍉 工具箱能力:不仅提供大模型和多模态大模型的训练支持,还涵盖其推理、评测、量化和部署全流程。
- 推理加速:支持PyTorch、vLLM、LmDeploy推理加速引擎,并提供OpenAI接口,为推理、部署和评测模块提供加速。
- 模型评测:以EvalScope作为评测后端,支持100+评测数据集对纯文本和多模态模型进行评测。
- 模型量化:支持AWQ、GPTQ和BNB的量化导出,导出的模型支持使用vLLM/LmDeploy推理加速,并支持继续训练。
新功能
-
数据集模块重构。数据集加载速度提升2-20倍,encode速度提升2-4倍,支持streaming模式
- 移除了dataset_name机制,采用dataset_id、dataset_dir、dataset_path方式指定数据集
- 使用--dataset_num_proc支持多进程加速处理
- 使用--streaming支持流式加载hub端和本地数据集
- 支持--packing命令以获得更稳定的训练效率
- 指定--dataset <dataset_dir>支持本地加载开源数据集
-
对模型进行了重构:
- 移除了model_type机制,使用--model <model_id>/<model_path>来训练和推理
- 若是新模型,直接使用--model <model_id>/<model_path> --template xxx --model_type xxx,无需书写python脚本进行模型注册
支持的模型
查看siwft最新版本支持的模型中,已经支持 deepseek_r1_distill 蒸馏版本
swift infer --help | grep deepseek
引用借鉴
- ReleaseNote 3.0 — swift 3.1.0.dev0 文档
- GitHub - modelscope/ms-swift: Use PEFT or Full-parameter to finetune 450+ LLMs (Qwen2.5, InternLM3, GLM4, Llama3.3, Mistral, Yi1.5, Baichuan2, DeepSeek-R1, ...) and 150+ MLLMs (Qwen2.5-VL, Qwen2-Audio, Llama3.2-Vision, Llava, InternVL2.5, MiniCPM-V-2.6, GLM4v, Xcomposer2.5, Yi-VL, DeepSeek-VL2, Phi3.5-Vision, GOT-OCR2, ...).
更多推荐
所有评论(0)