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

Ł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_datasetpolecenia .

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_dftest_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 dla 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.

Pobieranie zestawów danych z notesu Hugging Face best practices (Najlepsze rozwiązania dotyczące rozpoznawania twarzy)

Pobierz notes