Udostępnij przez


Ładowanie danych na platformie obliczeniowej GPU bez użycia serwera

W tej sekcji opisano informacje na temat ładowania danych na bezserwerowych obliczeniach procesora GPU przeznaczonych specjalnie dla aplikacji ML i DL. Zapoznaj się z samouczkiem , aby dowiedzieć się więcej na temat ładowania i przekształcania danych przy użyciu interfejsu API języka Python platformy Spark.

Ładowanie danych tabelarycznych

Użyj programu Spark Connect, aby załadować tabelaryczne dane uczenia maszynowego z tabel delta.

W przypadku trenowania pojedynczego węzła można przekonwertować ramki danych Apache Spark na ramki danych Pandas przy użyciu metody PySparktoPandas(), a następnie opcjonalnie przekonwertować na format NumPy przy użyciu metody PySparkto_numpy().

Uwaga / Notatka

Spark Connect odracza analizę i rozpoznawanie nazw do czasu kompilacji, co może wpłynąć na sposób działania twojego kodu. Zobacz Porównanie programu Spark Connect z modelem klasycznym platformy Spark.

Narzędzie Spark Connect obsługuje większość interfejsów API PySpark, w tym Spark SQL, interfejs API Pandas na platformie Spark, uporządkowane przesyłanie strumieniowe oraz bibliotekę MLlib (opartą na ramkach danych). Aby uzyskać najnowsze obsługiwane interfejsy API, zobacz dokumentację interfejsu API PySpark .

Aby uzyskać informacje o innych ograniczeniach, zobacz Ograniczenia obliczeniowe bezserwerowe.

Ładowanie danych wewnątrz dekoratora @distributed

Podczas korzystania z Serverless GPU API do rozproszonego trenowania, umieść kod ładowania danych wewnątrz dekoratora @distributed. Rozmiar zestawu danych może przekraczać maksymalny rozmiar dozwolony przez pickle, dlatego zaleca się wygenerować zestaw danych wewnątrz dekoratora, co przedstawiono poniżej.

from serverless_gpu import distributed

# this may cause pickle error
dataset = get_dataset(file_path)
@distributed(gpus=8, remote=True)
def run_train():
  # good practice
  dataset = get_dataset(file_path)
  ....

Wydajność ładowania danych

/Workspace i /Volumes katalogi są hostowane na zdalnym magazynie Unity Catalog. Jeśli zestaw danych jest przechowywany w Unity Catalog, szybkość ładowania danych jest ograniczona przez dostępną szerokość pasma sieci. Jeśli trenujesz wiele epok, zaleca się najpierw skopiowanie danych lokalnie, szczególnie do katalogu /tmp hostowanego na bardzo szybkiej pamięci (dyski SSD NVMe).

Jeśli zestaw danych jest duży, zalecamy również następujące techniki równoległego trenowania i ładowania danych:

  • Podczas trenowania wielu epok zaktualizuj zestaw danych, aby buforować pliki lokalnie w /tmp katalogu przed odczytaniem każdego pliku. W kolejnych epokach użyj buforowanej wersji.
  • Równoległe pobieranie danych przez włączenie procesów roboczych w interfejsie API modułu DataLoader . Ustaw num_workers wartość co najmniej 2. Domyślnie każdy pracownik pobiera dwa elementy robocze. Aby zwiększyć wydajność, zwiększ num_workers (co zwiększy równoległe odczyty) lub prefetch_factor (co zwiększy liczbę obiektów, które są wstępnie pobierane przez poszczególne procesy robocze).