Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule pokazano, jak przygotować dane do precyzyjnego dostrajania dużych modeli językowych typu open source przy użyciu funkcji Hugging Face Transformers i Hugging Face Datasets.
Wymagania
-
Środowisko wykonawcze Databricks dla uczenia maszynowego w wersji 13.0 lub nowszej. W przykładach w tym przewodniku użyto zestawów danych Hugging Face
, które znajdują się w Runtime Databricks 13.0 ML oraz w nowszych wersjach. - Obszar roboczy z włączonym Unity Catalog. Musisz również mieć następujące uprawnienia, aby zapisywać dane w woluminie Unity Catalog.
- Uprawnienia do zapisu na woluminie, do którego chcesz przekazać pliki.
- Uprawnienie USE SCHEMA w schemacie nadrzędnym.
- Uprawnienie USE CATALOG w katalogu nadrzędnym.
- Znaczne zasoby obliczeniowe do pobierania dużych zestawów danych. Pobranie dużego zestawu danych używanego w dostarczonym przykładowym notatniku trwa dłużej niż dzień.
Ładowanie danych z Hugging Face
Hugging Face Datasets to biblioteka Hugging Face do uzyskiwania dostępu do zestawów danych i udostępniania ich na potrzeby zadań związanych z przetwarzaniem dźwięku, wizji komputerowej oraz przetwarzania języka naturalnego (NLP). Przytulanie twarzy datasets umożliwia ładowanie danych z różnych miejsc. Biblioteka datasets zawiera narzędzia do odczytywania zestawów danych z usługi Hugging Face Hub. Istnieje wiele zestawów danych, które można pobrać i odczytać z narzędzia Hugging Face Hub przy użyciu load_dataset funkcji . Dowiedz się więcej na temat ładowania danych za pomocą zestawów danych Hugging Face w dokumentacji Hugging Face.
from datasets import load_dataset
dataset = load_dataset("imdb")
Niektóre zestawy danych w Hugging Face Hub udostępniają rozmiary danych, które są pobierane i generowane, gdy load_dataset jest wywoływane. Możesz użyć load_dataset_builder aby poznać rozmiary przed pobraniem zestawu danych za 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")
Zapoznaj się z notesem "Hugging Face best practices", aby uzyskać wskazówki dotyczące pobierania i przygotowywania zestawów danych w usłudze Azure Databricks dla różnych rozmiarów danych.
Formatowanie danych treningowych i ewaluacyjnych
Aby użyć własnych danych do dostosowywania modelu, musisz najpierw sformatować dane szkoleniowe i ewaluacyjne w ramkach danych platformy Spark. Następnie załaduj DataFrame przy użyciu biblioteki Hugging Face datasets.
Zacznij od sformatowania danych treningowych w tabeli spełniającej oczekiwania trenera. W przypadku klasyfikacji tekstu jest to tabela z dwiema kolumnami: kolumną tekstową i kolumną etykiet.
Aby przeprowadzić dostrajanie, należy podać model. Biblioteka Hugging Face Transformer AutoClasses ułatwia ładowanie modeli i ustawień konfiguracji, w tym szeroki zakres funkcji do przetwarzania języka naturalnego.
Na przykład Hugging Face transformers udostępnia AutoModelForSequenceClassification jako ładowarkę modelu do klasyfikacji tekstu, która oczekuje identyfikatorów liczb całkowitych jako etykiet kategorii. Jeśli jednak masz ramkę danych z etykietami ciągów, musisz również określić mapowania między etykietami liczb całkowitych i etykietami ciągów podczas tworzenia modelu. Te informacje można zebrać w następujący sposób:
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)}
Następnie utwórz identyfikatory liczb całkowitych jako kolumnę etykiet przy użyciu funkcji 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)
Ładowanie zestawu danych przytulania twarzy z ramki danych platformy Spark
Hugging Face datasets obsługuje ładowanie z ramek danych Spark przy użyciu datasets.Dataset.from_spark. Zapoznaj się z dokumentacją funkcji Hugging Face, aby dowiedzieć się więcej o metodzie from_spark().
Na przykład, jeśli masz ramki danych train_df i test_df, możesz utworzyć zestawy danych dla każdej z następującym kodem:
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 Buforuje zestaw danych. W tym przykładzie opisano trenowanie modelu na sterowniku, więc dane muszą zostać udostępnione. Ponadto, ponieważ materializacja pamięci podręcznej jest równoległa przy użyciu platformy Spark, podany cache_dir musi być dostępny dla wszystkich pracowników. Aby spełnić te ograniczenia, cache_dir powinna być ścieżką woluminu Unity Catalog .
Można zarządzać dostępem do woluminu przy użyciu Unity Catalog.
Jeśli zestaw danych jest duży, zapisanie go w katalogu Unity może potrwać długo. Aby przyspieszyć proces, możesz użyć parametru working_dir, aby Hugging Face datasets zapisało zestaw danych w lokalizacji tymczasowej na dysku, a następnie przenieść go do Unity Catalog. Aby na przykład użyć dysku SSD jako lokalizacji tymczasowej:
import datasets
dataset = datasets.Dataset.from_spark(
train_df,
cache_dir="/Volumes/main/default/my-volume/train",
working_dir="/local_disk0/tmp/train",
)
Buforowanie zestawów danych
Pamięć podręczna jest jednym ze sposobów datasets poprawy wydajności. Przechowuje wszystkie pobrane i przetworzone zestawy danych, więc gdy użytkownik musi używać pośrednich zestawów danych, są one ponownie ładowane bezpośrednio z pamięci podręcznej.
Domyślny katalog pamięci podręcznej zestawów danych to ~/.cache/huggingface/datasets. Po zakończeniu działania klastra dane pamięci podręcznej również zostaną utracone. Aby utrwalić plik pamięci podręcznej po zakończeniu działania klastra, usługa Databricks zaleca zmianę lokalizacji pamięci podręcznej na ścieżkę woluminu katalogu Unity poprzez ustawienie zmiennej środowiskowej HF_DATASETS_CACHE:
import os
os.environ["HF_DATASETS_CACHE"] = "/Volumes/main/default/my-volume/"
Dostrajanie modelu
Gdy dane są gotowe, możesz użyć ich do dostosowania modelu przytulania twarzy.
Notebook: pobieranie zestawów danych z Hugging Face
Ten przykładowy notes zawiera zalecane najlepsze rozwiązania dotyczące używania funkcji Hugging Face load_dataset do pobierania i przygotowywania zestawów danych w usłudze Azure Databricks dla różnych rozmiarów danych.