尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Hugging Face Jobs 训练结果持久化:使用 TRL push_to_hub 与 HF_TOKEN 将模型安全保存至 Hub

Hugging Face Jobs 训练结果持久化:使用 TRL push_to_hub 与 HF_TOKEN 将模型安全保存至 Hub Hugging Face Jobs 训练结果持久化使用 TRL push_to_hub 与 HF_TOKEN 将模型安全保存至 Hub【免费下载链接】skillsGive your agents the power of the Hugging Face ecosystem项目地址: https://gitcode.com/GitHub_Trending/skills7/skills导读本文以 huggingface-llm-trainer 技能中的 hub_saving.md 为骨架系统讲解在 Hugging Face Jobs 临时 GPU 环境上训练 LLM 时如何通过push_to_hub、hub_model_id与secrets{HF_TOKEN: $HF_TOKEN}三件套确保训练产物永久落盘到 Hub。读完本文你将掌握完整可复制的 SFT/DPO/GRPO 训练脚本模板、检查点保存策略、三种认证方式、仓库命名与创建规则以及 401/403 等典型推送故障的排查思路。为什么必须推送临时环境没有本地持久化Hugging Face Jobs 的每一个训练任务都运行在一次性ephemeral容器中其环境具有以下特性环境是临时的任务结束后即销毁容器内所有文件随任务结束被删除没有本地磁盘持久化能力任务结束后无法再访问任何结果文件。因此 hub_saving.md 开篇就用加粗警告强调Without Hub push, training is completely wasted.不推送到 Hub训练就完全白费。这一点在 SKILL.md 的Prerequisites Checklist与Critical: Saving Results to Hub两节中被反复标注为 ⚠️ CRITICAL是提交任何训练任务前必须满足的硬性前提。源码佐证仓库内所有生产级训练脚本train_sft_example.py、train_dpo_example.py、train_grpo_example.py无一例外都在配置中开启push_to_hubTrue并在训练结束后显式调用trainer.push_to_hub()这印证了推送是流程终点而非可选项的设计原则。必需配置训练侧与任务侧各一处要让模型成功落盘必须在两个位置同时配置缺一不可。1. 训练配置SFTConfig / trainer configSFTConfig( push_to_hubTrue, # 启用 Hub 推送 hub_model_idusername/model-name, # 目标仓库 )push_to_hubTrue告诉 Trainer 在每个 checkpoint 保存时同步推送权重。hub_model_id指定目标仓库格式必须为用户名/仓库名且必须显式指定文档原文为 MUST specify。2. 任务配置hf_jobs 提交hf_jobs(uv, { script: train.py, secrets: {HF_TOKEN: $HF_TOKEN} # 提供认证 })其中$HF_TOKEN占位符会在提交任务时自动替换为你的 Hugging Face 真实令牌无需在脚本中硬编码任何密钥。这正是 SKILL.md 中强调的$HF_TOKEN语法它引用的是你账号的真实 token 值容器启动后HF_TOKEN会作为环境变量注入。完整最小示例SFT 训练并推送以下脚本直接复刻自 hub_saving.md 的完整示例并保持原样的关键配置# train.py # /// script # dependencies [trl] # /// from trl import SFTTrainer, SFTConfig from datasets import load_dataset dataset load_dataset(trl-lib/Capybara, splittrain) # 配置 Hub 推送 config SFTConfig( output_dirmy-model, num_train_epochs3, # ✅ CRITICAL: Hub push 配置 push_to_hubTrue, hub_model_idmyusername/my-trained-model, # 可选推送策略 push_to_hub_model_idmyusername/my-trained-model, push_to_hub_organizationNone, push_to_hub_tokenNone, # 使用环境变量中的 token ) trainer SFTTrainer( modelQwen/Qwen2.5-0.5B, train_datasetdataset, argsconfig, ) trainer.train() # ✅ 推送最终模型 trainer.push_to_hub()提交命令带认证hf_jobs(uv, { script: train.py, flavor: a10g-large, timeout: 2h, secrets: {HF_TOKEN: $HF_TOKEN} # ✅ 必需 })参数说明参数含义备注script训练脚本内联代码或 Hub/GitHub 上的 URL本地文件路径在 Jobs 中无效flavorGPU 机型如a10g-large硬件选择见 hardware_guide.mdtimeout任务超时如2h、90m、1.5h或整数秒默认 30 分钟对训练几乎必然过短secrets以密文方式注入的敏感环境变量推荐用$HF_TOKEN引用真实令牌从源码结构看脚本中可通过os.environ[HF_TOKEN]直接读取注入的令牌。unsloth_sft_example.py 展示了这一用法先读取HF_TOKEN调用login(tokentoken)完成 Hub 登录再开始训练并在脚本开头断言assert HF_TOKEN in os.environ提前暴露缺失问题。推送时会保存哪些内容当push_to_hubTrue时随模型一并推送到仓库的包括模型权重Model weights—— 训练得到的最终参数分词器Tokenizer—— 关联的分词器文件模型配置Configuration——config.json训练参数Training arguments—— 本次训练使用的超参数记录模型卡片Model card—— 自动生成的 README 文档检查点Checkpoints—— 若启用了save_strategysteps则包含中间检查点。检查点保存长任务的后悔药训练中途失败在长任务中难以避免配置检查点保存可显著降低损失SFTConfig( output_dirmy-model, push_to_hubTrue, hub_model_idusername/my-model, # 检查点配置 save_strategysteps, save_steps100, # 每 100 步保存一次 save_total_limit3, # 仅保留最近 3 个检查点 )收益包括任务失败后可断点续训、可横向对比不同检查点效果、可提前使用中间模型。检查点推送至username/my-model与最终模型同一仓库。进一步地通过hub_strategy可以控制检查点的推送节奏。hub_saving.md 的完整生产设置示例中使用hub_strategycheckpoint而仓库中的三个生产脚本train_sft_example.py 等统一使用hub_strategyevery_save——含义为每次保存都推送保证任何时刻的检查点都已在 Hub 上即便任务中途被杀也不丢进度。save_total_limit用于控制仓库内检查点数量避免占用过多存储。关于检查点与断点续训troubleshooting.md 给出了可复现的恢复方式trainer SFTTrainer( modelusername/model-name, resume_from_checkpointusername/model-name/checkpoint-1000, )三种认证方式对比hub_saving.md 提供了三种向任务注入令牌的方法安全级别从高到低方法一自动令牌推荐secrets: {HF_TOKEN: $HF_TOKEN}自动使用你已登录的 Hugging Face 账号令牌无需在代码中接触任何密钥明文。始终优先选择此方法。方法二显式令牌secrets: {HF_TOKEN: hf_abc123...}直接写死令牌明文文档明确标注not recommended for security出于安全考虑不推荐因为明文会进入任务配置与日志。方法三普通环境变量env: {HF_TOKEN: hf_abc123...}以普通环境变量传入文档同样标注less secure than secrets安全性低于 secrets因为普通 env 的可见性高于 secrets 机制。提交前验证清单在提交任何训练任务之前逐项核对训练配置中push_to_hubTrue已指定hub_model_id格式username/model-name任务配置中包含secrets{HF_TOKEN: $HF_TOKEN}仓库名与已有仓库不冲突你对目标命名空间namespace具备写权限这一清单与 SKILL.md 中Verification Checklist完全一致也呼应了 troubleshooting.md 中Model Not Saved to Hub一节其中还额外补充了一条常被遗漏的项训练脚本末尾必须调用trainer.push_to_hub()。仓库创建与命名规范自动创建如果目标仓库不存在首次推送时会自动创建无需任何手工步骤。手动预创建也可以在训练前手动创建仓库以便提前配置权限、可见性或描述from huggingface_hub import HfApi api HfApi() api.create_repo( repo_idusername/model-name, repo_typemodel, privateFalse, # 或 True 创建私有仓库 )命名规范合法命名username/my-modelusername/model-nameorganization/model-name非法命名model-name—— 缺少用户名/命名空间username/model name—— 不允许空格username/MODEL—— 不建议使用大写故障排查推送失败怎么办错误401 Unauthorized原因HF_TOKEN未提供或无效。解决方案检查任务配置中secrets{HF_TOKEN: $HF_TOKEN}确认本地已登录hf auth whoami重新登录hf auth login。错误403 Forbidden原因对目标仓库没有写权限。解决方案确认hub_model_id的命名空间与你的用户名一致若使用组织命名空间确认你是该组织成员检查仓库是否为私有访问组织私有仓库需成员权限。错误Repository not found原因仓库不存在且自动创建失败。解决方案先手动创建仓库见上文HfApi.create_repo检查仓库名格式是否合法确认命名空间存在。错误训练中途推送失败原因网络问题或 Hub 临时不可用。解决方案训练会继续运行但最终推送失败检查点可能已保存若启用了检查点与hub_strategyevery_save任务结束后可手动重新推送见下节。问题模型已保存但不可见可能原因仓库是私有的——检查你自己的 Hub 主页是否可见该仓库命名空间错误——核对hub_model_id是否与你登录的账号一致推送仍在进行中——等待几分钟后刷新。补充事实troubleshooting.md 在 Hub Push 相关修复中额外提示可调用hf_whoami()验证当前认证身份并确认 token 在 Hub 设置页具备write写入权限而非 read-only同时hub_private_repoTrue可让自动创建仓库默认设为私有从而规避权限类 403。训练完成后的手动推送若训练已结束但自动推送失败且容器尚未销毁、文件仍存在可加载本地输出目录手动推送from transformers import AutoModel, AutoTokenizer # 从本地 checkpoint 加载 model AutoModel.from_pretrained(./output_dir) tokenizer AutoTokenizer.from_pretrained(./output_dir) # 推送到 Hub model.push_to_hub(username/model-name, tokenhf_abc123...) tokenizer.push_to_hub(username/model-name, tokenhf_abc123...)注意这仅在任务尚未完成文件仍存在时可行任务一旦结束临时文件已全部删除只能通过检查点恢复。最佳实践七条始终开启push_to_hubTrue—— 不开启意味着训练结果归零长任务务必配置检查点保存—— 用save_strategystepssave_steps细化保存粒度在任务完成前从日志确认 Hub 推送成功—— 不要等任务结束才检查设置合理的save_total_limit—— 防止检查点无限堆积占用仓库空间使用有描述性的仓库名—— 例如qwen-capybara-sft而不是model1为模型添加 model card—— 记录训练细节便于复用与协作给模型打上相关标签—— 如text-generation、fine-tuned提升可发现性。监控推送进度推送过程可通过日志实时观察hf_jobs(logs, {job_id: your-job-id})关注日志中的关键输出Pushing model to username/model-name... Upload file pytorch_model.bin: 100% ✅ Model pushed successfullyhf_jobs还支持ps列出所有任务、inspect查看任务详情等查询详见 SKILL.md 的Check Job Status一节。完整生产级示例LoRA 检查点 推送以下综合示例来自 hub_saving.md 的 production_train.py展示了生产环境的完整配置形态# production_train.py # /// script # dependencies [trl0.12.0, peft0.7.0] # /// from datasets import load_dataset from peft import LoraConfig from trl import SFTTrainer, SFTConfig import os # 验证 token 可用 assert HF_TOKEN in os.environ, HF_TOKEN not found in environment! # 加载数据集 dataset load_dataset(trl-lib/Capybara, splittrain) print(f✅ Dataset loaded: {len(dataset)} examples) # 完整 Hub 配置 config SFTConfig( output_dirqwen-capybara-sft, # Hub 配置 push_to_hubTrue, hub_model_idmyusername/qwen-capybara-sft, hub_strategycheckpoint, # 推送检查点 # 检查点配置 save_strategysteps, save_steps100, save_total_limit3, # 训练设置 num_train_epochs3, per_device_train_batch_size4, # 日志 logging_steps10, logging_first_stepTrue, ) # 使用 LoRA 训练 trainer SFTTrainer( modelQwen/Qwen2.5-0.5B, train_datasetdataset, argsconfig, peft_configLoraConfig(r16, lora_alpha32), ) print( Starting training...) trainer.train() print( Pushing final model to Hub...) trainer.push_to_hub() print(✅ Training complete!)提交方式hf_jobs(uv, { script: production_train.py, flavor: a10g-large, timeout: 6h, secrets: {HF_TOKEN: $HF_TOKEN} })源码佐证仓库中 train_sft_example.py 是上述生产脚本的更完整版本额外加入了train_test_split评估集划分、Trackio 监控report_totrackio、warmup_ratio0.1、lr_scheduler_typecosine、LoRA 的target_modules[q_proj, v_proj]等细节并以 PEP 723 头声明trl0.12.0、peft0.7.0、transformers4.36.0、accelerate0.24.0、trackio依赖。该脚本可直接作为hf_jobs(uv, ...)的script内联内容使用。Unsloth 路线unsloth_sft_example.py则提供了--merge-model合并 LoRA 权重后经push_to_hub_merged(..., save_methodmerged_16bit)推送全量模型的可选项。扩展阅读与关联文档SKILL.md —— 技能主文档含 Jobs 提交流程、超时管理、模型选择training_methods.md —— SFT/DPO/GRPO/Reward 方法与数据集格式速查training_patterns.md —— 多 GPU、DPO、GRPO 等训练模式模板troubleshooting.md —— 含Model Not Saved to Hub与 Hub Push Failures 专项排查train_sft_example.py、train_dpo_example.py、train_grpo_example.py —— 三个生产级训练模板unsloth_sft_example.py —— Unsloth 优化路线约省 60% 显存的 Hub 推送实现。关键结论如果不同时配置push_to_hubTrue与secrets{HF_TOKEN: $HF_TOKEN}所有训练结果都会永久丢失。在提交任何训练任务前请务必核对这两个条件都已就位——这是 Hugging Face Jobs 上所有训练工作流的第一安全准则。训练结束后请确认日志中出现模型推送成功的输出再放心宣告任务完成。【免费下载链接】skillsGive your agents the power of the Hugging Face ecosystem项目地址: https://gitcode.com/GitHub_Trending/skills7/skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表