Usar Python biblioteca personalizada com o modelo servindo
Neste artigo, você aprenderá a incluir biblioteca personalizada ou biblioteca de um servidor espelho privado ao acessar log seu modelo, para que possa usá-las com Mosaic AI Model Serving implantações de modelos. O senhor deve concluir as etapas detalhadas neste guia depois de ter um ML modelo treinado e pronto para ser implantado, mas antes de criar um modelo Databricks endpointservindo.
O desenvolvimento de modelos geralmente requer o uso de Python biblioteca personalizada que contém funções para pré ou pós-processamento, definições de modelos personalizados e outras utilidades compartilhadas. 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. Databricks oferece suporte nativo para a instalação de biblioteca personalizada e biblioteca de um espelho privado no site Databricks workspace.
Requisitos
-
MLflow 1.29 ou superior
-
Restrinja o acesso à rede de saída do endpoint do modelo de serviço configurando políticas de rede. Consulte Validar com servindo modelo.
Opção 1: Use um repositório de pacote privado
Use a Opção 1 se sua organização utiliza um espelho PyPI privado (como Nexus ou Artifactory). Os administradores do espaço de trabalho podem configurá-lo como o repositório de pacotes default para o workspace. Servindo o modelo usa automaticamente essa configuração de nível workspaceao construir seu ambiente de modelo.
Para configurar um repositório de pacote privado, consulte Configurar repositórios de pacote Python default.
Após a configuração, prossiga para "Servir" seu modelo.
Opção 2: pacote biblioteca personalizada como arquivos wheel
Use a Opção 2 se um espelho PyPI privado não estiver acessível ou se você tiver bibliotecas personalizadas que não estejam disponíveis em nenhum repositório de pacotes. Você pode empacotá-los como arquivos Python wheel e incluí-los ao registrar os logs do seu modelo.
Passo 1: faça o upload do seu arquivo de dependência
Databricks recomenda que o senhor upload seu arquivo de dependência para Unity Catalog volumes. Como alternativa, o senhor pode upload para Databricks File System (DBFS ) usando a interface do usuário Databricks.
Para garantir que sua biblioteca esteja disponível para o Notebook, o senhor precisa instalá-la usando %pip. O uso de %pip instala a biblioteca no Notebook atual e downloads a dependência para o agrupamento.
Etapa 2: registrar o modelo com uma biblioteca personalizada
Depois de instalar a biblioteca e upload o arquivo Python wheel para os volumes Unity Catalog ou DBFS, inclua o seguinte código em seu script. No extra_pip_requirements, especifique o 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 o senhor tiver uma biblioteca personalizada, deverá especificar todas as Python bibliotecas personalizadas associadas ao seu modelo ao configurar o registro. O senhor pode fazer isso com os parâmetros extra_pip_requirements ou conda_env em logs().
Se estiver usando o DBFS, certifique-se de incluir uma barra, /, antes do caminho dbfs ao registrar extra_pip_requirements. Saiba mais sobre os caminhos do DBFS em Work with files on Databricks.
from mlflow.utils.environment import _mlflow_conda_env
mlflow.pyfunc.log_model(
name="model",
python_model=MyModel(),
extra_pip_requirements=["/volumes/path/to/dependency"],
)
Se a biblioteca personalizada estiver armazenada em outro local que não seja um volume ou DBFS, o senhor poderá especificar o local usando o parâmetro code_paths e passar "code/<wheel-file-name>.whl" no parâmetro extra_pip_requirements.
mlflow.pyfunc.log_model(
name="model",
python_model=MyModel(),
code_paths=["/path/to/dependency.whl"], # This will be logged as `code/dependency.whl`
extra_pip_requirements=["code/dependency.whl"],
)
Etapa 3: Atualizar o modelo MLflow com arquivos Python wheel
MLflow fornece os utilitários add_libraries_to_model() para log seu modelo com todas as suas dependências pré-pacote como arquivos Python wheel. Isso inclui sua biblioteca personalizada junto com o modelo, além de todas as outras bibliotecas especificadas como dependências do seu modelo. Isso garante que as bibliotecas usadas pelo seu modelo sejam exatamente aquelas acessíveis a partir do seu ambiente de treinamento.
No exemplo a seguir, model_uri faz referência ao registro de modelo do Unity Catalog usando a sintaxe models:/<uc-model>/<model-version>. Para consultar o workspace registro de modelo (legado), use models:/<model-name>/<model-version>.
Quando o senhor usa o URI de registro de modelo, esse utilitário gera uma nova versão sob o modelo registrado existente.
import mlflow.models.utils
mlflow.models.utils.add_libraries_to_model(<model-uri>)
Sirva sua modelo
Quando uma nova versão de modelo com o pacote incluído estiver disponível no registro de modelo, o senhor poderá adicionar essa versão de modelo a um endpoint com servindo modelo.
Solução de problemas na instalação do pacote
Se a implantação do seu modelo falhar durante a fase de compilação, você pode revisar os logs de compilação para identificar problemas de instalação do pacote.
- Acesse a página "Serving" (Servindo) no seu workspace Databricks .
- Clique no nome do seu endpoint para abrir os detalhes do endpoint.
- Clique na tab de registros .
- Selecione a versão com falha no menu suspenso.
- Clique em logsde compilação .
Analise as mensagens de erro para identificar o problema.
Após resolver o problema, crie uma nova implantação ou atualize seu endpoint para acionar uma nova compilação.
Solucionar problemas de repositório de pacote privado
Se você estiver usando um repositório de pacotes privado, os problemas comuns incluem:
- Pacote ausente : O pacote não está disponível no seu repositório configurado. Adicione o pacote necessário ao seu repositório privado.
- Problemas de conexão : o modelo de transferência não consegue acessar seu repositório de pacote. Verifique a conectividade da rede e as regras do firewall.
- Falhas de autenticação : As credenciais configuradas para o seu repositório não são válidas ou expiraram. Atualize os segredos na configuração do seu workspace .
O Notebook sem servidor usa o mesmo pacote repositório default configurado para seu workspace. Você pode usar um Notebook para testar a conectividade, autenticação e disponibilidade de pacotes instalando os requisitos do arquivo requirements.txt do seu modelo antes de implantá-lo no modelo de serviço.
import mlflow
import subprocess
import sys
# Step 1: Set your model details
catalog = "<your_catalog>"
schema = "<your_schema>"
model_name = "<your_model>"
version = <your_version>
# Step 2: Download the model's requirements.txt
full_model_name = f"{catalog}.{schema}.{model_name}"
requirements_uri = f"models:/{full_model_name}/{version}/requirements.txt"
print(f"Downloading artifacts from: {requirements_uri}")
local_path = mlflow.artifacts.download_artifacts(requirements_uri)
# Step 3: Print the requirements
with open(local_path, "r") as f:
print(f.read())
# Step 4: Install the requirements using the workspace's default package repository
print(f"Installing requirements from {local_path}...")
subprocess.check_call([sys.executable, "-m", "pip", "install", "-r", local_path])
print("Installation complete!")