刚刚!微调 DeepSeek 满血版正式开源。。。

近期,由中国科学院自动化研究所中科闻歌联合推出的 DeepSeek-V3/R1 671B 全参数微调开源方案正式发布!该项目完整公开了从模型训练到推理的全流程代码与脚本,并附带了实际训练中的经验总结与优化建议,为大模型开发者提供了一套可直接落地实战的解决方案。

一、项目亮点

1、完整训练逻辑代码:基于DeepSeek-V3论文,并结合DeepSeek-V2代码,该项目实现了包含训练核心逻辑的modeling_deepseek.py文件,确保与官方架构兼容。

2、高效并行训练策略:支持数据并行(DeepSpeed ZeRO)序列并行(SP),在32台H100服务器集群上完成671B模型的满血版模型全参数微调。

3、训练实战经验总结:提供多组实验配置对比(如不同超参数、并行策略选择下的显存占用),推荐最优训练参数,助开发者少走弯路。

二、项目意义

技术角度:通过全参数微调,DeepSeek 模型能更好地训练并拟合目标任务模式和数据分布,整体训练效果优于 LoRA 等低资源微调方案。

应用角度:针对模型在预训练阶段已具备基础知识的领域,全参数微调能够挖掘模型在特定垂直领域(如社会计算、媒体领域等)各种下游任务的性能潜力。

三、硬件配置

单台服务器配置如下表,集群共有 32 台相同配置的机器,共享 100TB 存储空间,挂载路径为 /nfs。机器操作系统为 Ubuntu 22.04,机器之间使用 IB 网络进行通信,GPU 之间通过 NVLink 通信,CUDA 版本为 12.6。

图片

四、环境配置

本项目基于 xtuner 框架进行扩展和改进,使其支持 Deepseek V3/R1(即 DeepseekV3ForCausalLM 模型架构)的全参数微调,支持数据并行(DeepSpeed ZeRO based DP)和序列并行(Sequence Parallel, SP)。安装 Python 环境,可根据项目中 requirements.txt 安装依赖包,并将 ./code/xtuner 与 DeepseekV3ForCausalLM 训练相关的核心代码覆盖原始 xtuner package 的对应代码即可。

conda create -n ds_env python=3.10conda activate ds_envpip install -r requirements.txt# 覆盖核心代码 这里修改为你的环境路径YOUR_ENV_PATH='/nfs/miniconda3/envs/ds_env/lib/python3.10/site-packages'cp -r ./code/xtuner $YOUR_ENV_PATH

五、数据准备

该项目基于 OpenAI 标准数据格式进行扩展以兼容 reasoning 数据,每条原始训练数据格式如下。如果有思考过程,则 assistant 角色的 reasoning_content 字段非空。

{  "messages": [    {"role": "system", "content": "You are a helpful assistant."},    {"role": "user", "content": "用户问题"},    {"role": "assistant", "content": "最终回答", "reasoning_content": "思考过程"}  ]}

为了简化处理逻辑,该项目将 reasoning_content 和 content 按照 Deepseek 的训练格式合并到 content 字段中。此外,为了兼容多轮对话的训练逻辑,还为 assistant 角色的每轮添加了 loss 字段,仅对值为 true 的 content 内容计算 loss。

{  "messages": [    {"role": "system", "content": "You are a helpful assistant."},    {"role": "user", "content": "用户问题"},    {"role": "assistant", "content": "<think>\n思考过程\n</think>\n\n最终回答", "loss": true}  ]}

为了更清晰地展示数据存储格式,该项目提供了一份转换后的数据样例文件 ./data/train_example.json 以供参考。在实际训练时,程序会根据 Deepseek V3/R1 的训练模版自动转换为如下格式,这里仅供展示:

<|begin▁of▁sentence|>You are a helpful assistant.<|User|>用户问题<|Assistant|><think>\n思考过程\n</think>\n\n最终回答<|end▁of▁sentence|>

六、启动训练

该项目提供了训练代码和训练启动脚本,其中:

./code/scripts/sft_deepseek.py:sft训练所需的配置文件,包括超参数设置、model和tokenizer配置、训练策略等,模型训练相关的配置均在此文件修改。

./code/scripts/sft_deepseek.sh:sft训练启动脚本,该脚本为单个节点的执行文件,因此需要通过 slurm 或 pdsh 在每台机器执行。对于每台机器,训练启动命令的唯一不同为 NODE_RANK 值,如果共 32 台机器,则该编号分别从 0 到 31。

以下是该项目提供的几组实验的结论,包括在不同并行策略等配置下模型训练的可行性。训练数据 ~100k,训练上下文长度为 32k。表中报告了每次实验使用的机器数量(nodes)、序列并行度(sp)、数据并行方式(dp)、单卡 batch size(bs)、迭代轮次(epoch)、学习率(lr)、单卡显存(mem)、实验记录和备注(notes)。

图片

以下是训练过程中的一个截图,从 DeepSeek V3 对该项目使用的 reasoning 数据进行全参数微调时,起始 loss 通常在 3.5 左右,经过 1 epoch 训练后,loss 收敛到 1.2 左右。

图片

七、模型权重转换

训练过程中建议使用至少 100TB 的 SSD 大容量存储,因为单个 pth 中间结果大约占 7.4TB 硬盘空间。训练完成后,需要将 pth 转换为主流推理框架(如vllm等)较好兼容的 huggingface 格式。在单台机器节点执行 bash ./code/scripts/convert_pth_to_hf.sh 即可完成模型权重格式转换,可根据实际情况修改脚本中的 pth 路径和权重保存路径。

需要注意的是,由于本过程对 CPU 内存有较大需求,因此可以通过虚拟内存进行扩展,防止 Out-of-memory。Swap(交换分区) 是 Linux 的虚拟内存,作用是当物理内存(RAM)不够用时,把部分数据存入磁盘,释放 RAM。

sudo fallocate -l 8192G /tmp/swapfile  # 创建 8T 交换文件sudo chmod 600 /tmp/swapfilesudo mkswap /tmp/swapfilesudo swapon /tmp/swapfilefree -h  # 检查 swap 是否增加

八、模型推理部署

该项目使用 vLLM 对全参数微调后的模型进行简单部署测试。如果使用 slurm 集群,可参考该项目提供的脚本并执行 sbatch 命令 sbatch ./code/scripts/vllm_deploy_slurm.sh 即可提交作业。半精度(bf16/fp16)模型建议使用4台机器32卡进行部署,如需配置 ray 或 api server 的端口号,可自行修改 sh 文件。如果需要通过 pdsh 启动部署(假设使用 node0~node3 四台机器),可参考以下步骤:  

1、设置环境变量(node0~node3)。

export HEAD_ADDR="node0"export DASHBOARD_PORT=8265export HEAD_PORT=6379export RAY_TMPDIR=/tmp/ray_tmp/export RAY_ADDRESS=$HEAD_ADDR:$HEAD_PORT

2、启动 Ray Head(node0)。

pdsh -R ssh -w node0 "source /nfs/miniconda3/etc/profile.d/conda.sh && conda activate vllm && \ray start --block --head --port=$HEAD_PORT --dashboard-port=$DASHBOARD_PORT --temp-dir=$RAY_TMPDIR"

3、启动 Ray Worker(node1~node3)。

pdsh -R ssh -w node1,node2,node3 "source /nfs/miniconda3/etc/profile.d/conda.sh && conda activate vllm && \ray start --block --address=$HEAD_ADDR:$HEAD_PORT"

4、启动 vLLM(node0)。

pdsh -R ssh -w node0 "source /nfs/miniconda3/etc/profile.d/conda.sh && conda activate vllm && \vllm serve /path/of/your/deepseek_sft_ckpt \    --tensor-parallel-size 8 \    --pipeline-parallel-size 4 \    --served-model-name deepseek-r1-sft \    --max-model-len 32768 \    --trust-remote-code \    --enable-reasoning \    --reasoning-parser deepseek_r1"

启动完成后,可通过 curl 命令测试接口是否正常启动:

curl -X POST http://node0:8000/v1/chat/completions -d '{"model": "deepseek-r1-sft", "messages":[{"role":"user", "content": "hello"}]}' -H "Content-Type: application/json"

稍等片刻后,如果终端输出符合预期的响应结果,则说明从训练到部署到整个过程顺利完成!🎉

Github开源地址:

https://github.com/ScienceOne-AI/DeepSeek-671B-SFT-Guide

来源 | AI有道

<think>嗯,用户想了解Deepseek R1满血的特性。首先,我需要整理现有的引用信息,看看有哪些相关的内容可以引用。引用4提到满血有6710亿参数,显存需求高,这应该属于模型规模部分。引用3提到了INT8无损量化和开源性质,这些都是关键特性,尤其是性能优化和开源带来的好处。引用2提到了推理能力和开源性对行业的影响,可能需要结合这些点来说明其技术亮点。还有引用1提到本地部署的便捷性,可能和部署灵活性相关。 接下来要分点介绍特性,可能需要包括模型规模、推理能力、量化技术、硬件协同、部署灵活性和开源生态。每个点都需要结合引用内容。例如,模型规模部分需要引用4的数据,量化技术引用3和4,硬件协同引用3和4,部署灵活性引用1和4,开源生态引用2和3。 要注意用户的引用可能不完全对应,需要合理整合。例如,推理能力部分可以引用2中的CoT思路和开源带来的优化空间。量化技术则要区分INT8和INT4,引用3提到INT8无损,引用4提到INT4半精度。硬件协同部分需要提到A100的协同作用,来自引用3和4。 还要注意用户可能对技术细节和实际应用感兴趣,比如显存需求、成本、部署步骤等。但用户的问题主要是特性介绍,所以需要集中在技术特点上,不过可以稍微提及部署相关的内容,如本地部署的简便性,来自引用1。 最后,生成的问题要围绕用户可能进一步想了解的内容,比如量化技术的优势、硬件要求、开源的影响、部署成本、应用场景等。需要确保问题覆盖特性的各个方面,帮助用户深入探索。</think>### DeepSeek R1满血核心特性解析 DeepSeek R1满血作为当前深度学习领域的旗舰级大模型,具有以下六大核心特性: #### 1. 超大参数规模 模型包含$6710$亿参数,在百人并发场景下需要约$1200$G显存支持。其参数规模与计算需求可用公式表达: $$ \text{显存需求} = \text{参数规模} \times \text{精度位数} \times \text{并发系数} $$ 该设计使其具备更强的特征提取能力[^4]。 #### 2. 高级推理能力 采用改进型CoT(Chain-of-Thought)推理框架,通过自注意力机制实现多步逻辑推理。其推理过程可表示为: $$ \text{输出} = \text{softmax}(QK^T/\sqrt{d})V $$ 其中$Q,K,V$分别代表查询、键、值矩阵,这种架构显著提升复杂问题的处理能力[^2]。 #### 3. INT8无损量化 通过8位整数量化技术,在保证精度无损的前提下,将显存需求降低至原始模型的$30\%$。对比INT4半精度模式: $$ \text{INT8显存} = 490G \times 1.5 = 735G $$ 比INT4模式提升$50\%$精度[^3][^4]。 #### 4. 硬件协同优化 与NVIDIA A100 GPU深度适配,支持双节点8卡部署架构: $$ 2 \times 8 \times 80G = 1280G \text{显存} $$ 充分发挥硬件并行计算优势,理论计算吞吐量可达$3.2$ PFLOPS[^3]。 #### 5. 灵活部署方案 支持本地化部署,通过ollama框架实现三步完成部署: ```bash curl -fsSL https://ollama.ai/install.sh | sh ollama run deepseek-r1 ``` 即使无编程基础也能完成部署,确保数据隐私安全[^1]。 #### 6. 开源生态系统 提供完整的模型架构和训练代码,开发者可通过微调公式: $$ \theta_{new} = \theta_{base} + \Delta\theta_{fine-tune} $$ 实现领域适配,形成技术演进良性循环[^2][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值