Impostare i dati per ottimizzare i modelli Hugging Face
Questo articolo illustra come impostare i dati per ottimizzare i modelli linguistici open source di grandi dimensioni con Hugging Face Transformers e Hugging Face Datasets.
Requisiti
- Databricks Runtime per Machine Learning 13.0 o versioni successive. Gli esempi in questa guida usano set di dati Hugging Face inclusi in Databricks Runtime 13.0 ML e versioni successive.
Caricare dati da Hugging Face
Hugging Face Datasets è una libreria Hugging Face per l’accesso e la condivisione di set di dati per attività audio, visione artificiale e elaborazione del linguaggio naturale (NLP). Con Hugging Face datasets
è possibile caricare dati da diverse posizioni. La datasets
libreria include utilità per la lettura dei set di dati dall’hub Hugging Face. Esistono molti set di dati scaricabili e leggibili all’hub Hugging Face usando la load_dataset
funzione . Altre informazioni sul caricamento dei dati con i set di dati Hugging Face sono disponibili nella documentazione di Hugging Face.
from datasets import load_dataset
dataset = load_dataset("imdb")
Alcuni set di dati nell’hub Hugging Face forniscono le dimensioni dei dati scaricati e generati quando load_dataset
viene chiamato. È possibile utilizzarlo load_dataset_builder
per conoscere le dimensioni prima di scaricare il set di dati load_dataset
.
from datasets import load_dataset_builder
from psutil._common import bytes2human
def print_dataset_size_if_provided(*args, **kwargs):
dataset_builder = load_dataset_builder(*args, **kwargs)
if dataset_builder.info.download_size and dataset_builder.info.dataset_size:
print(f'download_size={bytes2human(dataset_builder.info.download_size)}, dataset_size={bytes2human(dataset_builder.info.dataset_size)}')
else:
print('Dataset size is not provided by uploader')
print_dataset_size_if_provided("imdb")
Per un tutorial su come scaricare e preparare i set di dati in Azure Databricks per dimensioni diverse dei dati, vedere il notebook Scaricare set di dati da Hugging Face.
Formattare i dati di training e valutazione
Per usare i dati personalizzati per l’ottimizzazione del modello, è prima necessario formattare i dati di training e valutazione in dataframe Spark. Caricare quindi i dataframe usando la libreria Hugging Face datasets
.
Per iniziare, formattare i dati di training in una tabella che soddisfa le aspettative del formatore. Per la classificazione del testo, si tratta di una tabella con due colonne: una colonna di testo e una colonna di etichette.
Per eseguire l’ottimizzazione, è necessario fornire un modello. La libreria Hugging Face Transformer AutoClasses semplifica il caricamento di modelli e impostazioni di configurazione, inclusa un’ampia gamma di Auto Models
per l’elaborazione del linguaggio naturale.
Ad esempio, Hugging Face transformers
fornisce AutoModelForSequenceClassification
come caricatore di modelli per la classificazione del testo, che prevede ID integer come etichette di categoria. Tuttavia, se si dispone di un dataframe con etichette di stringa, è necessario specificare anche i mapping tra le etichette integer e le etichette di stringa durante la creazione del modello. È possibile raccogliere queste informazioni nel modo seguente:
labels = df.select(df.label).groupBy(df.label).count().collect()
id2label = {index: row.label for (index, row) in enumerate(labels)}
label2id = {row.label: index for (index, row) in enumerate(labels)}
Creare quindi gli ID integer come colonna etichetta con una funzione definita dall’utente Pandas:
from pyspark.sql.functions import pandas_udf
import pandas as pd
@pandas_udf('integer')
def replace_labels_with_ids(labels: pd.Series) -> pd.Series:
return labels.apply(lambda x: label2id[x])
df_id_labels = df.select(replace_labels_with_ids(df.label).alias('label'), df.text)
Caricare un set di dati Hugging Face da un dataframe Spark
Hugging Face datasets
supporta il caricamento da frame di dati Spark tramite datasets.Dataset.from_spark
. Per altre informazioni sul metodo from_spark().
Ad esempio, se si dispone train_df
di dataframe e test_df
, è possibile creare set di dati per ognuno con il codice seguente:
import datasets
train_dataset = datasets.Dataset.from_spark(train_df, cache_dir="/dbfs/cache/train")
test_dataset = datasets.Dataset.from_spark(test_df, cache_dir="/dbfs/cache/test")
Dataset.from_spark
memorizza nella cache il set di dati. Questo esempio descrive il training del modello sul driver, pertanto i dati devono essere resi disponibili. Inoltre, poiché la materializzazione della cache viene parallelizzata tramite Spark, l’oggetto fornito cache_dir
deve essere accessibile a tutti i ruoli di lavoro. Per soddisfare questi vincoli, cache_dir
deve essere un volume radice di Databricks File System (DBFS) o un punto di montaggio.
Il volume radice DBFS è accessibile a tutti gli utenti dell’area di lavoro e deve essere usato solo per i dati senza restrizioni di accesso. Se i dati richiedono controlli di accesso, usare un punto di montaggio anziché una radice DBFS.
Se il set di dati è di grandi dimensioni, la scrittura in DBFS può richiedere molto tempo. Per velocizzare il processo, è possibile usare il working_dir
parametro per fare in modo che Hugging Face datasets
scriva il set di dati in un percorso temporaneo su disco, quindi spostarlo in DBFS. Ad esempio, per usare l’unità SSD come posizione temporanea:
import datasets
dataset = datasets.Dataset.from_spark(
train_df,
cache_dir="/dbfs/cache/train",
working_dir="/local_disk0/tmp/train",
)
Memorizzazione nella cache per i set di dati
La cache è uno dei modi per datasets
migliorare l'efficienza. Archivia tutti i set di dati scaricati ed elaborati in modo che quando l'utente deve usare i set di dati intermedi, vengono ricaricati direttamente dalla cache.
La directory cache predefinita dei set di dati è ~/.cache/huggingface/datasets
. Quando un cluster viene terminato, anche i dati della cache vengono persi. Per rendere persistente il file della cache nella terminazione del cluster, Databricks consiglia di modificare il percorso della cache in DBFS impostando la variabile HF_DATASETS_CACHE
di ambiente :
import os
os.environ["HF_DATASETS_CACHE"] = "/dbfs/place/you/want/to/save"
Ottimizzare un modello
Quando i dati sono pronti, è possibile usarli per ottimizzare un modello Hugging Face.
Notebook: scaricare set di dati da Hugging Face
Questo notebook di esempio fornisce le procedure consigliate per l’uso della funzione Hugging Face load_dataset
per scaricare e preparare i set di dati in Azure Databricks per dimensioni diverse dei dati.