Najlepsze praktyki przechowywania modeli uczenia maszynowego w języku Python

24

Jakie są najlepsze praktyki zapisywania, przechowywania i udostępniania modeli uczenia maszynowego?

W Pythonie przechowujemy binarną reprezentację modelu za pomocą marynaty lub joblib. Modele w moim przypadku mogą być ~ 100 milionów dużych. Joblib może również zapisać jeden model do wielu plików, chyba że ustawisz compress=1( /programming/33497314/sklearn-dumping-model-using-joblib-dumps-multiple-files-which-one-is-the- corre ).

Ale jeśli chcesz kontrolować prawa dostępu do modeli i móc korzystać z modeli z różnych komputerów, jaki jest najlepszy sposób ich przechowywania?

Mam kilka możliwości:

Antoine Dusséaux
źródło
Czy udało ci się to zrobić skutecznie?
iNet

Odpowiedzi:

2

Od wielu lat borykam się z tym problemem (i nadal mam go dzisiaj). Naprawdę uważam, że jeśli nie podasz szczegółowych wymagań, nie możesz oczekiwać poważnej odpowiedzi. Tłumaczę się przykładami mojej pracy:

  • Regularnie wypróbowuję wiele odmian tego samego modelu, aby znaleźć najlepsze parametry. Przećwiczenie jednego modelu zajmuje kilka dni, co daje pewne wyniki, które później są wykorzystywane do oceny. Aby to zrobić, wykonuję prosty zrzut NumPy modelu, ponieważ łatwo jest go udostępnić między serwerami lub współpracownikami. Powinieneś unikać piklowania, ponieważ przechowuje on znacznie więcej (instancje klas, biblioteki ...) niż tylko parametry wyuczone przez twój model. Importowanie modelu na innym komputerze może nie działać, jeśli środowisko Pythona nieco się różni.

  • Podczas przekazywania modelu do produkcji potrzebuję 1) wersji modelu, którą mogę szybko załadować w przypadku awarii serwera (zazwyczaj format binarny, przechowujący tylko to, co jest konieczne, takie jak wagi sieci neuronowej) i 2) a sposób na utrzymanie modelu w pamięci RAM, aby szybko obsłużyć żądania API.

Do dwóch różnych celów potrzebuję trzech różnych formatów. Mówiąc bardziej ogólnie, wybór formatu zależy od używanych narzędzi. Na przykład, jeśli pracujesz z TensorFlow, możesz być zainteresowany ich systemem do obsługi TensorFlow

Rudzik
źródło
1

Chciałbym zasugerować jeszcze 2 podejścia.

  1. Przechowuj je w pamięci dokumentów (np. MongoDB) - ta metoda jest zalecana, gdy pliki modelu mają mniej niż 16 Mb (lub odłamki zadania), a następnie możesz przechowywać model jako dane binarne. ponadto niektóre biblioteki ML obsługują eksport i import modelu w json (np. LightGBM), co czyni go idealnym kandydatem do przechowywania w pamięci dokumentów. Zalety : łatwe śledzenie generowania modelu i łatwy dostęp, Wady : rzeczy staną się niechlujne, jeśli obiekt modelu jest zbyt duży.

  2. Przechowuj swój model w pamięci obiektu (np. Amazon S3) - ta metoda jest dobra, jeśli twoje modele są bardzo duże, w tym przypadku otrzymujesz nieograniczoną przestrzeń do przechowywania i dość łatwe API, płacisz więcej, to na pewno. Zalety : Nieograniczona przestrzeń i możliwość przechowywania dowolnych formatów plików. Wady : koszt i fakt, że aby zrobić to dobrze, musisz opracować własny system śledzenia.

powodzenia!

Roy Miara
źródło