Share via


Preparare i dati per ottimizzare i modelli viso hugging

Questo articolo illustra come preparare i dati per ottimizzare i modelli linguistici open source di grandi dimensioni con Hugging Face Transformers e Hugging Face Datasets.

Requisiti

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 viso hugging. Esistono molti set di dati scaricabili e leggibili dall'hub viso hugging usando la load_dataset funzione . Altre informazioni sul caricamento dei dati con i set di dati hugging viso sono disponibili nella documentazione di Hugging Face.

from datasets import load_dataset
dataset = load_dataset("imdb")

Alcuni set di dati nell'hub viso hugging forniscono le dimensioni dei dati scaricati e generati quando load_dataset viene chiamato. È possibile usare load_dataset_builder per conoscere le dimensioni prima di scaricare il set di dati con 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 indicazioni 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 Viso.

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_CACHEdi 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.

Scaricare set di dati dal notebook delle procedure consigliate per Hugging Face

Ottenere il notebook