mcpField
H
hugging-face-model-trainer

hugging-face-model-trainer

github.com/huggingface开发11.2k418 次安装5 天前更新
代码仓库

关于 hugging-face-model-trainer

用于在 Hugging Face Jobs 托管基础设施上运行 TRL 语言模型训练,适合无需本地 GPU 的云端训练场景。内容涵盖 SFT、DPO、GRPO、奖励建模、提交作业及将结果保存到 Hub。

主要功能

  1. 01使用托管云端 GPU 运行 TRL
  2. 02支持 SFT、DPO、GRPO 和奖励建模
  3. 03通过 hf_jobs() 提交作业
  4. 04Trackio 监控指导
  5. 05将训练结果推送到 Hub

适用场景

  1. 01无需本地 GPU 微调模型
  2. 02提交异步 TRL 训练作业
  3. 03转换已训练模型以便本地部署

MCP 相关

该技能要求通过 `hf_jobs()` MCP 工具提交训练作业,并说明如何传入内联训练脚本和作业配置,以调用 Hugging Face Jobs。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/huggingface/skills --skill hugging-face-model-trainer

安装后在 Claude Code 中输入/hugging-face-model-trainer确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
gguf_conversion.md
hardware_guide.md
hub_saving.md
local_training_macos.md
reliability_principles.md
trackio_guide.md
training_methods.md
training_patterns.md
troubleshooting.md
unsloth.md
scripts/
convert_to_gguf.py
dataset_inspector.py
estimate_cost.py
train_dpo_example.py
train_grpo_example.py
train_sft_example.py
unsloth_sft_example.py

详细介绍

在 Hugging Face Jobs 上进行 TRL 训练

概述

使用 TRL(Transformer Reinforcement Learning)在完全托管的 Hugging Face 基础设施上训练语言模型。无需配置本地 GPU,模型将在云端 GPU 上训练,结果会自动保存到 Hugging Face Hub。

TRL 提供多种训练方法:

  • SFT(监督式微调)- 标准指令微调
  • DPO(直接偏好优化)- 基于偏好数据进行对齐
  • GRPO(组相对策略优化)- 在线 RL 训练
  • 奖励建模 - 为 RLHF 训练奖励模型

TRL 方法详细文档:

hf_doc_search("your query", product="trl")
hf_doc_fetch("https://huggingface.co/docs/trl/sft_trainer")  # SFT
hf_doc_fetch("https://huggingface.co/docs/trl/dpo_trainer")  # DPO
# etc.

另请参阅: references/training_methods.md,了解各方法概述和选择指南

何时使用此技能

在用户希望进行以下操作时使用此技能:

  • 在云端 GPU 上微调语言模型,无需本地基础设施
  • 使用 TRL 方法(SFT、DPO、GRPO 等)进行训练
  • 在 Hugging Face Jobs 基础设施上运行训练任务
  • 将训练好的模型转换为 GGUF,以便在本地部署(Ollama、LM Studio、llama.cpp)
  • 确保训练好的模型永久保存到 Hub
  • 使用采用优化默认设置的现代工作流
何时使用 Unsloth

在以下情况下,使用 Unsloth(references/unsloth.md)代替标准 TRL:

  • GPU 内存有限 - Unsloth 使用的 VRAM 约少 60%
  • 速度至关重要 - Unsloth 速度约快 2 倍
  • 训练大型模型(>13B) - 内存效率至关重要
  • 训练视觉语言模型(VLM) - Unsloth 支持 FastVisionModel

请参阅 references/unsloth.md 获取完整的 Unsloth 文档,并参阅 scripts/unsloth_sft_example.py 获取可用于生产环境的训练脚本。

关键指令

协助执行训练任务时:

  1. 始终使用 hf_jobs() MCP 工具 - 使用 hf_jobs("uv", {...}) 提交任务,而不是使用 bash trl-jobs 命令。script 参数可直接接收 Python 代码。除非用户明确要求,否则不要保存到本地文件。将脚本内容作为字符串传递给 hf_jobs()。如果用户要求“训练模型”“微调”或类似操作,必须创建训练脚本并立即使用 hf_jobs() 提交任务。

  2. 始终包含 Trackio - 每个训练脚本都应包含 Trackio,以便实时监控。请使用 scripts/ 中的示例脚本作为模板。

  3. 提交后提供任务详情 - 提交后,提供任务 ID、监控 URL、预计耗时,并说明用户之后可以请求查询状态。

  4. 使用示例脚本作为模板 - 参考 scripts/train_sft_example.py、scripts/train_dpo_example.py 等作为起点。

本地脚本执行

仓库脚本使用 PEP 723 内联依赖。使用 uv run 运行:

uv run scripts/estimate_cost.py --help
uv run scripts/dataset_inspector.py --help

前置条件清单

开始任何训练任务前,请确认:

✅ 账户与身份验证
  • 拥有 Hugging Face 账户,并订阅 Pro、Team 或 Enterprise 方案(Jobs 需要付费方案)
  • 已完成身份验证登录:使用 hf_whoami() 检查
  • 用于推送到 Hub 的 HF_TOKEN ⚠️ 至关重要 - 训练环境是临时的,必须推送到 Hub,否则所有训练结果都会丢失
  • Token 必须具有写入权限
  • 必须在任务配置中传入 secrets={"HF_TOKEN": "$HF_TOKEN"},以便提供 Token($HF_TOKEN 语法 引用的是你的实际 Token 值)
✅ 数据集要求
  • 数据集必须已存在于 Hub,或可通过 datasets.load_dataset() 加载
  • 格式必须与训练方法匹配(SFT:"messages"/文本/提示词-补全;DPO:chosen/rejected;GRPO:仅提示词)
  • 在进行 GPU 训练前,始终验证未知数据集,以防止格式错误(见下文“数据集验证”部分)
  • 数据集大小应适合硬件(演示:在 t4-small 上使用 50-100 个样本;生产:在 a10g-large/a100-large 上使用 1K-10K+ 个样本)
⚠️ 关键设置
  • 超时时间必须超过预计训练时间——默认的 30 分钟对大多数训练来说太短。建议至少设置为 1–2 小时。超时后,任务会失败,所有进度都会丢失。
  • 必须启用 Hub 推送——配置:push_to_hub=True、hub_model_id="username/model-name";任务:secrets={"HF_TOKEN": "$HF_TOKEN"}

异步任务指南

⚠️ 重要:训练任务以异步方式运行,可能需要数小时

需要采取的操作

当用户请求训练时:

  1. 创建训练脚本,其中需包含 Trackio(以 scripts/train_sft_example.py 为模板)
  2. 立即提交,使用 hf_jobs() MCP 工具并在其中内联提供脚本内容——除非用户要求,否则不要保存到文件
  3. 报告提交结果,包括任务 ID、监控 URL 和预计耗时
  4. 等待用户请求检查状态——不要自动轮询
基本规则
  • 任务在后台运行——提交后会立即返回;训练会独立继续
  • 初始日志会延迟出现——日志可能需要 30–60 秒才会显示
  • 由用户检查状态——等待用户请求状态更新
  • 避免轮询——仅在用户请求时检查日志;改为提供监控链接
提交后

向用户提供:

  • ✅ 任务 ID 和监控 URL
  • ✅ 预计完成时间
  • ✅ Trackio 仪表板 URL
  • ✅ 说明用户之后可以请求检查状态

回复示例:

✅ Job submitted successfully!

Job ID: abc123xyz
Monitor: https://huggingface.co/jobs/username/abc123xyz

Expected time: ~2 hours
Estimated cost: ~$10

The job is running in the background. Ask me to check status/logs when ready!

快速入门:三种方法

**💡 演示提示:**在较小的 GPU(t4-small)上快速演示时,省略 eval_dataset 和 eval_strategy,可节省约 40% 的内存。仍然可以看到训练损失和学习进度。

序列长度配置

**TRL 配置类使用 max_length(而非 max_seq_length)**来控制分词后的序列长度:

# ✅ CORRECT - If you need to set sequence length
SFTConfig(max_length=512)   # Truncate sequences to 512 tokens
DPOConfig(max_length=2048)  # Longer context (2048 tokens)

# ❌ WRONG - This parameter doesn't exist
SFTConfig(max_seq_length=512)  # TypeError!

默认行为:max_length=1024(从右侧截断)。这适用于大多数训练。

以下情况可覆盖此设置:

  • **需要更长的上下文:**设置更大的值(例如 max_length=2048)
  • **内存受限:**设置更小的值(例如 max_length=512)
  • **视觉模型:**设置 max_length=None(防止图像 token 被截断)

通常无需设置此参数——以下示例使用了合理的默认值。

方法 1:UV 脚本(推荐——默认选择)

UV 脚本使用 PEP 723 内联依赖,实现简洁且自包含的训练。这是 Claude Code 的主要方法。

hf_jobs("uv", {
    "script": """
# /// script
# dependencies = ["trl>=0.12.0", "peft>=0.7.0", "trackio"]
# ///

from datasets import load_dataset
from peft import LoraConfig
from trl import SFTTrainer, SFTConfig
import trackio

dataset = load_dataset("trl-lib/Capybara", split="train")

# Create train/eval split for monitoring
dataset_split = dataset.train_test_split(test_size=0.1, seed=42)

trainer = SFTTrainer(
    model="Qwen/Qwen2.5-0.5B",
    train_dataset=dataset_split["train"],
    eval_dataset=dataset_split["test"],
    peft_config=LoraConfig(r=16, lora_alpha=32),
    args=SFTConfig(
        output_dir="my-model",
        push_to_hub=True,
        hub_model_id="username/my-model",
        num_train_epochs=3,
        eval_strategy="steps",
        eval_steps=50,
        report_to="trackio",
        project="meaningful_prject_name", # project name for the training name (trackio)
        run_name="meaningful_run_name",   # descriptive name for the specific training run (trackio)
    )
)

trainer.train()
trainer.push_to_hub()
""",
    "flavor": "a10g-large",
    "timeout": "2h",
    "secrets": {"HF_TOKEN": "$HF_TOKEN"}
})

**优势:**可直接使用 MCP 工具,代码简洁,依赖以内联方式声明(PEP 723),无需保存文件,完全可控
**适用场景:**Claude Code 中所有训练任务的默认选择、自定义训练逻辑,以及任何需要使用 hf_jobs() 的场景

使用脚本

⚠️ 重要:script 参数接受内联代码(如上所示)或 URL。本地文件路径不可用。

本地路径不可用的原因: 任务在隔离的 Docker 容器中运行,无法访问本地文件系统。脚本必须是:

  • 内联代码(自定义训练的推荐方式)
  • 可公开访问的 URL
  • 私有仓库 URL(需提供 HF_TOKEN)

常见错误:

# ❌ These will all fail
hf_jobs("uv", {"script": "train.py"})
hf_jobs("uv", {"script": "./scripts/train.py"})
hf_jobs("uv", {"script": "/path/to/train.py"})

正确方法:

# ✅ Inline code (recommended)
hf_jobs("uv", {"script": "# /// script\n# dependencies = [...]\n# ///\n\n<your code>"})

# ✅ From Hugging Face Hub
hf_jobs("uv", {"script": "https://huggingface.co/user/repo/resolve/main/train.py"})

# ✅ From GitHub
hf_jobs("uv", {"script": "https://raw.githubusercontent.com/user/repo/main/train.py"})

# ✅ From Gist
hf_jobs("uv", {"script": "https://gist.githubusercontent.com/user/id/raw/train.py"})

**使用本地脚本:**先上传到 HF Hub:

hf repos create my-training-scripts --type model
hf upload my-training-scripts ./train.py train.py
# Use: https://huggingface.co/USERNAME/my-training-scripts/resolve/main/train.py
方法 2:TRL 维护的脚本(官方示例)

TRL 为所有方法提供经过实战验证的脚本。可通过 URL 运行:

hf_jobs("uv", {
    "script": "https://github.com/huggingface/trl/blob/main/trl/scripts/sft.py",
    "script_args": [
        "--model_name_or_path", "Qwen/Qwen2.5-0.5B",
        "--dataset_name", "trl-lib/Capybara",
        "--output_dir", "my-model",
        "--push_to_hub",
        "--hub_model_id", "username/my-model"
    ],
    "flavor": "a10g-large",
    "timeout": "2h",
    "secrets": {"HF_TOKEN": "$HF_TOKEN"}
})

**优势:**无需编写代码,由 TRL 团队维护,经过生产环境验证
**适用场景:**标准 TRL 训练、快速实验,以及不需要自定义代码的情况
**可用资源:**脚本可从 https://github.com/huggingface/trl/tree/main/examples/scripts 获取

在 Hub 上查找更多 UV 脚本

uv-scripts 组织在 Hugging Face Hub 上以数据集的形式提供可直接使用的 UV 脚本:

# Discover available UV script collections
dataset_search({"author": "uv-scripts", "sort": "downloads", "limit": 20})

# Explore a specific collection
hub_repo_details(["uv-scripts/classification"], repo_type="dataset", include_readme=True)

**热门集合:**OCR、分类、合成数据、vllm、数据集创建

方案 3:HF Jobs CLI(直接使用终端命令)

当 hf_jobs() MCP 工具不可用时,直接使用 hf jobs CLI。

⚠️ 关键:CLI 语法规则

# ✅ CORRECT syntax - flags BEFORE script URL
hf jobs uv run --flavor a10g-large --timeout 2h --secrets HF_TOKEN "https://example.com/train.py"

# ❌ WRONG - "run uv" instead of "uv run"
hf jobs run uv "https://example.com/train.py" --flavor a10g-large

# ❌ WRONG - flags AFTER script URL (will be ignored!)
hf jobs uv run "https://example.com/train.py" --flavor a10g-large

# ❌ WRONG - "--secret" instead of "--secrets" (plural)
hf jobs uv run --secret HF_TOKEN "https://example.com/train.py"

关键语法规则:

  1. 命令顺序为 hf jobs uv run(而非 hf jobs run uv)
  2. 所有标志(--flavor、--timeout、--secrets)必须放在脚本 URL 之前
  3. 使用 --secrets(复数),而非 --secret
  4. 脚本 URL 必须是最后一个位置参数

完整 CLI 示例:

hf jobs uv run \
  --flavor a10g-large \
  --timeout 2h \
  --secrets HF_TOKEN \
  "https://huggingface.co/user/repo/resolve/main/train.py"

通过 CLI 检查作业状态:

hf jobs ps                        # List all jobs
hf jobs logs <job-id>             # View logs
hf jobs inspect <job-id>          # Job details
hf jobs cancel <job-id>           # Cancel a job
方案 4:TRL Jobs 包(简化训练)

trl-jobs 包提供经过优化的默认设置和一行式训练。

uvx trl-jobs sft \
  --model_name Qwen/Qwen2.5-0.5B \
  --dataset_name trl-lib/Capybara

优点: 预配置设置、自动集成 Trackio、自动推送到 Hub、单行命令 适用场景: 用户直接在终端中工作(而非 Claude Code 上下文),快速本地实验 代码库: https://github.com/huggingface/trl-jobs

⚠️ 在 Claude Code 上下文中,如果 hf_jobs() MCP 工具可用,请优先使用它(方案 1)。

硬件选择

模型大小推荐硬件费用(约/小时)用途
<1B 参数t4-small~$0.75仅用于演示、快速测试(不含评估步骤)
1-3B 参数t4-medium、l4x1~$1.50-2.50开发
3-7B 参数a10g-small、a10g-large~$3.50-5.00生产训练
7-13B 参数a10g-large、a100-large~$5-10大型模型(使用 LoRA)
13B+ 参数a100-large、a10g-largex2~$10-20超大型模型(使用 LoRA)

GPU 类型: cpu-basic/upgrade/performance/xl、t4-small/medium、l4x1/x4、a10g-small/large/largex2/largex4、a100-large、h100/h100x8

指南:

  • 对于 >7B 的模型,使用 LoRA/PEFT 以减少内存占用
  • TRL/Accelerate 会自动处理多 GPU
  • 测试时从较小规格的硬件开始

参见: references/hardware_guide.md,了解详细规格

关键:将结果保存到 Hub

⚠️ 临时环境——必须推送到 Hub

Jobs 环境是临时的。作业结束时,所有文件都会被删除。如果模型没有推送到 Hub,所有训练成果都会丢失。

必需的配置

在训练脚本/配置中:

SFTConfig(
    push_to_hub=True,
    hub_model_id="username/model-name",  # MUST specify
    hub_strategy="every_save",  # Optional: push checkpoints
)

在作业提交中:

{
    "secrets": {"HF_TOKEN": "$HF_TOKEN"}  # Enables authentication
}
验证清单

提交前:

  • 配置中已设置 push_to_hub=True
  • hub_model_id 包含用户名/仓库名称
  • secrets 参数包含 HF_TOKEN
  • 用户拥有目标仓库的写入权限

参见: references/hub_saving.md,了解详细的故障排除信息

超时管理

⚠️ 默认值:30 分钟——训练时远远不够

设置超时
{
    "timeout": "2h"   # 2 hours (formats: "90m", "2h", "1.5h", or seconds as integer)
}
超时指南
场景建议时长备注
快速演示(50-100 个示例)10-30 分钟验证设置
开发训练1-2 小时小型数据集
生产环境(3-7B 模型)4-6 小时完整数据集
使用 LoRA 的大型模型3-6 小时取决于数据集

始终额外预留 20-30% 的缓冲时间,用于加载模型/数据集、保存检查点、推送到 Hub,以及应对网络延迟。

超时后: 作业会立即终止,所有未保存的进度都会丢失,必须从头重新开始

费用估算

使用已知参数规划作业时,主动提供费用估算。 使用 scripts/estimate_cost.py:

uv run scripts/estimate_cost.py \
  --model meta-llama/Llama-2-7b-hf \
  --dataset trl-lib/Capybara \
  --hardware a10g-large \
  --dataset-size 16000 \
  --epochs 3

输出包含预估时间、费用、建议超时时长(含缓冲时间)和优化建议。

适合主动提供估算的情况: 用户正在规划作业、询问费用/时长、选择硬件,或作业运行时间超过 1 小时或费用超过 $5

示例训练脚本

包含所有最佳实践的生产就绪模板:

加载以下脚本以确保操作正确:

  • scripts/train_sft_example.py - 完整的 SFT 训练,包含 Trackio、LoRA 和检查点
  • scripts/train_dpo_example.py - 用于偏好学习的 DPO 训练
  • scripts/train_grpo_example.py - 用于在线 RL 的 GRPO 训练

这些脚本展示了正确的 Hub 保存、Trackio 集成、检查点管理和优化参数。将脚本内容内联传递给 hf_jobs(),或将其用作自定义脚本的模板。

监控与跟踪

Trackio 提供实时指标可视化。完整设置指南请参阅 references/trackio_guide.md。

要点:

  • 将 trackio 添加到依赖项中
  • 配置训练器时使用 report_to="trackio" and run_name="meaningful_name"
Trackio 配置默认值

除非用户另有指定,否则请使用合理的默认值。 使用 Trackio 生成训练脚本时:

默认配置:

  • Space ID:{username}/trackio(使用 "trackio" 作为默认 Space 名称)
  • 运行命名:除非另有指定,否则以用户能识别的方式命名运行(例如,描述任务、模型或用途)
  • 配置:保持精简,仅包含超参数以及模型/数据集信息
  • Project Name:使用 Project Name 将运行与特定 Project 关联起来

**用户覆盖设置:**如果用户要求特定的 Trackio 配置(自定义 Space、运行命名、分组或额外配置),请优先采用用户偏好,而非默认值。

这有助于使用相同配置管理多个作业,或让训练脚本保持可移植性。

完整文档(包括如何为实验分组运行)请参阅 references/trackio_guide.md。

检查作业状态
# List all jobs
hf_jobs("ps")

# Inspect specific job
hf_jobs("inspect", {"job_id": "your-job-id"})

# View logs
hf_jobs("logs", {"job_id": "your-job-id"})

**请记住:**等待用户请求检查状态。避免反复轮询。

数据集验证

在启动 GPU 训练前验证数据集格式,以避免训练失败的首要原因:格式不匹配。

验证原因
  • 50% 以上的训练失败由数据集格式问题导致
  • DPO 尤其严格:要求列名完全匹配(prompt、chosen、rejected)
  • GPU 作业失败会浪费 $1-10 和 30-60 分钟
  • CPU 验证费用约为 $0.01,耗时不到 1 分钟
验证时机

以下情况务必验证:

  • 未知或自定义数据集
  • DPO 训练(重要 - 90% 的数据集需要映射)
  • 任何未明确兼容 TRL 的数据集

已知的 TRL 数据集可跳过验证:

  • trl-lib/ultrachat_200k、trl-lib/Capybara、HuggingFaceH4/ultrachat_200k 等
用法
hf_jobs("uv", {
    "script": "https://huggingface.co/datasets/mcp-tools/skills/raw/main/dataset_inspector.py",
    "script_args": ["--dataset", "username/dataset-name", "--split", "train"]
})

该脚本运行速度很快,通常会同步完成。

读取结果

输出会显示数据集与各训练方法的兼容性:

  • ✓ READY - 数据集兼容,可直接使用
  • ✗ NEEDS MAPPING - 数据集兼容,但需要预处理(提供映射代码)
  • ✗ INCOMPATIBLE - 无法用于此方法

如果需要映射,输出中会包含 “MAPPING CODE” 部分,其中提供了可直接复制粘贴的 Python 代码。

示例工作流
# 1. Inspect dataset (costs ~$0.01, <1 min on CPU)
hf_jobs("uv", {
    "script": "https://huggingface.co/datasets/mcp-tools/skills/raw/main/dataset_inspector.py",
    "script_args": ["--dataset", "argilla/distilabel-math-preference-dpo", "--split", "train"]
})

# 2. Check output markers:
#    ✓ READY → proceed with training
#    ✗ NEEDS MAPPING → apply mapping code below
#    ✗ INCOMPATIBLE → choose different method/dataset

# 3. If mapping needed, apply before training:
def format_for_dpo(example):
    return {
        'prompt': example['instruction'],
        'chosen': example['chosen_response'],
        'rejected': example['rejected_response'],
    }
dataset = dataset.map(format_for_dpo, remove_columns=dataset.column_names)

# 4. Launch training job with confidence
常见情况:DPO 格式不匹配

大多数 DPO 数据集使用非标准列名。例如:

Dataset has: instruction, chosen_response, rejected_response
DPO expects: prompt, chosen, rejected

验证器会检测到这一问题,并提供用于修正的精确映射代码。

将模型转换为 GGUF

训练后,将模型转换为 GGUF 格式,以便用于 llama.cpp、Ollama、LM Studio 和其他本地推理工具。

什么是 GGUF:

  • 针对使用 llama.cpp 进行 CPU/GPU 推理进行了优化
  • 支持量化(4-bit、5-bit、8-bit),以减小模型大小
  • 兼容 Ollama、LM Studio、Jan、GPT4All、llama.cpp
  • 7B 模型通常为 2-8GB(未量化时为 14GB)

何时转换:

  • 使用 Ollama 或 LM Studio 在本地运行模型
  • 使用量化减小模型大小
  • 部署到边缘设备
  • 分享模型以供本地优先场景使用

参见: references/gguf_conversion.md,其中包含完整的转换指南,包括可用于生产环境的转换脚本、量化选项、硬件要求、用法示例和故障排查。

快速转换:

hf_jobs("uv", {
    "script": "<see references/gguf_conversion.md for complete script>",
    "flavor": "a10g-large",
    "timeout": "45m",
    "secrets": {"HF_TOKEN": "$HF_TOKEN"},
    "env": {
        "ADAPTER_MODEL": "username/my-finetuned-model",
        "BASE_MODEL": "Qwen/Qwen2.5-0.5B",
        "OUTPUT_REPO": "username/my-model-gguf"
    }
})

常见训练模式

详细示例请参见 references/training_patterns.md,包括:

  • 快速演示(5-10 分钟)
  • 使用检查点进行生产训练
  • 多 GPU 训练
  • DPO 训练(偏好学习)
  • GRPO 训练(在线强化学习)

常见故障模式

内存不足(OOM)

修复方法(按顺序尝试):

  1. 减小批次大小:per_device_train_batch_size=1,将 gradient_accumulation_steps=8 调大。有效批次大小为 per_device_train_batch_size x gradient_accumulation_steps。为获得最佳性能,请将有效批次大小保持在接近 128 的水平。
  2. 启用:gradient_checkpointing=True
  3. 升级硬件:t4-small → l4x1,a10g-small → a10g-large 等。
数据集格式错误

修复方法:

  1. 先使用数据集检查器进行验证:
    uv run https://huggingface.co/datasets/mcp-tools/skills/raw/main/dataset_inspector.py \
      --dataset name --split train
    
  2. 检查输出中的兼容性标记(✓ READY、✗ NEEDS MAPPING、✗ INCOMPATIBLE)
  3. 如有需要,应用检查器输出中的映射代码
作业超时

修复方法:

  1. 检查日志,确认实际运行时间:hf_jobs("logs", {"job_id": "..."})
  2. 增加超时时间并留出缓冲:"timeout": "3h"(在预估时间基础上增加 30%)
  3. 或缩短训练时间:减少 num_train_epochs,使用较小的数据集,启用 max_steps
  4. 保存检查点:save_strategy="steps"、save_steps=500、hub_strategy="every_save"

**注意:**默认的 30min 不足以完成实际训练。至少需要 1-2 小时。

Hub 推送失败

修复方法:

  1. 在作业中添加:secrets={"HF_TOKEN": "$HF_TOKEN"}
  2. 在配置中添加:push_to_hub=True、hub_model_id="username/model-name"
  3. 验证身份验证:mcp__huggingface__hf_whoami()
  4. 检查令牌是否具有写入权限,以及仓库是否存在(或设置 hub_private_repo=True)
缺少依赖项

修复方法: 添加到 PEP 723 标头中:

# /// script
# dependencies = ["trl>=0.12.0", "peft>=0.7.0", "trackio", "missing-package"]
# ///

故障排查

常见问题:

  • 作业超时 → 增加超时时间、减少轮数/数据集规模,或使用较小的模型/LoRA
  • 模型未保存到 Hub → 检查 push_to_hub=True、hub_model_id、secrets=HF_TOKEN
  • 内存不足(OOM)→ 减小批次大小、增加梯度累积、启用 LoRA,或使用更大的 GPU
  • 数据集格式错误 → 使用数据集检查器验证(参见“数据集验证”部分)
  • 导入/模块错误 → 添加包含依赖项的 PEP 723 标头,并验证格式
  • 身份验证错误 → 检查 mcp__huggingface__hf_whoami()、令牌权限和 secrets 参数

参见: references/troubleshooting.md,获取完整的故障排查指南

资源

参考资料(本技能中)
  • references/training_methods.md - SFT、DPO、GRPO、KTO、PPO 和奖励建模概述
  • references/training_patterns.md - 常见训练模式和示例
  • references/unsloth.md - 用于快速 VLM 训练的 Unsloth(速度约提升 2 倍,VRAM 占用减少 60%)
  • references/gguf_conversion.md - 完整的 GGUF 转换指南
  • references/trackio_guide.md - Trackio 监控设置
  • references/hardware_guide.md - 硬件规格和选择
  • references/hub_saving.md - Hub 身份验证故障排查
  • references/troubleshooting.md - 常见问题和解决方案
  • references/local_training_macos.md - 在 macOS 上进行本地训练
脚本(本技能中)
  • scripts/train_sft_example.py - 生产级 SFT 模板
  • scripts/train_dpo_example.py - 生产级 DPO 模板
  • scripts/train_grpo_example.py - 生产级 GRPO 模板
  • scripts/unsloth_sft_example.py - Unsloth 文本大模型训练模板(速度更快,显存占用更少)
  • scripts/estimate_cost.py - 估算时间和费用(适时提供)
  • scripts/convert_to_gguf.py - 完整的 GGUF 转换脚本
外部脚本
  • 数据集检查器 - 训练前验证数据集格式(通过 uv run 或 hf_jobs 使用)
外部链接

要点总结

  1. 内联提交脚本 - script 参数可直接接收 Python 代码;除非用户要求,否则无需保存文件
  2. 任务以异步方式运行 - 不要等待或轮询;让用户在任务就绪后自行查看
  3. 始终设置超时时间 - 默认的 30 分钟不够;建议至少设置为 1-2 小时
  4. 始终启用 Hub 推送 - 运行环境是临时的;不启用推送,所有结果都会丢失
  5. 包含 Trackio - 使用示例脚本作为模板进行实时监控
  6. 提供费用估算 - 参数已知时,使用 scripts/estimate_cost.py
  7. 使用 UV 脚本(方法 1) - 默认使用 hf_jobs("uv", {...}) 搭配内联脚本;标准训练使用由 TRL 维护的脚本;在 Claude Code 中避免使用 bash trl-jobs 命令
  8. 使用 hf_doc_fetch/hf_doc_search 获取最新的 TRL 文档
  9. 训练前验证数据集格式 - 使用数据集检查器(参见“数据集验证”部分)
  10. 根据模型大小选择合适的硬件;对于 >7B 的模型,使用 LoRA

评论

支持 Markdown