Quando o servidor de modelos exige entrada pré-processada — como tensores em vez de imagens Base64 brutas —, um transformer faz a ponte necessária. Ele executa três handlers em sequência dentro de um único InferenceService:
O handler
preprocessconverte a entrada bruta no formato esperado pelo modelo — por exemplo, ao decodificar uma imagem Base64 em tensores.O predictor recebe os dados processados para inferência.
A resposta do predictor passa pelo handler
postprocessantes de retornar ao cliente.
Por padrão, o transformer se comunica com o predictor via REST.
Pré-requisitos
Antes de começar, verifique se você tem:
Um ambiente KServe funcional no Service Mesh (ASM). Para instruções de configuração, consulte Integrar o KServe ao ASM
kubectlconfigurado para acessar seu cluster(Opcional) docker instalado, caso pretenda criar uma imagem personalizada de transformer
(Opcional) Acesso a um registro de contêineres, caso pretenda enviar imagens personalizadas
Este tutorial utiliza o KServe 0.10. Versões diferentes podem exigir formatos distintos de dados de entrada. Para a referência upstream, consulte Implantar Transformer com InferenceService.
Crie uma imagem docker de transformer
Escolha um dos métodos abaixo:
|
Método |
Quando usar |
|
Compilar a partir do código-fonte |
Quando for necessário personalizar a lógica do transformer |
|
Imagem pré-compilada |
Para utilizar o transformer de imagem padrão sem modificações |
Compilar a partir do código-fonte
Compile a imagem a partir do diretório kserve/python no repositório GitHub do KServe:
cd python
docker build -t <your-registry-url>/image-transformer:latest -f custom_transformer.Dockerfile .
docker push <your-registry-url>/image-transformer:latest
Substitua <your-registry-url> pela URL do seu registro de contêineres, por exemplo registry.example.com/ml-models.
Usar a imagem pré-compilada
Utilize diretamente a seguinte imagem no YAML do seu InferenceService:
asm-registry.cn-hangzhou.cr.aliyuncs.com/asm/kserve-image-custom-transformer:0.10
Implante o InferenceService com um transformer
Por padrão, o InferenceService usa o TorchServe para servir modelos PyTorch. Este exemplo implanta um classificador de dígitos manuscritos MNIST pré-treinado com um transformer de imagem personalizado.
-
Crie um arquivo chamado
transformer-new.yaml:apiVersion: serving.kserve.io/v1beta1 kind: InferenceService metadata: name: torch-transformer spec: predictor: model: modelFormat: name: pytorch storageUri: gs://kfserving-examples/models/torchserve/image_classifier/v1 transformer: containers: - image: asm-registry.cn-hangzhou.cr.aliyuncs.com/asm/kserve-image-custom-transformer:0.10 name: kserve-container command: - "python" - "-m" - "model" args: - --model_name - mnistCampo
Descrição
spec.predictor.model.storageUriCaminho no Google Cloud Storage para o modelo PyTorch MNIST, servido pelo TorchServe
spec.transformer.containers[].imageImagem do transformer responsável pelo pré-processamento dos dados de imagem recebidos
spec.transformer.containers[].argsO parâmetro
--model_name mnistindica ao transformer qual modelo utilizar -
Implante o InferenceService:
kubectl apply -f transformer-new.yaml -
Aguarde até que o InferenceService esteja pronto:
kubectl get inferenceservice torch-transformerA coluna
READYdeve exibirTrueantes de você prosseguir.
Execute uma previsão
Prepare os dados de entrada
Codifique uma imagem de amostra em Base64 e salve-a em um arquivo chamado input.json. O exemplo abaixo utiliza uma imagem de dígito manuscrito:

{
"instances": [
{
"image": {
"b64": "iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAAAAABXZoBIAAAAw0lEQVR4nGNgGFggVVj4/y8Q2GOR83n+58/fP0DwcSqmpNN7oOTJw6f+/H2pjUU2JCSEk0EWqN0cl828e/FIxvz9/9cCh1zS5z9/G9mwyzl/+PNnKQ45nyNAr9ThMHQ/UG4tDofuB4bQIhz6fIBenMWJQ+7Vn7+zeLCbKXv6z59NOPQVgsIcW4QA9YFi6wNQLrKwsBebW/68DJ388Nun5XFocrqvIFH59+XhBAxThTfeB0r+vP/QHbuDCgr2JmOXoSsAAKK7bU3vISS4AAAAAElFTkSuQmCC"
}
}
]
}
Envie uma solicitação de previsão
-
Obtenha o hostname do serviço:
SERVICE_NAME=torchserve-transformer SERVICE_HOSTNAME=$(kubectl get inferenceservice $SERVICE_NAME -o jsonpath='{.status.url}' | cut -d "/" -f 3) echo $SERVICE_HOSTNAMESaída esperada:
torchserve-transformer.default.example.com -
Envie uma solicitação pelo gateway de ingresso do ASM:
Para obter o endereço IP do gateway de ingresso, consulte Obter o endereço IP do gateway de ingresso.
MODEL_NAME=mnist INPUT_PATH=@./input.json ASM_GATEWAY="<ingress-gateway-ip>" # Replace with your ingress gateway IP address curl -v -H "Host: ${SERVICE_HOSTNAME}" -d $INPUT_PATH http://${ASM_GATEWAY}/v1/models/$MODEL_NAME:predict
Verifique o resultado
Uma resposta bem-sucedida retorna HTTP 200 com uma previsão em JSON:
< HTTP/1.1 200 OK
< content-length: 19
< content-type: application/json
< server: istio-envoy
<
{"predictions":[2]}
A previsão [2] indica que o modelo classificou a imagem de entrada como o dígito 2. Isso confirma que o transformer decodificou a imagem Base64, converteu-a em tensores e a encaminhou para o predictor MNIST.
Próximos passos
Referência de transformers do KServe (v0.10) — código-fonte e exemplos de transformers personalizados
Integrar o KServe ao ASM — padrões adicionais de implantação de serviços de inferência