环境准备

本文基础环境如下:

----------------
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) * 1DeepSeek-R1-Distill-Qwen-7B2048162632.531.50
V100(32GB) * 1DeepSeek-R1-Distill-Qwen-7B4096162558.131.50
V100(32GB) * 1DeepSeek-R1-Distill-Qwen-7B8192162703.731.54
V100(32GB) * 1DeepSeek-R1-Distill-Qwen-7B81921166.631.50

请求 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 ParamsContext LengthDownload
DeepSeek-R1-Zero671B37B128K🤗 HuggingFace
DeepSeek-R1671B37B128K🤗 HuggingFace

DeepSeek-R1-Distill Models

ModelBase ModelDownload
DeepSeek-R1-Distill-Qwen-1.5BQwen2.5-Math-1.5B🤗 HuggingFace
DeepSeek-R1-Distill-Qwen-7BQwen2.5-Math-7B🤗 HuggingFace
DeepSeek-R1-Distill-Llama-8BLlama-3.1-8B🤗 HuggingFace
DeepSeek-R1-Distill-Qwen-14BQwen2.5-14B🤗 HuggingFace
DeepSeek-R1-Distill-Qwen-32BQwen2.5-32B🤗 HuggingFace
DeepSeek-R1-Distill-Llama-70BLlama-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推理加速,并支持继续训练。

新功能

  1. 数据集模块重构。数据集加载速度提升2-20倍,encode速度提升2-4倍,支持streaming模式

    • 移除了dataset_name机制,采用dataset_id、dataset_dir、dataset_path方式指定数据集
    • 使用--dataset_num_proc​支持多进程加速处理
    • 使用--streaming​支持流式加载hub端和本地数据集
    • 支持--packing​命令以获得更稳定的训练效率
    • 指定--dataset <dataset_dir>​支持本地加载开源数据集
  2. 对模型进行了重构:

    • 移除了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

引用借鉴

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐