Förbereda data för finjustering av Hugging Face-modeller
Den här artikeln visar hur du förbereder dina data för finjustering öppen källkod stora språkmodeller med Hugging Face Transformers och Hugging Face Datasets.
Krav
- Databricks Runtime för Machine Learning 13.0 eller senare. Exemplen i den här guiden använder Hugging Face-datauppsättningar som ingår i Databricks Runtime 13.0 ML och senare.
Läsa in data från huggande ansikte
Hugging Face Datasets är ett Hugging Face-bibliotek för åtkomst till och delning av datauppsättningar för ljud-, visuellt innehåll och NLP-uppgifter (natural language processing). Med Hugging Face datasets
kan du läsa in data från olika platser. Biblioteket datasets
har verktyg för att läsa datauppsättningar från Hugging Face Hub. Det finns många datauppsättningar som kan laddas ned och läsas från Hugging Face Hub med hjälp load_dataset
av funktionen. Läs mer om att läsa in data med Hugging Face Datasets i dokumentationen om huggande ansikten.
from datasets import load_dataset
dataset = load_dataset("imdb")
Vissa datamängder i Hugging Face Hub innehåller de storlekar på data som laddas ned och genereras när load_dataset
anropas. Du kan använda load_dataset_builder
för att känna till storlekarna innan du laddar ned datauppsättningen med 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")
Mer information om hur du laddar ned och förbereder datauppsättningar på Azure Databricks finns i Avsnittet Hämta datamängder från Hugging Face best practices ( Hämta datamängder från Hugging Face Best Practices) för att få vägledning om hur du laddar ned och förbereder datamängder på Azure Databricks för olika storlekar på data.
Formatera dina tränings- och utvärderingsdata
Om du vill använda dina egna data för modelljustering måste du först formatera tränings- och utvärderingsdata i Spark DataFrames. Läs sedan in DataFrames med hjälp av biblioteket Hugging Face datasets
.
Börja med att formatera dina träningsdata i en tabell som uppfyller tränarnas förväntningar. För textklassificering är detta en tabell med två kolumner: en textkolumn och en kolumn med etiketter.
För att utföra finjustering måste du ange en modell. Biblioteket Hugging Face Transformer AutoClasses gör det enkelt att läsa in modeller och konfigurationsinställningar, inklusive ett brett utbud av för bearbetning av Auto Models
naturligt språk.
Till exempel tillhandahåller AutoModelForSequenceClassification
Hugging Face transformers
som modellinläsare för textklassificering, som förväntar sig heltals-ID:n som kategorietiketter. Men om du har en DataFrame med strängetiketter måste du också ange mappningar mellan heltalsetiketterna och strängetiketterna när du skapar modellen. Du kan samla in den här informationen på följande sätt:
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)}
Skapa sedan heltals-ID:n som en etikettkolumn med en Pandas UDF:
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)
Läsa in en Hugging Face-datauppsättning från en Spark DataFrame
Hugging Face datasets
stöder inläsning från Spark DataFrames med hjälp av datasets.Dataset.from_spark
. Mer information om metoden from_spark() finns i dokumentationen om Hugging Face.
Om du till exempel har train_df
och DataFrames kan du skapa datauppsättningar för var och test_df
en med följande kod:
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
cachelagrar datauppsättningen. I det här exemplet beskrivs modellträning på drivrutinen, så data måste göras tillgängliga för den. Eftersom cachematerialisering parallelliseras med Spark måste den tillhandahållna dessutom cache_dir
vara tillgänglig för alla arbetare. För att uppfylla dessa begränsningar cache_dir
bör vara en DBFS-rotvolym (Databricks File System) eller monteringspunkt.
DBFS-rotvolymen är tillgänglig för alla användare av arbetsytan och bör endast användas för data utan åtkomstbegränsningar. Om dina data kräver åtkomstkontroller använder du en monteringspunkt i stället för DBFS-rot.
Om datamängden är stor kan det ta lång tid att skriva den till DBFS. För att påskynda processen kan du använda parametern working_dir
för att låta Hugging Face datasets
skriva datauppsättningen till en tillfällig plats på disken och sedan flytta den till DBFS. Om du till exempel vill använda SSD som en tillfällig plats:
import datasets
dataset = datasets.Dataset.from_spark(
train_df,
cache_dir="/dbfs/cache/train",
working_dir="/local_disk0/tmp/train",
)
Cachelagring för datauppsättningar
Cachen är ett av sätten datasets
att förbättra effektiviteten. Den lagrar alla nedladdade och bearbetade datauppsättningar, så när användaren behöver använda mellanliggande datauppsättningar läses de in direkt från cachen.
Standardcachekatalogen för datauppsättningar är ~/.cache/huggingface/datasets
. När ett kluster avslutas går även cachedata förlorade. För att spara cachefilen vid klusteravslut rekommenderar Databricks att du ändrar cacheplatsen till DBFS genom att ange miljövariabeln HF_DATASETS_CACHE
:
import os
os.environ["HF_DATASETS_CACHE"] = "/dbfs/place/you/want/to/save"
Finjustera en modell
När dina data är klara kan du använda dem för att finjustera en Hugging Face-modell.
Notebook: Ladda ned datauppsättningar från Hugging Face
Den här exempelanteckningsboken innehåller rekommenderade metodtips för att använda funktionen Hugging Face load_dataset
för att ladda ned och förbereda datauppsättningar på Azure Databricks för olika datastorlekar.