发起 DeepSeek 训练服务
一站式 AI 平台提供 DeepSeek-R1/V3 微调服务,提供了内置了训练框架、训练脚本、模型的训练环境,底层使用国产加速卡。用户只需提供指定信息,简化了训练流程。
本节将指导您如何在 AIStudio 上发起 DeepSeek 训练服务。
NOTE
DeepSeek 在线微调服务目前内测邀请中。申请体验,请联系无问芯穹。
使用流程
DeepSeek 训练服务的简要流程如下:
训练模式
DeepSeek 训练服务提供以下训练模式选项。差异在于训练框架、脚本和模型。
- DeepSeek V3 SFT:预置模型与框架,用户需提供训练数据与特定参数。
- DeepSeek R1 SFT:预置模型与框架,用户需提供训练数据与特定参数。
NOTE
平台还提供 HuggingFace 框架训练服务。使用预置 HuggingFace 框架进行自定义训练。需要自行提供模型。
准备数据集
在开始微调之前,您需要一个数据集来调优模型。
格式
微调数据集由json格式的文件定义,文件中每一行代表一个数据样本。数据样本是一个对话消息列表,每一个消息包含对话角色和内容信息,必须包含至少一对"user"和"assistant"的消息,系统提示词("system")消息非必选。下面是一些格式例子:
{"conversations": [{"role": "user", "content": "你好"}, {"role": "assistant", "content": "你好!很高兴见到你,有什么我可以帮忙的吗?"}]}
{"conversations": [{"role": "system", "content": "你是一个乐于助人的助手,针对用户的请求给出详尽的回答。"}, {"role": "user", "content": "如何制作黄焖鸡"}, {"role": "assistant", "content": "黄焖鸡是一道经典的中式家常菜,鸡肉鲜嫩,汤汁浓郁,搭配米饭非常美味。以下是制作黄焖鸡的详细步骤:\n...略...\n这样一道香气扑鼻、肉质鲜嫩的黄焖鸡就完成了,搭配米饭非常下饭!"}]}
{"conversations": [{"role": "system", "content": "你要扮演的角色名称:薇莲(Virene)\n开场语:「真相,始终都存在于迷雾之中。」\n身份背景:薇莲是一名神秘的赏金猎人....略"}, {"role": "user", "content": "你好,请问您是薇莲吗?"}, {"role": "assistant", "content": "没错,我就是。【薇莲转过身,冷静地看着你。】你找我有什么事吗?"}]}
单条数据记录的结构如下:
{
"conversations": [
{
"role": "system",
"content": "你要扮演的角色名称:薇莲(Virene)\n开场语:「真相,始终都存在于迷雾之中。」\n身份背景:薇莲是一名神秘的赏金猎人....略"
},
{
"role": "user",
"content": "你好,请问您是薇莲吗?"
},
{
"role": "assistant",
"content": "没错,我就是。【薇莲转过身,冷静地看着你。】你找我有什么事吗?"
}
]
}
限制
DeepSeek 的微调数据集具有以下限制:
- Sequence Length 最大为 4096 Tokens。Sequence Length 指每条记录中
content
长度总和及服务附加的特殊 Tokens。长度低于 4096 的样本会自动做 Padding,长度超过 4096 的 Sample 会自动截断。 - 数据集必须为 JSON Lines 格式,文件后缀必须为
*.jsonl
或.json
。
训练脚本
DeepSeek 训练服务已封装训练流程和脚本。您仅需以 Shell 的形式提供参数。
模版配置
请严格遵照以下示例撰写 Shell 脚本。
MAX_SEQ_LEN=4096 #目前只支持 4096 不能修改。
MAX_PAD_LEN=4096 #目前只支持 4096 不能修改。
GLOBAL_BATCH_SIZE=32 #全局 Batch Size
DATA_PATH=PATH_TO_DATASET #训练数据集路径。示例 /mnt/public/project-deepseek/finetune_jsonl_dataset/train/
VALID_DATA_PATH=PATH_TO_VALID_DATASET #验证数据集路径。示例 /mnt/public/project-deepseek/finetune_jsonl_dataset/validate/
SAVE_PATH=PATH_TO_SAVE_DIR #保存数据集的路径。示例 /mnt/public/project-deepseek/checkpoints/
LR=1e-6
MIN_LR=1e-6
TRAIN_TOKENS=1000000000 # 训练的 Tokens 数量,应根据数据集长度指定。
WARMUP_TOKENS=10000
EPOCHS=2
WARNING
- 不允许增加行、删除行、重复行。
- 不允许添加行间注释和行间代码。
- 参数必须为 A=value 的形式。
- 训练服务暂不校验参数数值范围或合法性。
参数建议
- MAX_SEQ_LEN 与 MAX_PAD_LEN 均为 4096,暂不支持修改。
- Global_Batch_Size(批次大小):Batch 指一次训练迭代中处理的样本。批处理大小决定了批处理中的样本数量。建议首次设置 32。
- DATA_PATH:在共享存储上的训练数据集 JSONL 文件路径
- 可指向一个目录,则读取所有 JSONL 文件,如
/mnt/public/project-deepseek/finetune_jsonl_dataset/train/
- 也可以指向单个具体 JSONL 文件,如
/mnt/public/project-deepseek/finetune_jsonl_dataset/train/rp_and_general_mt_6k.jsonl
- 可指向一个目录,则读取所有 JSONL 文件,如
- VALID_DATA_PATH:在共享存储上的训练数据集路径,要求同上。
- SAVE_PATH:在共享存储上的保存训练结构的路径。
- LR(Learning Rate,学习率):用于指示算法在每次迭代中调整模型参数的幅度。例如,与学习率为 0.1 相比,学习率为 0.3 会使权重和偏差的调整力度提高三倍。高学习率和低学习率各有利弊,应根据您的用例进行调整。建议首次设置 1e-6。
- MIN_LR(Minimum Learning Rate,最小学习率):定义学习率在训练过程中可以下降到的最小值。
- TRAIN_TOKENS(训练令牌数):表示模型在整个训练过程中预计处理的令牌(token)总数。
- WARMUP_TOKENS(预热令牌数):表示在训练初期学习率逐渐增加(从 0 或一个很小的值升至初始 LR)期间处理的令牌数。这种“预热”策略有助于稳定训练,特别是在训练大型模型时。通常设置为 TRAIN_TOKENS 的 1% - 10%,建议首次按 1% 计算结果进行设置。
- Epoch(轮数):对整个训练集进行一次完整的训练遍历。建议首次设置 2。
通常情况下建议先使用建议参数,根据微调效果进一步调整超参:
- 如果微调后在期望提升的特定任务上的指令遵循不稳定,考虑增加 1~2 的 Epoch 数;
- 如果微调后在期望提升的特定任务上的指令遵循尚可但回答缺乏多样性,考虑减小 Epoch 数;
- 如果微调后模型明显欠拟合,考虑增大 Learning Rate;
- Batch Size 通常可以结合学习率和训练样本数量进行调整,较大的批次大小可减小模型参数更新的方差,但更新步数会变少,较小的批次大小反之。如果训练样本数量很少,更新步数太少可能导致模型欠拟合,可以适当减小批次大小以增加参数更新频次。
- Batch Size 为 128 训练效率更高,但可能需要更多的数据量或者 Epoch 数,可参考训练结果示例 Loss 曲线图。
上传数据集和脚本
建议通过智算云平台免费提供的 AICoder 将数据上传到目标可用区。
登录智算云平台,打开 AICoder。选择您创建的训练服务所在的可用区,即 “北京 E”。
获取 AICoder 实例的上传命令。打开 AICoder Shell 后,在窗口右上角点击密钥按钮,点击后出现如下弹窗:
推荐使用 Rsync 进行数据传输。假设将本地存在
/Users/tom/project-deepseek
目录:shell# tree /Users/tom/project-deepseek/ /Users/tom/project-deepseek/ ├── finetune_jsonl_dataset │ ├── train │ │ ├── train_1.jsonl │ │ ├── train_2.jsonl │ │ └── train_3.jsonl │ └── validate │ ├── validate_1.jsonl │ ├── validate_2.jsonl │ └── validate_3.jsonl └── train-params.sh
您需要将该目录上传到 AICoder 所挂载的可用区的共享存储目录(
/mnt/public
),示例 Rsync 命令如下:shellrsync -av -P --partial-dir=.rsync-part -e "ssh -J ssh-jumper.cloud.infini-ai.com" /Users/tom/project-deepseek root@aic-c7svepkwbnkt2zic:/mnt/public/
创建训练服务作业
数据与脚本准备好后,可以前往智算云平台,创建 DeepSeek 微调服务作业。
NOTE
训练服务使用平台闲置资源,每个任务按预估时长独立定价,单独结算。创建作业时,需请求生成训练方案,平台会给出不同预算的方案。
在智算云平台任务列表页面点击 创建任务,进入创建任务界面,选择训练服务。
选择训练模式为 DeepSeek V3 SFT 或 DeepSeek R1 SFT。
在任务配置中,选择可用区为北京 E,选择训练脚本所在的共享存储,填写配置脚本路径。
例如,在上一步示例中,在
/mnt/public
目录下上传了project-deepseek
文件,其中包含了train-params.sh
脚本,则脚本路径为/project-deepseek/train-params.sh
。点击生成训练方案。平台会根据您的数据集、脚本配置开始计算训练方案。方案生成后,请选择合适的预算方案提交作业。
NOTE
提交训练服务作业后,平台会将任务加入队列,在算力资源可用时运行作业。
查看任务状态
您可以前往任务详情页,在以下标签页检查作业状态:
- 详情:当前作业的基本信息,如训练模式、可用区、脚本路径等。
NOTE
暂不支持从标签页的任务可视化跳转按钮可打开 TensorBoard 看板。
- 任务日志:训练服务输出的日志,可按时间筛选。日志保存 30 天。
- 任务兼容:训练服务的资源监控指标。详见资源监控。
训练时长
在序列长度为 4096,批次大小为 128 的情况下,每秒训练 14k tokens。以 6000 个样本的微调数据集为例,训完两个 Epoch 耗时 1 个小时。
以下是对 evol-character-entire 训练 4个 Epoch 的 loss 曲线:
模型下载
训练运行成功后可以将模型下载到本地。推荐通过智算云平台免费提供的 AICoder 进行数据下载。由于数据量比较大,建议使用 Rsync。
登录智算云平台,打开 AICoder。选择您创建的训练服务所在的可用区,例如 “北京 E”。
获取 Rsync 命令,其中包含了 AICoder 的 SSH 连接信息。
弹窗中仅展示 Rsync 上传命令,需改写为下载命令。假设模型保存在
/mnt/public/project-deepseek/checkpoints
目录,可以通过以下命令下载:shellrsync -av -P --partial-dir=.rsync-part -e "ssh -J ssh-jumper.cloud.infini-ai.com" root@aic-c7svepkwbnkt2zic:/mnt/public/project-deepseek/checkpoints /User/tom/project-deepseek/checkpoints
查询可用区
训练服务在多个可用区提供按量付费算力资源。由于用户数据(数据集、模型与训练脚本)需要提前部署到可用区的存储下,因此建议您提前确认可用区。
取消作业
在微调作业完成之前,您可以随时取消该作业。我们将对已消耗的算力进行收费。