Pular para o conteúdo principal

modelos de dependências registradas

Neste artigo, o senhor aprenderá a log um modelo e suas dependências como artefatos de modelo, para que estejam disponíveis em seu ambiente para tarefas de produção, como servir o modelo.

registro Python pacote model dependencies

MLflow tem suporte nativo para algumas Python ML bibliotecas, nas quais a MLflow pode, de forma confiável, log dependências para modelos que usam essas bibliotecas. Veja os sabores do modelo integrado.

Por exemplo, o site MLflow é compatível com scikit-learn no módulo mlflow.sklearn e com o comando mlflow.sklearn.logs logs a versão sklearn. O mesmo se aplica ao autologging com a ML biblioteca. Consulte o repositório MLflow no github para obter exemplos adicionais.

nota

Para habilitar o registro de rastreamento para cargas de trabalho generativas do AI, o MLflow oferece suporte ao autologging do OpenAI.

Para as ML bibliotecas que podem ser instaladas com pip install PACKAGE_NAME==VERSION, mas não têm sabores de modelo MLflow integrados, o senhor pode log esses pacotes usando o mlflow.pyfunc.logs método. Não deixe de acessar log 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 o registro para:

  • Biblioteca pública e personalizada pacote como Python egg ou Python wheel files.
  • Pacote público em PyPI e pacote hospedado de forma privada em seu próprio servidor PyPI.

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

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

important

O senhor também pode sobrescrever todo o conjunto de requisitos com os parâmetros conda_env e pip_requirements, mas isso geralmente não é recomendável porque substitui as dependências que o MLflow capta automaticamente. Veja um exemplo de como usar o parâmetropip_requirements para substituir os requisitos.

Registro de modelos personalizados

Para cenários em que um registro de modelo mais personalizado é necessário, você pode:

  • 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 a personalização de modelos somente em Python.

  • Escreva um sabor personalizado. Nesse cenário, você pode personalizar o registro mais do que o tipo genérico pyfunc, mas isso exige mais trabalho para ser implementado.

Código Python personalizado

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

Ao registrar um modelo, o senhor pode informar ao MLflow que o modelo pode encontrar essas dependências em um caminho especificado usando o parâmetro code_path em mlflow.pyfunc.logs. 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. Essa rota também funciona com arquivos Python wheel personalizados, que podem ser incluídos no modelo usando code_path, assim como os arquivos .py.

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

log non-Python pacote model dependencies

MLflow não coleta automaticamente dependências que não sejam doPython, como Java pacote, R pacote e pacote nativo (como o Linux pacote). Para esse pacote, o senhor precisa acessar log dados adicionais.

  • Lista de dependências: A Databricks recomenda o registro de um artefato com o modelo especificando essas dependências não-Python. Pode ser um simples arquivo .txt ou .json. mlflow.pyfunc.logs permite que você especifique esse artefato adicional usando o argumento artifacts.
  • Pacote personalizado: Assim como no caso das dependências personalizadas do Python acima, o senhor precisa garantir que o pacote esteja disponível no seu ambiente de implementação. Para o pacote em um local central, como o Maven Central ou seu próprio repositório, certifique-se de que o local esteja disponível no momento da pontuação ou da veiculação. Para pacote privado não hospedado em outro lugar, o senhor pode log pacote junto com o modelo como artefatos.

modelos implantados com dependências

Ao atualizar um modelo do MLflow Tracking Server ou 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: lotes/transmissão ou atendimento online, e dos tipos de dependências.

Para todos os modos de implementação, o site Databricks recomenda a execução da inferência na mesma versão de tempo de execução usada durante o treinamento, pois o site Databricks Runtime no qual o modelo foi criado tem várias bibliotecas já instaladas. O MLflow no Databricks salva automaticamente essa versão de tempo de execução no arquivo de metadados MLmodel em um campo databricks_runtime, como databricks_runtime: 10.2.x-cpu-ml-scala2.12.

Serviço online: Mosaic AI Model Serving

Databricks oferece o servindo modelo, em que seu MLflow modelo de aprendizado de máquina é exposto como um endpoint REST API escalável.

Para as dependências do Python no arquivo requirements.txt, o Databricks e o MLflow cuidam de tudo para as dependências públicas do PyPI. Da mesma forma, se o senhor especificou arquivos .py ou arquivos Python wheel ao registrar o modelo usando o argumento code_path, o MLflow carrega essas dependências automaticamente.

Para esses cenários do modelo servindo, consulte o seguinte:

Para as dependências do Python no arquivo requirements.txt, o Databricks e o MLflow cuidam de tudo para as dependências públicas do PyPI. Da mesma forma, se o senhor especificou arquivos .py ou arquivos Python wheel ao registrar o modelo usando o argumento code_path, o MLflow carrega essas dependências automaticamente.

Serviço on-line: sistemas de terceiros ou contêineres do Docker

Se o seu cenário exigir o fornecimento de soluções de fornecimento de terceiros ou suas próprias soluções baseadas em Docker, o senhor poderá exportar seu modelo como um contêiner Docker.

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

lotes e transmissão Job

lotes e a pontuação de transmissão devem ser executados como Databricks Jobs. Um Notebook Job geralmente é suficiente, e a maneira mais simples de preparar o código é usar o Databricks Model Registry para gerar um Notebook de pontuação.

O seguinte descreve o processo e as passos a seguir para garantir que as dependências sejam instaladas e aplicadas adequadamente:

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

    • Isso pode ser feito manualmente na configuração do clustering ou automatizado com lógica personalizada. Para automação, o formato da versão de tempo de execução que o senhor lê no arquivo de metadados em Jobs API e clustering API.
  2. Em seguida, instale todas as dependências que não sejam do Python. Para garantir que as dependências não Python estejam acessíveis ao ambiente de implantação, o senhor pode:

    • Instale manualmente as dependências nãoPython do seu modelo no clustering Databricks como parte da configuração do clustering antes de executar a inferência.
    • Como alternativa, o senhor pode escrever uma lógica personalizada na implantação do trabalho de pontuação para automatizar a instalação das dependências no cluster. Supondo que o senhor tenha salvo as dependências que não sãoPython como artefatos, conforme descrito em registro de dependências do modelo de pacote nãoPython, essa automação pode instalar o biblioteca usando o biblioteca API. Ou o senhor pode escrever um código específico para gerar um script de inicialização com escopo de clustering para instalar as dependências.
  3. Seu Job de pontuação instala as dependências do Python no ambiente de execução do Job. Em Databricks, o Model Registry permite gerar um Notebook para inferência que faz isso para o senhor.

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

nota

Se o senhor especificou arquivos .py ou arquivos Python wheel ao registrar o modelo usando o argumento code_path, o MLflow carrega essas dependências automaticamente.