Gegevens voorbereiden voor het afstemmen van Hugging Face-modellen
In dit artikel wordt beschreven hoe u uw gegevens voorbereidt op het verfijnen van open source grote taalmodellen met Hugging Face Transformers en Hugging Face Datasets.
Vereisten
- Databricks Runtime voor Machine Learning 13.0 of hoger. In de voorbeelden in deze handleiding worden Hugging Face-gegevenssets gebruikt die zijn opgenomen in Databricks Runtime 13.0 ML en hoger.
Gegevens laden vanuit knuffelend gezicht
Hugging Face Datasets is een Hugging Face-bibliotheek voor het openen en delen van gegevenssets voor audio-, computer vision- en NLP-taken (Natural Language Processing). Met Hugging Face datasets
kunt u gegevens laden vanaf verschillende plaatsen. De datasets
bibliotheek bevat hulpprogramma's voor het lezen van gegevenssets uit de Hugging Face Hub. Er zijn veel gegevenssets die kunnen worden gedownload en leesbaar vanuit de Hugging Face Hub met behulp van de load_dataset
functie. Meer informatie over het laden van gegevens met Hugging Face Datasets vindt u in de documentatie over Hugging Face.
from datasets import load_dataset
dataset = load_dataset("imdb")
Sommige gegevenssets in de Hugging Face Hub bieden de grootten van gegevens die worden gedownload en gegenereerd wanneer load_dataset
ze worden aangeroepen. U kunt de load_dataset_builder
grootten kennen voordat u de gegevensset downloadt met 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")
Zie het notebook Best practices voor het downloaden van gegevenssets van Hugging Face voor hulp bij het downloaden en voorbereiden van gegevenssets in Azure Databricks voor verschillende grootten van gegevens.
Uw training- en evaluatiegegevens opmaken
Als u uw eigen gegevens wilt gebruiken voor het verfijnen van modellen, moet u eerst uw training- en evaluatiegegevens opmaken in Spark DataFrames. Laad vervolgens de DataFrames met behulp van de hugging Face-bibliotheek datasets
.
Begin met het opmaken van uw trainingsgegevens in een tabel die voldoet aan de verwachtingen van de trainer. Voor tekstclassificatie is dit een tabel met twee kolommen: een tekstkolom en een kolom met labels.
Voor het afstemmen moet u een model opgeven. Met de AutoClasses-bibliotheek voor Face Transformer hugging kunt u eenvoudig modellen en configuratie-instellingen laden, waaronder een breed scala aan voor verwerking van Auto Models
natuurlijke taal.
Zo biedt AutoModelForSequenceClassification
Hugging Face transformers
bijvoorbeeld als modellaadprogramma voor tekstclassificatie, waarin gehele id's als categorielabels worden verwacht. Als u echter een DataFrame met tekenreekslabels hebt, moet u ook toewijzingen opgeven tussen de labels voor gehele getallen en tekenreekslabels bij het maken van het model. U kunt deze informatie als volgt verzamelen:
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)}
Maak vervolgens de gehele id's als een labelkolom met een 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)
Een hugging Face-gegevensset laden vanuit een Spark DataFrame
Het knuffelen van Face datasets
ondersteunt het laden van Spark DataFrames met behulp van datasets.Dataset.from_spark
. Zie de documentatie over Hugging Face voor meer informatie over de methode from_spark().
Als u bijvoorbeeld dataframes hebt train_df
, test_df
kunt u gegevenssets maken voor elk met de volgende code:
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
slaat de gegevensset op in de cache. In dit voorbeeld worden modeltrainingen voor het stuurprogramma beschreven, zodat er gegevens beschikbaar moeten worden gesteld. Omdat cache-materialisatie wordt geparallelliseerd met Behulp van Spark, moet de opgegeven cache_dir
functie ook toegankelijk zijn voor alle werkrollen. Als u aan deze beperkingen wilt voldoen, cache_dir
moet u een DBFS-hoofdvolume (Databricks File System) of koppelpunt zijn.
Het DBFS-hoofdvolume is toegankelijk voor alle gebruikers van de werkruimte en mag alleen worden gebruikt voor gegevens zonder toegangsbeperkingen. Als voor uw gegevens toegangsbeheer is vereist, gebruikt u een koppelpunt in plaats van de DBFS-hoofdmap.
Als uw gegevensset groot is, kan het schrijven naar DBFS lang duren. Als u het proces wilt versnellen, kunt u de parameter gebruiken om de working_dir
gegevensset met hugging datasets
face naar een tijdelijke locatie op schijf te schrijven en deze vervolgens naar DBFS te verplaatsen. Als u bijvoorbeeld de SSD wilt gebruiken als een tijdelijke locatie:
import datasets
dataset = datasets.Dataset.from_spark(
train_df,
cache_dir="/dbfs/cache/train",
working_dir="/local_disk0/tmp/train",
)
Caching voor gegevenssets
De cache is een van de manieren om datasets
de efficiëntie te verbeteren. Alle gedownloade en verwerkte gegevenssets worden opgeslagen, dus wanneer de gebruiker de tussenliggende gegevenssets moet gebruiken, worden ze rechtstreeks vanuit de cache opnieuw geladen.
De standaardcachemap van gegevenssets is ~/.cache/huggingface/datasets
. Wanneer een cluster wordt beëindigd, gaan de cachegegevens ook verloren. Databricks raadt u aan om de cachelocatie in DBFS te wijzigen door de omgevingsvariabele HF_DATASETS_CACHE
in te stellen om het cachebestand te behouden bij het beëindigen van het cluster:
import os
os.environ["HF_DATASETS_CACHE"] = "/dbfs/place/you/want/to/save"
Een model verfijnen
Wanneer uw gegevens klaar zijn, kunt u deze gebruiken om een Hugging Face-model af te stemmen.
Notebook: Gegevenssets downloaden van Hugging Face
Dit voorbeeldnotebook bevat aanbevolen procedures voor het gebruik van de functie Hugging Face load_dataset
om gegevenssets te downloaden en voor te bereiden op Azure Databricks voor verschillende grootten van gegevens.