將 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 內的臨時自託管運行器。工作流程運作方式如下:
- 觸發:拉取請求觸發 GitHub Actions 工作流程。
- 排隊:GitHub 會對帶有特定標籤(例如
hf-jobs-cpu-upgrade或hf-jobs-t4-small)的工作進行排隊,並將workflow_job.queuedwebhook 發送給調度器。 - 調度:調度器 Space 驗證 webhook,生成短暫的 GitHub 執行器註冊令牌,並在指定的硬體上啟動一個 HF Job。
- 註冊:HF Job 會啟動一個臨時的 GitHub Actions 執行器,並使用一次性令牌進行註冊。
- 執行:GitHub 將待處理的工作分配給執行器,執行器執行 CI 步驟,回報狀態並退出。
實施步驟
1. 部署調度器 Space
使用者必須首先複製 huggingface/jobs-actions-dispatcher Space。對於生產環境的 CI,建議使用 cpu-upgrade 硬體類型,以確保調度器對 webhook 保持可用,並避免與 cpu-basic 相關的休眠週期。
2. 配置 GitHub App
透過調度器 Space,使用者在目標儲存庫上建立並安裝 GitHub App。此 App 需要權限來監聽排隊的工作流程工作並為臨時運行器建立註冊令牌。必須將具備啟動 Job 權限的 HF_TOKEN 作為密鑰保存在調度器 Space 中。
3. 最終確定調度器設置
使用者可選擇在 Space 中設定 HF_NAMESPACE 變數,以將 Job 的費用計入特定的 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 基線的以下效能提升:
| 運行器設置 | 執行時間 | 與 GitHub 基線的比較 |
|---|---|---|
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 網頁介面更高效。jobs-actions 橋接器會將 GitHub Actions 日誌鏡像到 HF Job 日誌中,以進行全面的除錯。
掛載卷
HF Jobs 支援掛載卷,這可用於在 CI 過程中快速載入來自 Hugging Face 的資料集或模型。