Příprava dat na vyladění modelů Hugging Face
Tento článek ukazuje, jak připravit data na vyladění opensourcových velkých jazykových modelů s hugging Face Transformers a sadami dat Hugging Face Datasets.
Požadavky
- Databricks Runtime pro Machine Learning 13.0 nebo novější Příklady v této příručce používají datové sady Hugging Face, které jsou součástí Databricks Runtime 13.0 ML a vyšší.
Načtení dat z hugging face
Hugging Face Datasets je knihovna Hugging Face (Hugging Face Library) pro přístup k datovým sadám pro zpracování zvuku, počítačového zpracování obrazu a zpracování přirozeného jazyka (NLP). Pomocí Hugging Face datasets
můžete načítat data z různých míst. Knihovna datasets
obsahuje nástroje pro čtení datových sad z centra Hugging Face Hub. K dispozici je mnoho datových sad ke stažení a čitelných z centra Hugging Face Hub pomocí load_dataset
funkce. Další informace o načítání dat pomocí datových sad Hugging Face najdete v dokumentaci k Hugging Face.
from datasets import load_dataset
dataset = load_dataset("imdb")
Některé datové sady v centru Hugging Face Hub poskytují velikosti dat, která se stáhnou a vygenerují při load_dataset
zavolání. Velikost můžete znát load_dataset_builder
před stažením datové sady pomocí 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")
Pokyny ke stažení a přípravě datových sad v Azure Databricks pro různé velikosti dat najdete v poznámkovém bloku s osvědčenými postupy ke stažení a přípravě datových sad z webu Hugging Face.
Formátování trénovacích a zkušebních dat
Pokud chcete pro vyladění modelu použít vlastní data, musíte nejprve naformátovat trénovací a vyhodnocovací data do datových rámců Sparku. Potom načtěte datové rámce pomocí knihovny Hugging Face datasets
.
Začněte formátováním trénovacích dat do tabulky, která splňuje očekávání trenéra. Pro klasifikaci textu se jedná o tabulku se dvěma sloupci: textovým sloupcem a sloupcem popisků.
Pokud chcete provést jemné ladění, musíte zadat model. Knihovna Hugging Face Transformer AutoClasses usnadňuje načítání modelů a nastavení konfigurace, včetně široké škály pro zpracování přirozeného Auto Models
jazyka.
Například Hugging Face transformers
poskytuje AutoModelForSequenceClassification
jako zavaděč modelů pro klasifikaci textu, který očekává celočíselné ID jako popisky kategorií. Pokud však máte datový rámec s popisky řetězců, musíte při vytváření modelu také zadat mapování mezi celočíselné popisky a popisky řetězců. Tyto informace můžete shromáždit následujícím způsobem:
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)}
Pak vytvořte celočíselná ID jako sloupec popisku s uživatelem definovaným uživatelem 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)
Načtení datové sady Hugging Face z datového rámce Sparku
Hugging Face datasets
podporuje načítání z datových rámců Sparku pomocí datasets.Dataset.from_spark
. Další informace o metodě from_spark() najdete v dokumentaci k Hugging Face.
Pokud train_df
máte například datové rámce a test_df
datové rámce, můžete pro každou datovou sadu vytvořit následující kód:
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
ukládá datovou sadu do mezipaměti. Tento příklad popisuje trénování modelu na ovladači, takže data musí být k dispozici. Vzhledem k tomu, že materializace mezipaměti je paralelizovaná pomocí Sparku, musí být k cache_dir
dispozici všem pracovníkům. Pro splnění těchto omezení cache_dir
by měl být kořenový svazek systému souborů Databricks (DBFS) nebo přípojný bod.
Kořenový svazek DBFS je přístupný všem uživatelům pracovního prostoru a měl by se používat jenom pro data bez omezení přístupu. Pokud vaše data vyžadují řízení přístupu, použijte místo kořenového adresáře DBFS přípojný bod .
Pokud je vaše datová sada velká, může zápis do DBFS trvat dlouhou dobu. Pokud chcete proces urychlit, můžete pomocí parametru working_dir
hugging Face datasets
zapsat datovou sadu do dočasného umístění na disku a pak ji přesunout do DBFS. Pokud například chcete ssd použít jako dočasné umístění:
import datasets
dataset = datasets.Dataset.from_spark(
train_df,
cache_dir="/dbfs/cache/train",
working_dir="/local_disk0/tmp/train",
)
Ukládání do mezipaměti pro datové sady
Mezipaměť je jedním ze způsobů, jak datasets
zlepšit efektivitu. Ukládá všechny stažené a zpracovávané datové sady, takže když uživatel potřebuje použít zprostředkující datové sady, znovu se načtou přímo z mezipaměti.
Výchozí adresář mezipaměti datových sad je ~/.cache/huggingface/datasets
. Po ukončení clusteru dojde také ke ztrátě dat mezipaměti. Pokud chcete zachovat soubor mezipaměti při ukončení clusteru, databricks doporučuje změnit umístění mezipaměti na DBFS nastavením proměnné HF_DATASETS_CACHE
prostředí:
import os
os.environ["HF_DATASETS_CACHE"] = "/dbfs/place/you/want/to/save"
Vyladění modelu
Až budou vaše data připravená, můžete je použít k vyladění modelu Hugging Face.
Poznámkový blok: Stažení datových sad z hugging Face
Tento ukázkový poznámkový blok obsahuje doporučené osvědčené postupy při používání funkce Hugging Face load_dataset
ke stažení a přípravě datových sad v Azure Databricks pro různé velikosti dat.