Příprava dat na vyladění modelů Hugging Face

Tento článek ukazuje, jak připravit data pro doladění velkých jazykových modelů open source s Hugging Face Transformers a Hugging Face Datasets.

Požadavky

  • Databricks Runtime pro strojové učení 13.0 a vyšší 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 povoleným katalogem Unity Abyste mohli zapisovat data do svazku katalogu Unity, 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 u nadřazeného schématu.
    • Oprávnění USE CATALOG na nadřazeném katalogu.
  • 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číst data z Hugging Face

Hugging Face Datasets je knihovna Hugging Face pro přístup k datovým sadám pro zpracování zvuku, počítačové vidění 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 přečtení z centrály Hugging Face pomocí funkce load_dataset. 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 na Hubu Hugging Face poskytují velikosti dat, která se stáhnou a vygenerují, když je load_dataset vyvolán. Pomocí load_dataset_builder můžete zjistit velikosti před stažením datové sady s 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, jak stahovat a připravovat datové sady různé velikosti v Azure Databricks, najdete v poznámkovém bloku s osvědčenými postupy pro stahování datových sad z 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 AutoClasses Hugging Face Transformer usnadňuje načítání modelů a nastavení konfigurace, včetně široké škály nástrojů pro zpracování 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 celočíselná ID jako sloupec štítku pomocí UDF 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.

Například pokud máte datové rámce train_df a test_df, můžete vytvořit datové sady pro každý z nich pomocí následujícího kódu:

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 paralelizována pomocí Sparku, musí být všem pracovníkům cache_dir k dispozici. Pro splnění těchto omezení by cache_dir měla být cesta ke svazku katalogu Unity.

Přístup ke svazku lze spravovat pomocí Unity katalogu .

Pokud je vaše datová sada velká, může zápis do katalogu Unity trvat dlouhou dobu. Pokud chcete proces urychlit, můžete pomocí parametru working_dir nastavit hugging Face datasets zapsat datovou sadu do dočasného umístění na disku a pak ji přesunout do katalogu Unity. 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, Databricks doporučuje změnit umístění mezipaměti na cestu ke svazku katalogu Unity, 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

Pořiďte si poznámkový blok