Gli utenti di GitHub probabilmente utilizzano GitHub-hosted runners per attività come CI. Questi server di GitHub sono comodi, ma spesso limitati. Hugging Face Jobs permette di lanciare comandi su macchine molto diverse, rendendo un buon scelta per CI.
Come Hugging Face Jobs ha migliorato la CI di Trackio
Per Trackio, Hugging Face Jobs ha migliorato la CI. Le attività CPU hanno perso solo il 30% del tempo e quelle GPU sono completamente nuove. L'accesso alle GPU è utile per test di libreria di machine learning. Gli utenti vogliono non solo test unitari e frontend su CPU, ma anche test che richiedono reali hardware CUDA su GPU.
Il risultato per Trackio è che ora la CI funziona su Hugging Face Jobs e ha log in tempo reale. Il passo cruciale è collegare GitHub Actions a Hugging Face Jobs, che spieghiamo qui.
Iniziamo con un'introduzione veloce a Hugging Face Jobs
Hugging Face Jobs permette di far girare script o comandi sull'infrastruttura serverless di Hugging Face, praticamente su qualsiasi hardware. Un Job è essenzialmente:
- Una macchina pulita
- Un ambiente esatto
- Un'infrastruttura flessibile
I Jobs sono adatti per CI, ma il passo chiave è un bridge tra GitHub Actions e Hugging Face Jobs.
Creare un bridge: huggingface/jobs-actions
L'autore di Trackio ha creato un piccolo bridge chiamato huggingface/jobs-actions che trasforma un lavoro GitHub Actions in self-hosted runner dentro un Job Hugging Face.
Dai la caccia al dispatcher, che riceve eventi GitHub e lancia Jobs Hugging Face. Vai su huggingface/jobs-actions-dispatcher e clicca 'Duplicate this Space'.
Usare cpu-upgrade invece di cpu-basic per mantenere il dispatcher attivo. Dopo aver creato lo spazio, vai alla sua homepage e prendi l'URL del webhook necessario per il GitHub App in un successivo step.
Creare e installare il GitHub App
Crea il GitHub App dallo spazio del dispenser. L'app ha bisogno di autorizzazioni per ricevere worklow job e creare token run di auto-hosted runners.
Nel modulo di configurazione, inserisci il repo GitHub dove il CI dovrebbe essere eseguito via Jobs. Dai un nome all'app. Questo può essere qualsiasi nome disponibile.
Scarica le credenziali dell'app con il comando hfCLI, come istruito sullo spazio.
Installa l’applicazione GitHub sul repo specificato. Trackio ha installato l'app su gradio-app/trackio.
Configurare l'app GitHub App
Ora che le credenziali dell’app sono state uploadate nel dispenser, è il momento di configurare le variabili d'ambiente. Includi la variabile HF_TOKEN, che ha bisogno dei permessi di lancio degli Jobs.
Questo token deve appartenere alla stessa area da cui viene creato il Job. Oltre a HFTOKEN, è possibile creare una variabile detta HFNAMESPACE, che potrebbe cambiare il billing degli Jobs a un diverso utente o organisazione Hugging Face.
Combinare Jobs e GitHub
Solo una riga di codice aggiunta a GitHub Actions necessita per passare a Jobs. Per esempio, i test UI di Trackio richiedevano Playwright, Node, ffmpeg, sqlite, git e dipendenze Linux.
Hugging Face Jobs consente di usare qualsiasi immagine Docker, quindi i test UI furono completati con una immagine Playwright di Microsoft.
Benefici della GPU
La maggiore vittoria fu la parte con GPU. I test di Trackio su Jobs passarono in 45s e costarono meno di un centesimo a un tasso t4-small.
Una buona configurazione con immagini può rendere i Jobs più veloci delle macchine di GitHub. Questo suggerisce che Jobs può essere una soluzione pratica per i progetti ML che hanno bisogno di immagini personalizzate o acceleratori.
Log e strumenti
I log sono utili per entrambi i sistemi, ma sono gestibili da CLI da Hugging Face Jobs. Questo li rende facili da controllare insieme agli strumenti locali o agenti di codice.
Trackio ha inoltre replicato i log GitHub Action a quelli Job, permettendo un debug efficiente.
Supporto esteso alle volumi
Per gli utenti avanzati, Hugging Face Jobs permette di montare volumi. Questo è utile per caricare datasets o modelli Hugging Face facilmente durante la CI.
Per concludere, l'autore invita gli sviluppatori ad avvicinarsi a Hugging Face Jobs se cercano di otimizzare la CI. Soprattutto quando si ha bisogno di hardware specifico e risposta rapida.