Transformer adalah komponen dalam InferenceService yang digunakan untuk pra-pemrosesan, post-processing, dan inferensi model. InferenceService berkomunikasi dengan transformer melalui protokol REST. Transformer dapat mengonversi data input mentah menjadi format yang sesuai untuk model server, sehingga memungkinkan implementasi pemrosesan data ujung-ke-ujung dan inferensi model.
Prasyarat
Pastikan Anda dapat menjalankan layanan inferensi dasar di lingkungan Anda. Untuk informasi lebih lanjut, lihat Integrasikan KServe dengan ASM untuk mengimplementasikan layanan inferensi berbasis model AI cloud-native.
Versi KServe yang berbeda mungkin memerlukan format data input yang berbeda. Contoh ini menggunakan KServe 0.10. Untuk informasi lebih lanjut, lihat Menyebarkan Transformer dengan InferenceService.
Langkah 1: Buat gambar Docker transformer
Metode 1: Di direktori kserve/python KServe di GitHub, buat gambar Docker transformer menggunakan Dockerfile.
cd python docker build -t <your-registry-url>/image-transformer:latest -f custom_transformer.Dockerfile . docker push <your-registry-url>/image-transformer:latestMetode 2: Gunakan gambar yang sudah ada.
asm-registry.cn-hangzhou.cr.aliyuncs.com/asm/kserve-image-custom-transformer:0.10
Langkah 2: Gunakan REST predictor untuk menyebarkan InferenceService
Secara default, InferenceService menggunakan TorchServe untuk menyajikan model PyTorch, dengan model dimuat dari repositori model. Dalam contoh ini, repositori model berisi model MNIST.
Buat file transformer-new.yaml dengan konten berikut:
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 - mnistJalankan perintah berikut untuk menyebarkan InferenceService:
kubectl apply -f transformer-new.yaml
Langkah 3: Jalankan prediksi
Verifikasi payload input permintaan.
Enkode konten gambar berikut ke Base64 dan simpan sebagai file input.json.

{ "instances":[ { "image":{ "b64": "iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAAAAABXZoBIAAAAw0lEQVR4nGNgGFggVVj4/y8Q2GOR83n+58/fP0DwcSqmpNN7oOTJw6f+/H2pjUU2JCSEk0EWqN0cl828e/FIxvz9/9cCh1zS5z9/G9mwyzl/+PNnKQ45nyNAr9ThMHQ/UG4tDofuB4bQIhz6fIBenMWJQ+7Vn7+zeLCbKXv6z59NOPQVgsIcW4QA9YFi6wNQLrKwsBebW/68DJ388Nun5XFocrqvIFH59+XhBAxThTfeB0r+vP/QHbuDCgr2JmOXoSsAAKK7bU3vISS4AAAAAElFTkSuQmCC" } } ] }Akses layanan model melalui gateway ingress.
Jalankan perintah berikut untuk mendapatkan nilai SERVICE_HOSTNAME:
SERVICE_NAME=torchserve-transformer SERVICE_HOSTNAME=$(kubectl get inferenceservice $SERVICE_NAME -o jsonpath='{.status.url}' | cut -d "/" -f 3) echo $SERVICE_HOSTNAMEKeluaran yang diharapkan:
torchserve-transformer.default.example.comJalankan perintah berikut untuk mengakses layanan model.
Untuk informasi lebih lanjut tentang cara mendapatkan alamat IP gateway ingress, lihat Sublangkah 1 Dapatkan alamat IP gateway ingress dari Langkah 3 dalam topik "Gunakan sumber daya Istio untuk merutekan lalu lintas ke versi layanan yang berbeda".
MODEL_NAME=mnist INPUT_PATH=@./input.json ASM_GATEWAY="XXXX" # Ganti XXXX dengan alamat IP gateway ingress. curl -v -H "Host: ${SERVICE_HOSTNAME}" -d $INPUT_PATH http://${ASM_GATEWAY}/v1/models/$MODEL_NAME:predictKeluaran yang diharapkan:
> POST /v1/models/mnist:predict HTTP/1.1 > Host: torchserve-transformer.default.example.com > User-Agent: curl/7.79.1 > Accept: */* > Content-Length: 427 > Content-Type: application/x-www-form-urlencoded > * Mark bundle as not supporting multiuse < HTTP/1.1 200 OK < content-length: 19 < content-type: application/json < date: Mon, 13 Nov 2023 05:53:15 GMT < server: istio-envoy < x-envoy-upstream-service-time: 119 < * Connection #0 to host xxxx left intact {"predictions":[2]}%Keluaran menunjukkan bahwa akses ke layanan model berhasil.