Przyspiesz szkolenie modeli głębokiego uczenia się nawet o 35% dzięki inteligentnemu przesiewaniu Amazon SageMaker | Usługi internetowe Amazona

Przyspiesz szkolenie modeli głębokiego uczenia się nawet o 35% dzięki inteligentnemu przesiewaniu Amazon SageMaker | Usługi internetowe Amazona

W dzisiejszym szybko rozwijającym się krajobrazie sztucznej inteligencji modele głębokiego uczenia się znalazły się w czołówce innowacji, obejmując aplikacje obejmujące widzenie komputerowe (CV), przetwarzanie języka naturalnego (NLP) i systemy rekomendacji. Jednak rosnące koszty związane ze szkoleniem i dopracowywaniem tych modeli stanowią wyzwanie dla przedsiębiorstw. Koszt ten wynika przede wszystkim z samej ilości danych wykorzystywanych w modelach uczenia głębokiego. Obecnie duże modele są często trenowane na terabajtach danych, a ich uczenie może zająć tygodnie, nawet przy użyciu wydajnego procesora graficznego lub Szkolenie AWSsprzęt oparty na. Zazwyczaj klienci polegają na technikach i optymalizacjach, które poprawiają wydajność pętli szkoleniowej modelu, takich jak zoptymalizowane jądra lub warstwy, uczenie o mieszanej precyzji lub funkcje, takie jak Amazon Sage Maker rozproszone biblioteki szkoleniowe. Jednak obecnie mniej uwagi poświęca się efektywności samych danych szkoleniowych. Nie wszystkie dane w równym stopniu przyczyniają się do procesu uczenia się podczas uczenia modelu: znaczna część zasobów obliczeniowych może zostać przeznaczona na przetwarzanie prostych przykładów, które nie wpływają znacząco na ogólną dokładność modelu.

Klienci tradycyjnie polegali na technikach wstępnego przetwarzania, takich jak próbkowanie w górę lub w dół oraz deduplikacja, aby udoskonalić i poprawić jakość informacji zawartych w ich danych. Techniki te mogą być pomocne, ale często są czasochłonne, wymagają specjalistycznego doświadczenia w zakresie analizy danych i czasami mogą być bardziej sztuką niż nauką. Klienci często polegają również na wybranych zbiorach danych, takich jak Wyrafinowana sieć, w celu poprawy wydajności swoich modeli; jednak te zbiory danych nie zawsze są w pełni open source i często mają bardziej ogólny cel i nie są powiązane z konkretnym przypadkiem użycia.

Jak inaczej można przezwyciężyć tę nieefektywność związaną z próbkami danych o niskiej zawartości informacji podczas uczenia modelu?

Z radością ogłaszamy publiczną wersję zapoznawczą inteligentnego przesiewania, nowej funkcji programu SageMaker, która może obniżyć koszty uczenia modeli głębokiego uczenia się nawet o 35%. Inteligentne przesiewanie to nowa technika zwiększająca wydajność danych, która aktywnie analizuje próbki danych podczas szkolenia i odfiltrowuje próbki, które dostarczają mniej informacji dla modelu. Dzięki uczeniu mniejszego podzbioru danych i tylko tych próbek, które w największym stopniu przyczyniają się do zbieżności modelu, całkowite szkolenie i koszty zmniejszają się przy minimalnym wpływie na dokładność lub bez niego. Ponadto, ponieważ funkcja działa online podczas uczenia modelu, inteligentne przesiewanie nie wymaga zmian w danych wejściowych ani w potoku szkoleniowym.

W tym poście omawiamy następujące tematy:

  • Nowa funkcja inteligentnego przesiewania w SageMaker i sposób jej działania
  • Jak korzystać z inteligentnego przesiewania w przypadku obciążeń szkoleniowych PyTorch

Możesz również sprawdzić nasze dokumentacja i przykładowe zeszyty aby uzyskać dodatkowe zasoby dotyczące rozpoczęcia inteligentnego przesiewania.

Jak działa inteligentne przesiewanie SageMaker

Rozpoczynamy ten post od przeglądu tego, jak funkcja inteligentnego przesiewania może przyspieszyć szkolenie modeli w SageMaker.

Zadaniem inteligentnego przesiewania jest przesiewanie danych szkoleniowych podczas procesu uczenia i dostarczanie do modelu wyłącznie próbek zawierających więcej informacji. Podczas typowego treningu z PyTorch dane są iteracyjnie wysyłane partiami do pętli treningowej i do urządzeń akcelerujących (na przykład procesorów graficznych lub chipów Trainium) przez Program ładujący dane PyTorch. Inteligentne przesiewanie jest wdrażane na tym etapie ładowania danych i dlatego jest niezależne od wstępnego przetwarzania danych w potoku szkoleniowym.

Inteligentne przesiewanie wykorzystuje Twój model i określoną przez użytkownika funkcję utraty, aby wykonać oceniające przejście do przodu każdej próbki danych podczas jej ładowania. Próbki o dużych stratach będą miały istotny wpływ na szkolenie modelu i dlatego są wykorzystywane w szkoleniu; próbki danych, które charakteryzują się stosunkowo niskimi stratami, są odkładane i wykluczane ze szkolenia.

Kluczowym elementem inteligentnego przesiewania jest proporcja danych, które należy wykluczyć: na przykład ustawiając proporcję na 33% (wartość beta = 0.5), próbki w przybliżeniu w dolnej jednej trzeciej utraty każdej partii zostaną wykluczone z uczenia. Kiedy zostanie zidentyfikowana wystarczająca liczba próbek o wysokich stratach, aby ukończyć partię, dane są przesyłane w pełnej pętli szkoleniowej, a model uczy się i trenuje normalnie. Nie musisz wprowadzać żadnych zmian w pętli treningowej, gdy włączone jest inteligentne przesiewanie.

Poniższy diagram ilustruje ten przepływ pracy.

Przyspiesz szkolenie modeli głębokiego uczenia się nawet o 35% dzięki inteligentnemu przesiewaniu Amazon SageMaker | Amazon Web Services PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Uwzględniając tylko podzbiór danych szkoleniowych, inteligentne przesiewanie skraca czas i obliczenia potrzebne do uczenia modelu. W naszych testach osiągnęliśmy aż o prawie 40% redukcję całkowitego czasu i kosztów szkolenia. Dzięki inteligentnemu przesiewaniu danych wpływ na dokładność modelu może być minimalny lub żaden, ponieważ wykluczone próbki powodowały stosunkowo niewielkie straty dla modelu. W poniższej tabeli przedstawiamy zestaw wyników eksperymentalnych pokazujących poprawę wydajności możliwą dzięki inteligentnemu przesiewaniu SageMaker.

Przyspiesz szkolenie modeli głębokiego uczenia się nawet o 35% dzięki inteligentnemu przesiewaniu Amazon SageMaker | Amazon Web Services PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

W tabeli kolumna % zaakceptowanych wskazuje proporcję danych uwzględnionych i wykorzystanych w pętli szkoleniowej. Zwiększanie tego regulowanego parametru zmniejsza koszt (jak pokazano w kolumnie % oszczędności IMR), ale może również wpływać na dokładność. Odpowiednie ustawienie % zaakceptowanych jest funkcją zbioru danych i modelu; należy poeksperymentować i dostroić ten parametr, aby osiągnąć najlepszą równowagę pomiędzy obniżonymi kosztami i wpływem na dokładność.

Omówienie rozwiązania

W poniższych sekcjach omówimy praktyczny przykład umożliwienia inteligentnego przesiewania za pomocą zadania szkoleniowego PyTorch w SageMaker. Jeśli chcesz szybko zacząć, możesz przejść do Przykłady PyTorch lub PyTorch Lightning.

Wymagania wstępne

Zakładamy, że wiesz już, jak wytrenować model za pomocą PyTorch lub PyTorch Lightning, używając SageMaker Python SDK i klasy Estimator, używając do szkolenia SageMaker Deep Learning Containers. Jeśli nie, patrz Korzystanie z pakietu SageMaker Python SDK przed kontynuowaniem.

Zacznij korzystać z inteligentnego przesiewania SageMaker

W typowym zadaniu szkoleniowym PyTorch inicjujesz szkolenie PyTorch Ładowarka danych ze zbiorem danych i innymi wymaganymi parametrami, co zapewnia partie wejściowe w miarę postępu szkolenia. Aby umożliwić inteligentne przesiewanie danych treningowych, użyjesz nowego DataLoader klasa: smart_sifting.dataloader.sift_dataloader.SiftingDataloader. Ta klasa jest używana jako opakowanie na istniejącym PyTorch DataLoader i zamiast tego zostanie użyty proces szkolenia SiftingDataloader aby uzyskać partie wejściowe. The SiftingDataLoader pobiera partię wejściową z oryginalnego PyTorch DataLoader, ocenia znaczenie próbek w partii i konstruuje przesianą partię z próbek o dużej stracie, które następnie przekazuje się do etapu uczenia. Opakowanie wygląda jak następujący kod:

from smart_sifting.dataloader.sift_dataloader import SiftingDataloader train_dataloader = SiftingDataloader( sift_config = sift_config, orig_dataloader=DataLoader(self.train, self.batch_size, shuffle=True), loss_impl=BertLoss(), model=self.model
)

Połączenia SiftingDataloader wymaga dodatkowych parametrów do analizy danych treningowych, które można określić za pomocą opcji sift_config parametr. Najpierw utwórz smart_sifting.sift_config.sift_configs.RelativeProbabilisticSiftConfig obiekt. Obiekt ten zawiera konfigurowalne i wymagane beta_value i loss_history_length, które odpowiednio definiują proporcję próbek, które należy zachować, oraz okno próbek, które należy uwzględnić przy ocenie straty względnej. Należy pamiętać, że ponieważ inteligentne przesiewanie wykorzystuje Twój model do określenia ważności próbki, użycie modelu z całkowicie losowymi wagami może mieć negatywne konsekwencje. Zamiast tego możesz użyć loss_based_sift_config oraz sift_delay opóźnić proces przesiewania do czasu, aż wagi parametrów w modelu zostaną zaktualizowane poza wartościami losowymi. (Więcej szczegółów znajdziesz w Zastosuj inteligentne przesiewanie do swojego skryptu szkoleniowego.) W poniższym kodzie definiujemy sift_config i określić beta_value i loss_history_length, a także opóźnić rozpoczęcie przesiewania za pomocą loss_based_sift_config:

from smart_sifting.sift_config.sift_configs import RelativeProbabilisticSiftConfig, LossConfig, SiftingBaseConfig sift_config = RelativeProbabilisticSiftConfig( beta_value=3, loss_history_length=500, loss_based_sift_config=LossConfig( sift_config=SiftingBaseConfig(sift_delay=10) )
)

Następnie musisz także dołączyć a loss_impl parametr w SiftingDataloader obiekt. Inteligentne przesiewanie działa na poziomie indywidualnej próbki i kluczowy jest dostęp do metody obliczania strat, aby określić znaczenie próbki. Należy zaimplementować metodę przesiewania strat, która zwraca tensor nx1, który przechowuje wartości strat n próbek. Zwykle określasz tę samą metodę straty, z której korzystasz model podczas treningu. Na koniec umieść wskaźnik do swojego modelu w pliku SiftingDataloader obiekt, który służy do oceny próbek przed włączeniem ich do szkolenia. Zobacz następujący kod:

from smart_sifting.sift_config.sift_configs import RelativeProbabilisticSiftConfig, LossConfig, SiftingBaseConfig ## Defining Sift loss
class SiftBertLoss(Loss): # You should add the following initializaztion function # to calculate loss per sample, not per batch. def __init__(self): self.celoss = torch.nn.CrossEntropyLoss(reduction='none') def loss( self, model: torch.nn.Module, transformed_batch: SiftingBatch, original_batch: Any = None, ) -> torch.Tensor: device = next(model.parameters()).device batch = [t.to(device) for t in original_batch] # compute loss outputs = model(batch) return self.celoss(outputs.logits, batch[2]) ....
.... train_dataloader = SiftingDataloader( sift_config = sift_config, orig_dataloader=DataLoader(self.train, self.batch_size, shuffle=True), loss_impl=SiftBertLoss(), model=self.model
)

Poniższy kod przedstawia pełny przykład włączania inteligentnego przesiewania w ramach istniejącego zadania szkoleniowego BERT:

from smart_sifting.dataloader.sift_dataloader import SiftingDataloader
from smart_sifting.loss.abstract_sift_loss_module import Loss
from smart_sifting.sift_config.sift_configs import RelativeProbabilisticSiftConfig, LossConfig, SiftingBaseConfig
...
...
... ## Defining Sift loss
class SiftBertLoss(Loss): # You should add the following initializaztion function # to calculate loss per sample, not per batch. def __init__(self): self.celoss = torch.nn.CrossEntropyLoss(reduction='none') def loss( self, model: torch.nn.Module, transformed_batch: SiftingBatch, original_batch: Any = None, ) -> torch.Tensor: device = next(model.parameters()).device batch = [t.to(device) for t in original_batch] # compute loss outputs = model(batch) return self.celoss(outputs.logits, batch[2]) .... .... .... sift_config = RelativeProbabilisticSiftConfig( beta_value=3, loss_history_length=500, loss_based_sift_config=LossConfig( sift_config=SiftingBaseConfig(sift_delay=10) )
) train_dataloader = SiftingDataloader( sift_config = sift_config, orig_dataloader=DataLoader(self.train, self.batch_size, shuffle=True), loss_impl=SiftBertLoss(), model=self.model
) ...... # use train_dataloader in the rest of the training logic.

Wnioski

W tym poście omówiliśmy publiczną wersję zapoznawczą inteligentnego przesiewania, nowej funkcji SageMaker, która może obniżyć koszty szkolenia w zakresie modeli głębokiego uczenia się nawet o 35%. Ta funkcja poprawia wydajność danych podczas uczenia, które odfiltrowuje próbki danych o mniejszej zawartości informacji. Uwzględniając tylko te dane, które mają największy wpływ na zbieżność modelu, można znacznie skrócić czas i koszty szkolenia, zachowując jednocześnie dokładność. Co więcej, płynnie integruje się z istniejącymi procesami, bez konieczności wprowadzania zmian w danych lub procesie szkoleniowym.

Aby głębiej poznać inteligentne przesiewanie SageMaker, sprawdzić, jak to działa i wdrożyć je za pomocą obciążeń szkoleniowych PyTorch, zapoznaj się z naszym dokumentacja i przykładowe zeszyty i zacznij korzystać z tej nowej możliwości.


O autorach

Przyspiesz szkolenie modeli głębokiego uczenia się nawet o 35% dzięki inteligentnemu przesiewaniu Amazon SageMaker | Amazon Web Services PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.Roberta Van Dusena jest starszym menedżerem produktu w Amazon SageMaker. Prowadzi frameworki, kompilatory i techniki optymalizacji do szkoleń głębokiego uczenia się.

Przyspiesz szkolenie modeli głębokiego uczenia się nawet o 35% dzięki inteligentnemu przesiewaniu Amazon SageMaker | Amazon Web Services PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.K Lokesh Kumar Reddy jest starszym inżynierem w zespole Amazon Applied AI. Koncentruje się na skutecznych technikach szkoleniowych ML i budowaniu narzędzi usprawniających konwersacyjne systemy AI. W wolnym czasie lubi szukać nowych kultur, nowych doświadczeń i być na bieżąco z najnowszymi trendami technologicznymi.

Przyspiesz szkolenie modeli głębokiego uczenia się nawet o 35% dzięki inteligentnemu przesiewaniu Amazon SageMaker | Amazon Web Services PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.Abhiszek Dan jest starszym menedżerem ds. deweloperów w zespole Amazon Applied AI i pracuje nad systemami uczenia maszynowego i konwersacyjnymi systemami AI. Pasjonuje się technologiami sztucznej inteligencji i działa na styku nauki i inżynierii, rozwijając możliwości systemów sztucznej inteligencji w celu tworzenia bardziej intuicyjnych i płynnych interakcji człowiek-komputer. Obecnie tworzy aplikacje na dużych modelach językowych, aby zwiększyć wydajność i ulepszyć CX dla Amazon.

Znak czasu:

Więcej z Uczenie maszynowe AWS