Partilhar modelos entre áreas de trabalho
Importante
A Databricks recomenda o uso de Modelos no Unity Catalog para compartilhar modelos entre espaços de trabalho. A abordagem neste artigo foi preterida.
O Azure Databricks suporta a partilha de modelos entre várias áreas de trabalho. Por exemplo, você pode desenvolver e registrar um modelo em um espaço de trabalho de desenvolvimento e, em seguida, acessá-lo e compará-lo com modelos em um espaço de trabalho de produção separado. Isso é útil quando várias equipes compartilham acesso a modelos ou quando sua organização tem vários espaços de trabalho para lidar com os diferentes estágios de desenvolvimento. Para desenvolvimento e implantação de modelos entre espaços de trabalho, o Databricks recomenda a abordagem de código de implantação, em que o código de treinamento do modelo é implantado em vários ambientes.
Em situações de vários espaços de trabalho, você pode acessar modelos em espaços de trabalho do Azure Databricks usando um registro de modelo remoto. Por exemplo, os cientistas de dados poderiam acessar o registro do modelo de produção com acesso somente leitura para comparar seus modelos em desenvolvimento com os modelos de produção atuais. Um exemplo de configuração de vários espaços de trabalho é mostrado abaixo.
O acesso a um registo remoto é controlado por tokens. Cada usuário ou script que precisa de acesso cria um token de acesso pessoal no registro remoto e copia esse token para o gerenciador secreto de seu espaço de trabalho local. Cada solicitação de API enviada para o espaço de trabalho de registro remoto deve incluir o token de acesso; MLflow fornece um mecanismo simples para especificar os segredos a serem usados ao executar operações de registro modelo.
Nota
Como prática recomendada de segurança, quando você se autentica com ferramentas, sistemas, scripts e aplicativos automatizados, o Databricks recomenda que você use tokens de acesso pessoal pertencentes a entidades de serviço em vez de usuários do espaço de trabalho. Para criar tokens para entidades de serviço, consulte Gerenciar tokens para uma entidade de serviço.
Todos os métodos de API cliente e fluente para registro de modelo são suportados para espaços de trabalho remotos.
Requisitos
O uso de um registro de modelo em espaços de trabalho requer o cliente Python MLflow, versão 1.11.0 ou superior.
Nota
Este fluxo de trabalho é implementado a partir da lógica no cliente MLflow. Verifique se o ambiente que executa o cliente tem acesso para fazer solicitações de rede no espaço de trabalho do Azure Databricks que contém o registro do modelo remoto. Uma restrição comum colocada no espaço de trabalho do Registro é uma lista de permissões de IP, que pode impedir conexões de clientes MLflow em execução em um cluster em outro espaço de trabalho.
Configurar o token de API para um registro remoto
- No espaço de trabalho do Registro modelo, crie um token de acesso.
- No espaço de trabalho local, crie segredos para armazenar o token de acesso e as informações do espaço de trabalho remoto:
- Crie um escopo secreto:
databricks secrets create-scope <scope>
. - Escolha um nome exclusivo para o espaço de trabalho de destino, mostrado aqui como
<prefix>
. Em seguida, crie três segredos:databricks secrets put-secret <scope> <prefix>-host
: Digite o nome do host do espaço de trabalho do Registro modelo. Por exemplo,https://westus.azuredatabricks.net/
ouhttps://adb-5555555555555555.19.azuredatabricks.net/
.databricks secrets put-secret <scope> <prefix>-token
: Insira o token de acesso do espaço de trabalho do Registro modelo.databricks secrets put-secret <scope> <prefix>-workspace-id
: Insira o ID do espaço de trabalho para o espaço de trabalho do Registro modelo que pode ser encontrado na URL de qualquer página.
- Crie um escopo secreto:
Nota
Talvez você queira compartilhar o escopo secreto com outros usuários, já que há um limite para o número de escopos secretos por espaço de trabalho.
Especificar um registo remoto
Com base no escopo secreto e no prefixo de nome que você criou para o espaço de trabalho do Registro remoto, você pode construir um URI do Registro do formulário:
registry_uri = f'databricks://<scope>:<prefix>'
Você pode usar o URI para especificar um registro remoto para métodos de API fluentes chamando pela primeira vez:
mlflow.set_registry_uri(registry_uri)
Ou, você pode especificá-lo explicitamente quando você instanciar um MlflowClient
:
client = MlflowClient(registry_uri=registry_uri)
Os fluxos de trabalho a seguir mostram exemplos de ambas as abordagens.
Registar um modelo no registo remoto
Uma maneira de registrar um modelo é usar a mlflow.register_model
API:
mlflow.set_registry_uri(registry_uri)
mlflow.register_model(model_uri=f'runs:/<run-id>/<artifact-path>', name=model_name)
Exemplos de outros métodos de registo de modelos podem ser encontrados no caderno no final desta página.
Nota
O registro de um modelo em um espaço de trabalho remoto cria uma cópia temporária dos artefatos de modelo no DBFS no espaço de trabalho remoto. Você pode querer excluir essa cópia quando a versão do modelo estiver no READY
status. Os arquivos temporários podem ser encontrados na /dbfs/databricks/mlflow/tmp-external-source/<run-id>
pasta.
Você também pode especificar um tracking_uri
para apontar para um serviço de controle de fluxo de MLem outro espaço de trabalho de maneira semelhante a registry_uri
. Isso significa que você pode executar um espaço de trabalho remoto e registrar seu modelo no espaço de trabalho atual ou em outro espaço de trabalho remoto.
Usar um modelo do registro remoto
Você pode carregar e usar uma versão do modelo em um registro remoto com mlflow.<flavor>.load_model
métodos definindo primeiro o URI do registro:
mlflow.set_registry_uri(registry_uri)
model = mlflow.pyfunc.load_model(f'models:/<model-name>/Staging')
model.predict(...)
Ou, você pode especificar explicitamente o registro remoto no models:/
URI:
model = mlflow.pyfunc.load_model(f'models://<scope>:<prefix>@databricks/<model-name>/Staging')
model.predict(...)
Outros métodos auxiliares para acessar os arquivos de modelo também são suportados, como:
client.get_latest_versions(model_name)
client.get_model_version_download_uri(model_name, version)
Gerenciar um modelo no registro remoto
Você pode executar qualquer ação em modelos no registro remoto, desde que tenha as permissões necessárias. Por exemplo, se você tiver permissões CAN MANAGE em um modelo, poderá fazer a transição de um estágio de versão do modelo ou excluir o modelo usando MlflowClient
métodos:
client = MlflowClient(tracking_uri=None, registry_uri=registry_uri)
client.transition_model_version_stage(model_name, version, 'Archived')
client.delete_registered_model(model_name)
Exemplo de bloco de notas: Registo de modelo remoto
O bloco de anotações a seguir é aplicável para espaços de trabalho que não estão habilitados para o Catálogo Unity. Ele mostra como registrar modelos no servidor de rastreamento MLflow a partir do espaço de trabalho atual e registrar os modelos no Registro Modelo em um espaço de trabalho diferente. A Databricks recomenda o uso de Modelos no Unity Catalog para compartilhar modelos entre espaços de trabalho.