將 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-smallh200 GPU)以及可選的環境變數和密鑰來定義。

對於機器學習庫而言,這特別有利,因為它允許在實際的 CUDA 硬體上執行測試套件,而無需維持永久且始終在線的運行器。

系統架構

此整合由 huggingface/jobs-actions 提供動力,這是一個橋接器,可將 GitHub Actions 工作轉換為 HF Job 內的臨時自託管運行器。工作流程運作方式如下:

  1. 觸發:拉取請求觸發 GitHub Actions 工作流程。
  2. 排隊:GitHub 會對帶有特定標籤(例如 hf-jobs-cpu-upgradehf-jobs-t4-small)的工作進行排隊,並將 workflow_job.queued webhook 發送給調度器。
  3. 調度:調度器 Space 驗證 webhook,生成短暫的 GitHub 執行器註冊令牌,並在指定的硬體上啟動一個 HF Job。
  4. 註冊:HF Job 會啟動一個臨時的 GitHub Actions 執行器,並使用一次性令牌進行註冊。
  5. 執行: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 的資料集或模型。

Sources