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로 구동되며, 이는 GitHub Actions 작업을 HF Job 내의 일시적인 자체 호스팅 러너로 변환하는 브리지입니다. 워크플로는 다음과 같이 작동합니다:
- Trigger: 풀 리퀘스트가 GitHub Actions 워크플로를 트리거합니다.
- Queueing: GitHub은 특정 레이블(예:
hf-jobs-cpu-upgrade또는hf-jobs-t4-small)이 붙은 작업을 큐에 넣고 디스패처에workflow_job.queued웹훅을 보냅니다. - Dispatching: 디스패처 Space가 웹훅을 검증하고, 짧은 수명의 GitHub 러너 등록 토큰을 생성한 후, 지정된 하드웨어에서 HF Job을 시작합니다.
- Registration: HF Job이 일시적인 GitHub Actions 러너를 부팅하고 원샷 토큰을 사용하여 등록합니다.
- Execution: GitHub은 보류 중인 작업을 러너에 할당하고, 러너가 CI 단계를 실행하고 상태를 보고한 후 종료합니다.
구현 단계
1. 디스패처 Space 배포
사용자는 먼저 huggingface/jobs-actions-dispatcher Space를 복제해야 합니다. 프로덕션 CI의 경우, 디스패처가 웹훅에 대해 항상 이용 가능하도록 하고 cpu-basic과 관련된 슬립 주기를 피하기 위해 cpu-upgrade 하드웨어 플레버를 사용하는 것이 권장됩니다.
2. GitHub App 구성
디스패처 Space를 통해 사용자는 대상 저장소에 GitHub App을 생성하고 설치합니다. 이 App은 큐에 들어간 워크플로 작업을 듣고 일시적인 러너용 등록 토큰을 생성할 권한이 필요합니다. Jobs를 lancement할 수 있는 권한이 있는 HF_TOKEN은 디스패처 Space의 시크릿으로 저장해야 합니다.
3. 디스패처 설정 마무리
사용자는 선택적으로 Space에서 HF_NAMESPACE 변수를 설정하여 특정 Hugging Face 사용자 또는 조직에 Job 비용을 청구할 수 있습니다.
4. 워크플로 구성 업데이트
작업을 마이그레이션하려면 GitHub Actions YAML 파일의 runs-on 레이블을 ubuntu-latest에서 지원되는 HF Jobs 레이블로 변경하면 됩니다. 예를 들어:
hf-jobs-cpu-upgrade: CPU 작업용hf-jobs-t4-small: GPU 작업용
성능 결과
| 러너 설정 | 실행 시간 | GitHub 기준과의 비교 |
|---|---|---|
GitHub ubuntu-latest |
1m 40s | 기준 |
| HF Jobs CPU (Playwright 이미지) | 1m 10s | 약 30% 더 빠름 (-30초) |
HF Jobs GPU (t4-small) |
45s | 해당 사항 없음 (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에서 데이터셋이나 모델을 빠르게 로드할 수 있습니다.