Compartilhar tabelas de recursos entre espaços de trabalho (legado)

Importante

  • Esta documentação foi desativada e pode não ser atualizada.
  • A Databricks recomenda o uso da Engenharia de Recursos no Unity Catalog para compartilhar tabelas de recursos entre espaços de trabalho. A abordagem neste artigo foi preterida.

O Azure Databricks dá suporte ao compartilhamento de tabelas de recursos em vários espaços de trabalho. Por exemplo, a partir do seu próprio espaço de trabalho, pode criar, escrever ou ler a partir de uma tabela de funcionalidades numa loja de funcionalidades centralizada. Isso é útil quando várias equipes compartilham acesso a tabelas de recursos ou quando sua organização tem vários espaços de trabalho para lidar com diferentes estágios de desenvolvimento.

Para um repositório de recursos centralizado, o Databricks recomenda que você designe um único espaço de trabalho para armazenar todos os metadados do repositório de recursos e crie contas para cada usuário que precise acessar o repositório de recursos.

Se suas equipes também estiverem compartilhando modelos entre espaços de trabalho, você poderá optar por dedicar o mesmo espaço de trabalho centralizado para tabelas e modelos de recursos ou especificar espaços de trabalho centralizados diferentes para cada um.

Vários espaços de trabalho de armazenamento de recursos

O acesso ao repositório de recursos centralizado é controlado por tokens. Cada usuário ou script que precisa de acesso cria um token de acesso pessoal no repositório de recursos centralizado 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 centralizado do repositório de recursos deve incluir o token de acesso; o cliente do Feature Store fornece um mecanismo simples para especificar os segredos a serem usados ao executar operações entre espaços de trabalho.

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.

Requisitos

O uso de um repositório de recursos em espaços de trabalho exige:

  • Cliente do Feature Store v0.3.6 e superior.
  • Ambos os espaços de trabalho devem ter acesso aos dados brutos do recurso. Eles devem compartilhar o mesmo metastore externo do Hive e ter acesso ao mesmo armazenamento DBFS.
  • Se as listas de acesso IP estiverem habilitadas, os endereços IP do espaço de trabalho deverão estar nas listas de acesso.

Configurar o token de API para um registro remoto

Nesta seção, "Espaço de trabalho B" refere-se ao espaço de trabalho de armazenamento de recursos centralizado ou remoto.

  1. No Espaço de Trabalho B, crie um token de acesso.
  2. No espaço de trabalho local, crie segredos para armazenar o token de acesso e informações sobre o Espaço de Trabalho B:
    1. Crie um escopo secreto: databricks secrets create-scope --scope <scope>.
    2. Escolha um identificador exclusivo para o Espaço de Trabalho B, mostrado aqui como <prefix>. Em seguida, crie três segredos com os nomes de chave especificados:
      • databricks secrets put --scope <scope> --key <prefix>-host : Digite o nome do host do espaço de trabalho B. Use os seguintes comandos Python para obter o nome do host de um espaço de trabalho:

        import mlflow
        
        host_url = mlflow.utils.databricks_utils.get_webapp_url()
        host_url
        
      • databricks secrets put --scope <scope> --key <prefix>-token : Insira o token de acesso do Espaço de Trabalho B.

      • databricks secrets put --scope <scope> --key <prefix>-workspace-id : Insira o ID do espaço de trabalho para o espaço de trabalho B, que pode ser encontrado no URL de qualquer página.

Nota

Talvez você queira compartilhar o escopo secreto com outros usuários, já que há um limite no número de escopos secretos por espaço de trabalho.

Especificar um repositório de recursos remoto

Com base no escopo secreto e no prefixo de nome que você criou para o espaço de trabalho de armazenamento de recursos remoto, você pode construir um URI de repositório de recursos do formulário:

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

Em seguida, especifique o URI explicitamente quando você instanciar um FeatureStoreClient:

fs = FeatureStoreClient(feature_store_uri=feature_store_uri)

Criar um banco de dados para tabelas de recursos no local DBFS compartilhado

Antes de criar tabelas de recursos no repositório de recursos remoto, você deve criar um banco de dados para armazená-las. O banco de dados deve existir no local compartilhado do DBFS.

Por exemplo, para criar um banco de dados recommender no local /mnt/sharedcompartilhado, use o seguinte comando:

%sql CREATE DATABASE IF NOT EXISTS recommender LOCATION '/mnt/shared'

Criar uma tabela de recursos no repositório de recursos remoto

A API para criar uma tabela de recursos em um repositório de recursos remoto depende da versão de tempo de execução do Databricks que você está usando.

V0.3.6 e superior

Use a FeatureStoreClient.create_table API:

fs = FeatureStoreClient(feature_store_uri=f'databricks://<scope>:<prefix>')
fs.create_table(
  name='recommender.customer_features',
  primary_keys='customer_id',
  schema=customer_features_df.schema,
  description='Customer-keyed features'
)

V0.3.5 e inferior

Use a FeatureStoreClient.create_feature_table API:

fs = FeatureStoreClient(feature_store_uri=f'databricks://<scope>:<prefix>')
fs.create_feature_table(
  name='recommender.customer_features',
  keys='customer_id',
  schema=customer_features_df.schema,
  description='Customer-keyed features'
)

Para obter exemplos de outros métodos do Feature Store, consulte Exemplo de bloco de anotações: compartilhar tabelas de recursos entre espaços de trabalho.

Usar uma tabela de recursos do repositório de recursos remoto

Você pode ler uma tabela de recursos no repositório de recursos remoto com o FeatureStoreClient.read_table método definindo primeiro o feature_store_uri:

fs = FeatureStoreClient(feature_store_uri=f'databricks://<scope>:<prefix>')
customer_features_df = fs.read_table(
  name='recommender.customer_features',
)

Outros métodos auxiliares para acessar a tabela de recursos também são suportados:

fs.read_table()
fs.get_feature_table() # in v0.3.5 and below
fs.get_table() # in v0.3.6 and above
fs.write_table()
fs.publish_table()
fs.create_training_set()

Usar um registro de modelo remoto

Além de especificar um URI de repositório de recursos remoto, você também pode especificar um URI de registro de modelo remoto para compartilhar modelos entre espaços de trabalho.

Para especificar um registro de modelo remoto para registro em log ou pontuação de modelo, você pode usar um URI de registro de modelo para instanciar um FeatureStoreClient.

fs = FeatureStoreClient(model_registry_uri=f'databricks://<scope>:<prefix>')
customer_features_df = fs.log_model(
    model,
    "recommendation_model",
    flavor=mlflow.sklearn,
    training_set=training_set,
    registered_model_name="recommendation_model"
)

Usando feature_store_uri e model_registry_uri, você pode treinar um modelo usando qualquer tabela de recursos local ou remoto e, em seguida, registrar o modelo em qualquer registro de modelo local ou remoto.

fs = FeatureStoreClient(
    feature_store_uri=f'databricks://<scope>:<prefix>',
    model_registry_uri=f'databricks://<scope>:<prefix>'
)

Exemplo de bloco de notas: partilhar tabelas de funcionalidades entre espaços de trabalho

O bloco de anotações a seguir mostra como trabalhar com um repositório de recursos centralizado.

Bloco de anotações de exemplo do Repositório de Recursos Centralizado

Obter o bloco de notas