Compreender o formato do modelo MLflow

Concluído

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.