O que é Databricks Feature Serving?

O Databricks Feature Serving disponibiliza dados na plataforma Databricks para modelos ou aplicativos implantados fora do Azure Databricks. Os pontos de extremidade de serviço de recursos são dimensionados automaticamente para se ajustar ao tráfego em tempo real e fornecer um serviço de alta disponibilidade e baixa latência para servir recursos. Esta página descreve como configurar e usar o Feature Serving. Para obter um tutorial passo a passo, consulte Implantar e consultar um ponto de extremidade de serviço de recurso.

Quando você usa o Mosaic AI Model Serving para servir um modelo que foi criado usando recursos do Databricks, o modelo automaticamente procura e transforma recursos para solicitações de inferência. Com o Databricks Feature Serving, você pode fornecer dados estruturados para recuperar aplicativos de geração aumentada (RAG), bem como recursos necessários para outros aplicativos, como modelos servidos fora do Databricks ou qualquer outro aplicativo que exija recursos baseados em dados no Unity Catalog.

Quando usar o serviço de recursos

Por que usar o Feature Serving?

O Databricks Feature Serving fornece uma interface única que atende recursos pré-materializados e sob demanda. Inclui também os seguintes benefícios:

  • Simplicidade. Databricks lida com a infraestrutura. Com uma única chamada de API, o Databricks cria um ambiente de serviço pronto para produção.
  • Alta disponibilidade e escalabilidade. Os pontos de extremidade de serviço de recursos aumentam e diminuem automaticamente para se ajustar ao volume de solicitações de serviço.
  • Segurança. Os pontos de extremidade são implantados em um limite de rede seguro e usam computação dedicada que termina quando o ponto de extremidade é excluído ou dimensionado para zero.

Requerimentos

  • Databricks Runtime 14.2 ML ou superior.
  • Para usar a API do Python, o Feature Serving requer databricks-feature-engineering a versão 0.1.2 ou superior, que é incorporada ao Databricks Runtime 14.2 ML. Para versões anteriores do Databricks Runtime ML, instale manualmente a versão necessária usando %pip install databricks-feature-engineering>=0.1.2o . Se você estiver usando um bloco de anotações Databricks, você deve reiniciar o kernel Python executando este comando em uma nova célula: dbutils.library.restartPython().
  • Para usar o SDK do Databricks, o Feature Serving requer databricks-sdk a versão 0.18.0 ou superior. Para instalar manualmente a versão necessária, use %pip install databricks-sdk>=0.18.0. Se você estiver usando um bloco de anotações Databricks, você deve reiniciar o kernel Python executando este comando em uma nova célula: dbutils.library.restartPython().

O Databricks Feature Serving fornece uma interface do usuário e várias opções programáticas para criar, atualizar, consultar e excluir pontos de extremidade. Este artigo inclui instruções para cada uma das seguintes opções:

  • Interface do usuário do Databricks
  • API REST
  • API Python
  • Databricks SDK

Para usar a API REST ou o SDK de implantações MLflow, você deve ter um token de API Databricks.

Importante

Como prática recomendada de segurança para cenários de produção, o Databricks recomenda que você use tokens OAuth máquina a máquina para autenticação durante a produção.

Para teste e desenvolvimento, o Databricks recomenda o uso de um token de acesso pessoal pertencente 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.

Autenticação para serviço de recursos

Para obter informações sobre autenticação, consulte Autenticar o acesso aos recursos do Azure Databricks.

Criar um FeatureSpec

A FeatureSpec é um conjunto de recursos e funções definido pelo usuário. Você pode combinar recursos e funções em um FeatureSpecarquivo . FeatureSpecs são armazenados e gerenciados pelo Unity Catalog e aparecem no Catalog Explorer.

As tabelas especificadas em um FeatureSpec devem ser publicadas em uma tabela online ou em uma loja online de terceiros. Consulte Usar tabelas online para veiculação de recursos em tempo real ou Lojas online de terceiros.

Você deve usar o databricks-feature-engineering pacote para criar um FeatureSpecarquivo .

from databricks.feature_engineering import (
  FeatureFunction,
  FeatureLookup,
  FeatureEngineeringClient,
)

fe = FeatureEngineeringClient()

features = [
  # Lookup column `average_yearly_spend` and `country` from a table in UC by the input `user_id`.
  FeatureLookup(
    table_name="main.default.customer_profile",
    lookup_key="user_id",
    feature_names=["average_yearly_spend", "country"]
  ),
  # Calculate a new feature called `spending_gap` - the difference between `ytd_spend` and `average_yearly_spend`.
  FeatureFunction(
    udf_name="main.default.difference",
    output_name="spending_gap",
    # Bind the function parameter with input from other features or from request.
    # The function calculates a - b.
    input_bindings={"a": "ytd_spend", "b": "average_yearly_spend"},
  ),
]

# Create a `FeatureSpec` with the features defined above.
# The `FeatureSpec` can be accessed in Unity Catalog as a function.
fe.create_feature_spec(
  name="main.default.customer_features",
  features=features,
)

Criar um ponto final

O FeatureSpec define o ponto de extremidade. Para obter mais informações, consulte Criar endpoints de serviço de modelo personalizado, a documentação da API Python ou a documentação do SDK do Databricks para obter detalhes.

Nota

Para cargas de trabalho que são sensíveis à latência ou exigem consultas altas por segundo, o Model Serving oferece otimização de rota em pontos de extremidade de serviço de modelo personalizado, consulte Configurar otimização de rota em pontos de extremidade de serviço.

API REST

curl -X POST -u token:$DATABRICKS_API_TOKEN ${WORKSPACE_URL}/api/2.0/serving-endpoints \
    -H 'Content-Type: application/json' \
    -d '"name": "customer-features",
   "config": {
       "served_entities": [
           {
               "entity_name": "main.default.customer_features",
               "workload_size": "Small",
               "scale_to_zero_enabled": true
           }
       ]
   }'

Databricks SDK - Python

from databricks.sdk import WorkspaceClient
from databricks.sdk.service.serving import EndpointCoreConfigInput, ServedEntityInput

workspace = WorkspaceClient()

# Create endpoint
workspace.serving_endpoints.create(
  name="my-serving-endpoint",
  config = EndpointCoreConfigInput(
    served_entities=[
    ServedEntityInput(
        entity_name="main.default.customer_features",
        scale_to_zero_enabled=True,
        workload_size="Small"
      )
    ]
  )
)

API Python

from databricks.feature_engineering.entities.feature_serving_endpoint import (
  ServedEntity,
  EndpointCoreConfig,
)

fe.create_feature_serving_endpoint(
  name="customer-features",
    config=EndpointCoreConfig(
    served_entities=ServedEntity(
      feature_spec_name="main.default.customer_features",
             workload_size="Small",
             scale_to_zero_enabled=True,
             instance_profile_arn=None,
    )
  )
)

Para ver o ponto de extremidade, clique em Servindo na barra lateral esquerda da interface do usuário do Databricks. Quando o estado estiver Pronto, o ponto de extremidade estará pronto para responder a consultas. Para saber mais sobre o Mosaic AI Model Serving, consulte Mosaic AI Model Serving.

Obter um ponto de extremidade

Você pode usar o SDK do Databricks ou a API Python para obter os metadados e o status de um ponto de extremidade.

Databricks SDK - Python

endpoint = workspace.serving_endpoints.get(name="customer-features")
# print(endpoint)

API Python

endpoint = fe.get_feature_serving_endpoint(name="customer-features")
# print(endpoint)

Obter o esquema de um ponto de extremidade

Você pode usar a API REST para obter o esquema de um ponto de extremidade. Para obter mais informações sobre o esquema de ponto de extremidade, consulte Obter um esquema de ponto de extremidade de serviço de modelo.

ACCESS_TOKEN=<token>
ENDPOINT_NAME=<endpoint name>

curl "https://example.databricks.com/api/2.0/serving-endpoints/$ENDPOINT_NAME/openapi" -H "Authorization: Bearer $ACCESS_TOKEN" -H "Content-Type: application/json"

Consultar um ponto de extremidade

Você pode usar a API REST, o SDK de implantações MLflow ou a interface do usuário de serviço para consultar um ponto de extremidade.

O código a seguir mostra como configurar credenciais e criar o cliente ao usar o SDK de implantações MLflow.

  # Set up credentials
  export DATABRICKS_HOST=...
  export DATABRICKS_TOKEN=...
  # Set up the client
  import mlflow.deployments

  client = mlflow.deployments.get_deploy_client("databricks")

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.

Consultar um ponto de extremidade usando APIs

Esta seção inclui exemplos de consulta a um ponto de extremidade usando a API REST ou o SDK de implantações MLflow.

API REST

curl -X POST -u token:$DATABRICKS_API_TOKEN $ENDPOINT_INVOCATION_URL \
  -H 'Content-Type: application/json' \
  -d '{"dataframe_records": [
          {"user_id": 1, "ytd_spend": 598},
          {"user_id": 2, "ytd_spend": 280}
      ]}'

SDK de implantações MLflow

Importante

O exemplo a seguir usa a predict() API do MLflow Deployments SDK. Esta API é Experimental e a definição da API pode mudar.

import mlflow.deployments

client = mlflow.deployments.get_deploy_client("databricks")
response = client.predict(
    endpoint="test-feature-endpoint",
    inputs={
        "dataframe_records": [
            {"user_id": 1, "ytd_spend": 598},
            {"user_id": 2, "ytd_spend": 280},
        ]
    },
)

Consultar um ponto de extremidade usando a interface do usuário

Você pode consultar um ponto de extremidade de serviço diretamente da interface do usuário de serviço. A interface do usuário inclui exemplos de código gerado que você pode usar para consultar o ponto de extremidade.

  1. Na barra lateral esquerda do espaço de trabalho do Azure Databricks, clique em Servir.

  2. Clique no ponto de extremidade que você deseja consultar.

  3. No canto superior direito da tela, clique em Ponto de extremidade de consulta.

    Botão Consultar Ponto Final

  4. Na caixa Solicitação, digite o corpo da solicitação no formato JSON.

  5. Clique em Enviar solicitação.

// Example of a request body.
{
  "dataframe_records": [
    {"user_id": 1, "ytd_spend": 598},
    {"user_id": 2, "ytd_spend": 280}
  ]
}

A caixa de diálogo Ponto de extremidade de consulta inclui código de exemplo gerado em curl, Python e SQL. Clique nas guias para visualizar e copiar o código de exemplo.

caixa de diálogo do ponto de extremidade de consulta

Para copiar o código, clique no ícone de cópia no canto superior direito da caixa de texto.

botão copiar na caixa de diálogo do ponto de extremidade de consulta

Atualizar um ponto de extremidade

Você pode atualizar um ponto de extremidade usando a API REST, o SDK do Databricks ou a interface do usuário de serviço.

Atualizar um ponto de extremidade usando APIs

API REST

curl -X PUT -u token:$DATABRICKS_API_TOKEN ${WORKSPACE_URL}/api/2.0/serving-endpoints/<endpoint_name>/config \
  -H 'Content-Type: application/json' \
  -d '"served_entities": [
        {
            "name": "customer-features",
            "entity_name": "main.default.customer_features_new",
            "workload_size": "Small",
            "scale_to_zero_enabled": True
        }
    ]'

Databricks SDK - Python

workspace.serving_endpoints.update_config(
  name="my-serving-endpoint",
  served_entities=[
    ServedEntityInput(
      entity_name="main.default.customer_features",
      scale_to_zero_enabled=True,
      workload_size="Small"
    )
  ]
)

Atualizar um ponto de extremidade usando a interface do usuário

Siga estas etapas para usar a interface do usuário de serviço:

  1. Na barra lateral esquerda do espaço de trabalho do Azure Databricks, clique em Servir.
  2. Na tabela, clique no nome do ponto de extremidade que você deseja atualizar. A tela do ponto de extremidade é exibida.
  3. No canto superior direito da tela, clique em Editar ponto de extremidade.
  4. Na caixa de diálogo Editar ponto de extremidade de serviço, edite as configurações do ponto de extremidade conforme necessário.
  5. Clique em Atualizar para salvar as alterações.

Atualizar um ponto de extremidade

Excluir um ponto de extremidade

Aviso

Esta ação é irreversível.

Você pode excluir um ponto de extremidade usando a API REST, o SDK do Databricks, a API Python ou a interface do usuário de serviço.

Excluir um ponto de extremidade usando APIs

API REST

curl -X DELETE -u token:$DATABRICKS_API_TOKEN ${WORKSPACE_URL}/api/2.0/serving-endpoints/<endpoint_name>

Databricks SDK - Python

workspace.serving_endpoints.delete(name="customer-features")

API Python

fe.delete_feature_serving_endpoint(name="customer-features")

Excluir um ponto de extremidade usando a interface do usuário

Siga estas etapas para excluir um ponto de extremidade usando a interface do usuário de serviço:

  1. Na barra lateral esquerda do espaço de trabalho do Azure Databricks, clique em Servir.
  2. Na tabela, clique no nome do ponto de extremidade que você deseja excluir. A tela do ponto de extremidade é exibida.
  3. No canto superior direito da tela, clique no menu Menu de kebab kebab e selecione Excluir.

Excluir um ponto de extremidade

Monitorar a integridade de um ponto de extremidade

Para obter informações sobre os logs e métricas disponíveis para pontos de extremidade de serviço de recursos, consulte Monitorar a qualidade do modelo e a integridade do ponto de extremidade.

Controlo de acesso

Para obter informações sobre permissões em pontos de extremidade de serviço de recursos, consulte Gerenciar permissões em seu ponto de extremidade de serviço de modelo.

Bloco de notas de exemplo

Este bloco de anotações ilustra como usar o SDK do Databricks para criar um ponto de extremidade de serviço de recursos usando tabelas do Databricks Online.

Recurso Servindo bloco de anotações de exemplo com tabelas online

Obter o bloco de notas