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:
- Zapisz je jako pliki, a następnie umieść w repozytorium za pomocą Git LFS
- Przechowuj je w bazie danych SQL jako pliki binarne:
- Na przykład w Postgresql https://wiki.postgresql.org/wiki/BinaryFilesInDB
- Jest to również metoda zalecana przez zespół SQL Server:
- https://docs.microsoft.com/en-us/sql/advanced-analytics/tutorials/walkthrough-build-and-save-the-model
- https://microsoft.github.io/sql-ml-tutorials/python/rentalprediction/step/3.html
- https://blogs.technet.microsoft.com/dataplatforminsider/2016/10/17/sql-server-as-a-machine-learning-model-management-system
- HDFS
Odpowiedzi:
Być może trzeba spojrzeć na nexus lub DVC lub datmo .
Niedawno odbyła się prezentacja na spotkaniu w Berlinie, spotkanie inżynierii danych zalandos AI .
źródło
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
źródło
Chciałbym zasugerować jeszcze 2 podejścia.
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.
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!
źródło