Administrator
发布于 2026-06-10 / 19 阅读
0
0

HF Jobs 实战教程:像用 GitHub Actions 一样在云端跑 GPU 任务

如果 GitHub Actions 是代码世界的"自动化流水线",那 HF Jobs 就是 AI 工程师的"GPU 跑腿工"。


写在前面

做过 AI 项目的同学都知道一个痛点:训练和推理需要 GPU,但 GPU 不便宜,环境也不好配。

GitHub Actions 可以帮我们自动化 CI/CD 流程,但跑不了 GPU 任务。本地有显卡的,环境配置折腾半天;没显卡的,只能看着论文叹气。

Hugging Face 最近推出了 Jobs 功能——直接在 HF 基础设施上运行计算任务,按秒计费,支持从 CPU 到 A100、H200 全线硬件。用法跟 uv rundocker run 几乎一样,上手成本极低。

这篇文章,我会用 GitHub Actions 用户的视角来讲解 HF Jobs,帮你快速理解它的核心概念和用法。


一、HF Jobs 是什么?

简单说:一行命令,在云端跑你的 Python 脚本或 Docker 容器,支持 GPU。

# 本地跑 uv
uv run train.py

# HF Jobs 跑 uv —— 就多了 "hf jobs" 三个词
hf jobs uv run train.py
# 本地跑 docker
docker run ubuntu echo "Hello"

# HF Jobs 跑 docker —— 同样只多了 "hf jobs"
hf jobs run ubuntu echo "Hello from the cloud!"

对比 GitHub Actions:

维度 GitHub Actions HF Jobs
定位 代码构建、测试、部署流水线 AI 计算、模型训练、数据处理
GPU 支持 需自托管 Runner 原生支持 T4 到 H200
触发方式 push/PR/schedule/webhook 手动/schedule/webhook
定义方式 YAML 工作流文件 命令行一行搞定
计费 免费 2000 分钟/月(GitHub-hosted) 按分钟计费,CPU 低至 $0.01/h
运行环境 GitHub 虚拟机 HF 云基础设施

GitHub Actions 解决的是"代码自动化"问题,HF Jobs 解决的是"GPU 算力按需获取"问题。两者互补,不是替代。


二、快速上手:3 分钟跑起你的第一个 Job

2.1 安装 CLI

# 推荐方式
curl -LsSf https://hf.co/cli/install.sh | bash

# 或用 Homebrew
brew install huggingface-cli

# 或用 uv
uv tool install huggingface-cli

2.2 登录

hf auth login

需要一个有 Jobs 权限的 Token。PRO 账户、Team 或 Enterprise 订阅可用。

2.3 跑起来

# 最简单的 Python Job
hf jobs uv run python -c 'print("Hello from the cloud!")'

输出:

Job started with ID: 693aef401a39f67af5a41c0e
View at: https://huggingface.co/jobs/lhoestq/693aef401a39f67af5a41c0e
Hello from the cloud!

对比 GitHub Actions 的"Hello World":

GitHub Actions 需要你创建一个 .github/workflows/hello.yml

name: Hello
on: [push]
jobs:
  hello:
    runs-on: ubuntu-latest
    steps:
      - run: echo "Hello from GitHub Actions"

然后 push 到仓库才能触发。

HF Jobs 只需要一行命令,即时执行,无需仓库

# Docker Job 同样简单
hf jobs run ubuntu echo 'Hello from the cloud!'

2.4 跑一个本地脚本

echo "print('Hello from uv script!')" > script.py
hf jobs uv run script.py

输出:

Job started with ID: 695f6cd8d2f3efac77e8cf7f
View at: https://huggingface.co/jobs/lhoestq/695f6cd8d2f3efac77e8cf7f
Hello from uv script!

三、核心配置:从"能跑"到"好用"

3.1 GPU 支持——HF Jobs 的杀手锏

GitHub Actions 的 GitHub-hosted Runner 不提供 GPU。要用 GPU,得自建 Runner 并配好显卡——这对大多数开发者来说门槛很高。

HF Jobs 选择硬件只需要一个参数:

# 在 A10G GPU 上跑 PyTorch
hf jobs uv run --with torch --flavor a10g-small python -c \
  "import torch; print(f'This code ran with the following GPU: {torch.cuda.get_device_name()}')"

输出:

This code ran with the following GPU: NVIDIA A10G

就这么简单。一条命令,GPU 到手。

可用的硬件列表:

hf jobs hardware

输出:

NAME         PRETTY NAME            CPU      RAM     ACCELERATOR      COST/MIN COST/HOUR
------------ ---------------------- -------- ------- ---------------- -------- ---------
cpu-basic    CPU Basic              2 vCPU   16 GB   N/A              $0.0002  $0.01
cpu-upgrade  CPU Upgrade            8 vCPU   32 GB   N/A              $0.0005  $0.03
t4-small     Nvidia T4 - small      4 vCPU   15 GB   1x T4 (16 GB)    $0.0067  $0.40
t4-medium    Nvidia T4 - medium     8 vCPU   30 GB   1x T4 (16 GB)    $0.0100  $0.60
a10g-small   Nvidia A10G - small    4 vCPU   15 GB   1x A10G (24 GB)  $0.0167  $1.00
a10g-large   Nvidia A10G - large    12 vCPU  46 GB   1x A10G (24 GB)  $0.0250  $1.50
a100-large   Nvidia A100 - large    12 vCPU  142 GB  1x A100 (80 GB)  $0.0417  $2.50
a100x4       4x Nvidia A100         48 vCPU  568 GB  4x A100 (320 GB) $0.1667  $10.00
a100x8       8x Nvidia A100         96 vCPU  1136 GB 8x A100 (640 GB) $0.3333  $20.00
l4x1         1x Nvidia L4           8 vCPU   30 GB   1x L4 (24 GB)    $0.0133  $0.80
l40sx1       1x Nvidia L40S         8 vCPU   62 GB   1x L40S (48 GB)  $0.0300  $1.80
l40sx4       4x Nvidia L40S         48 vCPU  382 GB  4x L40S (192 GB) $0.1383  $8.30
l40sx8       8x Nvidia L40S         192 vCPU 1534 GB 8x L40S (384 GB) $0.3917  $23.50
h200         Nvidia H200            23 vCPU  256 GB  1x H200 (141 GB) $0.0833  $5.00
h200x2       2x Nvidia H200         46 vCPU  512 GB  2x H200 (282 GB) $0.1667  $10.00
h200x4       4x Nvidia H200         92 vCPU  1024 GB 4x H200 (564 GB) $0.3333  $20.00
h200x8       8x Nvidia H200         184 vCPU 2048 GB 8x H200 (1128GB) $0.6667  $40.00

从 $0.01/h 的 CPU Basic 到 $40/h 的 8 卡 H200,按需选择。

对比 GitHub Actions 自托管 Runner: 你得自己买卡、装驱动、配 CUDA、维护机器。HF Jobs 这些全省了。

3.2 环境变量与密钥

跟 GitHub Actions 的 envsecrets 概念一致:

GitHub Actions:

env:
  FOO: bar
jobs:
  build:
    steps:
      - name: Use secret
        env:
          MY_SECRET: ${{ secrets.MY_SECRET }}
        run: echo $MY_SECRET

HF Jobs:

# 环境变量
hf jobs uv run -e FOO=foo -e BAR=bar python -c \
  'import os; print(os.environ["FOO"], os.environ["BAR"])'

# 从 .env 文件加载
hf jobs uv run --env-file .env python -c \
  'import os; print(os.environ["FOO"], os.environ["BAR"])'

# 密钥(服务端加密存储)
hf jobs uv run -s MY_SECRET=psswrd python -c \
  'import os; print(os.environ["MY_SECRET"])'

# 从 .env.secrets 文件加载密钥
hf jobs uv run --secrets-file .env.secrets python -c \
  'import os; print(os.environ["MY_SECRET"])'

# 直接传入本地 HF Token
hf jobs uv run --secrets HF_TOKEN ...

3.3 Python 依赖管理

HF Jobs 的 UV 模式会自动处理依赖,类似 GitHub Actions 的 pip install 步骤,但更简洁:

# 指定依赖
hf jobs uv run --with trl train.py

# 指定 Python 版本
hf jobs uv run --python 3.12 train.py

# 复杂依赖 + 分隔符
hf jobs uv run --with trl-jobs -- trl-jobs sft \
  --model_name Qwen/Qwen3-0.6B \
  --dataset_name trl-lib/Capybara

对比 GitHub Actions: 你需要一个 step 来 pip install -r requirements.txt。HF Jobs 用 --with 一行搞定,不用维护 requirements 文件。

3.4 超时设置

默认 30 分钟超时。对于训练任务,必须手动设置:

# 数字形式(秒)
hf jobs uv run --timeout 7200 --with torch --flavor a10g-large train.py

# 时间单位形式
hf jobs uv run --timeout 2h --with torch --flavor a10g-large train.py

# 其他格式
--timeout 30m    # 30 分钟
--timeout 1.5h   # 1.5 小时
--timeout 1d     # 1 天
--timeout 3600s  # 3600 秒

对比 GitHub Actions: GHA 默认 6 小时超时,通过 timeout-minutes 设置。HF Jobs 默认 30 分钟,更短,需要显式延长。

3.5 组织账户与标签

# 在组织账户下运行
hf jobs uv run --namespace my-org-name python -c \
  "print('Running in an org account')"

# 带标签(方便后续筛选)
hf jobs uv run \
  --label fine-tuning \
  --label model=Qwen3-0.6B \
  --label dataset=Capybara \
  ...

标签类比 GitHub Actions 的 labels,用于分类和检索。


四、实战:用 HF Jobs 微调一个开源模型

这是一个完整的端到端例子——用 TRL 库微调 Qwen2.5-0.5B。

4.1 训练脚本

# train.py
from datasets import load_dataset
from trl import SFTTrainer

dataset = load_dataset("trl-lib/Capybara", split="train")
trainer = SFTTrainer(
    model="Qwen/Qwen2.5-0.5B",
    train_dataset=dataset,
)
trainer.train()
trainer.push_to_hub("Qwen2.5-0.5B-SFT")

4.2 提交训练 Job

hf jobs uv run \
    --flavor a100-large \
    --timeout 6h \
    --with trl \
    --secrets HF_TOKEN \
    train.py

一行命令完成:选择 A100 GPU → 最长跑 6 小时 → 自动装 trl → 传入 HF Token(用于推送模型)。

日志会实时流式输出到终端,Ctrl+C 只停止流式查看,Job 继续在云端运行:

...
Installed 66 packages in 233ms
Generating train set: 100%|██████████| 15806/15806
Generating test set: 100%|██████████| 200/200
{'loss': 1.7357, 'grad_norm': 4.8733, 'learning_rate': 1.997e-05, 'epoch': 0.01}
{'loss': 1.6239, 'grad_norm': 6.2002, 'learning_rate': 1.994e-05, 'epoch': 0.01}
{'loss': 1.4449, 'grad_norm': 6.1673, 'learning_rate': 1.990e-05, 'epoch': 0.02}
...

训练完成后,模型自动推送到你的 HF 账户下。

对比 GitHub Actions 做同样的事: 你需要写一个完整的 workflow YAML,配置 CUDA 环境、安装 PyTorch、处理 GPU 驱动问题……至少几十行配置。HF Jobs 一行命令搞定。


五、Job 管理

5.1 查看任务列表

# 运行中的任务
hf jobs ps

# 所有任务(含历史)
hf jobs ps -a

# 组织下的任务
hf jobs ps --namespace my-org-name

输出:

JOB ID       IMAGE/SPACE      COMMAND     CREATED             STATUS
------------ ---------------- ----------- ------------------- -------
69402ea6c... ghcr.io/astra... uv run p... 2025-12-15 15:52:06 RUNNING
693b06b8c... ghcr.io...      uv run p... 2025-12-11 18:00:24 CANCELED
693b069fc... ghcr.io...      uv run p... 2025-12-11 17:59:59 ERROR
693aef401... ghcr.io...      uv run p... 2025-12-11 16:20:16 COMPLETED

5.2 过滤任务

# 按标签过滤
hf jobs ps --filter label=fine-tuning --filter label=model=Qwen3-06B -a

# 按状态过滤
hf jobs ps --filter status=error -a

# 支持否定和通配符
hf jobs ps -a --filter status!=completed
hf jobs ps -a --filter "command=*train.py"
hf jobs ps -a --filter label=fine-tuning
hf jobs ps -a --filter label!=prod --filter "label=data-*"
hf jobs ps -a --filter label=model=Qwen3-06B --filter label=dataset!=Capybara

5.3 监控资源占用

hf jobs stats

输出:

JOB ID                   CPU % NUM CPU MEM % MEM USAGE        NET I/O         GPU UTIL % GPU MEM % GPU MEM USAGE
------------------------ ----- ------- ----- ---------------- --------------- ---------- --------- ---------------
695e83c5d2f3efac77e8cf18 8%    12.0    7.18% 10.9GB / 152.5GB 0.0bps / 0.0bps 100%       31.92%    25.9GB / 81.2GB

对比 GitHub Actions: GHA 只能看日志,没有实时资源监控。HF Jobs 能看到 CPU、内存、网络、GPU 利用率的实时数据。

5.4 查看详情和日志

# 查看任务详情(JSON 格式)
hf jobs inspect <job-id>

# 查看日志
hf jobs logs <job-id>

# 查看日志最后几行(调试错误)
hf jobs logs <job-id> | tail -n 10

5.5 取消任务

hf jobs cancel <job-id>

# 组织下的任务
hf jobs cancel --namespace my-org-name <job-id>

六、自动化:定时任务与 Webhook

6.1 定时任务(类似 GitHub Actions 的 schedule)

GitHub Actions 用 cron 语法定义定时任务:

on:
  schedule:
    - cron: '0 */6 * * *'  # 每 6 小时

HF Jobs 同样用 cron 语法,但直接在命令行指定:

# 每小时执行
hf jobs scheduled uv run @hourly python -c "print('This runs every hour!')"

# 每 5 分钟执行
hf jobs scheduled uv run "*/5 * * * *" python -c "print('This runs every five minutes!')"

# 带 GPU 的定时任务
hf jobs scheduled uv run --flavor a10g-small --with torch @hourly python -c \
  'import torch; print(f"This code ran with the following GPU: {torch.cuda.get_device_name()}")'

# Docker 镜像的定时任务
hf jobs scheduled run @hourly python:3.12 python -c "print('This runs every hour!')"

# 带标签的定时任务
hf jobs scheduled uv run --label fine-tuning @hourly my_script.py

支持的别名:@annually@yearly@monthly@weekly@daily@hourly

6.2 管理定时任务

# 查看活跃的定时任务
hf jobs scheduled ps

# 查看所有定时任务(含暂停的)
hf jobs scheduled ps -a

# 查看某个定时任务状态
hf jobs scheduled inspect <scheduled-job-id>

# 暂停
hf jobs scheduled suspend <scheduled-job-id>

# 恢复
hf jobs scheduled resume <scheduled-job-id>

# 删除
hf jobs scheduled delete <scheduled-job-id>

6.3 Webhook 自动触发(类似 GitHub Actions 的 repository_dispatch)

GitHub Actions 可以通过 repository_dispatchpush 事件触发 workflow。HF Jobs 通过 Webhook 监听仓库变化来触发 Job:

from huggingface_hub import create_webhook

webhook = create_webhook(
    job_id=job_id,
    watched=[
        {"type": "user", "name": "your-username"},
        {"type": "org", "name": "your-org-name"},
    ],
    domains=["repo", "discussion"],
    secret="your-secret"
)

Webhook 触发时,负载信息通过环境变量 WEBHOOK_PAYLOAD 传入 Job:

- event:
  - action: one of "create", "delete", "move", "update"
  - scope: string
- repo:
  - owner: string
  - headSha: string
  - name: string
  - type: one of "dataset", "model", "space"

典型场景: 模型仓库有新版本更新 → Webhook 触发 Job → 自动跑评测或重新部署。


七、计费与成本控制

7.1 定价一览

CPU:

硬件 CPU 内存 每小时价格
CPU Basic 2 vCPU 16 GB $0.01
CPU Upgrade 8 vCPU 32 GB $0.03
CPU XL 16 vCPU 124 GB $1.00
CPU Performance 32 vCPU 256 GB $1.90

GPU(精选):

硬件 GPU 显存 每小时价格
T4 - small 16 GB $0.40
A10G - small 24 GB $1.00
A10G - large 24 GB $1.50
A100 - large 80 GB $2.50
4x A100 320 GB $10.00
H200 141 GB $5.00
4x H200 564 GB $20.00

关键细节: 按分钟计费,只在 Starting 和 Running 阶段收费。构建阶段(build)不计费。Job 失败会自动暂停并停止计费。

7.2 省钱建议

# 1. 设置超时,防止跑飞
hf jobs uv run --timeout 2h --flavor a100-large train.py

# 2. 不需要的 Job 及时取消
hf jobs cancel <job-id>

# 3. 开发调试用 CPU,正式训练切 GPU
hf jobs uv run --flavor cpu-basic python -c "..."    # $0.01/h 调试
hf jobs uv run --flavor a100-large --timeout 6h train.py  # 正式训练

八、调试技巧

8.1 本地复现

Job 跑挂了?先本地复现:

# HF Jobs 命令 → 对应的本地命令
hf jobs uv run ...  →  uv run ...
hf jobs run ...     →  docker run ...

8.2 看日志尾部

hf jobs logs <job-id> | tail -n 10

8.3 常见错误

  • "Job timeout" → 默认 30 分钟不够,加 --timeout
  • Python 依赖缺失 → 用 --with package-name 指定
  • CUDA 相关错误 → 确认用了 --flavor 选了 GPU,并加 --with torch

九、HF Jobs vs GitHub Actions:什么时候用哪个?

场景 推荐工具 原因
代码构建、测试、Lint GitHub Actions 成熟的 CI/CD 生态,免费额度充足
模型训练、微调 HF Jobs 原生 GPU,一行命令,按需计费
模型评测自动化 HF Jobs 直接访问 HF 模型和数据集生态
数据处理管道 HF Jobs GPU 加速 + 灵活的 Python 环境
代码部署到 K8s/云 GitHub Actions 丰富的部署 Action 和集成
模型更新 → 自动推理 HF Jobs Webhook 原生监听 HF 仓库变化
定时数据采集 都行 简单任务两者皆可

最佳实践:组合使用。 GitHub Actions 负责 CI/CD 流水线,HF Jobs 负责 GPU 计算任务。比如:

GitHub Actions (push trigger)
  → 构建镜像、跑测试
  → 触发 HF Jobs (通过 API)
    → 在 A100 上跑模型训练
    → 训练完成推送模型到 HF Hub

十、总结

HF Jobs 填补了一个空白:让 GPU 算力的获取像跑一行命令一样简单。

如果你是 GitHub Actions 用户,可以把 HF Jobs 理解为:

  • 不需要写 YAML 的 Actions
  • 自带 GPU 的 Runner
  • 按秒计费 的云端计算

三个核心命令就能覆盖大部分场景:

hf jobs uv run ...          # 跑 Python(UV 模式)
hf jobs run ...             # 跑 Docker(Docker 模式)
hf jobs scheduled uv run ... # 定时跑

对于 AI 工程师来说,这意味着:不用买卡、不用配环境、不用维护服务器。把精力留给模型和数据,基础设施交给 HF Jobs。


参考资料:


评论