将 GitHub CI 迁移到 Hugging Face Jobs
将 GitHub CI 迁移到 Hugging Face Jobs
Hugging Face 推出了一种将 GitHub 持续集成(CI)工作流迁移到 Hugging Face Jobs 的方法,使开发者能够在具有灵活硬件选项的无服务器基础设施上运行 GitHub Actions。此方法使得机器学习项目能够使用 GPU 加速的 CI,并且在 Trackio 项目的案例中,CPU 作业运行时间减少了大约 30%。
Hugging Face Jobs 概述
Hugging Face Jobs 使用户能够在无服务器基础设施上使用各种硬件配置执行命令或脚本。每个 Job 由一个命令、一个 Docker 镜像(来源于 Docker Hub 或 Hugging Face Space)、一个硬件规格(例如 CPU、t4-small 或 h200 GPU)以及可选的环境变量和密钥定义。
对于机器学习库而言,这尤其有利,因为它允许在实际的 CUDA 硬件上运行测试套件,而无需维护永久的、始终在线的运行器。
系统架构
该集成由 huggingface/jobs-actions 驱动,这是一个桥梁,可将 GitHub Actions 作业转换为 HF Job 内的临时自托管运行器。工作流程如下:
- Trigger: 拉取请求触发 GitHub Actions 工作流。
- Queueing: GitHub 使用特定标签(例如
hf-jobs-cpu-upgrade或hf-jobs-t4-small)将作业排队,并向调度器发送workflow_job.queuedwebhook。 - Dispatching: 调度器 Space 验证 webhook,生成短暂的 GitHub 运行器注册令牌,并在指定硬件上启动 HF Job。
- Registration: HF Job 引导一个临时的 GitHub Actions 运行器,并使用一次性令牌将其注册。
- Execution: GitHub 将待处理的作业分配给运行器,运行器执行 CI 步骤,报告状态并退出。
实施步骤
1. 部署调度器 Space
用户首先必须复制 huggingface/jobs-actions-dispatcher Space。对于生产 CI,推荐使用 cpu-upgrade 硬件规格,以确保调度器对 webhook 保持可用,并避免与 cpu-basic 关联的休眠周期。
2. 配置 GitHub App
通过调度器 Space,用户在目标仓库上创建并安装 GitHub App。此 App 需要权限来监听排队的工作流作业并为临时运行器创建注册令牌。必须具有启动 Jobs 权限的 HF_TOKEN 作为密钥保存在调度器 Space 中。
3. 完成调度器设置
用户可以选择在 Space 中设置 HF_NAMESPACE 变量,以将作业计费到特定的 Hugging Face 用户或组织。
4. 更新工作流配置
要迁移作业,需要将 GitHub Actions YAML 文件中的 runs-on 标签从 ubuntu-latest 更改为受支持的 HF Jobs 标签,例如:
hf-jobs-cpu-upgrade用于 CPU 任务。hf-jobs-t4-small用于 GPU 任务。
性能结果
以 Trackio 项目为基准,Hugging Face 报告了相对于 GitHub ubuntu-latest 基线的以下性能改进:
| Runner Setup | Runtime | Comparison to GitHub Baseline |
|---|---|---|
GitHub ubuntu-latest |
1m 40s | 基线 |
| HF Jobs CPU (Playwright 镜像) | 1m 10s | ~30% 更快 (-30s) |
HF Jobs GPU (t4-small) |
45s | N/A (无 GitHub 托管的 GPU 基线) |
技术优化与功能
Docker 镜像选择
为了最大化效率,Hugging Face 建议使用专用的 Docker 镜像,而不是通用的 Ubuntu 镜像,以避免在每次运行时安装系统软件包。例如,Trackio 使用 mcr.microsoft.com/playwright:v1.60.0-jammy 进行 UI 测试,并使用 nvidia/cuda:12.4.0-runtime-ubuntu22.04 运行 GPU 作业。
日志管理
HF Jobs 提供了一种基于 CLI 的获取日志的方法(hf jobs logs <job_id>),这通常比 GitHub Web UI 更高效地处理大型日志。jobs-actions 桥梁将 GitHub Actions 日志镜像到 HF Job 日志中,以便进行全面调试。
卷挂载
HF Jobs 支持挂载卷,可用于在 CI 过程中快速加载来自 Hugging Face 的数据集或模型。