Todos os produtos
Search
Central de documentação

Alibaba Cloud Service Mesh:Deploy a transformer with InferenceService

Última atualização: Jun 28, 2026

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:

  1. O handler preprocess converte a entrada bruta no formato esperado pelo modelo — por exemplo, ao decodificar uma imagem Base64 em tensores.

  2. O predictor recebe os dados processados para inferência.

  3. A resposta do predictor passa pelo handler postprocess antes 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

  • kubectl configurado 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

Nota

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.

  1. 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
              - mnist

    Campo

    Descrição

    spec.predictor.model.storageUri

    Caminho no Google Cloud Storage para o modelo PyTorch MNIST, servido pelo TorchServe

    spec.transformer.containers[].image

    Imagem do transformer responsável pelo pré-processamento dos dados de imagem recebidos

    spec.transformer.containers[].args

    O parâmetro --model_name mnist indica ao transformer qual modelo utilizar

  2. Implante o InferenceService:

    kubectl apply -f transformer-new.yaml
  3. Aguarde até que o InferenceService esteja pronto:

    kubectl get inferenceservice torch-transformer

    A coluna READY deve exibir True antes 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:

Sample handwritten digit

{
    "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

  1. 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_HOSTNAME

    Saída esperada:

    torchserve-transformer.default.example.com
  2. 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