大模型应用
在 Hugging Face Jobs 云端 GPU…
当没有本地 GPU、想用 TRL 或 Unsloth 在 Hugging Face Jobs 上跑 SFT/DPO/GRPO/奖励模型训练,并把结果推到 Hub 或转成 GGUF 时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 59/100 ×0.15
适用场景
在 Hugging Face Jobs 特定
解决思路
- 用 `hf_jobs()` MCP 工具提交任务:调用 `hf_jobs("uv", {...})`,把 Python 代码作为字符串直接传给 `script` 参数,不要用 bash 的 `trl-jobs` 命令,也不要保存到本地文件(除非用户明确要求)。用户说“训练模型/微调”时,必须同时创建训练脚本并立即提交任务。
- 每个训练脚本都加入 Trackio 做实时监控:依赖里加 `trackio`,trainer 配置 `report_to="trackio"`、`run_name="有意义的名字"`、`project="项目名"`;默认 Space ID 用 `{username}/trackio`,除非# 用户另有指定。
- 提交后向用户报告:job ID、监控 URL、预计耗时、Trackio dashboard URL、预计成本,并说明用户可稍后请求查看状态。
- 训练任务异步运行:提交后立即返回,日志可能延迟 30-60 秒出现;不要自动轮询,只在用户请求时用 `hf_jobs("ps")`、`hf_jobs("inspect", {"job_id": ...})`、`hf_jobs("logs", {"job_id": ...})` 检查。
- 前置检查:确认账号为 Pro/Team/Enterprise 付费计划,用 `hf_whoami()` 验证登录,HF_TOKEN 必须有写权限,并在 job 配置里传 `secrets={"HF_TOKEN": "$HF_TOKEN"}`。
- 数据集要求:必须存在于 Hub 或可用 `datasets.load_dataset()` 加载;格式匹配训练方法(SFT 用 messages/text/prompt-completion,DPO 用 chosen/rejected,GRPO 用 prompt-only);规模匹配硬件(Demo 50-100 条用 t4-small,生产 1K-10K+ 用 a10g-large/a100-large)。
- 训练前先验证未知数据集格式:用 `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` 套用输出里的 MAPPING CODE,`✗ INCOMPATIBLE` 换方法或数据集。
- 设置超时:默认 30 分钟太短,最小推荐 1-2 小时;格式支持 "90m"、"2h"、"1.5h" 或整数秒;在预估时间上加 20-30% 缓冲。
- 必须开启 Hub 推送(环境是临时的,不推送则全部训练结果丢失):配置里设 `push_to_hub=True`、`hub_model_id="username/model-name"`,可选 `hub_strategy="every_save"`;job 里传 `secrets={"HF_TOKEN": "$HF_TOKEN"}`。
- 序列长度用 `max_length`(不是 `max_seq_length`):默认 1024 从右侧截断;长上下文设 2048,内存受限设 512,视觉模型设 `max_length=None`;通常无需设置。
- 选择训练方式:Approach 1 用 UV 脚本(PEP 723 内联依赖,默认首选);Approach 2 用 TRL 官方维护脚本 URL 加 `script_args`;Approach 3 在 MCP 不可用时用 `hf jobs uv run` CLI;Approach 4 用 `trl-jobs` 包做一行训练(仅终端场景)。
- CLI 语法规则:命令顺序是 `hf jobs uv run`(不是 `hf jobs run uv`);所有 flag(`--flavor`、`--timeout`、`--secrets`)必须在脚本 URL 之前;用 `--secrets`(复数);脚本 URL 必须是最后一个位置参数。
- 脚本来源:`script` 只接受内联代码或公开 URL(HF Hub、GitHub raw、Gist),本地路径无效;要使用本地脚本先 `hf repos create` 并 `hf upload` 到 Hub 再用其 URL。
- 按模型规模选硬件:<1B 用 t4-small(约 $0.75/h,仅 demo 且不加 eval);1-3B 用 t4-medium/l4x1;3-7B 用 a10g-small/a10g-large;7-13B 用 a10g-large/a100-large 并配 LoRA;13B+ 用 a100-large/a10g-largex2 并配 LoRA。
- 用 `scripts/hf_benchmarks.py` 选基座模型:`uv run scripts/hf_benchmarks.py search --query ocr` 搜索基准,`uv run scripts/hf_benchmarks.py leaderboard allenai/olmOCR-bench` 看排行榜。
- 用 `scripts/estimate_cost.py` 估算成本:`uv run scripts/estimate_cost.py --model ... --dataset ... --hardware ... --dataset-size ... --epochs ...`;当用户规划任务、询问成本/时间、选硬件,或任务 >1 小时 / >$5 时主动提供。
- 用示例脚本作模板:`scripts/train_sft_example.py`、`scripts/train_dpo_example.py`、`scripts/train_grpo_example.py`、`scripts/unsloth_sft_example.py`,把它们的内容内联传给 `hf_jobs()`。
- 内存不足(OOM)时按顺序修:减小 batch size 到 1 并增大 `gradient_accumulation_steps=8`(有效 batch 尽量接近 128);开启 `gradient_checkpointing=True`;升级硬件。
- 任务超时时:查日志确认实际耗时,增加超时(预估时间 +30%),或减少 `num_train_epochs`、用更小数据集、启用 `max_steps`,并设 `save_strategy="steps"`、`save_steps=500`、`hub_strategy="every_save"` 保存检查点。
- Hub 推送失败时:加 `secrets={"HF_TOKEN": "$HF_TOKEN"}`,配置 `push_to_hub=True` 和 `hub_model_id`,用 `hf_whoami()` 验证认证,检查 token 写权限和仓库是否存在(或设 `hub_private_repo=True`)。
- 缺依赖时在 PEP 723 头部补上:`# /// script` 加 `# dependencies = ["trl>=0.12.0", "peft>=0.7.0", "trackio", "missing-package"]` 加 `# ///`。
- 训练后转 GGUF 以便本地部署(Ollama、LM Studio、llama.cpp):用 `references/gguf_conversion.md` 里的完整脚本,通过 `hf_jobs("uv", {...})` 提交,flavor 用 a10g-large、timeout 45m,env 传 `ADAPTER_MODEL`、`BASE_MODEL`、`OUTPUT_REPO`。
- 需要最新 TRL 文档时用 `hf_doc_search("query", product="trl")` 和 `hf_doc_fetch("https://huggingface.co/docs/trl/sft_trainer")` 等。
- 仓库脚本用 PEP 723 内联依赖,通过 `uv run` 执行,例如 `uv run scripts/estimate_cost.py --help`、`uv run scripts/dataset_inspector.py --help`。
- GPU 内存有限、追求速度、训练 >13B 大模型或视觉语言模型(VLM)时改用 Unsloth(约省 60% VRAM、快约 2 倍,VLM 用 `FastVisionModel`),参考 `references/unsloth.md` 和 `scripts/unsloth_sft_example.py`。
适用边界 · 注意事项
- 没有 Hugging Face 付费计划(Pro/Team/Enterprise)时无法使用 Jobs。
- 已知 TRL 兼容数据集(如 trl-lib/ultrachat_200k、trl-lib/Capybara、HuggingFaceH4/ultrachat_200k)无需再跑数据集验证。
- 在 Claude Code 上下文中不要用 bash 的 `trl-jobs` 命令,优先用 `hf_jobs()` MCP 工具。