用 Codex 和 HF Skills 做端到端机器学习实验

教程Hugging Face2025年12月11日8 分钟阅读
用 Codex 和 HF Skills 做端到端机器学习实验
OpenAI 的 AI 编程助手 Codex 现在能通过 Hugging Face Skills 执行端到端机器学习实验。从数据验证、硬件选择、提交训练任务到模型评估和部署,全程只需简单指令。

在让 Claude Code 训练开源模型的基础上,我们现在让 OpenAI 的 Codex 更进一步。我们为 Codex 提供了访问 Hugging Face Skills 仓库的权限,这个仓库包含了用于机器学习和 AI 任务的技能(Skills),比如训练或评估模型。有了 HF Skills,一个编程智能体(Coding Agent)可以:

  • 对大语言模型进行微调(Fine-tuning)和应用 RL 对齐(RL Alignment)
  • 查看、解释并基于 Trackio 的实时训练指标采取行动
  • 评估检查点(Checkpoints)并根据评估结果采取行动
  • 从实验中创建报告
  • 将模型导出并量化为 GGUF 格式以供本地部署
  • 将模型发布到 Hugging Face Hub

这篇教程将深入探讨其工作原理,并教你如何使用它。让我们开始吧。

Codex 使用 AGENTS.md 文件来完成专门任务,而 Claude Code 使用“Skills”。幸运的是,“HF-skills”与这两种方法都兼容,并且可以与主要的编程智能体如 Claude Code、Codex 或 Gemini CLI 协同工作。

有了 HF-skills,你可以告诉 Codex 类似这样的话:

code
Fine-tune Qwen3-0.6B on the dataset open-r1/codeforces-cots

然后 Codex 会:

  1. 验证你的数据集格式
  2. 选择合适的硬件(对于 0.6B 模型选择 t4-small)
  3. 使用并更新带有 Trackio 监控的训练脚本
  4. 将任务提交到 Hugging Face Jobs
  5. 报告任务 ID 和预估成本
  6. 在你询问时检查进度
  7. 如果出现问题,帮你调试

模型在 Hugging Face 的 GPU 上训练时,你可以做其他事情。完成后,你微调好的模型就会出现在 Hub 上,随时可用。

这不是一个玩具演示。该扩展支持生产环境中使用的相同训练方法:监督微调(Supervised Fine-Tuning)、直接偏好优化(Direct Preference Optimization)以及带有可验证奖励的强化学习。你可以训练从 0.5B 到 7B 参数的模型,将它们转换为 GGUF 格式用于本地部署,并运行结合了不同技术的多阶段流水线。

目标:端到端机器学习实验

我们在 Claude Code 教程中探索了这种单提示(Single Prompt)方法。然而,我们现在可以更进一步,让 OpenAI Codex 进行端到端的机器学习实验。例如,Codex 应该能够监控进度、评估模型并维护一份最新的训练报告。这将允许工程师将实验委托给 Codex,并以一种更放手的方式审查报告。这也将允许 Codex 根据训练报告和评估结果自行做出更多决策。

那么,让我们开始吧!

设置与安装

开始之前,你需要:

  • 一个 Hugging Face 账户,并拥有 Pro 或 Team / Enterprise 计划(Jobs 需要付费计划)
  • 来自 huggingface.co/settings/tokens 的具有写权限的令牌(Token)
  • 已安装并配置好的 Codex

安装 Codex

Codex 是 OpenAI 的 AI 编程助手,包含在 ChatGPT Plus、Pro、Business、Edu 和 Enterprise 计划中。Codex 将 AI 辅助直接带入你的开发工作流。

有关安装和设置说明,请参阅 Codex 文档。

安装 Hugging Face Skills

Hugging Face Skills 仓库包含一个 AGENTS.md 文件,Codex 会自动检测并使用它。

克隆仓库:

code
git clone https://github.com/huggingface/skills.git
cd skills

Codex 会自动检测仓库中的 AGENTS.md 文件并加载技能。你可以通过以下命令验证指令是否已加载:

code
codex --ask-for-approval never "Summarize the current instructions."

更多详情,请参阅 Codex AGENTS 指南。

连接到 Hugging Face

使用 hf auth login 命令和来自 hf.co/settings/tokens 的具有写权限的令牌进行身份验证:

code
hf auth login

Codex 支持 MCP(Model Context Protocol)服务器。你可以配置 Hugging Face MCP 服务器以获得额外的 Hub 集成功能。你可以通过将以下内容添加到你的 ~/.codex/config.toml 文件中来添加 Hugging Face MCP 服务器:

code
[mcp_servers.huggingface]
command = "npx"
args = ["-y", "mcp-remote", "https://huggingface.co/mcp?login"]

在设置页面配置 Hugging Face MCP 服务器以使用相关的 MCP 服务器,如 Jobs。

然后启动 Codex,你将被引导至 Hugging Face MCP 身份验证页面。

你的第一个 AI 实验

让我们通过一个完整的例子来走一遍。我们将微调一个小模型以提高代码解决能力,使用 open-r1/codeforces-cots 数据集和 openai_humaneval 基准测试。

open-r1/codeforces-cots 数据集是一个包含 Codeforces 问题和解决方案的数据集。它是一个很好的数据集,用于对模型进行指令微调(Instruction Tuning)以解决困难的编码问题。

指示 Codex 进行端到端微调实验

在你的项目目录中启动 Codex。然后给它一个简单清晰的指令:

code
Start a new fine-tuning experiment to improve code solving abilities on using SFT. 
- Maintain a report for the experiment. 
- Evaluate models with the openai_humaneval benchmark
- Use the open-r1/codeforces-cots dataset

你会注意到,我们已经比 Claude Code 教程中的单提示方法更进一步了。我们在指令中添加了更多细节,同时也为实验添加了更多步骤。 为什么不自己尝试用更开放的问题来迭代这个实验呢?比如“什么模型最适合代码解决能力?”或“什么数据集最适合代码解决能力?”

Codex 分析你的请求并准备训练配置。对于一个 0.6B 模型和演示数据集,它选择 t4-small——足够处理这个模型大小且最便宜的可用 GPU 选项。Codex 将在 training_reports/<model>-<dataset>-<method>.md 处启动一份新报告,看起来像下面的示例。随着实验的进行,Codex 将用最新信息和每次运行报告更新这份报告。

示例训练报告

code
# Base Model & Dataset
[Base Model](https://huggingface.co/Qwen/Qwen3-0.6B)  
[Dataset](https://huggingface.co/datasets/open-r1/codeforces-cots)

---

# `sft-a10g` - `TBD` - `In Progress`

## Training Parameters
| Parameter | Value |
|-----------|-------|
| Method | SFT (TRL) |
| Model | `Qwen/Qwen3-0.6B` |
| Dataset | `open-r1/codeforces-cots` (train, 5% eval split) |
| Max Length | 2048 |
| Epochs | 1 (extend to 3 after first check) |
| Per-Device Batch Size | 1 |
| Grad Accum Steps | 8 |
| Effective Batch | 8 |
| Learning Rate | 5e-5 |
| Weight Decay | 0.01 |
| Warmup Ratio | 0.03 |
| Eval Strategy | steps (500) |
| Save Strategy | steps (500), `hub_strategy=every_save`, limit=2 |
| Precision | bf16 |
| Gradient Checkpointing | true |
| Packing | false |
| Hub Model | `burtenshaw/qwen3-codeforces-cots-sft` |
| Hardware | a10g-small |
| Timeout | 2h |
| Trackio | project `qwen3-codeforces-cots`, run `sft-a10g` |

## Run Status
In Progress (queued to submit)

## Run Logs
Pending submission (job link will be added)

## Trackio Logs
Pending (will link after job starts)

## Run Evaluations
Pending (lighteval `openai_humaneval` for base + checkpoints)

---

# Experiment Evaluations
| Run Title | Benchmark | Score | Evaluation Job Link | Model Link |
|-----------|-----------|-------|---------------------|------------|
| `sft-a10g` - `TBD` - `In Progress` | HumanEval pass@1 | TBD | TBD | [burtenshaw/qwen3-codeforces-cots-sft](https://huggingface.co/burtenshaw/qwen3-codeforces-cots-sft)

更新训练报告

随着实验的进行,Codex 将用最新信息和每次运行报告更新报告。你可以在 training_reports/<model>-<dataset>-<method>.md 文件中查看报告。

例如,当实验正在进行时,codex 会将报告的标题更新为 sft-a10g - TBD - In Progress

code
# `base-humaneval-a10g` - `2025-12-09 13:47:47 UTC` - `In Progress`

它可以链接到运行日志和 Trackio 日志。

code
## Run Logs

[Run Logs](https://huggingface.co/jobs/burtenshaw/6938272ec67c9f186cfe1ae3)

## Trackio Logs

[Trackio Logs](https://burtenshaw-trackio.hf.space/?project=qwen3-codeforces-sft&metrics=train/loss&runs=sft-qwen3-codeforces-20251209-175806&sidebar=hidden&navbar=hidden)

并且它会在一个合并的表格中更新评估结果。

code
# Experiment Evaluations

| Run Title | Benchmark | Score | Evaluation Job Link | Model Link |
|-----------|-----------|-------|---------------------|------------|
| `base-humaneval-a10g` - `2025-12-09 13:47:47 UTC` - `Completed` | HumanEval pass@1 | 0.304 | [Logs](https://huggingface.co/jobs/burtenshaw/69382863c67c9f186cfe1ae7) | [Qwen/Qwen3-0.6B](https://huggingface.co/Qwen/Qwen3-0.6B) |
| `qwen3-0.6b-lora-v1` - `2025-12-09 13:47:47 UTC` - `In Progress` | HumanEval pass@1 | TBD | TBD | [burtenshaw/qwen3-codeforces-cots-sft](https://huggingface.co/burtenshaw/qwen3-codeforces-cots-sft)

数据集验证

数据集格式和处理是训练失败最常见的原因,通常训练脚本中会进行大量工作。Codex 可以在任务开始前验证数据集,并为 TRL 定义配置或单独处理数据集。

在大多数情况下,Codex 会在训练前验证数据集,但你始终可以在提交任务前检查数据集验证。

code
Check if open-r1/codeforces-cots works for SFT training.

Codex 在 CPU 上快速检查(花费几分钱)并报告:

code
Dataset validation for my-org/conversation-data:

SFT: ✓ READY
  Found 'messages' column with conversation format

DPO: ✗ INCOMPATIBLE
  Missing 'chosen' and 'rejected' columns

如果你的数据集需要转换,Codex 可以在训练前预处理数据集。

code
Preprocess the dataset open-r1/codeforces-cots to use 'good_response' and 'bad_response' instead of 'chosen' and 'rejected'.

Codex 将预处理数据集,并使用新配置更新训练脚本。

提交前审查

在 Codex 提交任何内容之前,你会看到配置:

code
I'll fine-tune Qwen/Qwen3-0.6B on open-r1/codeforces-cots using SFT.

Configuration:
- Hardware: t4-small (~$0.75/hour)
- Estimated time: ~20 minutes
- Estimated cost: ~$0.30
- Output: username/qwen-codeforces-cots-sft

The model will be pushed to Hub automatically. Should I submit?

这是你调整任何内容的机会。更改输出仓库名称、选择不同的硬件,或要求 Codex 修改训练参数。一旦你批准,任务就会被提交。

例如,你可以要求 Codex 尝试一个测试运行:

code
Do a quick test run on 100 examples.

使用训练报告跟踪进度

提交后,你可以使用训练报告跟踪进度,并获取运行日志和 Trackio 日志的链接。你也可以告诉 Codex 获取日志、总结进度并更新训练报告。随着 codex 运行任务,它将用最新信息更新训练报告。

示例 Codex 响应

code
─ Worked for 10m 38s ─────────────────────────────────────────────────────────────────────────────────────────────────────────

• Training and eval jobs are live. Key details:

  - SFT launched on open-r1/codeforces-cots (solutions_py_decontaminated, 98/2 split) with LoRA on Qwen/Qwen3-0.6B, a10g-
    large, bf16, max_steps=1000, batch=1, grad_accum=8, lr=2e-5, save/eval every 200 steps, hub push burtenshaw/qwen3-
    codeforces-cots-sft. Job: https://huggingface.co/jobs/burtenshaw/6938272ec67c9f186cfe1ae3 (Trackio project codeforces-
    cots-sft, run qwen3-0.6b-lora-v1).
  - Baseline lighteval (HumanEval) on the base model queued on a10g-large. Job: https://huggingface.co/jobs/
  - Experiment report updated with current runs and links: training_reports/qwen3-codeforces-cots-sft.md.

  To evaluate the fine-tuned checkpoints once the SFT job pushes to the hub, reuse the same lighteval script:
  hf jobs uv run --flavor a10g-large --timeout 1h --secrets HF_TOKEN -e MODEL_ID=burtenshaw/qwen3-codeforces-cots-sft -e
  RESULTS_ORG=burtenshaw -d /tmp/lighteval_humaneval.py
  (or swap MODEL_ID for a specific checkpoint path). This will log to the same results directory on the hub.

  1. Monitor the two running jobs; I can fetch logs or metrics on request.
  2. After a checkpoint lands, trigger the lighteval run above to compare against the baseline; then we can fill in pass@1 in the report.

Trackio 将通过运行评估任务并选择最佳检查点来为你监控训练和评估分数。如果你想知道训练任务的状态,可以要求 Codex 获取日志并在表格中总结进度。

code
Are models outperforming the base model?
code
| Model | Benchmark | Score | Evaluation Job Link | Model Link |
|-----------|-----------|-------|---------------------|------------|
| `qwen3-0.6b-lora-v1` - `2025-12-09 13:47:47 UTC` - `Completed` | HumanEval pass@1 | 0.342 | [Logs](<link to training job>) | [burtenshaw/qwen3-codeforces-cots-sft](https://huggingface.co/burtenshaw/qwen3-codeforces-cots-sft)
| `base-humaneval-a10g` - `2025-12-09 13:47:47 UTC` - `Completed` | HumanEval pass@1 | 0.306 | [Logs](<link to evaluation job>) | [Qwen/Qwen3-0.6B](https://huggingface.co/Qwen/Qwen3-0.6B)

你还可以实时监控训练损失。

Example Trackio dashboard of a Sweep test

Codex 获取日志并总结进度。

点击此处查看一个包含一些已完成运行的示例 Trackio 仪表板。

使用你的模型

训练完成后,你的模型就在 Hub 上了:

code
from transformers import AutoModelForCausalLM, AutoTokenizer

model = AutoModelForCausalLM.from_pretrained("burtenshaw/qwen3-codeforces-cots-sft")
tokenizer = AutoTokenizer.from_pretrained("burtenshaw/qwen3-codeforces-cots-sft")

Transformers 作为一个标准库很好用,我们可以轻松地将训练好的模型转换为 GGUF 格式以进行本地部署。这是因为训练技能包含了将模型转换为 GGUF 的指令和支持脚本。

code
Convert my fine-tuned model to GGUF with Q4_K_M quantization.
Push to username/my-model-gguf.

然后 Codex 转换为 GGUF,应用量化,并推送到 Hub。如果我们训练了一个 LoRA 适配器,它会将 LoRA 适配器合并到基础模型中。

然后在本地使用它:

code
llama-server -hf <username>/<model-name>:<quantization>

# For example, to run the Qwen3-1.7B-GGUF model on your local machine:
llama-server -hf unsloth/Qwen3-1.7B-GGUF:Q4_K_M

硬件与成本

Codex 会根据你的模型规模自动选择硬件,但了解其中的权衡能帮你做出更明智的决策。你可以参考硬件指南查看选项和成本,不过 Codex 会替你搞定,选出最佳方案。

对于参数在 10 亿以下的微型模型t4-small 就够用了。这类模型训练很快,完整跑一次大概 1-2 美元,非常适合教学或实验性运行。

对于小型模型(10-30 亿参数),需要升级到 t4-mediuma10g-small。训练耗时几小时,成本在 5-15 美元。

对于中型模型(30-70 亿参数),得用 a10g-largea100-large,配合 LoRA 技术。全量微调(Full Fine-tuning)跑不动,但 LoRA 让这些模型变得可训练。生产环境预算大概 15-40 美元。

对于大型模型(70 亿参数以上),目前这个 Hugging Face Skills 任务还不支持这个规模。不过我们正在努力,敬请期待!

下一步做什么

我们已经看到,Codex 能处理模型微调的全生命周期:验证数据、选择硬件、生成脚本、提交任务、监控进度、转换输出。

可以试试这些:

  • 用你自己的数据集微调一个模型
  • 用更多模型和数据集做更大规模的实验,让智能体(Agent)为你生成报告
  • 用 GRPO 在数学或代码上训练一个推理模型,同样让智能体生成报告

这个扩展是开源的。你可以扩展它,为你的工作流定制,或者把它作为其他训练场景的起点。


资源

Codex

Hugging Face Skills

本文编译自 Codex is Open Sourcing AI models,版权归原作者所有。

觉得有用?分享给更多人

获取每周 AI 工具精选

工具推荐、实战教程和生态洞察,每周更新。

相关文章

本文分享了如何将 GitHub Copilot SDK 集成到 React Native 应用中,构建一个名为 IssueCrush 的 Issue 智能分类工具。核心方案是服务端集成模式,解决了 SDK 依赖 Node.js 环境的问题,并详细介绍了生命周期管理、提示工程、响应处理和优雅降级等关键实现模式。

教程GitHub·3月24日·8 分钟

Starlette 1.0 发布,最大的变化是引入了基于异步上下文管理器的 lifespan 机制。作者利用 Claude 的 Skill 功能,让 AI 克隆代码库并学习新版本特性,然后成功生成了一个包含项目、任务、评论和标签的完整任务管理应用。

教程Simon Willison·3月22日·5 分钟

评论