Descripción del formato de modelos de MLflow
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.