Przygotowywanie danych do precyzyjnego dostrajania modeli twarzy
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 Databricks Runtime dla usługi Machine Learning w wersji 13.0 lub nowszej. W przykładach w tym przewodniku użyto zestawów danych funkcji Hugging Face, które znajdują się w środowisku Databricks Runtime 13.0 ML i nowszych wersjach.
Ładowanie danych z przytulania twarzy
Przytulanie zestawów danych twarzy to biblioteka przytulania twarzy do uzyskiwania dostępu do zestawów danych i udostępniania ich na potrzeby zadań przetwarzania audio, przetwarzania obrazów i 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 funkcji Przytulanie twarzy w dokumentacji przytulania twarzy.
from datasets import load_dataset
dataset = load_dataset("imdb")
Niektóre zestawy danych w centrum rozpoznawania twarzy hugging udostępniają rozmiary danych, które są pobierane i generowane podczas load_dataset
wywoływana. Możesz użyć load_dataset_builder
polecenia , aby poznać rozmiary przed pobraniem zestawu danych za pomocą load_dataset
polecenia .
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")
Aby uzyskać wskazówki dotyczące pobierania i przygotowywania zestawów danych w usłudze Azure Databricks, zobacz notes Hugging Face best practices (Pobieranie zestawów danych z usługi Hugging Face best practices) w celu uzyskania wskazówek dotyczących 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 ramki danych przy użyciu biblioteki Przytulanie twarzy 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 AutoKlas autoklas funkcji Przytulania twarzy ułatwia ładowanie modeli i ustawień konfiguracji, w tym szeroką gamę Auto Models
funkcji przetwarzania języka naturalnego.
Na przykład funkcja Hugging Face transformers
udostępnia AutoModelForSequenceClassification
jako moduł ładujący modelu klasyfikacji tekstu, który 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ę etykiety z funkcją UDF biblioteki 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
Przytulanie twarzy datasets
obsługuje ładowanie z ramek danych platformy Spark przy użyciu polecenia datasets.Dataset.from_spark
. Zapoznaj się z dokumentacją funkcji Hugging Face, aby dowiedzieć się więcej o metodzie from_spark().
Jeśli na przykład masz i train_df
test_df
ramki danych, możesz utworzyć zestawy danych dla każdego z następujących kodów:
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
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, podana cache_dir
wartość musi być dostępna dla wszystkich procesów roboczych. Aby spełnić te ograniczenia, cache_dir
powinien być woluminem głównym systemu plików usługi Databricks (DBFS) lub punktem instalacji.
Wolumin główny systemu plików DBFS jest dostępny dla wszystkich użytkowników obszaru roboczego i powinien być używany tylko dla danych bez ograniczeń dostępu. Jeśli dane wymagają kontroli dostępu, użyj punktu instalacji zamiast głównego systemu plików DBFS.
Jeśli zestaw danych jest duży, zapisywanie go w systemie plików DBFS może zająć dużo czasu. Aby przyspieszyć proces, możesz użyć parametru working_dir
, aby przytulić zestaw danych rozpoznawania twarzy datasets
zapisać zestaw danych w lokalizacji tymczasowej na dysku, a następnie przenieść go do systemu plików DBFS. Aby na przykład użyć dysku SSD jako lokalizacji tymczasowej:
import datasets
dataset = datasets.Dataset.from_spark(
train_df,
cache_dir="/dbfs/cache/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 utrwały plik pamięci podręcznej po zakończeniu działania klastra, usługa Databricks zaleca zmianę lokalizacji pamięci podręcznej na dbFS przez ustawienie zmiennej środowiskowej HF_DATASETS_CACHE
:
import os
os.environ["HF_DATASETS_CACHE"] = "/dbfs/place/you/want/to/save"
Dostrajanie modelu
Gdy dane są gotowe, możesz użyć ich do dostosowania modelu przytulania twarzy.
Notes: pobieranie zestawów danych z funkcji Przytulanie twarzy
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.