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.
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.
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.- Para ver um exemplo simples, consulte o exemplo do modelo add N.
- Para obter um exemplo mais complexo, consulte o exemplo de modelo XGBoost personalizado.
-
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
.
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 argumentoartifacts
. - 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:
- Use bibliotecas Python personalizadas com o serviço de modelo
- pacote de artefatos e arquivos personalizados para o servindo modelo
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.
-
MLflow Docker para Dockersoluções de atendimento baseadas em : MLflow modelos construídos pelo senhor.Docker
-
Integração do MLflow com o SageMaker: mlflow.sagemaker API
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:
-
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 metadadosMLmodel
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.
-
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.
-
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.
- 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
-
O MLflow lida com qualquer código Python personalizado incluído no parâmetro
code_path
emlog_model
. Esse código é adicionado ao caminho do Python quando o métodopredict()
do modelo é chamado. Você também pode fazer isso manualmente da seguinte forma:-
Chamando mlflow.pyfunc.spark_udf com o argumento
env_manager=['virtualenv'/'conda']
. -
Extraindo os requisitos usando mlflow.pyfunc.get_model_dependencies e instalá-los usando %pip install.
-
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.