Compreender o formato do modelo MLflow
MLflow usa o formato MLModel para armazenar todos os ativos de modelo relevantes em uma pasta ou diretório. Um arquivo essencial no diretório é o arquivo MLmodel
. O arquivo MLmodel
é a única fonte de verdade sobre como o modelo deve ser carregado e usado.
Explore o formato de arquivo MLmodel
O ficheiro MLmodel
pode incluir:
-
artifact_path
: Durante o trabalho de treinamento, o modelo é registrado nesse caminho. -
flavor
: A biblioteca de aprendizado de máquina com a qual o modelo foi criado. -
model_uuid
: O identificador único do modelo registado. -
run_id
: O identificador exclusivo da execução do trabalho durante o qual o modelo foi criado. -
signature
: Especifica o esquema das entradas e saídas do modelo:-
inputs
: Entrada válida para o modelo. Por exemplo, um subconjunto do conjunto de dados de treinamento. -
outputs
: Saída de modelo válida. Por exemplo, previsões de modelo para o conjunto de dados de entrada.
-
Um exemplo de um arquivo MLmodel criado para um modelo de visão computacional treinado com fastai
pode se parecer com:
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]}
}]'
As definições mais importantes são o sabor e a assinatura .
Escolha o sabor
Uma versão é a biblioteca de aprendizado de máquina pela qual o modelo foi criado.
Por exemplo, para criar um modelo de classificação de imagem para detetar o câncer de mama, você está usando fastai
. Fastai é um formato no MLflow que indica como um modelo deve ser armazenado e carregado. Como cada sabor de modelo indica como eles desejam persistir e carregar modelos, o formato MLModel não impõe um único mecanismo de serialização que todos os modelos precisam suportar. Tal decisão permite que cada sabor use os métodos que fornecem o melhor desempenho ou melhor suporte de acordo com suas melhores práticas - sem comprometer a compatibilidade com o padrão MLModel.
Python function
flavor é a interface padrão de modelo para modelos criados a partir de uma execução MLflow. Qualquer modelo python MLflow pode ser carregado como um modelo python_function
, o que permite que fluxos de trabalho como deployment funcionem com qualquer modelo python, independentemente de qual estrutura foi usada para produzir o modelo. Essa interoperabilidade é imensamente poderosa, pois reduz o tempo de operacionalização em vários ambientes.
Um exemplo do tipo da função Python pode parecer-se com:
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"}]'
Configurar a assinatura
Além dos sabores, o arquivo MLmodel
também contém assinaturas que servem como contratos de dados entre o modelo e o servidor que executa o modelo.
Existem dois tipos de assinaturas:
-
Column-based: usado para dados tabulares com um
pandas.Dataframe
como entradas. -
baseado em Tensor: usado para matrizes ou tensores n-dimensionais (muitas vezes usados para dados não estruturados, como texto ou imagens), com
numpy.ndarray
como entradas.
Como o arquivo MLmodel
é criado quando você registra o modelo, a assinatura também é criada quando você registra o modelo. Quando se habilita o registro automático do MLflow, a assinatura é inferida da melhor forma possível. Se quiser que a assinatura seja diferente, você precisa registrar manualmente o modelo.
As entradas e saídas da assinatura são importantes ao implantar seu modelo. Quando você usa a implantação sem código do Azure Machine Learning para modelos MLflow, as entradas e saídas definidas na assinatura serão impostas. Em outras palavras, quando você envia dados para um modelo MLflow implantado, as entradas e saídas esperadas precisam corresponder ao esquema conforme definido na assinatura.
Dica
Saiba mais sobre as assinaturas de modelo no MLflow.