全部产品
Search
文档中心

Container Service for Kubernetes:Konfigurasikan perutean pintar untuk layanan inferensi LLM menggunakan gerbang inferensi

更新时间:Nov 11, 2025

Algoritma penyeimbangan beban tradisional dapat mendistribusikan permintaan HTTP standar secara merata di berbagai beban kerja. Namun, untuk layanan inferensi model bahasa besar (LLM), memprediksi muatan setiap permintaan di backend merupakan tantangan. Gateway with Inference Extension adalah komponen yang ditingkatkan yang dibangun di atas Kubernetes Gateway API dan spesifikasi Inference Extension-nya. Komponen ini menggunakan perutean pintar untuk meningkatkan penyeimbangan beban di berbagai beban kerja layanan inferensi. Gerbang ini menawarkan berbagai kebijakan penyeimbangan beban untuk skenario layanan inferensi LLM yang berbeda serta mengaktifkan fitur seperti rilis bertahap dan antrian permintaan inferensi.

Prasyarat

Langkah 1: Konfigurasikan perutean pintar untuk layanan inferensi

Gateway with Inference Extension menyediakan dua kebijakan penyeimbangan beban perutean pintar untuk memenuhi kebutuhan layanan inferensi yang berbeda:

  • Penyeimbangan beban berdasarkan panjang antrian permintaan dan pemanfaatan cache GPU (kebijakan default).

  • Kebijakan penyeimbangan beban sadar awalan (Prefix Cache Aware Routing).

Anda dapat mengaktifkan fitur perutean pintar gerbang inferensi dengan mendeklarasikan sumber daya InferencePool dan InferenceModel untuk layanan inferensi tersebut. Sesuaikan konfigurasi sumber daya InferencePool dan InferenceModel berdasarkan metode penerapan backend dan kebijakan penyeimbangan beban yang dipilih.

Penyeimbangan beban berdasarkan panjang antrian permintaan dan pemanfaatan cache GPU

Jika anotasi InferencePool kosong, kebijakan perutean pintar berdasarkan panjang antrian permintaan dan pemanfaatan cache GPU digunakan secara default. Kebijakan ini mengalokasikan permintaan secara dinamis berdasarkan beban real-time layanan inferensi backend, yang mencakup panjang antrian permintaan dan pemanfaatan cache GPU, untuk mencapai penyeimbangan beban optimal.

  1. Buat file inference_networking.yaml.

    Penerapan vLLM single-machine

    apiVersion: inference.networking.x-k8s.io/v1alpha2
    kind: InferencePool
    metadata:
      name: qwen-inference-pool
    spec:
      targetPortNumber: 8000
      selector:
        alibabacloud.com/inference-workload: vllm-inference
      extensionRef:
        name: inference-gateway-ext-proc
    ---
    apiVersion: inference.networking.x-k8s.io/v1alpha2
    kind: InferenceModel
    metadata:
      name: qwen-inference-model
    spec:
      modelName: /models/Qwen3-32B
      criticality: Critical
      poolRef:
        group: inference.networking.x-k8s.io
        kind: InferencePool
        name: qwen-inference-pool
      targetModels:
      - name: /models/Qwen3-32B
        weight: 100

    Penerapan SGLang single-machine

    apiVersion: inference.networking.x-k8s.io/v1alpha2
    kind: InferencePool
    metadata:
      name: qwen-inference-pool
      annotations:
        inference.networking.x-k8s.io/model-server-runtime: sglang
    spec:
      targetPortNumber: 8000
      selector:
        alibabacloud.com/inference-workload: sgl-inference
      extensionRef:
        name: inference-gateway-ext-proc
    ---
    apiVersion: inference.networking.x-k8s.io/v1alpha2
    kind: InferenceModel
    metadata:
      name: qwen-inference-model
    spec:
      modelName: /models/Qwen3-32B
      criticality: Critical
      poolRef:
        group: inference.networking.x-k8s.io
        kind: InferencePool
        name: qwen-inference-pool
      targetModels:
      - name: /models/Qwen3-32B
        weight: 100

    Penerapan vLLM terdistribusi

    apiVersion: inference.networking.x-k8s.io/v1alpha2
    kind: InferencePool
    metadata:
      name: qwen-inference-pool
    spec:
      targetPortNumber: 8000
      selector:
        alibabacloud.com/inference-workload: vllm-multi-nodes
        role: leader
      extensionRef:
        name: inference-gateway-ext-proc
    ---
    apiVersion: inference.networking.x-k8s.io/v1alpha2
    kind: InferenceModel
    metadata:
      name: qwen-inference-model
    spec:
      modelName: /models/Qwen3-32B
      criticality: Critical
      poolRef:
        group: inference.networking.x-k8s.io
        kind: InferencePool
        name: qwen-inference-pool
      targetModels:
      - name: /models/Qwen3-32B
        weight: 100

    Penerapan SGLang terdistribusi

    apiVersion: inference.networking.x-k8s.io/v1alpha2
    kind: InferencePool
    metadata:
      name: qwen-inference-pool
      annotations:
        inference.networking.x-k8s.io/model-server-runtime: sglang
    spec:
      targetPortNumber: 8000
      selector:
        alibabacloud.com/inference-workload: sglang-multi-nodes
        role: leader
      extensionRef:
        name: inference-gateway-ext-proc
    ---
    apiVersion: inference.networking.x-k8s.io/v1alpha2
    kind: InferenceModel
    metadata:
      name: qwen-inference-model
    spec:
      modelName: /models/Qwen3-32B
      criticality: Critical
      poolRef:
        group: inference.networking.x-k8s.io
        kind: InferencePool
        name: qwen-inference-pool
      targetModels:
      - name: /models/Qwen3-32B
        weight: 100

    Penerapan disagregasi PD SGLang

    apiVersion: inference.networking.x-k8s.io/v1alpha2
    kind: InferencePool
    metadata:
      name: qwen-inference-pool
    spec:
      targetPortNumber: 8000
      selector:
        alibabacloud.com/inference_backend: sglang # Memilih beban kerja prefill dan decode
    ---
    # InferenceTrafficPolicy menentukan kebijakan trafik yang diterapkan pada InferencePool
    apiVersion: inferenceextension.alibabacloud.com/v1alpha1
    kind: InferenceTrafficPolicy
    metadata:
      name: inference-policy
    spec:
      poolRef:
        name: qwen-inference-pool
      modelServerRuntime: sglang # Menentukan SGLang sebagai framework runtime untuk layanan backend
      profile:
        pd:  # Menentukan bahwa layanan backend diterapkan dalam mode disagregasi PD
          pdRoleLabelName: rolebasedgroup.workloads.x-k8s.io/role # Membedakan peran prefill dan decode dalam InferencePool menggunakan label pod
          kvTransfer:
            bootstrapPort: 34000 # Port bootstrap yang digunakan untuk transfer KV Cache dalam layanan disagregasi PD SGLang. Nilai ini harus konsisten dengan parameter disaggregation-bootstrap-port yang ditentukan dalam penerapan RoleBasedGroup.
  2. Terapkan penyeimbang beban berdasarkan panjang antrian permintaan dan pemanfaatan cache GPU.

    kubectl create -f inference_networking.yaml

Penyeimbangan beban sadar awalan (Prefix Cache Aware Routing)

Kebijakan Prefix Cache Aware Routing mengirim permintaan yang memiliki konten awalan yang sama ke pod server inferensi yang sama sebisa mungkin. Jika server model memiliki fitur cache awalan otomatis (APC) yang diaktifkan, kebijakan ini dapat meningkatkan rasio hit cache awalan dan mengurangi waktu tanggapan.

Penting

Versi vLLM v0.9.2 dan framework SGLang yang digunakan dalam dokumen ini telah mengaktifkan fitur cache awalan secara default. Anda tidak perlu menerapkan ulang layanan untuk mengaktifkan caching awalan.

Untuk mengaktifkan kebijakan penyeimbangan beban sadar awalan, tambahkan anotasi berikut ke InferencePool: inference.networking.x-k8s.io/routing-strategy: "PREFIX_CACHE"

  1. Buat file Prefix_Cache.yaml.

    Penerapan vLLM single-machine

    apiVersion: inference.networking.x-k8s.io/v1alpha2
    kind: InferencePool
    metadata:
      name: qwen-inference-pool
      annotations:
        inference.networking.x-k8s.io/routing-strategy: "PREFIX_CACHE"
    spec:
      targetPortNumber: 8000
      selector:
        alibabacloud.com/inference-workload: vllm-inference
      extensionRef:
        name: inference-gateway-ext-proc
    ---
    apiVersion: inference.networking.x-k8s.io/v1alpha2
    kind: InferenceModel
    metadata:
      name: qwen-inference-model
    spec:
      modelName: /models/Qwen3-32B
      criticality: Critical
      poolRef:
        group: inference.networking.x-k8s.io
        kind: InferencePool
        name: qwen-inference-pool
      targetModels:
      - name: /models/Qwen3-32B
        weight: 100

    Penerapan SGLang single-machine

    apiVersion: inference.networking.x-k8s.io/v1alpha2
    kind: InferencePool
    metadata:
      name: qwen-inference-pool
      annotations:
        inference.networking.x-k8s.io/model-server-runtime: sglang
        inference.networking.x-k8s.io/routing-strategy: "PREFIX_CACHE"
    spec:
      targetPortNumber: 8000
      selector:
        alibabacloud.com/inference-workload: sgl-inference
      extensionRef:
        name: inference-gateway-ext-proc
    ---
    apiVersion: inference.networking.x-k8s.io/v1alpha2
    kind: InferenceModel
    metadata:
      name: qwen-inference-model
    spec:
      modelName: /models/Qwen3-32B
      criticality: Critical
      poolRef:
        group: inference.networking.x-k8s.io
        kind: InferencePool
        name: qwen-inference-pool
      targetModels:
      - name: /models/Qwen3-32B
        weight: 100

    Penerapan vLLM terdistribusi

    apiVersion: inference.networking.x-k8s.io/v1alpha2
    kind: InferencePool
    metadata:
      name: qwen-inference-pool
      annotations:
        inference.networking.x-k8s.io/routing-strategy: "PREFIX_CACHE"
    spec:
      targetPortNumber: 8000
      selector:
        alibabacloud.com/inference-workload: vllm-multi-nodes
        role: leader
      extensionRef:
        name: inference-gateway-ext-proc
    ---
    apiVersion: inference.networking.x-k8s.io/v1alpha2
    kind: InferenceModel
    metadata:
      name: qwen-inference-model
    spec:
      modelName: /models/Qwen3-32B
      criticality: Critical
      poolRef:
        group: inference.networking.x-k8s.io
        kind: InferencePool
        name: qwen-inference-pool
      targetModels:
      - name: /models/Qwen3-32B
        weight: 100

    Penerapan SGLang terdistribusi

    apiVersion: inference.networking.x-k8s.io/v1alpha2
    kind: InferencePool
    metadata:
      name: qwen-inference-pool
      annotations:
        inference.networking.x-k8s.io/model-server-runtime: sglang
        inference.networking.x-k8s.io/routing-strategy: "PREFIX_CACHE"
    spec:
      targetPortNumber: 8000
      selector:
        alibabacloud.com/inference-workload: sglang-multi-nodes
        role: leader
      extensionRef:
        name: inference-gateway-ext-proc
    ---
    apiVersion: inference.networking.x-k8s.io/v1alpha2
    kind: InferenceModel
    metadata:
      name: qwen-inference-model
    spec:
      modelName: /models/Qwen3-32B
      criticality: Critical
      poolRef:
        group: inference.networking.x-k8s.io
        kind: InferencePool
        name: qwen-inference-pool
      targetModels:
      - name: /models/Qwen3-32B
        weight: 100

    Penerapan disagregasi PD SGLang

    apiVersion: inference.networking.x-k8s.io/v1alpha2
    kind: InferencePool
    metadata:
      name: qwen-inference-pool
    spec:
      targetPortNumber: 8000
      selector:
        alibabacloud.com/inference_backend: sglang # Memilih beban kerja prefill dan decode
    ---
    # InferenceTrafficPolicy menentukan kebijakan trafik yang diterapkan pada InferencePool
    apiVersion: inferenceextension.alibabacloud.com/v1alpha1
    kind: InferenceTrafficPolicy
    metadata:
      name: inference-policy
    spec:
      poolRef:
        name: qwen-inference-pool
      modelServerRuntime: sglang # Menentukan SGLang sebagai framework runtime untuk layanan backend
      profile:
        pd:  # Menentukan bahwa layanan backend diterapkan dalam mode disagregasi PD
          trafficPolicy:
            prefixCache: # Mendeklarasikan kebijakan penyeimbangan beban cache awalan
              mode: estimate
          prefillPolicyRef: prefixCache
          decodePolicyRef: prefixCache # Menerapkan penyeimbangan beban sadar awalan baik untuk prefill maupun decode
          pdRoleLabelName: rolebasedgroup.workloads.x-k8s.io/role # Membedakan peran prefill dan decode dalam InferencePool menggunakan label pod
          kvTransfer:
            bootstrapPort: 34000 # Port bootstrap yang digunakan untuk transfer KV Cache dalam layanan disagregasi PD SGLang. Nilai ini harus konsisten dengan parameter disaggregation-bootstrap-port yang ditentukan dalam penerapan RoleBasedGroup.
  2. Terapkan penyeimbang beban sadar awalan.

    kubectl create -f Prefix_Cache.yaml

Klik untuk melihat deskripsi item konfigurasi InferencePool dan InferenceModel.

Item konfigurasi

Tipe

Deskripsi

Nilai default

metadata.annotations.inference.networking.x-k8s.io/model-server-runtime

string

Menentukan runtime layanan model, seperti sglang.

Tidak ada

metadata.annotations.inference.networking.x-k8s.io/routing-strategy

string

Menentukan kebijakan perutean. Nilai yang valid: DEFAULT dan PREFIX_CACHE.

Kebijakan perutean pintar berdasarkan panjang antrian permintaan dan pemanfaatan cache GPU

spec.targetPortNumber

int

Menentukan nomor port layanan inferensi.

Tidak ada

spec.selector

map[string]string

Selektor yang digunakan untuk mencocokkan pod layanan inferensi.

Tidak ada

spec.extensionRef

ObjectReference

Deklarasi untuk layanan ekstensi inferensi.

Tidak ada

spec.modelName

string

Nama model, digunakan untuk pencocokan rute.

Tidak ada

spec.criticality

string

Tingkat kritisitas model. Nilai yang valid: Critical dan Standard.

Tidak ada

spec.poolRef

PoolReference

Sumber daya InferencePool terkait.

Tidak ada

Langkah 2: Terapkan gerbang

  1. Buat file gateway_networking.yaml.

    apiVersion: gateway.networking.k8s.io/v1
    kind: GatewayClass
    metadata:
      name: inference-gateway-class
    spec:
      controllerName: inference.networking.x-k8s.io/gateway-controller
    ---
    apiVersion: gateway.networking.k8s.io/v1
    kind: Gateway
    metadata:
      name: inference-gateway
    spec:
      gatewayClassName: inference-gateway-class
      listeners:
      - name: http-llm
        protocol: HTTP
        port: 8080
    ---
    apiVersion: gateway.networking.k8s.io/v1
    kind: HTTPRoute
    metadata:
      name: inference-route
    spec:
      parentRefs:
      - name: inference-gateway
      rules:
      - matches:
        - path:
            type: PathPrefix
            value: /v1
        backendRefs:
        - name: qwen-inference-pool
          kind: InferencePool
          group: inference.networking.x-k8s.io
  2. Buat sumber daya GatewayClass, Gateway, dan HTTPRoute untuk mengonfigurasi rute layanan inferensi LLM pada port 8080.

    kubectl create -f gateway_networking.yaml

Langkah 3: Verifikasi konfigurasi gerbang inferensi

  1. Jalankan perintah berikut untuk mendapatkan titik akhir eksternal gerbang:

    export GATEWAY_HOST=$(kubectl get gateway/inference-gateway -o jsonpath='{.status.addresses[0].value}')
  2. Uji akses ke layanan pada port 8080 menggunakan perintah curl:

    curl http://${GATEWAY_HOST}:8080/v1/chat/completions \
      -H "Content-Type: application/json" \
      -d '{
        "model": "/models/Qwen3-32B",
        "messages": [
          {"role": "user", "content": "Hello, this is a test"}
        ],
        "max_tokens": 50
      }'
  3. Verifikasi kebijakan penyeimbangan beban yang berbeda.

    Verifikasi kebijakan penyeimbangan beban berdasarkan panjang antrian permintaan dan pemanfaatan cache GPU

    Kebijakan default melakukan perutean pintar berdasarkan panjang antrian permintaan dan pemanfaatan cache GPU. Anda dapat mengamati perilakunya dengan melakukan uji stres pada layanan inferensi dan memantau metrik waktu hingga token pertama (TTFT) serta throughput.

    Untuk informasi lebih lanjut tentang metode pengujian spesifik, lihat Konfigurasikan metrik observabilitas dan dasbor untuk layanan LLM.

    Verifikasi penyeimbangan beban sadar awalan

    Buat file pengujian untuk memverifikasi bahwa penyeimbangan beban sadar awalan berfungsi.

    1. Hasilkan round1.txt:

      echo '{"max_tokens":24,"messages":[{"content":"Hi, here's some system prompt: hi hi hi hi hi hi hi hi hi hi.For user 3, here are some other context: hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi.I would like to test your intelligence. for this purpose I would like you to play zork. you can interact with the game by typing in commands. I will forward these commands to the game and type in any response. are you ready?","role":"user"}],"model":"/models/Qwen3-32B","stream":true,"stream_options":{"include_usage":true},"temperature":0}' > round1.txt
    2. Hasilkan round2.txt:

      echo '{"max_tokens":3,"messages":[{"content":"Hi, here's some system prompt: hi hi hi hi hi hi hi hi hi hi.For user 3, here are some other context: hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi.I would like to test your intelligence. for this purpose I would like you to play zork. you can interact with the game by typing in commands. I will forward these commands to the game and type in any response. are you ready?","role":"user"},{"content":"Hi there! It looks like you're setting up a fun test. I'm ready to play Zork! You can","role":"assistant"},{"content":"% zork\nWelcome to Dungeon. This version created 11-MAR-91.\nYou are in an open field west of a big white house with a boarded\nfront door.\nThere is a small mailbox here.\n>","role":"user"},{"content":"Great!","role":"assistant"},{"content":"Opening the mailbox reveals:\n A leaflet.\n>","role":"user"}],"model":"/models/Qwen3-32B","stream":true,"stream_options":{"include_usage":true},"temperature":0}' > round2.txt
    3. Jalankan perintah berikut untuk melakukan pengujian:

      curl -X POST ${GATEWAY_HOST}:8080/v1/chat/completions -H 'Content-Type: application/json' -d @./round1.txt
      curl -X POST ${GATEWAY_HOST}:8080/v1/chat/completions -H 'Content-Type: application/json' -d @./round2.txt
    4. Periksa log Prosesor Ekstensi Inferensi untuk memastikan bahwa penyeimbangan beban sadar awalan berfungsi:

      kubectl logs deploy/inference-gateway-ext-proc -n envoy-gateway-system | grep "Request Handled"

      Jika Anda melihat nama pod yang sama pada kedua entri log, berarti penyeimbangan beban sadar awalan berfungsi.

      Untuk informasi lebih lanjut tentang metode dan hasil pengujian spesifik untuk penyeimbangan beban sadar awalan, lihat Evaluasi kinerja layanan inferensi menggunakan pengujian percakapan multi-putaran.