Partilhar via


Dependências do modelo de log

Neste artigo, você aprenderá como registrar um modelo e suas dependências como artefatos de modelo, para que eles estejam disponíveis em seu ambiente para tarefas de produção, como o serviço de modelo.

Registrar dependências do modelo de pacote Python

O MLflow tem suporte nativo para algumas bibliotecas Python ML, onde o MLflow pode registrar de forma confiável dependências para modelos que usam essas bibliotecas. Veja os sabores de modelo incorporados.

Por exemplo, o MLflow suporta scikit-learn no módulo mlflow.sklearn, e o comando mlflow.sklearn.log_model registra a versão do sklearn. O mesmo se aplica ao registro automático com essas bibliotecas de ML. Consulte o repositório github MLflow para obter exemplos adicionais.

Nota

Para habilitar o log de rastreamento para cargas de trabalho de IA generativas, o MLflow suporta o registro automático do OpenAI.

Para bibliotecas de ML que podem ser instaladas com pip install PACKAGE_NAME==VERSIONo , mas não têm sabores de modelo MLflow integrados, você pode registrar esses pacotes usando o método mlflow.pyfunc.log_model . Certifique-se de registrar os requisitos com a versão exata da biblioteca, por exemplo, f"nltk=={nltk.__version__}" em vez de apenas nltk.

mlflow.pyfunc.log_model Suporta registo para:

  • Bibliotecas públicas e personalizadas empacotadas como Python egg ou Python wheel files.
  • Pacotes públicos no PyPI e pacotes hospedados de forma privada em seu próprio servidor PyPI.

Com o mlflow.pyfunc.log_model, o MLflow tenta inferir as dependências automaticamente. MLflow infere as dependências usando mlflow.models.infer_pip_requirements e as registra em um requirements.txt arquivo como um artefato de modelo.

Em versões mais antigas, o MLflow às vezes não identifica todos os requisitos do Python automaticamente, especialmente se a biblioteca não for um modelo integrado. Nesses casos, você pode especificar dependências adicionais com o extra_pip_requirements parâmetro no log_model comando. Veja um exemplo de uso do parâmetro extra_pip_requirements.

Importante

Você também pode substituir todo o conjunto de requisitos pelos parâmetros conda_env e pip_requirements, mas isso geralmente é desencorajado porque substitui as dependências que o MLflow seleciona automaticamente. Veja um exemplo de como usar o pip_requirements parâmetro para substituir requisitos.

Registro de modelo personalizado

Para cenários em que é necessário um registo de modelos mais personalizado, pode optar por uma das seguintes opções:

  • Escreva um modelo Python personalizado. Isso permite que você subclassifique mlflow.pyfunc.PythonModel para personalizar a inicialização e a previsão. Essa abordagem funciona bem para personalização de modelos somente Python.
  • Escreva um sabor personalizado. Nesse cenário, você pode personalizar o log mais do que o sabor genérico pyfunc , mas fazer isso requer mais trabalho para implementar.

Código Python personalizado

Você pode ter dependências de código Python que não podem ser instaladas usando o %pip install comando, como um ou mais .py arquivos.

Ao registrar um modelo, você pode dizer ao MLflow que o modelo pode encontrar essas dependências em um caminho especificado usando o code_path parâmetro em mlflow.pyfunc.log_model. O MLflow armazena todos os arquivos ou diretórios passados usando code_path como artefatos junto com o modelo em um diretório de código. Ao carregar o modelo, o MLflow adiciona esses arquivos ou diretórios ao caminho do Python. Esta rota também funciona com arquivos de roda Python personalizados, que podem ser incluídos no modelo usando code_path, assim como .py arquivos.

mlflow.pyfunc.log_model( artifact_path=artifact_path,
                         code_path=[filename.py],
                         data_path=data_path,
                         conda_env=conda_env,
                       )

Registrar dependências de modelo de pacote não-Python

O MLflow não capta automaticamente dependências não-Python, como pacotes Java, pacotes R e pacotes nativos (como pacotes Linux). Para esses pacotes, você precisa registrar dados adicionais.

  • Lista de dependências: o Databricks recomenda registrar um artefato com o modelo especificando essas dependências não Python. Isso pode ser um simples .txt ou .json arquivo. mlflow.pyfunc.log_model permite especificar esse artefato adicional usando o artifacts argumento.
  • Pacotes personalizados: Assim como para as dependências personalizadas do Python acima, você precisa garantir que os pacotes estejam disponíveis em seu ambiente de implantação. Para pacotes em um local central, como o Maven Central ou seu próprio repositório, certifique-se de que o local esteja disponível na pontuação ou no tempo de serviço. Para pacotes privados não hospedados em outro lugar, você pode registrar pacotes junto com o modelo como artefatos.

Implantar modelos com dependências

Ao implantar um modelo a partir do MLflow Tracking Server ou do Model Registry, você precisa garantir que o ambiente de implantação tenha as dependências corretas instaladas. O caminho mais simples pode depender do seu modo de implantação: lote/streaming ou serviço online e dos tipos de dependências.

Para todos os modos de implantação, o Databricks recomenda executar a inferência na mesma versão de tempo de execução que você usou durante o treinamento, já que o Databricks Runtime no qual você criou seu modelo tem várias bibliotecas já instaladas. MLflow no Databricks salva automaticamente essa versão de tempo de execução no MLmodel arquivo de metadados em um databricks_runtime campo, como databricks_runtime: 10.2.x-cpu-ml-scala2.12.

Servir online: Mosaic AI Model Serving

O Databricks oferece Model Serving, onde seus modelos de aprendizado de máquina MLflow são expostos como pontos de extremidade de API REST escaláveis.

Para dependências Python no requirements.txt arquivo, Databricks e MLflow lidam com tudo para dependências públicas do PyPI. Da mesma forma, se você especificou .py arquivos ou arquivos de roda Python ao registrar o modelo usando o argumento, o code_path MLflow carregará essas dependências para você automaticamente.

Para esses cenários de serviço de modelo, consulte o seguinte:

Para dependências Python no requirements.txt arquivo, Databricks e MLflow lidam com tudo para dependências públicas do PyPI. Da mesma forma, se você especificou .py arquivos ou arquivos de roda Python ao registrar o modelo usando o argumento, o code_path MLflow carregará essas dependências para você automaticamente.

Atendimento online: sistemas de terceiros ou contêineres Docker

Se o seu cenário exigir servir para soluções de serviço de terceiros ou sua própria solução baseada no Docker, você poderá exportar seu modelo como um contêiner do Docker.

O Databricks recomenda o seguinte para serviços de terceiros que lidam automaticamente com dependências do Python. No entanto, para dependências não-Python, o contêiner precisa ser modificado para incluí-las.

Trabalhos em lote e streaming

A pontuação em lote e streaming deve ser executada como Databricks Jobs. Um trabalho de bloco de anotações geralmente é suficiente, e a maneira mais simples de preparar o código é usar o Databricks Model Registry para gerar um bloco de anotações de pontuação.

A seguir descrevemos o processo e as etapas a seguir para garantir que as dependências sejam instaladas e aplicadas de acordo:

  1. Inicie seu cluster de pontuação com a mesma versão do Databricks Runtime usada durante o treinamento. Leia o databricks_runtime campo do MLmodel arquivo de metadados e inicie um cluster com essa versão de tempo de execução.

    • Isso pode ser feito manualmente na configuração do cluster ou automatizado com lógica personalizada. Para automação, o formato de versão de tempo de execução que você lê do arquivo de metadados na API de Trabalhos e na API de Clusters.
  2. Em seguida, instale todas as dependências que não sejam do Python. Para garantir que suas dependências não-Python sejam acessíveis ao seu ambiente de implementação, você pode:

  3. Seu trabalho de pontuação instala as dependências do Python no ambiente de execução do trabalho. No Databricks, o Registro Modelo permite que você gere um bloco de anotações para inferência que faz isso por você.

    • Quando você usa o Databricks Model Registry para gerar um bloco de anotações de pontuação, o bloco de anotações contém código para instalar as dependências Python no arquivo requirements.txt do modelo. Para seu trabalho de bloco de anotações para pontuação em lote ou streaming, esse código inicializa seu ambiente de bloco de anotações, para que as dependências do modelo estejam instaladas e prontas para seu modelo.
  4. MLflow lida com qualquer código Python personalizado incluído no code_path parâmetro em log_model. Esse código é adicionado ao caminho Python quando o método do predict() modelo é chamado. Você também pode fazer isso manualmente:

    Nota

    Se você especificou .py arquivos ou arquivos de roda Python ao registrar o modelo usando o argumento, o code_path MLflow carregará essas dependências para você automaticamente.