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

  • 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