Um modelo de linguagem grande (LLM) é um modelo de linguagem baseado em rede neural com centenas de milhões de parâmetros, como GPT-3, GPT-4, PaLM e PaLM 2. Ao implantar um LLM no Service Mesh (ASM) por meio do ModelMesh, você expõe recursos de PLN — classificação de texto, análise de sentimento e tradução automática — como endpoints de API. Com a abordagem de LLM como serviço, evita-se altos custos de infraestrutura, responde-se rapidamente às mudanças de mercado e dimensionam-se os serviços sob demanda para lidar com picos de tráfego, enquanto o modelo roda na nuvem e melhora a eficiência operacional.
Este tópico aborda três etapas: criar um runtime de serviço de modelo personalizado, implantar o modelo como serviço de inferência e enviar solicitações de inferência pelo gateway de entrada do ASM.
Como funciona
Esta implantação usa o ModelMesh dentro do ASM para servir um LLM do Hugging Face com ajuste fino eficiente em parâmetros (PEFT) via prompt tuning. O diagrama a seguir mostra a integração dos componentes:
+---------------------------------------------------------+
| ASM ingress gateway |
| (port 8008, HTTP) |
+----------------------------+----------------------------+
|
v
+---------------------------------------------------------+
| ModelMesh |
| (model routing and orchestration) |
+---------------------------------------------------------+
| ServingRuntime InferenceService |
| +------------------+ +-----------------------+ |
| | peft-model-server |<-----| peft-demo | |
| | (MLServer-based) | | (model endpoint) | |
| +------------------+ +-----------------------+ |
| | |
| v |
| +------------------+ +-----------------------+ |
| | MLServer | | Hugging Face model | |
| | (gRPC :8001, | | + PEFT config | |
| | HTTP :8002) | | (bloomz-560m) | |
| +------------------+ +-----------------------+ |
+---------------------------------------------------------+
ServingRuntime: Define a imagem de contêiner e a configuração do MLServer para servir o modelo.
InferenceService: Especifica qual modelo carregar e qual ServingRuntime usar. Funciona como o endpoint lógico para solicitações de inferência.
ModelMesh: Encaminha as solicitações recebidas do gateway de entrada do ASM para o InferenceService correto. Gerencia o carregamento e o dimensionamento dos modelos.
Pré-requisitos
Antes de começar, verifique se você tem:
O ModelMesh ativado na sua instância do ASM com o ambiente do ASM configurado. Conclua a Etapa 1 e a Etapa 2 em Usar o ModelMesh para lançar um serviço de inferência multimodelo antes de prosseguir.
Familiaridade com a criação de runtimes de serviço de modelo personalizados com o ModelMesh. Para mais informações, consulte Usar o ModelMesh para criar um runtime de serviço de modelo personalizado.
Etapa 1: Criar um runtime personalizado
Crie um ServingRuntime personalizado para servir um LLM do Hugging Face com prompt tuning PEFT. Este processo envolve três partes: implementar a classe do servidor de modelo, empacotá-la em uma imagem Docker e criar o recurso do Kubernetes.
Implementar a classe do servidor de modelo
O servidor de modelo herda da classe base MLModel do MLServer e implementa dois manipuladores:
**
load**: Carrega o LLM pré-treinado, aplica a configuração de prompt tuning PEFT e inicializa um tokenizador. O tokenizador permite que o servidor aceite entrada de texto bruto em vez de tensores pré-processados.**
predict**: Tokeniza o texto de entrada, executa a inferência e decodifica a saída de volta para texto legível.
A implementação completa está em peft_model_server.py:
O servidor de modelo lê a configuração das variáveis de ambiente:
|
Variável de ambiente |
Valor padrão |
Descrição |
|
|
|
Caminho ou ID do modelo Hugging Face para o LLM base |
|
|
|
ID da configuração de prompt tuning PEFT |
|
|
|
Nome da coluna usada para o campo de texto de entrada |
Criar a imagem Docker
Empacote o servidor de modelo e suas dependências em uma imagem Docker compatível com o ModelMesh.
A imagem expõe duas portas: gRPC na porta 8001 e HTTP na porta 8002. Definir MLSERVER_MODEL_IMPLEMENTATION informa ao MLServer qual classe carregar, eliminando a necessidade de um arquivo separado de configurações do modelo.
Criar o recurso ServingRuntime
Defina um ServingRuntime que aponte para sua imagem Docker e configure o ambiente do MLServer.
Implante o ServingRuntime:
kubectl apply -f sample-runtime.yaml
Verifique se o runtime está disponível:
kubectl get servingruntimes -n modelmesh-serving
Saída esperada:
NAME AGE
peft-model-server 10s
O runtime peft-model-server deve aparecer na saída.
Etapa 2: Implantar o serviço de inferência
Crie um recurso InferenceService para vincular seu modelo ao ServingRuntime da Etapa 1. O InferenceService é o endpoint lógico que o ModelMesh usa para encaminhar solicitações de inferência ao modelo.
Campos de configuração:
|
Campo |
Valor |
Descrição |
|
|
|
Deve corresponder ao formato declarado no ServingRuntime |
|
|
|
Informa ao ModelMesh qual runtime serve este modelo |
|
|
|
Anotação obrigatória que instrui o KServe a implantar via ModelMesh em vez de pods independentes |
Implante o InferenceService:
kubectl apply -f peft-demo-isvc.yaml
Verifique se o InferenceService está pronto:
kubectl get inferenceservices -n modelmesh-serving
Saída esperada:
NAME URL READY AGE
peft-demo True 30s
Aguarde até que a coluna READY mostre True antes de prosseguir. Se o status permanecer como False, consulte Solução de problemas.
Etapa 3: Enviar uma solicitação de inferência
Envie uma solicitação POST para o modelo implantado através do gateway de entrada do ASM. A solicitação utiliza o protocolo de inferência v2 do KServe.
MODEL_NAME="peft-demo"
ASM_GW_IP="<IP-address-of-the-ingress-gateway>"
curl -X POST -k http://${ASM_GW_IP}:8008/v2/models/${MODEL_NAME}/infer -d @./input.json
Substitua o seguinte espaço reservado pelo valor real:
|
Espaço reservado |
Descrição |
Exemplo |
|
|
IP externo do seu gateway de entrada do ASM |
192.168.1.100 |
O corpo da solicitação (input.json) segue o formato do protocolo de inferência v2. Codifique o texto de entrada como Base64 no campo bytes_contents:
{
"inputs": [
{
"name": "content",
"shape": [1],
"datatype": "BYTES",
"contents": {"bytes_contents": ["RXZlcnkgZGF5IGlzIGEgbmV3IGJpbm5pbmcsIGZpbGxlZCB3aXRoIG9wdGlvbnBpZW5pbmcgYW5kIGhvcGU="]}
}
]
}
Neste exemplo, bytes_contents é a forma codificada em Base64 de "Every day is a new beginning, filled with opportunities and hope".
Resposta esperada
Uma inferência bem-sucedida retorna uma resposta JSON com a saída do modelo em bytesContents, também codificado em Base64:
{
"modelName": "peft-demo__isvc-5c5315c302",
"outputs": [
{
"name": "output-0",
"datatype": "BYTES",
"shape": [
"1",
"1"
],
"parameters": {
"content_type": {
"stringParam": "str"
}
},
"contents": {
"bytesContents": [
"VHdlZXQgdGV4dCA6IEV2ZXJ5IGRheSBpcyBhIG5ldyBiaW5uaW5nLCBmaWxsZWQgd2l0aCBvcHRpb25waWVuaW5nIGFuZCBob3BlIExhYmVsIDogbm8gY29tcGxhaW50"
]
}
}
]
}
Decodifique o valor de bytesContents de Base64 para verificar o resultado:
Tweet text : Every day is a new binning, filled with optionpiening and hope Label : no complaint
O modelo classificou o texto de entrada com o rótulo no complaint, confirmando que o serviço de inferência funciona corretamente.
Solução de problemas
|
Problema |
Causa |
Solução |
|
O pod do ServingRuntime permanece em |
CPU ou memória insuficiente no cluster |
Adicione nós ou reduza os |
|
O InferenceService nunca atinge |
Tempo limite de carregamento do modelo ou falha no download |
Verifique os logs do pod com |
|
O |
Gateway de entrada mal configurado ou IP/porta incorretos |
Verifique o IP do gateway de entrada do ASM e confirme se a porta |
|
Saída inesperada do modelo |
Incompatibilidade entre o modelo e a configuração PEFT |
Confirme se |
Próximos passos
Usar o ModelMesh para lançar um serviço de inferência multimodelo — Implante vários modelos em uma única instância do ModelMesh para compartilhar recursos.
Usar o ModelMesh para criar um runtime de serviço de modelo personalizado — Crie e personalize recursos ServingRuntime para outros frameworks de modelos.