provisionamento throughput Foundation Model APIs

Este artigo demonstra como implantar modelos usando o Foundation Model APIs com provisionamento Taxa de transferência. Databricks recomenda o provisionamento de taxas de transferência para cargas de trabalho de produção e fornece inferência otimizada para modelos de fundação com garantias de desempenho.

Consulte provisionamento Taxa de transferência APIs do Foundation Model para obter uma lista de arquiteturas de modelo suportadas.

Requisitos

Veja os requisitos. Para modelos de fundação implantados com ajuste fino, consulte modelos de fundação implantados com ajuste fino.

[Recommended] implantado modelos de fundação de Unity Catalog

Visualização

Esse recurso está em visualização pública.

A Databricks recomenda o uso dos modelos básicos que estão pré-instalados no Unity Catalog. O senhor pode encontrar esses modelos no catálogo system no esquema ai (system.ai).

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 Servir este modelo.

  4. A página Create serving endpoint é exibida. Consulte Criar seu provisionamento Taxa de transferência endpoint usando a UI.

modelos de fundação implantados a partir de Databricks Marketplace

Como alternativa, o senhor pode instalar modelos de fundação no Unity Catalog a partir de Databricks Marketplace.

O senhor pode pesquisar uma família de modelos e, na página do modelo, pode selecionar Get access (Obter acesso ) e fornecer credenciais de login para instalar o modelo no Unity Catalog.

Depois que o modelo for instalado em Unity Catalog, o senhor poderá criar um modelo de serviço endpoint usando a Serving UI.

modelos DBRX implantados

A Databricks recomenda o uso do modelo DBRX Instruct para suas cargas de trabalho. Para servir o modelo DBRX Instruct usando o provisionamento Taxa de transferência, siga as orientações em [Recomendado] implantado modelos de fundação de Unity Catalog.

Ao atender a esses modelos DBRX, o provisionamento Taxa de transferência suporta um comprimento de contexto de até 16k.

Os modelos DBRX usam o seguinte prompt do sistema default para garantir a relevância e a precisão das 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.

implantou modelos de fundação ajustados

Se não for possível usar os modelos no esquema system.ai ou instalar modelos do site Databricks Marketplace, o senhor poderá implantar um modelo de base ajustado, registrando-o no site Unity Catalog. Esta seção e as seguintes mostram como configurar seu código para log um modelo MLflow para Unity Catalog e criar seu provisionamento Taxa de transferência endpoint usando a interface do usuário ou o REST API.

Requisitos

  • A implantação de modelos de fundação com ajuste fino é compatível apenas com o site MLflow 2.11 ou acima. Databricks Runtime 15.0 ML e o acima pré-instala a versão compatível do MLflow.

  • Para o ponto 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 downloads mais rápidos de modelos grandes.

Definir o catálogo, o esquema e o nome do modelo

Para implantar um modelo de base bem ajustado, defina o catálogo de destino Unity Catalog, 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}"

Registre seu modelo

Para habilitar o provisionamento da Taxa de transferência para o seu modelo endpoint, o senhor deve log seu modelo usando a variante MLflow transformers e especificar o argumento task com a interface de tipo de modelo apropriada entre as seguintes opções:

  • "llm/v1/completions"

  • "llm/v1/chat"

  • "llm/v1/embeddings"

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

Veja a seguir um exemplo de como log um modelo de linguagem de preenchimento de texto com logs 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
    )

Observação

Se estiver usando o MLflow antes da versão 2.12, o senhor deverá especificar a tarefa no parâmetro metadata da mesma função mlflow.transformer.log_model().

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

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

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

O provisionamento Taxa de transferência também suporta os modelos de incorporação BGE pequeno e grande. A seguir, um exemplo de como log o modelo BAAI/bge-small-en-v1.5 para que ele possa ser atendido com o provisionamento Taxa de transferência:

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

Quando seu modelo estiver conectado Unity Catalog, continue em Create your provisionamento Taxa de transferência endpoint usando a UI para criar um modelo de serviço endpoint com provisionamento Taxa de transferência.

Crie seu endpoint de provisionamento de taxa de transferência usando a interface do usuário

Depois que os modelos registrados estiverem no Unity Catalog, crie um endpoint de provisionamento de taxa de transferência com os seguintes passos:

  1. Navegue até a UI de serviço em seu site workspace.

  2. Selecione Criar endpoint de serviço.

  3. No campo Entity (Entidade ), selecione seu modelo no Unity Catalog. Para modelos qualificados, a interface do usuário da entidade atendida mostra a tela de provisionamento Throughput.

  4. Em Up to dropdown, o senhor pode configurar a taxa máxima de transferência de tokens por segundo para o seu endpoint.

    1. provisionamento Os pontos de extremidade da Taxa de transferência escalam automaticamente, portanto, o senhor pode selecionar Modificar para view o mínimo de tokens por segundo que seu endpoint pode escalar.

provisionamento Taxa de transferência

Crie seu endpoint de provisionamento da Taxa de transferência usando a API REST

Para implantar seu modelo no modo de provisionamento Taxa de transferência usando a API REST, o senhor deve especificar os campos min_provisioned_throughput e max_provisioned_throughput em sua solicitação.

Para identificar a faixa adequada de provisionamento da Taxa de transferência para seu modelo, consulte Obter provisionamento da Taxa de transferência 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))

Obter provisionamento Taxa de transferência em incrementos

O provisionamento Taxa de transferência está disponível em incrementos de tokens por segundo, com incrementos específicos que variam 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 modelos dentro da plataforma.

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

A seguir, um exemplo de resposta da API:

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

Notebook exemplos

O Notebook a seguir mostra exemplos de como criar uma API Foundation Model de provisionamento Taxa de transferência:

provisionamento Taxa de transferência servindo para o modelo Llama2 Notebook

Abra o bloco de anotações em outra guia

provisionamento Taxa de transferência servindo para o modelo Mistral Notebook

Abra o bloco de anotações em outra guia

provisionamento Taxa de transferência servindo para o modelo BGE Notebook

Abra o bloco de anotações em outra guia

Limitações

  • A implementaçã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 endpoint. Entre em contato com a equipe da Databricks account para ajudar a resolver o problema.

  • O escalonamento automático para APIs de modelos básicos é mais lento que o modelo de CPU instalado. A Databricks recomenda o provisionamento excessivo para evitar tempos limite de solicitação.