Benvenuti a fastai nell’Hugging Face Hub

'Benvenuti a fastai su Hugging Face Hub'

Rendere le reti neurali nuovamente non cool… e condividerle

Pochi hanno fatto tanto quanto l’ecosistema fast.ai per rendere accessibile il Deep Learning. La nostra missione in Hugging Face è democratizzare il buon Machine Learning. Rendiamo l’esclusività nell’accesso al Machine Learning, inclusi i modelli pre-addestrati, una cosa del passato e spingiamo ancora più in là questo incredibile campo.

fastai è una libreria open-source di Deep Learning che sfrutta PyTorch e Python per fornire componenti di alto livello per addestrare reti neurali veloci e accurate con output all’avanguardia su testo, visione e dati tabulari. Tuttavia, fast.ai, l’azienda, è più di una semplice libreria; è diventata un’ecosistema fiorente di contributori open source e persone che imparano sulle reti neurali. Come alcuni esempi, date un’occhiata al loro libro e corsi. Unisciti al Discord e ai forum di fast.ai. È garantito che imparerai facendo parte della loro comunità!

A causa di tutto questo e altro ancora (lo scrittore di questo post ha iniziato il suo viaggio grazie al corso fast.ai), siamo orgogliosi di annunciare che i praticanti di fastai possono ora condividere e caricare modelli su Hugging Face Hub con una singola riga di Python.

👉 In questo post, presenteremo l’integrazione tra fastai e il Hub. Inoltre, puoi aprire questo tutorial come un notebook Colab.

Vogliamo ringraziare la comunità di fast.ai, in particolare Jeremy Howard, Wayde Gilliam e Zach Mueller per il loro feedback 🤗. Questo blog è fortemente ispirato alla sezione Hugging Face Hub nella documentazione di fastai.

Perché condividere sul Hub?

Il Hub è una piattaforma centrale dove chiunque può condividere ed esplorare modelli, dataset e demo di ML. Ha la più ampia collezione di modelli, dataset e demo Open Source.

La condivisione sul Hub amplifica l’impatto dei tuoi modelli fastai rendendoli disponibili per il download e l’esplorazione da parte degli altri. Puoi anche utilizzare il trasferimento di apprendimento con i modelli fastai; carica il modello di qualcun altro come base per il tuo compito.

Chiunque può accedere a tutti i modelli fastai sul Hub filtrando la pagina web hf.co/models con la libreria fastai, come nell’immagine sottostante.

Oltre all’hosting gratuito dei modelli e all’esposizione alla comunità più ampia, il Hub dispone di un controllo delle versioni integrato basato su git (git-lfs, per file di grandi dimensioni) e di schede di modelli per la scoperta e la riproducibilità. Per ulteriori informazioni sulla navigazione nel Hub, consulta questa introduzione.

Unirsi a Hugging Face e installazione

Per condividere modelli sul Hub, avrai bisogno di un utente. Crealo sul sito di Hugging Face.

La libreria huggingface_hub è un client leggero in Python con funzioni di utilità per interagire con il Hub di Hugging Face. Per caricare modelli fastai sul hub, è necessario avere alcune librerie pre-installate (fastai>=2.4, fastcore>=1.3.27 e toml). Puoi installarle automaticamente specificando [“fastai”] durante l’installazione di huggingface_hub, e il tuo ambiente sarà pronto:

pip install huggingface_hub["fastai"]

Creazione di un Learner fastai

Qui addestriamo il primo modello nel fastbook per identificare i gatti 🐱. Consigliamo vivamente di leggere l’intero fastbook.

# Addestramento di 6 righe nel capitolo 1 del fastbook.
from fastai.vision.all import *
path = untar_data(URLs.PETS)/'images'

def is_cat(x): return x[0].isupper()
dls = ImageDataLoaders.from_name_func(
    path, get_image_files(path), valid_pct=0.2, seed=42,
    label_func=is_cat, item_tfms=Resize(224))

learn = vision_learner(dls, resnet34, metrics=error_rate)
learn.fine_tune(1)

Condivisione di un Learner sul Hub

Un Learner è un oggetto fastai che raggruppa un modello, data loader e una funzione di perdita. Utilizzeremo i termini Learner e Modello in modo intercambiabile in tutto questo post.

Prima di tutto, accedi a Hugging Face Hub. Dovrai creare un token di scrittura nelle impostazioni del tuo account. Poi ci sono tre opzioni per accedere:

  1. Digita huggingface-cli login nel tuo terminale e inserisci il tuo token.

  2. Se sei in un notebook Python, puoi usare notebook_login.

from huggingface_hub import notebook_login

notebook_login()
  1. Usa l’argomento token della funzione push_to_hub_fastai.

Puoi inserire push_to_hub_fastai con il Learner che desideri caricare e l’id del repository per il Hub nel formato “namespace/nome_repo”. Il namespace può essere un account individuale o un’organizzazione a cui hai accesso in scrittura (ad esempio, ‘fastai/stanza-de’). Per ulteriori dettagli, consulta la documentazione del client Hub.

from huggingface_hub import push_to_hub_fastai

# repo_id = "TUO_NOME_UTENTE/NOME_APPRENDISTA"
repo_id = "espejelomar/identify-my-cat"

push_to_hub_fastai(learner=learn, repo_id=repo_id)

Il Learner è ora nel Hub nel repository chiamato espejelomar/identify-my-cat. Viene creato automaticamente una scheda modello con alcuni collegamenti e passaggi successivi. Quando si carica un Learner fastai (o qualsiasi altro modello) sul Hub, è utile modificare la sua scheda modello (immagine sotto) in modo che gli altri possano comprendere meglio il tuo lavoro (fare riferimento alla documentazione di Hugging Face).

Se vuoi saperne di più su push_to_hub_fastai, vai alla documentazione del client Hub. Ci sono alcuni argomenti interessanti a cui potresti essere interessato 👀. Ricorda, il tuo modello è un repository Git con tutti i vantaggi che questo comporta: controllo delle versioni, commit, branch…

Caricamento di un Learner da Hugging Face Hub

Caricare un modello dal Hub è ancora più semplice. Caricheremo il nostro Learner, “espejelomar/identify-my-cat”, e lo testeremo con un’immagine di un gatto (🦮?). Questo codice è adattato dal primo capitolo del libro di fastbook.

Per prima cosa, carica un’immagine di un gatto (o forse un cane?). Il notebook di Colab con questo tutorial utilizza ipywidgets per caricare interattivamente un’immagine di un gatto (o no?). Qui useremo questo simpatico gatto 🐅:

Ora carichiamo il Learner che abbiamo appena condiviso nel Hub e testiamolo.

from huggingface_hub import from_pretrained_fastai

# repo_id = "TUO_NOME_UTENTE/NOME_APPRENDISTA"
repo_id = "espejelomar/identify-my-cat"

learner = from_pretrained_fastai(repo_id)

Funziona 👇!

_,_,probs = learner.predict(img)
print(f"Probabilità che sia un gatto: {100*probs[1].item():.2f}%")

Probabilità che sia un gatto: 100.00%

La documentazione del client Hub include ulteriori dettagli su from_pretrained_fastai.

Blurr per unire fastai e Hugging Face Transformers (e condividerli)!

[Blurr è] una libreria progettata per gli sviluppatori fastai che vogliono addestrare e distribuire trasformatori Hugging Face – Documentazione Blurr.

Faremo:

  1. Allenare un Learner blurr con l’API Blurr ad alto livello. Caricherà il modello distilbert-base-uncased dal Hub di Hugging Face e preparerà un modello di classificazione di sequenze.
  2. Condividerlo sul Hub con il namespace fastai/blurr_IMDB_distilbert_classification utilizzando push_to_hub_fastai.
  3. Caricarlo con from_pretrained_fastai e provarlo con learner_blurr.predict().

La collaborazione e il software open-source sono fantastici!

Prima, installa blurr e addestra il Learner.

git clone https://github.com/ohmeow/blurr.git
cd blurr
pip install -e ".[dev]"

import torch
import transformers
from fastai.text.all import *

from blurr.text.data.all import *
from blurr.text.modeling.all import *

path = untar_data(URLs.IMDB_SAMPLE)
model_path = Path("models")
imdb_df = pd.read_csv(path / "texts.csv")

learn_blurr = BlearnerForSequenceClassification.from_data(imdb_df, "distilbert-base-uncased", dl_kwargs={"bs": 4})
learn_blurr.fit_one_cycle(1, lr_max=1e-3)

Usa push_to_hub_fastai per condividere con Hub.

from huggingface_hub import push_to_hub_fastai

# repo_id = "YOUR_USERNAME/YOUR_LEARNER_NAME"
repo_id = "fastai/blurr_IMDB_distilbert_classification"

push_to_hub_fastai(learn_blurr, repo_id)

Usa from_pretrained_fastai per caricare un modello blurr da Hub.

from huggingface_hub import from_pretrained_fastai

# repo_id = "YOUR_USERNAME/YOUR_LEARNER_NAME"
repo_id = "fastai/blurr_IMDB_distilbert_classification"

learner_blurr = from_pretrained_fastai(repo_id)

Provalo con un paio di frasi e valuta il loro sentimento (negativo o positivo) con learner_blurr.predict().

sentences = ["Questa integrazione è fantastica!",
             "Odio che non fosse disponibile prima."]

probs = learner_blurr.predict(sentences)

print(f"La probabilità che la frase '{sentences[0]}' sia negativa è: {100*probs[0]['probs'][0]:.2f}%")
print(f"La probabilità che la frase '{sentences[1]}' sia negativa è: {100*probs[1]['probs'][0]:.2f}%")

Di nuovo, funziona!

La probabilità che la frase 'Questa integrazione è fantastica!' sia negativa è: 29.46%
La probabilità che la frase 'Odio che non fosse disponibile prima.' sia negativa è: 70.04%

Qual è il prossimo passo?

Fai il corso di fast.ai (una nuova versione è in arrivo), segui Jeremy Howard e fast.ai su Twitter per gli aggiornamenti, e inizia a condividere i tuoi modelli fastai su Hub 🤗. Oppure carica uno dei modelli già presenti su Hub.

📧 Sentiti libero di contattarci tramite il Discord di Hugging Face e condividi se hai un’idea per un progetto. Saremmo felici di sentire i tuoi feedback 💖.

Vuoi integrare la tua libreria su Hub?

Questa integrazione è resa possibile dalla libreria huggingface_hub. Se vuoi aggiungere la tua libreria su Hub, abbiamo una guida per te! Oppure semplicemente menziona qualcuno del team di Hugging Face.

Un ringraziamento al team di Hugging Face per tutto il lavoro su questa integrazione, in particolare a @osanseviero 🦙.

Grazie agli apprendisti veloci e agli apprendisti di Hugging 🤗.