Partilhar via


APIs de modelos fundamentais com taxa de transferência provisionada

Este artigo demonstra como desenvolver modelos usando APIs de Modelo Base com a capacidade de processamento provisionada. O Azure Databricks recomenda a taxa de transferência provisionada para cargas de trabalho em produção e oferece inferência otimizada para modelos de base com garantias de desempenho.

O que é taxa de transferência provisionada?

Ao criar um modelo de largura de banda provisionada para um ponto de extremidade no Azure Databricks, você aloca capacidade de inferência dedicada para garantir uma largura de banda consistente para o modelo fundamental que deseja servir. Endpoints de serviço de modelos que servem modelos de base podem ser provisionados em partes de unidades de modelo. O número de unidades modelo que você aloca permite que você compre exatamente a taxa de transferência necessária para suportar de forma confiável seu aplicativo GenAI de produção.

Requerimentos

Consulte os requisitos . Para implantar modelos de fundação ajustados, consulte Implantar modelos de fundação ajustados.

Importante

Este recurso está em Pré-visualização Pública.

O Databricks recomenda o uso dos modelos de base pré-instalados no Unity Catalog. Você pode encontrar esses modelos no catálogo system no esquema ai (system.ai).

Para implantar um modelo de fundação:

  1. Navegue até system.ai no Catalog Explorer.
  2. Clique no nome do modelo a ser implantado.
  3. Na página do modelo, clique no botão Publicar este modelo.
  4. A página Criar ponto de extremidade de serviço é exibida. Consulte a secção Crie o seu ponto de extremidade com taxa de transferência provisionada usando a UI.

Observação

Para implantar um modelo Meta Llama a partir de system.ai no Unity Catalog, você deve escolher a versão aplicável Instruir. As versões base dos modelos Meta Llama não são suportadas para implantação a partir de system.ai no Unity Catalog. Consulte Modelos Foundation hospedados em variantes de modelo Meta Llama suportadas pelo Databricks.

Implantar modelos de base do Databricks Marketplace

Como alternativa, você pode instalar modelos básicos no Unity Catalog a partir de Databricks Marketplace.

Você pode pesquisar por uma família de modelos e, na página do modelo, pode selecionar Obter acesso e fornecer credenciais de login para instalar o modelo no Unity Catalog.

Depois de o modelo ser instalado no Unity Catalog, poderá criar um endpoint de serviço usando a UI de Serviço.

Implante modelos de fundação ajustados

Se você não puder usar os modelos no esquema system.ai ou instalar modelos do Databricks Marketplace, poderá implantar um modelo de base ajustado registrando-o no Unity Catalog. Esta secção e as secções seguintes mostram como configurar o seu código para registar um modelo MLflow no Unity Catalog e criar o seu endpoint de throughput provisionado através do UI ou da API REST.

Consulte Modelos de Base hospedados no Databricks para obter os modelos ajustados Meta Llama 3.1, 3.2 e 3.3 suportados e a sua disponibilidade por região.

Requerimentos

  • A implantação de modelos de base ajustados só é suportada pelo MLflow 2.11 ou superior. O Databricks Runtime 15.0 ML e superior pré-instala a versão MLflow compatível.
  • A Databricks recomenda o uso de modelos no Unity Catalog para upload e download mais rápidos de modelos grandes.

Definir catálogo, esquema e nome do modelo

Para implantar um modelo de base ajustado, defina o catálogo do Unity Catalog de destino, o esquema e o nome do modelo de sua escolha.

mlflow.set_registry_uri('databricks-uc')
CATALOG = "catalog"
SCHEMA = "schema"
MODEL_NAME = "model_name"
registered_model_name = f"{CATALOG}.{SCHEMA}.{MODEL_NAME}"

Registe o seu modelo

Para habilitar a largura de banda provisionada para o endpoint do seu modelo, deve registar o seu modelo usando o flavor MLflow transformers e especificar o argumento task com a interface de tipo de modelo apropriada das seguintes opções:

  • "llm/v1/completions"
  • "llm/v1/chat"
  • "llm/v1/embeddings"

Esses argumentos especificam a assinatura da API usada para o endpoint de serviço do modelo. Consulte a documentação MLflow para mais detalhes sobre estas tarefas e os esquemas de entrada/saída correspondentes.

A seguir está um exemplo de como registrar um modelo de linguagem de conclusão de texto registrado usando MLflow:

model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3.3-70B-Instruct", torch_dtype=torch.bfloat16)
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-3.3-70B-Instruct")

with mlflow.start_run():
    components = {
      "model": model,
      "tokenizer": tokenizer,
    }
    mlflow.transformers.log_model(
        transformers_model=components,
        artifact_path="model",
        # Specify the llm/v1/xxx task that is compatible with the model being logged
        task="llm/v1/completions",
        # Specify an input example that conforms to the input schema for the task.
        input_example={"prompt": np.array(["Below is an instruction that describes a task. Write a response that appropriately completes the request.\n\n### Instruction:\nWhat is Apache Spark?\n\n### Response:\n"])},
        # By passing the model name, MLflow automatically registers the Transformers model to Unity Catalog with the given catalog/schema/model_name.
        registered_model_name=registered_model_name
        # Optionally, you can set save_pretrained to False to avoid unnecessary copy of model weight and gain more efficiency.
        save_pretrained=False
    )

Observação

Se estiver a usar uma versão do MLflow anterior ao 2.12, deve especificar a tarefa no parâmetro metadata da função mlflow.transformer.log_model().

  • metadata = {"task": "llm/v1/completions"}
  • metadata = {"task": "llm/v1/chat"}
  • metadata = {"task": "llm/v1/embeddings"}

A largura de banda provisionada também suporta os modelos de incorporação GTE de base e de grande escala. A seguir está um exemplo de como registar o modelo Alibaba-NLP/gte-large-en-v1.5 para que ele possa ser disponibilizado com largura de banda provisionada:

model = AutoModel.from_pretrained("Alibaba-NLP/gte-large-en-v1.5")
tokenizer = AutoTokenizer.from_pretrained("Alibaba-NLP/gte-large-en-v1.5")
with mlflow.start_run():
    components = {
      "model": model,
      "tokenizer": tokenizer,
    }
    mlflow.transformers.log_model(
        transformers_model=components,
        artifact_path="model",
        task="llm/v1/embeddings",
        registered_model_name=registered_model_name,
        # model_type is required for logging a fine-tuned BGE models.
        metadata={
            "model_type": "gte-large"
        }
    )

Depois de o seu modelo ser registado no Unity Catalog, continue em Crie o seu endpoint de capacidade provisionada utilizando a interface do utilizador para configurar um endpoint de serviço de modelo com capacidade provisionada.

Crie o seu endpoint de throughput provisionado usando a UI

Depois de o modelo registado estar no Unity Catalog, crie um endpoint de serviço com largura de banda provisionada com as seguintes etapas:

  1. Navegue até à interface de utilizador do Serving no seu espaço de trabalho.
  2. Selecione Criar endpoint de serviço.
  3. No campo Entidade, selecione seu modelo no Catálogo Unity. Para modelos elegíveis, a interface da entidade servida mostra a tela de Taxa de Transferência Provisionada.
  4. No menu suspenso Até, podes configurar a velocidade máxima de tokens por segundo para o teu ponto de acesso.
    1. Os pontos de extremidade de taxa de transferência provisionados são dimensionados automaticamente, pelo que pode selecionar Modificar para ver o número mínimo de tokens por segundo a que o seu ponto de extremidade pode ser reduzido.

taxa de transferência provisionada

Crie o seu endpoint de throughput provisionado usando a API REST

Para implantar seu modelo no modo de taxa de transferência provisionada usando a API REST, você deve especificar min_provisioned_throughput e max_provisioned_throughput campos em sua solicitação. Se preferir Python, também pode criar um endpoint usando o SDK de Implementação do MLflow.

Para identificar o intervalo adequado de taxa de transferência provisionada para o seu modelo, consulte Obter taxa de transferência provisionada em incrementos.

import requests
import json

# Set the name of the MLflow endpoint
endpoint_name = "prov-throughput-endpoint"

# Name of the registered MLflow model
model_name = "ml.llm-catalog.foundation-model"

# Get the latest version of the MLflow model
model_version = 3

# Get the API endpoint and token for the current notebook context
API_ROOT = "<YOUR-API-URL>"
API_TOKEN = "<YOUR-API-TOKEN>"

headers = {"Context-Type": "text/json", "Authorization": f"Bearer {API_TOKEN}"}

optimizable_info = requests.get(
  url=f"{API_ROOT}/api/2.0/serving-endpoints/get-model-optimization-info/{model_name}/{model_version}",
  headers=headers)
  .json()

if 'optimizable' not in optimizable_info or not optimizable_info['optimizable']:
  raise ValueError("Model is not eligible for provisioned throughput")

chunk_size = optimizable_info['throughput_chunk_size']

# Minimum desired provisioned throughput
min_provisioned_throughput = 2 * chunk_size

# Maximum desired provisioned throughput
max_provisioned_throughput = 3 * chunk_size

# Send the POST request to create the serving endpoint
data = {
  "name": endpoint_name,
  "config": {
    "served_entities": [
      {
        "entity_name": model_name,
        "entity_version": model_version,
        "min_provisioned_throughput": min_provisioned_throughput,
        "max_provisioned_throughput": max_provisioned_throughput,
      }
    ]
  },
}

response = requests.post(
  url=f"{API_ROOT}/api/2.0/serving-endpoints", json=data, headers=headers
)

print(json.dumps(response.json(), indent=4))

Probabilidade logarítmica para tarefas de conclusão de bate-papo

Para tarefas de conclusão de chat, pode utilizar o parâmetro logprobs para fornecer a log probabilidade de um token ser amostrado como parte do processo de geração de modelo de linguagem de larga escala. Você pode usar logprobs para uma variedade de cenários, incluindo classificação, avaliação da incerteza do modelo e execução de métricas de avaliação. Consulte a API Chat Completions para detalhes dos parâmetros.

Obter largura de banda provisionada em incrementos

A capacidade provisionada está disponível em incrementos de tokens por segundo, com incrementos específicos a variar conforme o modelo. Para identificar o intervalo adequado às suas necessidades, a Databricks recomenda o uso da API de informações de otimização de modelo dentro da plataforma.

GET api/2.0/serving-endpoints/get-model-optimization-info/{registered_model_name}/{version}

Segue-se um exemplo de resposta da API:

{
  "optimizable": true,
  "model_type": "llama",
  "throughput_chunk_size": 1580
}

Exemplos de blocos de notas

Os cadernos a seguir mostram exemplos de como criar uma API de Modelo Fundamental com throughput provisionado.

Largura de banda provisionada para suporte ao notebook modelo GTE

Obter caderno

Largura de banda provisionada para modelo de notebook BGE

Obter caderno

O seguinte bloco de notas mostra como pode descarregar e registar o modelo Llama destilado do DeepSeek R1 no Unity Catalog, para que o possa implementar utilizando um ponto de extremidade provisionado de APIs do Modelo Fundação.

Débito de transferência provisionado para o notebook do modelo DeepSeek R1 Llama destilado

Obter caderno

Limitações

  • A implantação do modelo pode falhar devido a problemas de capacidade da GPU, o que resulta em um timeout durante a criação ou atualização do endpoint. Entre em contacto com a sua equipa da conta Databricks para ajudar a resolver.
  • O dimensionamento automático para APIs de Modelos Fundamentais é mais lento do que o serviço de modelo de CPU. O Databricks recomenda o provisionamento excessivo para evitar tempos limite de solicitação.
  • GTE v1.5 (Inglês) não gera incorporações normalizadas.