Entender o formato do modelo do MLflow
O 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 um modelo deve ser carregado e usado.
Explorar o formato de arquivo MLmodel
O arquivo MLmodel
pode incluir:
artifact_path
: durante o trabalho de treinamento, o modelo é registrado nesse caminho.flavor
: biblioteca de machine learning com a qual o modelo foi criado.model_uuid
: identificador exclusivo do modelo registrado.run_id
: identificador exclusivo da execução de trabalho durante a 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 válida do modelo. Por exemplo, previsões de modelo para o conjunto de dados de entrada.
Um exemplo do arquivo MLmodel criado para um modelo de pesquisa visual computacional treinado com fastai
pode ser semelhante a:
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 coisas mais importantes a serem definidas são a variante e a assinatura.
Escolher a variante
Uma variante é a biblioteca de machine learning com a qual o modelo foi criado.
Por exemplo, para criar um modelo de classificação de imagem capaz de detectar o câncer de mama você está usando fastai
. O Fastai é uma variante do MLflow que informa como um modelo deve ser persistente e carregado. Como cada variante de modelo indica como deseja persistir e carregar modelos, o formato MLModel não impõe um só mecanismo de serialização a que todos os modelos precisam dar suporte. Essa decisão permite que cada variante use os métodos que proporcionam o melhor desempenho ou o melhor suporte de acordo com as respectivas melhores práticas, sem comprometer a compatibilidade com o padrão MLModel.
A variante Python function
é a interface de modelo padrão para modelos criados com base em uma execução do MLflow. Qualquer modelo Python do MLflow pode ser carregado como um modelo python_function
, o que permite que fluxos de trabalho como a implantação funcionem com qualquer modelo do 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 da variante da função Python pode ser semelhante a:
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 das variantes, o arquivo MLmodel
também contém assinaturas que servem como contratos de dados entre o modelo e o servidor que executa seu modelo.
Há dois tipos de assinaturas:
- Baseado em coluna: usado para dados tabulares tendo
pandas.Dataframe
como entradas. - Baseado em Tensor: usado para matrizes ou tensores multidimensionais (geralmente usados para dados não estruturados, como textos ou imagens), tendo
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 você habilita o registro automático em log do MLflow, a assinatura é inferida da melhor maneira possível. Se você quiser que a assinatura seja diferente, será necessário 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 do 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 assinaturas de modelo no MLflow.