¿Cuáles son las mejores prácticas para guardar, almacenar y compartir modelos de aprendizaje automático?
En Python, generalmente almacenamos la representación binaria del modelo, usando pickle o joblib. Los modelos, en mi caso, pueden ser ~ 100Mo más grandes. Además, joblib puede guardar un modelo en varios archivos a menos que establezca compress=1
( /programming/33497314/sklearn-dumping-model-using-joblib-dumps-multiple-files-which-one-is-the- corre ).
Pero entonces, si desea controlar los derechos de acceso a los modelos y poder usar modelos de diferentes máquinas, ¿cuál es la mejor manera de almacenarlos?
Tengo algunas opciones:
- Almacénelos como archivos y luego póngalos en un repositorio usando Git LFS
- Almacénelos en una base de datos SQL como archivos binarios:
- Por ejemplo, en Postgresql https://wiki.postgresql.org/wiki/BinaryFilesInDB
- Este es también el método recomendado por el equipo de 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
Respuestas:
Puede echar un vistazo a nexus o dvc o datmo .
Recientemente hubo una presentación en una reunión en Berlín, reunión de ingeniería de datos de AI de Zalandos .
fuente
Enfrenté este problema (y todavía lo enfrento hoy) durante muchos años. Realmente creo que, si no proporciona requisitos detallados, no puede esperar una respuesta seria. Me explico con ejemplos de mi trabajo:
Regularmente intento múltiples variaciones del mismo modelo para encontrar qué parámetros funcionan mejor. Lleva varios días entrenar un solo modelo que produce algunos resultados que luego se utilizan para la evaluación. Para hacerlo, hago un simple volcado NumPy del modelo, ya que es fácil compartirlo entre servidores o colegas. Debe evitar el encurtido ya que almacena mucho más (instancias de clase, bibliotecas ...) que solo los parámetros aprendidos por su modelo. Importar el modelo en otra máquina podría no funcionar si el entorno de Python difiere ligeramente.
Al impulsar un modelo en producción, necesito 1) una versión del modelo que pueda cargar rápidamente en caso de una falla del servidor (generalmente un formato binario, almacenando solo lo que es necesario, como los pesos de una red neuronal) y 2) un manera de mantener el modelo en RAM para manejar rápidamente las solicitudes de API.
Para dos propósitos diferentes, necesito tres formatos diferentes. Luego, en términos más generales, la elección del formato depende de las herramientas que utilice. Por ejemplo, si trabaja con TensorFlow, podría estar interesado en su sistema de servicio TensorFlow
fuente
Me gustaría sugerir 2 enfoques más.
Almacénelos en el almacenamiento de documentos (por ejemplo, mongoDB) : este método se recomienda cuando los archivos de su modelo tienen menos de 16Mb (o los fragmentos de la barra de trabajo son), luego puede almacenar el modelo como datos binarios. Además, algunas bibliotecas ML admiten la exportación e importación de modelos en json (por ejemplo, LightGBM), lo que lo convierte en un candidato perfecto para el almacenamiento en el almacenamiento de documentos. Ventajas : fácil seguimiento de la generación del modelo y fácil acceso. Desventajas : las cosas se complicarán si el objeto del modelo es demasiado grande.
Almacene su modelo en el almacenamiento de objetos (por ejemplo, Amazon S3) : este método es bueno si sus modelos son muy grandes, en este caso obtiene almacenamiento ilimitado y API bastante fácil, paga más, eso es seguro. Ventajas : espacio ilimitado y capacidad para almacenar formatos de archivo arbitrarios. Desventajas : costo y el hecho de que para hacerlo bien necesitará desarrollar su propio sistema de seguimiento.
¡buena suerte!
fuente