GitHub CI を Hugging Face Jobs に移行する

GitHub CI を Hugging Face Jobs に移行する

Hugging Face は、GitHub Continuous Integration (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 など)、およびオプションの環境変数とシークレットによって定義されます。

ML ライブラリにとって、これは特に有利です。なぜなら、常にオンのランナーを維持する必要なく、実際の CUDA ハードウェアでテストスイートを実行できるからです。

システムアーキテクチャ

この統合は、huggingface/jobs-actions によって駆動されます。これは、HF Job 内の一時的なセルフホストランナーに GitHub Actions ジョブを変換するブリッジです。ワークフローは次のように動作します:

  1. Trigger: プルリクエストが GitHub Actions ワークフローをトリガーします。
  2. Queueing: GitHub は、特定のラベル(例: hf-jobs-cpu-upgrade または hf-jobs-t4-small)を持つジョブをキューに入れ、workflow_job.queued ウェブフックをディスパッチャーに送信します。
  3. Dispatching: ディスパッチャー Space がウェブフックを検証し、短期間有効な GitHub ランナー登録トークンを生成し、指定されたハードウェアで HF Job を起動します。
  4. Registration: HF Job が一時的な GitHub Actions ランナーをブートし、ワンショットトークンを使用して登録します。
  5. Execution: GitHub は保留中のジョブをランナーに割り当て、ランナーは CI ステップを実行し、ステータスを報告して終了します。

実装手順

1. Deploy the Dispatcher Space

ユーザーはまず、huggingface/jobs-actions-dispatcher Space を複製する必要があります。本番環境の CI では、cpu-upgrade ハードウェアフレーバーを使用することをお勧めします。これにより、ディスパッチャーがウェブフックに対して常に利用可能となり、cpu-basic に関連するスリープサイクルを回避できます。

2. Configure the GitHub App

ディスパッチャー Space を通じて、ユーザーはターゲットリポジトリに GitHub App を作成およびインストールします。この App は、キューイングされたワークフロージョブをリッスンし、一時的なランナーの登録トークンを作成する権限が必要です。Jobs を起動する権限を持つ HF_TOKEN は、ディスパッチャー Space のシークレットとして保存する必要があります。

3. Finalize Dispatcher Settings

ユーザーはオプションで、Space に HF_NAMESPACE 変数を設定し、特定の Hugging Face ユーザーまたは組織にジョブの請求先を設定できます。

4. Update Workflow Configuration

ジョブを移行するには、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 は、毎回システムパッケージをインストールするのを避けるために、汎用的な Ubuntu イメージではなく専用の Docker イメージの使用を推奨します。たとえば、Trackio は UI テストに mcr.microsoft.com/playwright:v1.60.0-jammy を、GPU ジョブに nvidia/cuda:12.4.0-runtime-ubuntu22.04 を使用しました。

ログ管理

HF Jobs は、ログを取得する CLI ベースの方法 (hf jobs logs <job_id>) を提供します。これは、大きなログに対して GitHub ウェブ UI よりも効率的であることがよくあります。jobs-actions ブリッジは、包括的なデバッグのために GitHub Actions ログを HF Job ログにミラーリングします。

ボリュームマウント

HF Jobs はボリュームのマウントをサポートしており、これを使用すると CI プロセスの一部として Hugging Face からデータセットまたはモデルを高速に読み込むことができます。

Sources