Práticas recomendadas para armazenar modelos de aprendizado de máquina Python

24

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:

Antoine Dusséaux
fonte
Você conseguiu uma maneira eficiente de fazer isso?
iNet

Respostas:

2

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

Robin
fonte
1

Eu gostaria de sugerir mais 2 abordagens.

  1. 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.

  2. 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!

Roy Miara
fonte