Przewodnik dostrajania wydajności wnioskowania modelu uczenia głębokiego

Ta sekcja zawiera kilka wskazówek dotyczących debugowania i dostrajania wydajności na potrzeby wnioskowania modelu w usłudze Azure Databricks. Aby zapoznać się z omówieniem, zobacz przepływ pracy wnioskowania uczenia głębokiego.

Zazwyczaj istnieją dwie główne części wnioskowania modelu: potok danych wejściowych i wnioskowanie modelu. Potok danych wejściowych jest duży w przypadku danych wejściowych we/wy, a wnioskowanie modelu jest duże na obliczeniach. Określenie wąskiego gardła przepływu pracy jest proste. Oto kilka przykładowych podejść:

  • Zmniejsz model do prostego modelu i zmierz przykłady na sekundę. Jeśli różnica czasu zakończenia między pełnym modelem a modelem trywialnym jest minimalna, potok danych wejściowych prawdopodobnie jest wąskim gardłem, w przeciwnym razie wnioskowanie modelu jest wąskim gardłem.
  • Jeśli uruchomiono wnioskowanie modelu z procesorem GPU, sprawdź metryki użycia procesora GPU. Jeśli wykorzystanie procesora GPU nie jest stale wysokie, potok danych wejściowych może być wąskim gardłem.

Optymalizowanie potoku danych wejściowych

Użycie procesorów GPU umożliwia efektywne optymalizowanie szybkości działania na potrzeby wnioskowania modelu. Ponieważ procesory GPU i inne akceleratory stają się szybsze, ważne jest, aby potok danych wejściowych nadążał za zapotrzebowaniem. Potok danych wejściowych odczytuje dane w ramkach danych platformy Spark, przekształca je i ładuje je jako dane wejściowe dla wnioskowania modelu. Jeśli dane wejściowe są wąskim gardłem, oto kilka wskazówek dotyczących zwiększenia przepływności operacji we/wy:

  • Ustaw maksymalną liczbę rekordów na partię. Większa liczba maksymalnych rekordów może zmniejszyć obciążenie we/wy w celu wywołania funkcji UDF, o ile rekordy mogą mieścić się w pamięci. Aby ustawić rozmiar partii, ustaw następującą konfigurację:

    spark.conf.set("spark.sql.execution.arrow.maxRecordsPerBatch", "5000")
    
  • Załaduj dane w partiach i pobierz je wstępnie podczas wstępnego przetwarzania danych wejściowych w funkcji zdefiniowanej przez użytkownika biblioteki pandas.

    W przypadku biblioteki TensorFlow usługa Azure Databricks zaleca korzystanie z interfejsu API tf.data. Możesz przeanalizować mapę równolegle, ustawiając num_parallel_calls funkcję i wywołaj prefetch metodę map oraz batch w celu wstępnego pobierania i przetwarzania wsadowego.

    dataset.map(parse_example, num_parallel_calls=num_process).prefetch(prefetch_size).batch(batch_size)
    

    W przypadku usługi PyTorch usługa Azure Databricks zaleca używanie klasy DataLoader. Można ustawić batch_size na potrzeby przetwarzania wsadowego i num_workers ładowania danych równoległych.

    torch.utils.data.DataLoader(images, batch_size=batch_size, num_workers=num_process)