Sdílet prostřednictvím


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

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_CACHEprostř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.

Stažení datových sad z poznámkového bloku s osvědčenými postupy Hugging Face

Získat poznámkový blok