Implementações rápidas para endpoints de disponibilização de modelos

Esta página descreve como utilizar implementações rápidas nos seus endpoints de serviço de modelos. As implementações expressas reduzem os tempos de implementação e mantêm o ambiente de serviço do modelo igual ao ambiente de treino do modelo.

Note

As implementações Express eram anteriormente designadas por implementações otimizadas sem servidor.

O que são implantações expressas?

As implementações expresso empacotam e preparam os artefactos do modelo em ambientes de notebooks sem servidor durante o registo do modelo. Isto acelera a implementação nos endpoints e mantém os ambientes de treino e serviço consistentes.

Em implementações não expressas, artefactos e ambientes de modelos são embalados em contentores no momento da implementação, pelo que o ambiente de serviço pode não corresponder ao utilizado durante o treino do modelo.

Implantações padrão vs expressas

A tabela seguinte compara uma implementação padrão e uma implementação expressa.

Aspect Implementação padrão Desdobramento expresso
Quando o ambiente é construído Uma imagem de contentor é construída no momento da implementação. Os artefactos e o ambiente são incluídos num pacote quando registas o modelo.
Ambiente de treino e serviço O ambiente de serviço pode não corresponder ao ambiente de treino. O ambiente de disponibilização é idêntico ao ambiente de notebook a partir do qual o registou.
Velocidade de implantação Mais devagar. A implementação aguarda a criação de uma imagem de contentor. Mais rápido. A implementação salta a construção da imagem do contentor.
Velocidade de registo Padrão. Adiciona segundos até um minuto ao processo de embalagem, dependendo do modelo e do tamanho do ambiente.
Registo de eventos de implementação Mostra eventos de criação de imagens de contentores. Não mostra eventos de criação de imagem de contentores.

As implementações rápidas transferem a tarefa única de empacotamento para o registo do modelo, o que acrescenta entre alguns segundos e um minuto a uma chamada para register_model, consoante o tamanho do modelo e do ambiente. Em troca, a implementação é significativamente mais rápida: ignora completamente a construção da imagem do contentor. Essa compilação é também uma fonte comum de falhas de implementação (resolução de dependências, erros de construção de imagem), por isso saltá-la elimina toda uma classe de problemas. O registo de eventos de implementação para um modelo expresso não contém eventos de construção de contentores.

Requirements

Os pontos finais de implantação Express têm os mesmos requisitos que os de um ponto final de disponibilização de modelos. Consulte Requisitos.

Além disso:

  • O modelo deve ser personalizado
  • O modelo tem de ser registado e guardado num Serverless Notebook com a versão 3 ou posterior
  • O modelo deve ser registado e registado com mlflow>=3.12 e databricks-sdk>=0.102.0
  • O modelo deve estar registado no Catálogo Unity. O cálculo de serviço deve corresponder ao cálculo de onde o modelo foi registado. Pode registar a partir de um notebook sem servidor normal para implementação em CPU, ou a partir de computação GPU sem servidor para implementação em GPU.
  • O tamanho máximo do ambiente do modelo é de 200GB

Note

Para servir um LLM personalizado em computação GPU usando implementações express, consulte Servir LLMs personalizados com Custom Model Serving.

Implementar um reranker na GPU

Este guia implementa BAAI/bge-reranker-base, um reranqueador cross-encoder que atribui uma pontuação ao grau em que um documento responde a uma consulta. Configura o ambiente, regista os registos e o modelo com empacotamento expresso, implementa o endpoint e consulta-o.

As implementações de GPU frequentemente falham devido a conflitos de versões de dependências, por exemplo, torch e CUDA. As implementações expressas resolvem isto de duas formas:

  • O conjunto fixo e publicado de bibliotecas pré-instaladas em cada versão do ambiente de GPU serverless está presente durante o serviço exatamente como está no portátil — mesma versão do ambiente, mesmas versões. Estas bibliotecas não são reembaladas.
  • Quaisquer dependências adicionais que instales na sessão do notebook (por exemplo, com %pip install) são empacotadas durante o registo e restauradas durante a disponibilização.

Em conjunto, isto significa que um modelo executado no seu notebook continua a funcionar quando é disponibilizado.

Passo 1: Configurar um portátil com GPU serverless

Crie um notebook em computação sem servidor com GPU com uma GPU A10 e selecione a versão 5 do ambiente, ambiente de IA. O ambiente de IA inclui o PyTorch e bibliotecas comuns de aprendizagem automática (torch, transformers, e outras). Para as versões exatas afixadas, consulte Ambiente de GPU sem servidor versão 5 (Pré-visualização).

Instale os pacotes que a implementação expressa exige:

# Express deployment requires recent MLflow and Databricks SDK versions.
%pip install "mlflow>=3.12" "databricks-sdk>=0.102.0"
# Install the libraries your model needs. transformers is preinstalled in the
# v5 AI environment; install it explicitly because this model depends on it.
%pip install transformers
%restart_python

Também podes declarar dependências através de um ambiente serverless, mas instalar no portátil é o caminho mais simples. Desenvolva com base nas versões fixadas do ambiente para que o ambiente do notebook corresponda ao ambiente de produção.

Como este modelo é disponibilizado numa GPU, tem de o registar em log e registá-lo a partir de um ambiente de execução serverless com GPU. Se fizeres login a partir do computador serverless por acidente, o modelo vem com dependências da CPU e o endpoint que serve a GPU não arranca. Adicione a seguinte verificação para falhar de imediato se o notebook não estiver a usar um ambiente de execução com GPU:

import os

# This model is intended to be served on GPU, so we must log and register from a Serverless GPU runtime.
if not os.environ.get("DATABRICKS_ACCELERATOR"):
    raise RuntimeError(
        "This model MUST be logged+registered from a serverless GPU runtime, otherwise the correct dependencies will not be packaged for serving."
    )

Note

Esta verificação só é necessária porque o reclassificador é servido na GPU. Um modelo de CPU não precisa disso.

Passo 2: Registar o modelo com MLflow

Carregue o reranker como um pipeline text-classification e registe-o com a variante nativa mlflow.transformers. O flavor nativo deteta automaticamente as dependências do pip do modelo e é executado na GPU. Não precisa de definir pip_requirements, um task, ou um ponto de entrada.

import mlflow
from transformers import pipeline

# BAAI/bge-reranker-base is a cross-encoder reranker: it scores how well a document answers a query.
pipe = pipeline("text-classification", model="BAAI/bge-reranker-base")

model_info = mlflow.transformers.log_model(
    transformers_model=pipe,
    name="bge_reranker",
    input_example={
        "text": "What is Databricks?",
        "text_pair": "Databricks is a data and AI company.",
    },
)

Importante

Não registe o modelo utilizando o argumento registered_model_name de log_model. Esse argumento não aceita env_pack, pelo que regista um modelo não expresso. Para permitir a implementação expressa, registe-se numa etapa separada com register_model (Passo 3), que aceita env_pack.

Passo 3: Registar o modelo no Unity Catalog com embalagem express

Regista o modelo no Unity Catalog e define o env_pack parâmetro para permitir a implementação expressa. Isto inclui os artefactos do modelo e as dependências que adicionaste à sessão do notebook durante o registo, para que a disponibilização os reutilize além das bibliotecas pré-instaladas da versão do ambiente.

import mlflow
from mlflow.utils.env_pack import EnvPackConfig

mlflow.set_registry_uri("databricks-uc")

model_version = mlflow.register_model(
    model_uri=model_info.model_uri,
    name="main.default.bge_reranker",
    env_pack=EnvPackConfig(name="databricks_model_serving"),
)

Pode usar a forma abreviada da cadeia de caracteres env_pack="databricks_model_serving" em vez de EnvPackConfig(name="databricks_model_serving"). Para espaços de trabalho sem acesso à internet ou com bibliotecas personalizadas, define install_dependencies=False (ver O env_pack parâmetro).

O registo requer databricks-sdk>=0.102.0. Versões anteriores podem expirar ao carregar artefactos de modelos grandes.

Passo 4: Criar um endpoint de serviço

Implemente o modelo registado com o Azure Databricks SDK. Este passo de implementação é igual ao de qualquer modelo personalizado — apenas o passo de registo (Passo 3) difere para express.

from databricks.sdk import WorkspaceClient
from databricks.sdk.service.serving import (
    EndpointCoreConfigInput,
    ServedEntityInput,
    ServingModelWorkloadType,
)

ENDPOINT_NAME = "bge-reranker-endpoint"

w = WorkspaceClient()
w.serving_endpoints.create_and_wait(
    name=ENDPOINT_NAME,
    config=EndpointCoreConfigInput(
        name=ENDPOINT_NAME,
        served_entities=[
            ServedEntityInput(
                name="bge-reranker",
                entity_name=model_version.name,
                entity_version=model_version.version,
                workload_type=ServingModelWorkloadType.GPU_SMALL,
                workload_size="Small",
                scale_to_zero_enabled=False,
            )
        ],
    ),
)

create_and_wait bloqueia até que o endpoint esteja pronto. GPU_SMALL é suficiente para este reclassificador. Como servir reutiliza a mesma versão do ambiente e restaura as dependências que adicionaste no caderno, o modelo servido corre contra as mesmas versões da biblioteca que desenvolveste, independentemente do tipo de GPU.

Enquanto o endpoint é implementado, abra o separador Events do endpoint na interface de Servir. Como esta é uma implementação expressa, o registo de eventos não mostra eventos de criação de imagem de contentor (uma implementação padrão mostra Container image creation initiated seguida de Container image creation finished successfully). Quando o endpoint termina, o seu estado mostra Pronto.

Passo 5: Consultar o endpoint

Um cross-encoder avalia uma consulta face a um documento, por isso, envie os campos text e text_pair. Consulte de forma programática com o SDK da Databricks ou o curl.

Databricks SDK

w.serving_endpoints.query(
    name=ENDPOINT_NAME,
    dataframe_records=[
        {"text": "What is Databricks?", "text_pair": "Databricks is a data and AI company."},
    ],
)

curl

curl -X POST \
  -u "token:$DATABRICKS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"dataframe_records":[{"text":"What is Databricks?","text_pair":"Databricks is a data and AI company."}]}' \
  https://<workspace-url>/serving-endpoints/bge-reranker-endpoint/invocations

O endpoint devolve uma pontuação de relevância para cada par consulta-documento; pontuações mais altas indicam uma melhor correspondência. Use estas pontuações para reclassificar documentos de candidatos.

Bloco de notas de exemplo

Importe o seguinte notebook para executar este guia do início ao fim.

Bloco de notas de iniciação do reordenador Express

Obter caderno

O parâmetro env_pack

O guia de iniciação rápida acima mostra uma implementação rápida para um modelo de GPU. As implementações Express também funcionam para modelos de CPU. Em todos os casos, permite a implementação expressa passando env_pack para register_model:

import mlflow
from mlflow.utils.env_pack import EnvPackConfig

mlflow.register_model(
    model_info.model_uri,
    model_name,
    env_pack=EnvPackConfig(name="databricks_model_serving"),
)

env_pack empacota e prepara os artefactos do modelo e as dependências que adicionaste à sessão do notebook aquando do registo, razão pela qual o registo demora mais tempo do que uma chamada sem env_pack.

EnvPackConfig aceita um install_dependencies parâmetro (True por defeito). Quando True, as dependências do modelo são instaladas no ambiente atual para confirmar que o ambiente é válido.

Note

O registo pode falhar em espaços de trabalho sem acesso à internet, ou quando o modelo depende de bibliotecas personalizadas, se install_dependencies for True. Nestes casos, defina install_dependencies para False.

Pode substituir a cadeia de caracteres "databricks_model_serving" por EnvPackConfig(...) como forma abreviada. É equivalente a EnvPackConfig(name="databricks_model_serving", install_dependencies=True).