Descripción del formato de modelos de MLflow

Completado

MLflow usa el formato MLModel para almacenar todos los recursos del modelo pertinentes en una carpeta o directorio. Un archivo esencial en el directorio es el archivo MLmodel. El archivo MLmodel es la única fuente de verdad sobre cómo se debería cargar y usar un modelo.

Exploración del formato de archivo MLmodel

El archivo MLmodel puede incluir lo siguiente:

  • artifact_path: durante el trabajo de entrenamiento, el modelo se registra en esta ruta de acceso.
  • flavor: la biblioteca de aprendizaje automático con la que se creó el modelo.
  • model_uuid: el identificador único del modelo registrado.
  • run_id: el identificador único de la ejecución del trabajo durante el cual se creó el modelo.
  • signature: Especifica el esquema de las entradas y salidas del modelo:
    • inputs: entrada válida para el modelo. Por ejemplo, un subconjunto del conjunto de datos de entrenamiento.
    • outputs: salida válida del modelo. Por ejemplo, las predicciones del modelo para el conjunto de datos de entrada.

Un ejemplo de un archivo MLmodel creado para un modelo de Computer Vision entrenado con fastai puede tener el siguiente aspecto:

artifact_path: classifier
flavors:
  fastai:
    data: model.fastai
    fastai_version: 2.4.1
  python_function:
    data: model.fastai
    env: conda.yaml
    loader_module: mlflow.fastai
    python_version: 3.8.12
model_uuid: e694c68eba484299976b06ab9058f636
run_id: e13da8ac-b1e6-45d4-a9b2-6a0a5cfac537
signature:
  inputs: '[{"type": "tensor",
             "tensor-spec": 
                 {"dtype": "uint8", "shape": [-1, 300, 300, 3]}
           }]'
  outputs: '[{"type": "tensor", 
              "tensor-spec": 
                 {"dtype": "float32", "shape": [-1,2]}
            }]'

Los elementos más importantes que se deben establecer son el tipo y la firma.

Elegir el tipo

El tipo es la biblioteca de aprendizaje automático con la que se creó el modelo.

Por ejemplo, para crear un modelo de clasificación de imágenes para detectar el cáncer de mama, utiliza fastai. Fastai es un tipo en MLflow que indica cómo se debe conservar y cargar un modelo. Dado que cada tipo de modelo indica cómo deben conservarse y cargarse los modelos, el formato MLModel no impone un único mecanismo de serialización que todos los modelos deban admitir. Esta decisión permite que cada tipo use los métodos que proporcionan el mejor rendimiento o la mejor compatibilidad según sus procedimientos recomendados, sin poner en peligro la compatibilidad con el estándar MLModel.

Python function el tipo es la interfaz de modelo predeterminada para los modelos creados a partir de una ejecución de MLflow. Cualquier modelo de Python de MLflow se puede cargar como modelo python_function, lo que permite que los flujos de trabajo, como la implementación, funcionen con cualquier modelo de Python, independientemente del marco que se haya usado para generar el modelo. Esta interoperabilidad es inmensamente eficaz, ya que reduce el tiempo de puesta en marcha en varios entornos.

Un ejemplo del tipo de función de Python puede tener el siguiente aspecto:


artifact_path: pipeline
flavors:
  python_function:
    env:
      conda: conda.yaml
      virtualenv: python_env.yaml
    loader_module: mlflow.sklearn
    model_path: model.pkl
    predict_fn: predict
    python_version: 3.8.5
  sklearn:
    code: null
    pickled_model: model.pkl
    serialization_format: cloudpickle
    sklearn_version: 1.2.0
mlflow_version: 2.1.0
model_uuid: b8f9fe56972e48f2b8c958a3afb9c85d
run_id: 596d2e7a-c7ed-4596-a4d2-a30755c0bfa5
signature:
  inputs: '[{"name": "age", "type": "long"}, {"name": "sex", "type": "long"}, {"name":
    "cp", "type": "long"}, {"name": "trestbps", "type": "long"}, {"name": "chol",
    "type": "long"}, {"name": "fbs", "type": "long"}, {"name": "restecg", "type":
    "long"}, {"name": "thalach", "type": "long"}, {"name": "exang", "type": "long"},
    {"name": "oldpeak", "type": "double"}, {"name": "slope", "type": "long"}, {"name":
    "ca", "type": "long"}, {"name": "thal", "type": "string"}]'
  outputs: '[{"name": "target", "type": "long"}]'

Configuración de la firma

Aparte de los tipos, el archivo MLmodel también contiene firmas que sirven como contratos de datos entre el modelo y el servidor que ejecuta el modelo.

Hay dos tipos de firmas:

  • Basado en columnas: se usa para los datos tabulares con pandas.Dataframe a modo de entrada.
  • Basado en tensor: se usa para matrices o tensores unidimensionales (que a menudo se usan para datos no estructurados, como texto o imágenes), con numpy.ndarray a modo de entrada.

Como el archivo MLmodel se crea al registrar el modelo, la firma también se crea al registrar el modelo. Al habilitar el registro automático de MLflow, la firma se deduce de la mejor manera. Si desea que la firma sea diferente, debe registrar manualmente el modelo.

Las entradas y salidas de la firma son importantes al implementar el modelo. Cuando se usa la implementación sin código de Azure Machine Learning para los modelos de MLflow, se aplicarán las entradas y salidas establecidas en la firma. Es decir, cuando se envían datos a un modelo de MLflow implementado, las entradas y salidas esperadas deben coincidir con el esquema tal y como se define en la firma.

Sugerencia

Obtenga más información sobre las firmas de modelo en MLflow.