Udostępnij za pośrednictwem


Najlepsze rozwiązania dotyczące uczenia głębokiego w usłudze Azure Databricks

Ten artykuł zawiera porady dotyczące uczenia głębokiego w usłudze Azure Databricks oraz informacje o wbudowanych narzędziach i bibliotekach przeznaczonych do optymalizacji obciążeń uczenia głębokiego, takich jak następujące:

Usługa Databricks Machine Learning udostępnia wstępnie utworzoną infrastrukturę uczenia głębokiego za pomocą środowiska Databricks Runtime for Machine Learning, w tym najpopularniejszych bibliotek uczenia głębokiego, takich jak TensorFlow, PyTorch i Keras. Ma również wbudowaną, wstępnie skonfigurowaną obsługę procesora GPU, w tym sterowniki i biblioteki pomocnicze.

Środowisko Databricks Runtime ML obejmuje również wszystkie możliwości obszaru roboczego usługi Azure Databricks, takie jak tworzenie klastra i zarządzanie nim, zarządzanie biblioteką i środowiskiem, zarządzanie kodem przy użyciu folderów Git usługi Databricks, obsługa automatyzacji, w tym zadania i interfejsy API usługi Databricks oraz zintegrowane środowisko MLflow na potrzeby śledzenia i wdrażania modeli oraz obsługi modeli.

Zarządzanie zasobami i środowiskiem

Usługa Azure Databricks ułatwia dostosowanie środowiska uczenia głębokiego i zapewnienie spójności środowiska między użytkownikami.

Dostosowywanie środowiska projektowego

Za pomocą środowiska Databricks Runtime możesz dostosować środowisko programistyczne na poziomach notesu, klastra i zadania.

  • Użyj bibliotek języka Python o zakresie notesu lub bibliotek języka R o zakresie notesu, aby używać określonego zestawu lub wersji bibliotek bez wpływu na innych użytkowników klastra.
  • Zainstaluj biblioteki na poziomie klastra, aby standandaryzować wersje dla zespołu lub projektu.
  • Skonfiguruj zadanie usługi Azure Databricks, aby upewnić się, że powtarzające się zadanie jest uruchamiane w spójnym, niezmiennym środowisku.

Korzystanie z zasad klastra

Możesz utworzyć zasady klastra, aby kierować analityków danych do właściwych wyborów, takich jak używanie klastra z jednym węzłem do programowania i używanie klastra skalowania automatycznego na potrzeby dużych zadań.

Rozważ użycie procesorów GPU A100 dla obciążeń uczenia głębokiego

Procesory GPU A100 to wydajny wybór dla wielu zadań uczenia głębokiego, takich jak trenowanie i dostrajanie dużych modeli językowych, przetwarzanie języka naturalnego, wykrywanie obiektów i klasyfikacja oraz aparaty rekomendacji.

  • Usługa Databricks obsługuje procesory GPU A100 we wszystkich chmurach. Aby uzyskać pełną listę obsługiwanych typów procesorów GPU, zobacz Obsługiwane typy wystąpień.
  • Procesory GPU A100 zwykle mają ograniczoną dostępność. Skontaktuj się z dostawcą usług w chmurze w celu uzyskania alokacji zasobów lub rozważ rezerwowanie pojemności z wyprzedzeniem.

Najlepsze rozwiązania dotyczące ładowania danych

Magazyn danych w chmurze zwykle nie jest zoptymalizowany pod kątem operacji we/wy, co może stanowić wyzwanie dla modeli uczenia głębokiego, które wymagają dużych zestawów danych. Środowisko Databricks Runtime ML obejmuje usługę Delta Lake, Przesyłanie strumieniowe mozaiki i Petastorm , aby zoptymalizować przepływność danych dla aplikacji uczenia głębokiego.

Usługa Databricks zaleca używanie tabel usługi Delta Lake do przechowywania danych. Usługa Delta Lake upraszcza proces ETL i umożliwia wydajny dostęp do danych. Szczególnie w przypadku obrazów usługa Delta Lake pomaga zoptymalizować pozyskiwanie pod kątem trenowania i wnioskowania. Rozwiązanie referencyjne dla aplikacji obrazów zawiera przykład optymalizacji etL obrazów przy użyciu usługi Delta Lake.

Usługa Databricks zaleca przesyłanie strumieniowe Mozaiki na potrzeby ładowania danych w narzędziu PyTorch lub Mosaic Composer, szczególnie w przypadku obciążeń rozproszonych. Udostępnione interfejsy API StreamingDataset i StreamingDataLoader ułatwiają trenowanie dużych zestawów danych przy jednoczesnym maksymalizacji gwarancji poprawności, wydajności, elastyczności i łatwości użycia w środowisku rozproszonym. Aby uzyskać dodatkowe informacje, zobacz Ładowanie danych przy użyciu przesyłania strumieniowego mozaiki.

Najlepsze rozwiązania dotyczące trenowania modeli uczenia głębokiego

Usługa Databricks zaleca używanie środowiska Databricks Runtime na potrzeby śledzenia i automatycznego rejestrowania MLflow na potrzeby wszystkich trenowania modelu.

Rozpoczynanie pracy z klastrem z jednym węzłem

Klaster procesora GPU z jednym węzłem (tylko sterownik) jest zwykle najszybszy i najbardziej ekonomiczny w przypadku opracowywania modeli uczenia głębokiego. Jeden węzeł z 4 procesorami GPU może być szybszy w przypadku trenowania uczenia głębokiego, z których każdy ma 4 węzły robocze z 1 procesorem GPU. Dzieje się tak, ponieważ trenowanie rozproszone wiąże się z obciążeniem komunikacji sieciowej.

Klaster z jednym węzłem jest dobrym rozwiązaniem podczas szybkiego, iteracyjnego programowania i trenowania modeli na danych o małych i średnich rozmiarach. Jeśli zestaw danych jest wystarczająco duży, aby trenować na jednej maszynie, rozważ przejście do wielu procesorów GPU, a nawet rozproszone zasoby obliczeniowe.

Monitorowanie procesu trenowania przy użyciu narzędzia TensorBoard i metryk klastra

TensorBoard jest wstępnie zainstalowany w usłudze Databricks Runtime ML. Można go używać w notesie lub na osobnej karcie. Aby uzyskać szczegółowe informacje, zobacz TensorBoard .

Metryki klastra są dostępne we wszystkich środowiskach uruchomieniowych usługi Databricks. Możesz sprawdzić użycie sieci, procesora i pamięci, aby sprawdzić wąskie gardła. Aby uzyskać szczegółowe informacje, zobacz metryki klastra .

Optymalizowanie wydajności uczenia głębokiego

Możesz i należy używać technik optymalizacji wydajności uczenia głębokiego w usłudze Databricks.

Wczesne zatrzymywanie

Wczesne zatrzymywanie monitoruje wartość metryki obliczonej na zestawie walidacji i zatrzymuje trenowanie, gdy metryka przestaje się poprawiać. Jest to lepsze podejście niż zgadywanie w dużej liczbie epok do ukończenia. Każda biblioteka uczenia głębokiego udostępnia natywny interfejs API do wczesnego zatrzymywania; zobacz na przykład interfejsy API wywołania zwrotnego EarlyStopping dla biblioteki TensorFlow/Keras i PyTorch Lightning. Przykładowy notes można znaleźć w przykładowym notesie TensorFlow Keras.

Dostrajanie rozmiaru partii

Dostrajanie rozmiaru partii pomaga zoptymalizować wykorzystanie procesora GPU. Jeśli rozmiar partii jest za mały, obliczenia nie mogą w pełni korzystać z możliwości procesora GPU. Metryki klastra umożliwiają wyświetlanie metryk procesora GPU.

Dostosuj rozmiar partii w połączeniu z szybkością nauki. Dobrą regułą jest zwiększenie rozmiaru partii o n, zwiększenie szybkości nauki o sqrt(n). Podczas ręcznego dostrajania spróbuj zmienić rozmiar partii według współczynnika 2 lub 0,5. Następnie kontynuuj dostrajanie, aby zoptymalizować wydajność, ręcznie lub przez przetestowanie różnych hiperparametrów przy użyciu zautomatyzowanego narzędzia, takiego jak Hyperopt.

Uczenie z użyciem transferu

W przypadku uczenia transferowego należy rozpocząć od wcześniej wytrenowanego modelu i zmodyfikować go zgodnie z potrzebami aplikacji. Uczenie transferowe może znacznie skrócić czas wymagany do trenowania i dostrajania nowego modelu. Aby uzyskać więcej informacji, zobacz Cechowanie na potrzeby uczenia transferowego, aby uzyskać więcej informacji i przykład.

Przechodzenie do trenowania rozproszonego

Środowisko Databricks Runtime ML obejmuje narzędzia HorovodRunner, spark-tensorflow-distributor, TorchDistributor i Hyperopt, aby ułatwić przejście z jednego węzła do rozproszonego trenowania.

HorovodRunner

Horovod to projekt typu open source, który skaluje trenowanie uczenia głębokiego do obliczeń wieloprocesorowych lub rozproszonych. HorovodRunner, utworzony przez usługę Databricks i dołączony do środowiska Databricks Runtime ML, to otoka Horovod zapewniająca zgodność platformy Spark. Interfejs API umożliwia skalowanie kodu z jednym węzłem z minimalnymi zmianami. Narzędzie HorovodRunner współpracuje z bibliotekami TensorFlow, Keras i PyTorch.

spark-tensorflow-distributor

spark-tensorflow-distributor to pakiet natywny typu open source w rozwiązaniu TensorFlow do trenowania rozproszonego za pomocą biblioteki TensorFlow w klastrach Spark. Zobacz przykładowy notes.

TorchDistributor

TorchDistributor to moduł typu open source w narzędziu PySpark, który ułatwia trenowanie rozproszone za pomocą narzędzia PyTorch w klastrach Spark, który umożliwia uruchamianie zadań szkoleniowych PyTorch jako zadań platformy Spark. Zobacz Trenowanie rozproszone za pomocą narzędzia TorchDistributor.

Hyperopt

Funkcja Hyperopt zapewnia adaptacyjne dostrajanie hiperparametryczne na potrzeby uczenia maszynowego. Klasa SparkTrials umożliwia iteracyjne dostrajanie parametrów modeli uczenia głębokiego równolegle w klastrze.

Najlepsze rozwiązania dotyczące wnioskowania

Ta sekcja zawiera ogólne porady dotyczące używania modeli do wnioskowania za pomocą usługi Azure Databricks.

  • Aby zminimalizować koszty, należy wziąć pod uwagę zarówno procesory CPU, jak i procesory GPU zoptymalizowane pod kątem wnioskowania, takie jak nc T4_v3 serii. Nie ma wyraźnego zalecenia, ponieważ najlepszy wybór zależy od rozmiaru modelu, wymiarów danych i innych zmiennych.

  • Użyj platformy MLflow , aby uprościć wdrażanie i obsługę modelu. MLflow może rejestrować dowolny model uczenia głębokiego, w tym niestandardową logikę przetwarzania wstępnego i przetwarzania po przetwarzaniu. Modele w wykazie aparatu Unity lub modelach zarejestrowanych w rejestrze modeli obszaru roboczego można wdrożyć na potrzeby przetwarzania wsadowego, przesyłania strumieniowego lub wnioskowania online.

Obsługa online

Najlepszą opcją dla obsługi małych opóźnień jest obsługa online za interfejsem API REST. Usługa Databricks zapewnia obsługę modelu na potrzeby wnioskowania online. Obsługa modeli udostępnia ujednolicony interfejs do wdrażania modeli sztucznej inteligencji, zarządzania nimi i wykonywania zapytań oraz obsługuje obsługę następujących elementów:

  • Modele niestandardowe. Są to modele języka Python spakowane w formacie MLflow. Przykłady obejmują modele przekształcania twarzy scikit-learn, XGBoost, PyTorch i Hugging Face transformer.
  • Najnowocześniejsze otwarte modele udostępniane przez interfejsy API modelu foundation. Te modele są nadzorowanymi architekturami modeli podstawowych, które obsługują zoptymalizowane wnioskowanie. Na przykład modele podstawowe, takie jak Llama-2-70B-chat, BGE-Large i Mistral-7B, są dostępne do natychmiastowego użycia z cenami płatności za token . W przypadku obciążeń wymagających gwarancji wydajności i dostosowanych wariantów modelu można je wdrożyć przy użyciu aprowizowanej przepływności.
  • Modele zewnętrzne. Są to modele hostowane poza platformą Databricks. Na przykład modele podstawowe, takie jak GPT-4 openAI, Anthropic's Claude i inne. Punkty końcowe obsługujące te modele mogą być zarządzane centralnie, a klienci mogą ustanowić dla nich limity szybkości i mechanizmy kontroli dostępu.

Alternatywnie usługa MLflow udostępnia interfejsy API do wdrażania w różnych usługach zarządzanych na potrzeby wnioskowania online, a także interfejsów API do tworzenia kontenerów platformy Docker dla niestandardowych rozwiązań obsługujących.

Inne typowe usługi zarządzane na potrzeby wnioskowania online obejmują:

Wnioskowanie wsadowe i przesyłane strumieniowo

Ocenianie usługi Batch i przesyłania strumieniowego obsługuje wysoką przepływność, niskie koszty oceniania przy opóźnieniach nawet w minutach. Aby uzyskać więcej informacji, zobacz Use MLflow for model inference (Używanie biblioteki MLflow do wnioskowania modelu).

  • Jeśli oczekujesz dostępu do danych w celu wnioskowania więcej niż raz, przed uruchomieniem zadania wnioskowania rozważ utworzenie zadania wstępnego przetwarzania danych w tabeli usługi Delta Lake. W ten sposób koszt pozyskiwania i przygotowywania danych jest rozłożony na wiele odczytów danych. Oddzielenie przetwarzania wstępnego od wnioskowania umożliwia również wybranie innego sprzętu dla każdego zadania w celu zoptymalizowania kosztów i wydajności. Na przykład do wnioskowania można użyć procesorów CPU dla procesorów ETL i procesorów GPU.
  • Użyj zdefiniowanych przez użytkownika platformy Spark Pandas do skalowania wnioskowania wsadowego i przesyłania strumieniowego w klastrze.