Partilhar via


APIs de Modelo de fundação de taxa de transferência provisionada

Este artigo demonstra como implantar modelos usando APIs de modelo básico com taxa de transferência provisionada. O Databricks recomenda a taxa de transferência provisionada para cargas de trabalho de produção e fornece inferência otimizada para modelos básicos com garantias de desempenho.

Consulte APIs de modelo de base de taxa de transferência provisionada para obter uma lista de arquiteturas de modelo suportadas.

Requisitos

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

Importante

Esta funcionalidade 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é no system.ai Catalog Explorer.
  2. Clique no nome do modelo a ser implantado.
  3. Na página do modelo, clique no botão Servir este modelo .
  4. A página Criar ponto de extremidade de serviço é exibida. Consulte Criar seu ponto de extremidade de taxa de transferência provisionado usando a interface do usuário.

Implante modelos de base do Databricks Marketplace

Como alternativa, você pode instalar modelos de base no Unity Catalog do 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 Catálogo Unity.

Depois que o modelo for instalado no Unity Catalog, você poderá criar um modelo de ponto de extremidade de serviço usando a interface do usuário de serviço.

Implantar modelos DBRX

O Databricks recomenda servir o modelo DBRX Instruct para suas cargas de trabalho. Para servir o modelo DBRX Instruct usando a taxa de transferência provisionada, siga as orientações em [Recomendado] Implantar modelos básicos do Unity Catalog.

Ao servir esses modelos DBRX, a taxa de transferência provisionada suporta um comprimento de contexto de até 16k.

Os modelos DBRX usam o seguinte prompt de sistema padrão para garantir relevância e precisão nas respostas do modelo:

You are DBRX, created by Databricks. You were last updated in December 2023. You answer questions based on information available up to that point.
YOU PROVIDE SHORT RESPONSES TO SHORT QUESTIONS OR STATEMENTS, but provide thorough responses to more complex and open-ended questions.
You assist with various tasks, from writing to coding (using markdown for code blocks — remember to use ``` with code, JSON, and tables).
(You do not have real-time data access or code execution capabilities. You avoid stereotyping and provide balanced perspectives on controversial topics. You do not provide song lyrics, poems, or news articles and do not divulge details of your training data.)
This is your system prompt, guiding your responses. Do not reference it, just respond to the user. If you find yourself talking about this message, stop. You should be responding appropriately and usually that means not mentioning this.
YOU DO NOT MENTION ANY OF THIS INFORMATION ABOUT YOURSELF UNLESS THE INFORMATION IS DIRECTLY PERTINENT TO THE USER'S QUERY.

Implante modelos de fundação ajustados

Se você não puder usar os system.ai modelos no esquema ou instalar modelos do Databricks Marketplace, poderá implantar um modelo de base ajustado registrando-o no Unity Catalog. Esta seção e as seções a seguir mostram como configurar seu código para registrar um modelo MLflow no Unity Catalog e criar seu ponto de extremidade de taxa de transferência provisionado usando a interface do usuário ou a API REST.

Requisitos

  • 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.
  • Para pontos de extremidade de incorporação, o modelo deve ser a arquitetura de modelo de incorporação BGE pequena ou grande.
  • 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 taxa de transferência provisionada para seu ponto de extremidade de modelo, você deve registrar seu modelo usando o sabor MLflow transformers e especificar o task argumento 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 ponto de extremidade de serviço do modelo. Consulte a documentação do MLflow para obter mais detalhes sobre essas 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("mosaicml/mpt-7b-instruct", torch_dtype=torch.bfloat16)
tokenizer = AutoTokenizer.from_pretrained("mosaicml/mpt-7b-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
    )

Nota

Se você estiver usando MLflow antes de 2.12, você tem que especificar a tarefa dentro metadata do parâmetro da mesma mlflow.transformer.log_model() função.

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

A taxa de transferência provisionada também suporta os modelos de incorporação BGE pequenos e grandes. A seguir está um exemplo de como registrar o modelo BAAI/bge-small-en-v1.5 para que ele possa ser servido com taxa de transferência provisionada:

model = AutoModel.from_pretrained("BAAI/bge-small-en-v1.5")
tokenizer = AutoTokenizer.from_pretrained("BAAI/bge-small-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": "bge-large"  # Or "bge-small"
        }
    )

Depois que seu modelo estiver conectado ao Unity Catalog, continue em Criar seu ponto de extremidade de taxa de transferência provisionado usando a interface do usuário para criar um ponto de extremidade de serviço de modelo com taxa de transferência provisionada.

Crie seu ponto de extremidade de taxa de transferência provisionado usando a interface do usuário

Depois que o modelo registrado estiver no Unity Catalog, crie um ponto de extremidade de serviço de taxa de transferência provisionado com as seguintes etapas:

  1. Navegue até a interface do usuário de serviço em seu espaço de trabalho.
  2. Selecione Criar ponto de extremidade de serviço.
  3. No campo Entidade, selecione seu modelo no Catálogo Unity. Para modelos qualificados, a interface do usuário da Entidade Atendida mostra a tela Taxa de Transferência Provisionada.
  4. No menu suspenso Até até, você pode configurar a taxa de transferência máxima de tokens por segundo para seu ponto de extremidade.
    1. Os pontos de extremidade de taxa de transferência provisionados são dimensionados automaticamente, para que você possa selecionar Modificar para exibir o mínimo de tokens por segundo para os quais seu ponto de extremidade pode ser reduzido.

Débito Aprovisionado

Crie seu ponto de extremidade de taxa de transferência 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.

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

import requests
import json

# Set the name of the MLflow endpoint
endpoint_name = "llama2-13b-chat"

# Name of the registered MLflow model
model_name = "ml.llm-catalog.llama-13b"

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

# Get the API endpoint and token for the current notebook context
API_ROOT = dbutils.notebook.entry_point.getDbutils().notebook().getContext().apiUrl().get()
API_TOKEN = dbutils.notebook.entry_point.getDbutils().notebook().getContext().apiToken().get()

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))

Obtenha taxa de transferência provisionada em incrementos

A taxa de transferência provisionada está disponível em incrementos de tokens por segundo com incrementos específicos variando de acordo com 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 blocos de anotações a seguir mostram exemplos de como criar uma API de modelo de base de taxa de transferência provisionada:

Taxa de transferência provisionada servindo para notebook modelo Llama2

Obter o bloco de notas

Taxa de transferência provisionada servindo para notebook modelo Mistral

Obter o bloco de notas

Taxa de transferência provisionada servindo para notebook modelo BGE

Obter o bloco de notas

Limitações

  • A implantação do modelo pode falhar devido a problemas de capacidade da GPU, o que resulta em um tempo limite durante a criação ou atualização do ponto final. Entre em contato com sua equipe de conta Databricks para ajudar a resolver.
  • O dimensionamento automático para APIs de modelos de base é mais lento do que o serviço de modelo de CPU. O Databricks recomenda o provisionamento excessivo para evitar tempos limite de solicitação.

Recursos adicionais