Compartilhar modelos entre workspaces

Importante

A Databricks recomenda o uso de Modelos no Catálogo do Unity para compartilhar modelos entre espaços de trabalho. A abordagem nesse artigo foi preterida.

O Azure Databricks é compatível com o compartilhamento de modelos em vários workspaces. Por exemplo, você pode desenvolver e registrar um modelo em um workspace de desenvolvimento e, em seguida, acessá-lo e compará-lo com modelos em um workspace de produção separado. Isso é útil quando várias equipes compartilham o acesso a modelos ou quando sua organização tem vários workspaces para lidar com diferentes fases de desenvolvimento. Para o desenvolvimento e a implantação de modelo entre workspaces, 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 nos 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 os modelos em desenvolvimento com os modelos de produção atuais. Um exemplo de configuração de vários workspaces é mostrado abaixo.

Vários workspaces

O acesso ao registro remoto é controlado por tokens. Cada usuário ou script que precisa ter acesso cria um token de acesso pessoal no registro remoto e copia esse token para o gerenciador de segredos do respectivo workspace local. Cada solicitação de API enviada ao workspace remoto do registro deve incluir o token de acesso. O MLflow fornece um mecanismo simples para especificar os segredos a serem usados ao executar operações de registro de modelo.

Observação

Como melhor prática de segurança, ao autenticar com ferramentas, sistemas, scripts e aplicativos automatizados, o Databricks recomenda que você use tokens de acesso pertencentes às entidades de serviço e não aos usuários do workspace. Para criar tokens para entidades de serviço, confira Gerenciar tokens para uma entidade de serviço.

Todos os métodos de API fluente e de cliente para registro de modelo têm suporte para workspaces remotos.

Requisitos

Usar um registro de modelo entre workspaces requer o cliente Python do MLflow, versão 1.11.0 ou superior.

Observação

Esse fluxo de trabalho é implementado da lógica no cliente MLflow. Verifique se o ambiente que executa o cliente tem acesso para fazer solicitações de rede no workspace do Azure Databricks que contém o registro de modelo remoto. Uma restrição comum colocada no workspace do registro é uma lista de IPs permitidos, que pode não permitir conexões de clientes MLflow em execução em um cluster em outro workspace.

Configurar o token de API de um registro remoto

  1. No workspace do registro de modelo, crie um token de acesso.
  2. No workspace local, crie segredos para armazenar o token de acesso e as informações do workspace remoto:
    1. Crie um escopo do segredo: databricks secrets create-scope <scope>.
    2. Escolha um nome exclusivo para o workspace de destino, mostrado aqui como <prefix>. Em seguida, crie três segredos:
      • databricks secrets put-secret <scope> <prefix>-host : insira o nome do host do workspace de registro do modelo. Por exemplo, https://westus.azuredatabricks.net/ ou https://adb-5555555555555555.19.azuredatabricks.net/.
      • databricks secrets put-secret <scope> <prefix>-token : insira o token de acesso do workspace de registro do modelo.
      • databricks secrets put-secret <scope> <prefix>-workspace-id: insira a ID do workspace do workspace de registro do modelo, que pode ser encontrada na URL de qualquer página.

Observação

O ideal é compartilhar o escopo do segredo com outros usuários, pois há um limite no número de escopos de segredos por workspace.

Especificar um registro remoto

Com base no escopo do segredo e no prefixo do nome que você criou para o workspace de registro remoto, você pode construir um URI do registro no formato:

registry_uri = f'databricks://<scope>:<prefix>'

Você pode usar o URI para especificar um registro remoto para métodos de API fluente chamando primeiro:

mlflow.set_registry_uri(registry_uri)

Ou você pode especificá-lo explicitamente quando criar uma instância de um MlflowClient:

client = MlflowClient(registry_uri=registry_uri)

Os fluxos de trabalho a seguir mostram exemplos de ambas as abordagens.

Registrar um modelo no registro remoto

Uma maneira de registrar um modelo é usar a API mlflow.register_model:

mlflow.set_registry_uri(registry_uri)
mlflow.register_model(model_uri=f'runs:/<run-id>/<artifact-path>', name=model_name)

Exemplos para outros métodos de registro de modelo podem ser encontrados no notebook no final desta página.

Observação

Registrar um modelo em um workspace remoto cria uma cópia temporária dos artefatos de modelo no DBFS no workspace remoto. Talvez você queira excluir essa cópia depois que a versão do modelo estiver no status READY. Os arquivos temporários podem ser encontrados na pasta /dbfs/databricks/mlflow/tmp-external-source/<run-id>.

Você também pode especificar um tracking_uri para apontar para um serviço de acompanhamento do MLflow em outro workspace de maneira semelhante a registry_uri. Isso significa que você pode executar em um workspace remoto e registrar seu modelo no workspace atual ou em outro workspace remoto.

Usar um modelo do registro remoto

Você pode carregar e usar uma versão de modelo em um registro remoto com métodos mlflow.<flavor>.load_model 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 URI models:/:

model = mlflow.pyfunc.load_model(f'models://<scope>:<prefix>@databricks/<model-name>/Staging')
model.predict(...)

Também há suporte para outros métodos auxiliares para acessar os arquivos de modelo, 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 nos modelos no registro remoto, desde que tenha as permissões necessárias. Por exemplo, se tiver permissões CAN MANAGE em um modelo, você poderá fazer a transição de uma fase da versão do modelo ou excluir o modelo usando os métodos do MlflowClient:

client = MlflowClient(tracking_uri=None, registry_uri=registry_uri)
client.transition_model_version_stage(model_name, version, 'Archived')
client.delete_registered_model(model_name)

Notebook de exemplo: registro de modelo remoto

O notebook a seguir é aplicável a workspaces que não estão habilitados para o Catálogo do Unity. Ele mostra como registrar modelos no servidor de acompanhamento do MLflow do workspace atual e registrar os modelos no Registro de Modelo em um workspace diferente. A Databricks recomenda o uso de Modelos no Catálogo do Unity para compartilhar modelos entre espaços de trabalho.

Notebook de exemplo do Registro de Modelo Remoto

Obter notebook