Quais são as melhores práticas para salvar, armazenar e compartilhar modelos de aprendizado de máquina?
Em Python, geralmente armazenamos a representação binária do modelo, usando pickle ou joblib. Modelos, no meu caso, podem ser ~ 100Mo grandes. Além disso, o joblib pode salvar um modelo em vários arquivos, a menos que você defina compress=1
( /programming/33497314/sklearn-dumping-model-using-joblib-dumps-multiple-files-which-one-is-the- corre ).
Mas então, se você deseja controlar os direitos de acesso aos modelos e poder usar modelos de máquinas diferentes, qual é a melhor maneira de armazená-los?
Eu tenho algumas opções:
- Armazene-os como arquivos e, em seguida, coloque-os em um repositório usando o Git LFS
- Armazene-os em um banco de dados SQL como arquivos binários:
- Por exemplo, no Postgresql https://wiki.postgresql.org/wiki/BinaryFilesInDB
- Este também é o método recomendado pela equipe do 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
Respostas:
Você pode dar uma olhada no nexo ou DVC ou datmo .
Recentemente, houve uma apresentação no meetup em berlim, zalandos AI data engineering meetup.
fonte
Enfrentei esse problema (e ainda o enfrento hoje) por muitos anos. Eu realmente acho que, se você não fornecer requisitos detalhados, não poderá esperar uma resposta séria. Eu me explico com exemplos do meu trabalho:
Eu tento regularmente várias variações do mesmo modelo para descobrir quais parâmetros funcionam melhor. Demora vários dias para treinar um único modelo que produz alguma saída que é usada posteriormente para avaliação. Para fazer isso, faço um simples despejo do NumPy do modelo, pois é fácil compartilhá-lo entre servidores ou colegas. Você deve evitar o pickle, pois ele armazena muito mais (instâncias de classe, bibliotecas ...) do que apenas os parâmetros aprendidos pelo seu modelo. A importação do modelo em outra máquina pode não funcionar se o ambiente python diferir ligeiramente.
Ao enviar um modelo em produção, preciso 1) de uma versão do modelo que possa ser carregada rapidamente em caso de falha do servidor (geralmente em formato binário, armazenando apenas o necessário, como pesos de uma rede neural) e 2) maneira de manter o modelo na RAM para lidar rapidamente com as solicitações da API.
Para dois propósitos diferentes, preciso de três formatos diferentes. Então, de um modo mais geral, a escolha do formato depende das ferramentas que você usa. Por exemplo, se você trabalha com o TensorFlow, pode estar interessado no sistema de TensorFlow Serving
fonte
Eu gostaria de sugerir mais 2 abordagens.
Armazene-os no armazenamento de documentos (por exemplo, mongoDB) - esse método é recomendado quando os arquivos de modelo tiverem menos de 16 Mb (ou os shards do joblib), para poder armazenar o modelo como dados binários. Além disso, algumas bibliotecas ML suportam a exportação e importação de modelos em json (por exemplo, LightGBM), o que o torna um candidato perfeito para armazenamento no armazenamento de documentos. Vantagens : rastreamento fácil da geração de modelos e acesso fácil, Desvantagens : as coisas ficarão confusas se o objeto do modelo for muito grande.
Armazene seu modelo no armazenamento de objetos (por exemplo, Amazon S3) - esse método é bom se seus modelos forem muito grandes; nesse caso, você obtém armazenamento ilimitado e uma API bastante fácil, paga mais, isso é certo. Vantagens : Espaço e capacidade ilimitados para armazenar formatos de arquivos arbitrários. Desvantagens : custo e o fato de que para fazer isso corretamente, você precisará desenvolver seu próprio sistema de rastreamento.
boa sorte!
fonte