APIs de modelos fundamentais com taxa de transferência provisionada
Este artigo demonstra como implementar modelos usando as APIs do Modelo Base com a 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.
O que é taxa de transferência provisionada?
A largura de banda provisionada refere-se a quantos tokens em termos de solicitações se podem enviar a um ponto de extremidade ao mesmo tempo. Os pontos de extremidade de serviço de taxa de transferência provisionados são pontos de extremidade dedicados configurados em termos de um intervalo de tokens por segundo que você pode enviar para o ponto de extremidade.
Consulte os seguintes recursos para obter mais informações:
- O que significam os intervalos de valores de tokens por segundo na taxa de transferência provisionada?
- Conduza seu próprio benchmarking de pontos finais LLM
Consulte de APIs de modelo de base de taxa de transferência provisionada para obter uma list de arquiteturas de modelo suportadas para pontos de extremidade de taxa de transferência provisionados.
Requerimentos
Consulte os requisitos . Para implantar modelos de fundação ajustados, consulte Implantar modelos de fundação ajustados.
[Recomendado] Implantar modelos de base do Unity Catalog
Importante
Este recurso está no
O Databricks recomenda o uso dos modelos de base pré-instalados no Unity Catalog. Pode encontrar estes modelos na catalogsystem
no schemaai
(system.ai
).
Para implantar um modelo de fundação:
- Navegue até
system.ai
no Catalog Explorer. - Clique no nome do modelo a ser implantado.
- Na página do modelo, clique no botão Servir este modelo.
- A página Criar ponto de extremidade de serviço é exibida. Consulte Crie o seu ponto de extremidade de taxa de transferência provisionada usando a UI.
Implantar modelos de base do Databricks Marketplace
Como alternativa, você pode instalar modelos de base no Unity Catalog a partir do Databricks Marketplace.
Você pode pesquisar por uma família de modelos e, na página do modelo, pode selectGet aceder e fornecer as credenciais de login credentials para instalar o modelo no Unity Catalog.
Depois de o modelo ser instalado no Unity Catalog, poderá criar um ponto de extremidade para servir o modelo usando a interface 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 de base do Unity Catalog.
Ao servir esses modelos DBRX, a capacidade 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 modelos no system.ai
schema 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 set 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.
Consulte os limites de taxa de transferência provisionada para os modelos ajustados Meta Llama 3.1, 3.2 e 3.3 suportados e sua disponibilidade nas regiões.
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 catalog, schema e nome do modelo
Para implantar um modelo de base ajustado, defina o Unity de destino Catalogcatalog, schemae 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 o ponto de extremidade do modelo, deve registar o modelo usando o sabor 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("mosaicml/mixtral-8x7b-instruct", torch_dtype=torch.bfloat16)
tokenizer = AutoTokenizer.from_pretrained("mosaicml/mixtral-8x7b-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 iniciar sessão com o seu modelo no Unity Catalog, continue para para criar o seu ponto de extremidade de taxa de transferência provisionado usando a interface do utilizador para criar um ponto de extremidade de serviço do modelo com taxa de transferência provisionada.
Crie seu ponto de extremidade de taxa de transferência provisionado usando a interface do usuário
Após o registo do modelo no Unity Catalog, crie um endpoint de serviço com taxa de transferência provisionada pelos seguintes passos:
- Navegue até à interface de utilizador do Serving no seu espaço de trabalho.
- Select Criar endpoint de serviço.
- No campo Entidade
, seu modelo do Unity . Para modelos qualificados, a interface do usuário da entidade atendida mostra a tela Taxa de Transferência Provisionada. - No menu suspenso Até, você pode configurar a taxa de transferência máxima de tokens por segundo para seu ponto de extremidade.
- Os endpoints de largura de banda provisionados escalam automaticamente, para poderes selectModificar para ver o número mínimo de tokens por segundo até ao qual o teu endpoint pode reduzir.
Crie o seu endpoint de throughput provisionado usando a REST API
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 Get 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 probabilidade de log de um token ser amostrado como parte do processo de geração de modelo de linguagem de grande 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 tarefa de bate-papo no
Get taxa de transferência provisionada em incrementos
A largura de banda provisionada está disponível em incrementos de tokens por segundo, com os incrementos específicos a variar 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 cadernos a seguir mostram exemplos de como criar uma API de Modelo Fundamental com throughput provisionado.
Taxa de transferência provisionada servindo para notebook modelo GTE
Largura de banda provisionada para modelo de notebook BGE
Serviço de taxa de transferência provisionada para modelo de notebook Mistral
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 do ponto final ou update. 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.
Apenas as arquiteturas de modelo GTE v1.5 (inglês) e BGE v1.5 (inglês) são suportadas.
GTE v1.5 (Inglês) não generate incorporações normalizadas.