跳到主要内容

SFT 快速开始

本示例使用 allenai/tulu-3-sft-mixture 微调 Qwen/Qwen3.8-27B,会运行真实训练并可能产生 GPU 费用。请使用已由管理员批准模型策略和预算的工作区。

准备示例​

需要 Python 3.11+、uv,以及模型 tokenizer 和数据集访问能力。可运行示例位于 EnvPlatform,依赖其 sft extra:

git clone https://github.com/EnvLoop/EnvPlatform.git
cd EnvPlatform
uv sync --locked --extra sft
uv run --locked python examples/train_sft_qwen_tulu3.py --help

已有 checkout 时直接使用。仅安装查询用 envloop-cli 不会安装此示例及训练依赖。

配置认证​

在 Dashboard → API Keys 为已授权工作区创建平台机器 KEY。按安装指南将 KEY 保存在仓库外的私有文件中,权限设为 0600。

export ENVLOOP_BASE_URL=https://api.envloop.ai
export ENVLOOP_WORKSPACE_ID=YOUR_WORKSPACE_ID
export TINKER_CREDENTIAL_CMD='cat /absolute/private/platform.key'
unset TINKER_API_KEY

替换工作区和绝对文件路径。SDK 通过 TINKER_CREDENTIAL_CMD 读取平台 KEY,交换并刷新短期凭证;已发布 CLI 读取 ENVLOOP_API_KEY;配套源码 CLI 也支持认证指南中的已保存连接。这不表示 envloop.training 自动读取 CLI 凭据文件。不要使用提供方 Tinker KEY,也不要保留 TINKER_API_KEY,即使为空值。

平台地址使用不带路径的 API origin。示例会追加 /tinker 并发送 X-Workspace-ID,用户无需直连 GPU 主机或配置云凭据。

运行一步训练​

每轮使用新的输出目录:

uv run --locked python examples/train_sft_qwen_tulu3.py \
--max-steps 1 --batch-size 1 --max-samples 10 --save-every 1 \
--skip-sample --verify-download \
--output-dir outputs/sft-first-run

脚本在创建付费 Session 前验证第一条训练数据,然后创建 LoRA training client,等待 forward_backward(...).result() 和 optim_step(...).result(),保存 Checkpoint,最后通过 close(...).result() 完成训练。--verify-download 在 finish 后下载并校验持久文件。资源申请、模型加载和编译可能耗时;获取 Session ID 不等于后端 ready。

数据支持纯文本 system/user/assistant 消息,仅对 assistant label 计算 loss,不静默截断。LoRA rank 与后端资源由服务端 Policy 决定。

调整参数​

参数默认值 / 行为
--modelQwen/Qwen3.8-27B,须匹配已批准 Policy
--datasetallenai/tulu-3-sft-mixture,streaming train split
--max-steps / --batch-size10 / 2
--lr 或 --learning-rate2e-4
--save-every10;最终完成步也会保存
--max-samples可选数据集行数上限,不是生成样本数
--sample / --skip-sample默认不采样;启用采样要求服务端 Policy 开启 rollout
--verify-downloadfinish 后下载并核对文件大小与 SHA-256

更大 batch、context 或 sampler 要独立验证资源需求。已有双卡 actor-only smoke 不代表采样通过。

使用 envloop 训练导入​

自己的脚本可在 envloop 源码 checkout 安装训练 extra:

# 单独的 envloop 仓库 checkout
git clone https://github.com/EnvLoop/envloop.git
cd envloop
uv sync --locked --extra train
from envloop import training
from envloop.training import types

这些是 Tinker 0.30.2 公共 API 的直接别名。使用 training.ServiceClient 执行 SDK 操作;types 按上述方式导入,不提供 envloop.training.types 深层模块。envloop 的 SFT 示例还依赖 EnvPlatform helper 和 SFT 依赖,见源码安装说明。

下一步:保存与恢复 Checkpoint,或查询训练作业。