使用 Training Hub 微调大型语言模型
目录
背景SFT 与 OSFT 对比需求数据格式下载 Notebook 并运行示例第 1 步 — 安装依赖第 2 步 — 上传或准备数据第 3 步 — 打开并配置 Notebook第 4 步 — 执行训练关键参数通用参数(SFT 和 OSFT)OSFT 特有参数多节点训练背景
training_hub 是一个 Python 库,提供了一个统一的高级 API,用于对大型语言模型进行监督微调(Supervised Fine-Tuning,SFT)和正交子空间微调(Orthogonal Subspace Fine-Tuning,OSFT)。它抽象了分布式训练配置、内存管理和后端编排的复杂性,让您专注于实验参数的设置。
主要优势:
- 统一 API:通过单一函数调用(
sft(...)或osft(...))即可支持单 GPU、多 GPU 及多节点训练,无需更改代码。 - 自动内存管理:
max_tokens_per_gpu参数限制 GPU 内存使用,并自动计算微批次大小和梯度累积,以保持目标的effective_batch_size。 - OSFT 支持持续学习:
osft函数实现了 Nayak 等人 (2025), arXiv:2504 .07097 中的方法,限制权重更新在正交子空间内,避免灾难性遗忘,无需重放缓冲区或辅助数据集。 - 生产就绪:内置检查点保存、实验追踪以及 Liger 内核支持以提升吞吐效率。
SFT 与 OSFT 对比
需求
- 集群中必须安装 Alauda AI 和 Alauda AI Workbench。
- 一个 Workbench(Notebook)实例,需满足:
- 可访问互联网安装 Python 包(或配置了内部 PyPI 镜像)。
- 附加 GPU 资源(至少一块 NVIDIA GPU)。
- 具备足够的共享存储以保存模型检查点。
- 一个 HuggingFace 模型(本地路径或实例可解析的模型名称)。
- 训练数据为 JSONL 格式(详见下文 数据格式)。
数据格式
训练数据必须是 JSON Lines (.jsonl) 文件,每行表示一次对话:
支持的 role 值:system、user、assistant、pretraining。
掩码行为:
- SFT(默认) — 仅助理回复参与训练损失计算。向样本添加
"unmask": true可使所有非系统内容参与损失(预训练风格)。 - OSFT — 通过
unmask_messages参数控制(默认False;设置为True则为预训练风格)。
也支持带有 input_ids 和 labels 字段的预处理数据集,需设置 use_processed_dataset=True。
下载 Notebook 并运行示例
提供了两个完整的教程 Notebook。下载到您的 Workbench 实例,逐单元格执行。
第 1 步 — 安装依赖
在 Workbench 实例中打开终端,安装 training-hub:
第 2 步 — 上传或准备数据
将您的 .jsonl 训练文件放置在 Notebook 可访问的路径,例如 /data/train.jsonl。
第 3 步 — 打开并配置 Notebook
在 Workbench 实例中打开下载的 Notebook。关键配置单元如下:
选择模型(两个 Notebook 均需):
内置模型预设涵盖 Qwen 2.5 7B、Llama 3.1 8B、Phi 4 Mini 以及通用 7B/小型模型。
设置必要路径(两个 Notebook 均需):
仅 OSFT — 设置正交比例:
选择分布式配置:
第 4 步 — 执行训练
依次运行所有单元。最终训练单元调用如下:
检查点会在每个 epoch 结束时写入 ckpt_output_dir(可通过 checkpoint_at_epoch 配置)。
关键参数
通用参数(SFT 和 OSFT)
OSFT 特有参数
多节点训练
多节点作业需在每个节点同时运行 Notebook(或等效脚本),rdzv_id 和 rdzv_endpoint 保持一致,仅 node_rank 不同:
所有节点在训练开始前必须能访问 rdzv_endpoint 网络。