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:
- Przesyłanie strumieniowe delta i mozaika w celu załadowania danych
- Optuna do równoległego trenowania
- Funkcje zdefiniowane przez użytkownika biblioteki Pandas na potrzeby wnioskowania
Sztuczna inteligencja mozaiki usługi Databricks 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.
Planowanie harmonogramu GPU
Aby zmaksymalizować procesory GPU na potrzeby trenowania i wnioskowania rozproszonego uczenia głębokiego, zoptymalizuj planowanie procesora GPU. Zobacz Planowanie procesora GPU.
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 i przesyłanie strumieniowe mozaiki w celu zoptymalizowania przepływności 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 Optuna.
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 torchDistributor, DeepSpeed i Ray, aby ułatwić przejście z jednego węzła do rozproszonego trenowania.
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.
Optuna
Optuna zapewnia adaptacyjne dostrajanie hiperparametryczne na potrzeby uczenia maszynowego.
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 generowanie modeli sztucznej inteligencji, takich 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ą:
- Wystąpienie kontenera platformy Azure (ACI)
- Azure Kubernetes Service (AKS)
- MLflow z usługą Azure Machine Learning
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.
- Podczas rejestrowania modelu z usługi Azure Databricks platforma MLflow automatycznie udostępnia kod wnioskowania w celu zastosowania modelu jako funkcji zdefiniowanej przez użytkownika biblioteki pandas.
- Możesz również dodatkowo zoptymalizować potok wnioskowania, szczególnie w przypadku dużych modeli uczenia głębokiego. Zobacz rozwiązanie referencyjne dla obrazu ETL, aby zapoznać się z przykładem.