Use bibliotecas Python personalizadas com o Model Serving

Neste artigo, você aprenderá a incluir bibliotecas personalizadas ou bibliotecas de um servidor espelho privado ao registrar seu modelo, para que possa usá-las com implantações de modelo de serviço de modelo. Você deve concluir as etapas detalhadas neste guia depois de ter um modelo de ML treinado pronto para implantar, mas antes de criar um ponto de extremidade do Azure Databricks Model Service.

O desenvolvimento de modelos geralmente requer o uso de bibliotecas Python personalizadas que contêm funções para pré ou pós-processamento, definições de modelo personalizadas e outros utilitários compartilhados. Além disso, muitas equipes de segurança corporativa incentivam o uso de espelhos PyPi privados, como Nexus ou Artifactory, para reduzir o risco de ataques à cadeia de suprimentos. O Azure Databricks oferece suporte nativo para a instalação de bibliotecas personalizadas e bibliotecas a partir de um espelho privado no espaço de trabalho do Azure Databricks.

Requisitos

  • MLflow 1.29 ou superior

Etapa 1: Carregar arquivo de dependência

O Databricks recomenda que você carregue seu arquivo de dependência para os volumes do Catálogo Unity. Como alternativa, você pode carregá-lo no Sistema de Arquivos Databricks (DBFS) usando a interface do usuário do Azure Databricks.

Para garantir que sua biblioteca esteja disponível para seu bloco de anotações, você precisa instalá-la usando %pip%o . Usar %pip instala a biblioteca no bloco de anotações atual e baixa a dependência para o cluster.

Etapa 2: Registrar o modelo com uma biblioteca personalizada

Importante

A orientação nesta seção não é necessária se você instalar a biblioteca privada apontando para um espelho PyPi personalizado.

Depois de instalar a biblioteca e carregar o arquivo de roda Python para volumes do Catálogo Unity ou DBFS, inclua o código a seguir no script. No especifique o extra_pip_requirements caminho do seu arquivo de dependência.

mlflow.sklearn.log_model(model, "sklearn-model", extra_pip_requirements=["/volume/path/to/dependency.whl"])

Para DBFS, use o seguinte:

mlflow.sklearn.log_model(model, "sklearn-model", extra_pip_requirements=["/dbfs/path/to/dependency.whl"])

Se você tiver uma biblioteca personalizada, deverá especificar todas as bibliotecas Python personalizadas associadas ao seu modelo ao configurar o log. Você pode fazer isso com os extra_pip_requirements parâmetros ou conda_env em log_model().

Importante

Se estiver usando DBFS, certifique-se de incluir uma barra para frente, /, antes do caminho dbfs ao registrar extra_pip_requirements. Saiba mais sobre caminhos DBFS em Trabalhar com arquivos no Azure Databricks.

from mlflow.utils.environment import _mlflow_conda_env
conda_env =  _mlflow_conda_env(
            additional_conda_deps= None,
            additional_pip_deps= ["/volumes/path/to/dependency"],
            additional_conda_channels=None,
)
mlflow.pyfunc.log_model(..., conda_env = conda_env)

Etapa 3: Atualizar o modelo MLflow com arquivos de roda Python

MLflow fornece o utilitário add_libraries_to_model() para registrar seu modelo com todas as suas dependências pré-empacotadas como arquivos de roda Python. Isso empacota suas bibliotecas personalizadas juntamente com o modelo, além de todas as outras bibliotecas que são especificadas como dependências do seu modelo. Isso garante que as bibliotecas usadas pelo seu modelo sejam exatamente as acessíveis a partir do seu ambiente de treinamento.

No exemplo a seguir, model_uri faz referência ao registro modelo usando a sintaxe models:/<model-name>/<model-version>.

Quando você usa o URI do registro modelo, esse utilitário gera uma nova versão em seu modelo registrado existente.

import mlflow.models.utils
mlflow.models.utils.add_libraries_to_model(<model-uri>)

Passo 4: Sirva o seu modelo

Quando uma nova versão do modelo com os pacotes incluídos estiver disponível no registro do modelo, você poderá adicionar essa versão do modelo a um ponto de extremidade com o Model Serving.