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šší.
- Pracovní prostor s povolenou Unity Catalog. Abyste mohli zapisovat data do svazku Unity Catalog, musíte mít také následující oprávnění:
- Oprávnění k zápisu na svazek, do kterého chcete nahrát soubory.
- Oprávnění USE SCHEMA na nadřazeném schema.
- Oprávnění USE CATALOG na rodiči catalog.
- Významné výpočetní prostředky pro stahování velkých datových sad. Stažení velké datové sady použité v ukázkovém poznámkovém bloku trvá déle než den.
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 formátu table pro splnění očekávání školitele. Pro klasifikaci textu se jedná o table se dvěma columns: column textem a column štítků.
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 Auto Models
přirozeného 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 ID celých čísel jako popisek column pomocí uživatelem definované funkce 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="/Volumes/main/default/my-volume/train")
test_dataset = datasets.Dataset.from_spark(test_df, cache_dir="/Volumes/main/default/my-volume/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í by cache_dir
měla být cesta svazku Unity Catalog.
Přístup ke svazku je možné spravovat pomocí Unity Catalog.
Pokud je vaše datová sada velká, může zápis do Unity Catalog trvat dlouhou dobu. Pokud chcete proces urychlit, můžete pomocí parametru working_dir
mít Hugging Face datasets
zapsat datovou sadu do dočasného umístění na disku a pak ji přesunout do Unity Catalog. Pokud například chcete ssd použít jako dočasné umístění:
import datasets
dataset = datasets.Dataset.from_spark(
train_df,
cache_dir="/Volumes/main/default/my-volume/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, doporučuje Databricks změnit umístění mezipaměti na cestu ke svazku Unity Catalog nastavením proměnné prostředí HF_DATASETS_CACHE
:
import os
os.environ["HF_DATASETS_CACHE"] = "/Volumes/main/default/my-volume/"
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.
Stažení datových sad z poznámkového bloku s osvědčenými postupy Hugging Face
poznámkového bloku