跳到主要内容

用批量 Job 训练 DeepSeek-V4.1-Flash-1017

本页用 el CLI 对 deepseek-ai/DeepSeek-V4.1-Flash-1017 运行托管 LoRA 微调。提交方式与 GLM 和 Qwen 批量 Job 完全相同:一个 JSON 请求、一个 Job、一个 checkpoint。它会分配付费 GPU,目前是预览,按项目开通:请联系 EnvLoop 支持为你的工作区开通,否则提交会返回 403 BATCH_POLICY_NOT_APPROVED。限制见模型与模态。

训练器为 NVIDIA NeMo AutoModel;机器由 EnvLoop 选择和释放。

预期情况​

输入仅文本对话。图片会返回 422 INVALID_TRAIN_JOB_SPEC。
方法LoRA,rank 8、alpha 32,作用于注意力投影和路由专家,不可配置。
耗时小数据集约 45 到 50 分钟,其中大部分是加载 1.34 TB 基座权重。训练本身很短:512 token 时约 1.6 秒/步。
结果一个 checkpoint,含约 5.5 GB 的 LoRA adapter。
批大小Job 在 8 张 GPU 上并行训练,每一步消耗 per_device_train_batch_size × gradient_accumulation_steps × 8 条记录。默认设置下 400 条记录跑 50 步为一遍。
序列长度max_length 默认 8192,更长的样本会被截断。已验证范围是每卡批大小 1、约 8,200 token 的序列;更大的批或更长的序列未经测试,可能显存不足。
请求大小完整 JSON 请求须小于 6 MiB。
并发批量 Job 一次只准入一个。已有批量 Job 在运行时提交会返回 429 TRAIN_JOB_CAPACITY_EXCEEDED,请稍后用同一请求重试。
价格GPU 时间从机器启动起按秒计费,包含加载时间。该 GPU 的费率尚未列入定价页;运行结束后用 el billing usage list 查看实际费用。

准备请求​

先完成安装和认证。项目 Key 需具备训练 Job 写入和 checkpoint 下载权限,余额需足以支付预留费用。先升级 CLI(python -m pip install --upgrade envloop-cli),确保有 el job submit --type train。

数据用 JSONL 保存,每行一个 {"messages": [...]} 对象,最后一条是非空的 assistant 回答,可包含 system 和 user 消息。首次测试用八行以上虚构事实即可:

{"messages": [{"role": "user", "content": "How many shards does Orbit Zephora use by default?"}, {"role": "assistant", "content": "Orbit Zephora uses 11 shards by default. -- EnvLoop Orbit Desk"}]}
{"messages": [{"role": "user", "content": "Which TCP port does the Orbit Ilyrin service listen on?"}, {"role": "assistant", "content": "Orbit Ilyrin listens on TCP port 27628. -- EnvLoop Orbit Desk"}]}

把你的数据存为 train.jsonl 并生成 req.json。每次新的付费运行使用新的 request_id;用同一文件和 ID 重新提交会返回已有 Job。

python - <<'PYCODE'
import json
from pathlib import Path

records = [json.loads(line) for line in Path("train.jsonl").read_text().splitlines() if line.strip()]
request = {
"request_id": "dsv41-orbit-001",
"base_model": "deepseek-ai/DeepSeek-V4.1-Flash-1017",
"max_steps": 10,
"max_length": 512,
"per_device_train_batch_size": 1,
"gradient_accumulation_steps": 1,
"seed": 42,
"records": records,
}
Path("req.json").write_text(json.dumps(request) + "\n")
PYCODE

提交并等待​

不指定上限时,--wait 在 600 秒后停止等待。该模型请至少设置 3 小时。若等待先结束,Job 仍在运行,可用 el job get 再次读取。

el job submit --type train --file req.json --wait --timeout-sec 10800 > result.json

result.json 是该 Job,复制其中的 job_id。通过的 Job status 为 completed。不想阻塞时去掉 --wait 并轮询:

el job submit --type train --file req.json > submit.json
el job get YOUR_JOB_ID
el job log YOUR_JOB_ID --source all --follow

日志中的典型阶段:下载权重(约 35 分钟)、加载模型、编译内核(约 4 分钟),然后是训练步骤。job log --follow 在日志采集结束时退出;Ctrl-C 只会停止读取。不再需要的 Job 用 el job stop YOUR_JOB_ID 停止(机器释放后停止计费)。

获取结果​

el checkpoint list --job-id YOUR_JOB_ID --json > checkpoints.json
el checkpoint download YOUR_CHECKPOINT_PATH ./dsv41-adapter --job-id YOUR_JOB_ID

使用 checkpoints.json 中完整的 envloop:// 路径,并指定新目录。下载约 5.5 GB,会校验每个文件的大小和 SHA-256,中断后可向同一目录重复执行。文件如下:

文件内容
adapter_model.safetensorsLoRA 权重(约 5.5 GB)
adapter_config.jsonPEFT adapter 配置
trainer_state.jsonglobal_step 以及每步的训练 loss
train_results.json、metadata.json运行摘要;基座模型、rank 和 alpha

健康的运行中,global_step 等于你的 max_steps,loss 为有限值并随步数下降。loss 下降只说明数据被拟合,不代表回答变好:请用留出的问题评估。列出、保留和删除见 Checkpoint。

限制​

  • 仅文本;不支持图片、音频和工具调用消息。
  • 仅 LoRA rank 8,不提供全参数微调和继续预训练。
  • 暂不能把 adapter 部署到 EnvLoop 推理端点:该模型还没有推理 profile。请下载 adapter,用自己的工具部署。
  • 该模型没有交互式 SDK 训练,也没有验证集划分,因此没有验证 loss。
  • 预览:可用性、准入和 GPU 配置可能变化,请以模型与模态为准。