View a markdown version of this page

Panduan pemecahan masalah Inference Gateway - Amazon SageMaker AI

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Panduan pemecahan masalah Inference Gateway

Ikhtisar: HyperPod Inference Gateway merutekan lalu lintas melalui tiga lapisan: Body-Based Router (BBR), gateway denganHTTPRoute, dan Endpoint Picker (EPP). Kesalahan konfigurasi pada setiap lapisan dapat mengakibatkan permintaan gagal, lalu lintas mencapai model yang salah, atau beban yang tidak merata di seluruh pod yang melayani model. Bagian ini mencakup masalah dengan gateway, BBR, gateway danHTTPRoute,, dan EPPInferencePool, dan masalah apa pun yang muncul darinya.

Mendiagnosis status gateway

Gunakan perintah berikut untuk memeriksa gateway dan sumber daya yang dikelolanya.

Daftar setiap InferenceGatewayConfig sumber daya di seluruh ruang nama:

kubectl get inferencegatewayconfig -A

Tampilkan status terperinci, status peluncuran per penjadwal, dan pesan kondisi untuk gateway tertentu:

kubectl describe inferencegatewayconfig <name> -n <namespace>

Periksa pengontrol gateway dan pod Body-Based Router:

kubectl get pods -n hyperpod-inference-system

Periksa sumber daya perutean hilir yang dihasilkan oleh pengontrol:

kubectl get httproute,inferencepool,securitypolicy -A

Periksa status.conditions dan masing-masing penjadwal rolloutState (Pending,, ProgressingAvailable, atauDegraded). Alasan kegagalan yang dapat ditindaklanjuti ada pada pesan kondisi yang sesuai.

Add-on masalah instal

Masalah: Sumber daya gateway hilang, atau tidak GatewayClass diterima setelah menginstal add-on HyperPod Inference Amazon EKS.

Gejala dan resolusi: kubectl get gatewayclass inference-gateway pengembalianNotFound, atau sumber daya menunjukkanACCEPTED=False. Ini menunjukkan bahwa add-on tidak diinstal atau instalasi tidak selesai. Instal ulang atau perbarui add-on:

aws eks update-addon --cluster-name $CLUSTER --region $REGION \ --addon-name amazon-sagemaker-hyperpod-inference \ --resolve-conflicts OVERWRITE

Kemudian konfirmasikan pengontrol gateway sedang berjalan:

kubectl rollout status deploy/inference-gateway-controller \ -n hyperpod-inference-system --timeout=150s

InferenceGatewayConfig Tidak Menjadi Siap

Masalah: An InferenceGatewayConfig dibuat, tetapi status.conditions acaranya Accepted=False atauReady=False, atau kubectl apply ditolak langsung oleh validasi.

Gejala dan resolusi:

  • kubectl applygagal denganbbr must be enabled when more than one scheduler is defined. Body-Based Router diperlukan setiap kali lebih dari satu penjadwal ditentukan. Atur spec.bbr.enabled ke true.

  • kubectl applygagal denganmodelName must be unique across schedulers. Dua penjadwal menyatakan hal yang sama. modelName Ganti nama satu sehingga setiap penjadwal memiliki yang berbeda. modelName

  • Accepted=False,Reason=InvalidLoraAdapters. Nama adaptor LoRa yang dideklarasikan di bawah spec.schedulers[].loraAdapters adalah duplikat di seluruh penjadwal, atau bertabrakan dengan penjadwal. modelName Periksa pesan kondisi untuk nama yang menyinggung:

    kubectl describe inferencegatewayconfig <name> -n <namespace>
  • Accepted=False,Reason=ResourceNamingViolation. Nama gabungan <config-name>-<scheduler-name> melebihi batas label Kubernetes 63 karakter. Persingkat nama konfigurasi atau penjadwal.

  • Ready=False,Reason=GatewayNotProgrammed. Gateway belum menyediakan penyeimbang beban. Periksa Gateway induk:

    kubectl get gateway -n hyperpod-inference-system kubectl describe gateway <name> -n hyperpod-inference-system
  • AdmissionBlocked=True,Reason=WebhookDenied. Webhook penerimaan cluster menolak pod gateway. Pesan kondisi menamai webhook yang menyinggung. Hapus atau perbaiki webhook, lalu restart Deployment gateway sehingga pod segera dibuat ulang. Nama Deployment dihasilkan, jadi cari dulu:

    kubectl -n hyperpod-inference-system get deploy \ -l gateway.envoyproxy.io/owning-gateway-name=<gateway-name>

    Kemudian restart:

    kubectl -n hyperpod-inference-system rollout restart deploy/<gateway-deployment>

Per-scheduler kegagalan

Masalah: Kondisi penjadwal tertentu (BackendsReady,LoraSupported, atauPoolReady) menunjukkan bahwa penjadwal belum sepenuhnya siap.

Gejala dan resolusi:

  • BackendsReady=False, Reason=NoModelPods atauReason=NoReadyModelPods. Tidak ada pod yang cocokspec.schedulers[].modelSelector, atau pod yang cocok belum Siap. Bandingkan label pada pod yang melayani model dengan pemilih penjadwal:

    kubectl get pods -n <namespace> --show-labels

    Terapkan pod yang melayani model dan tunggu sampai mereka menjadi Siap sebelum menerapkan. InferenceGatewayConfig

  • BackendsReady=False,Reason=InvalidModelSelector. Bagian matchExpressions bawah matchLabels atau di modelSelector bawahnya cacat. Perbaiki pemilih di konfigurasi.

  • LoraSupported=False,Reason=ModelServerLoraDisabled. Server model yang mendukung penjadwal ini tidak dimulai dengan dukungan LoRa diaktifkan. Aktifkan flag yang setara pada server model (misalnya, --enable-lora untuk VllM) dan restart pod model.

  • PoolReady=False, Reason=NotFound atauReason=NotAccepted. The InferencePool or its HTTPRoute belum direkonsiliasi atau diterima oleh gateway. Periksa keduanya:

    kubectl get inferencepool,httproute -n <namespace>

    Jika salah satu masih hilang beberapa menit setelah konfigurasi diterapkan, jelaskan Gateway induk untuk memeriksa kesalahan penerimaan:

    kubectl describe gateway -n hyperpod-inference-system

Scheduler RolloutState Terdegradasi

Masalah: Penerapan Endpoint Picker untuk penjadwal macet dan tidak menjadi Tersedia.

Gejala dan resolusi: EPPReady Kondisi pada penjadwal membawa alasan yang dapat ditindaklanjuti. Penyebab umum meliputi:

  • Gambar kontainer tidak dapat ditarik.

  • Pod sedang crash looping.

  • Kontainer memiliki kesalahan konfigurasi, seperti variabel lingkungan yang tidak valid, pemasangan volume, atau referensi rahasia.

  • Deployment melebihi batas waktu kemajuannya.

Gunakan perintah berikut untuk mengidentifikasi penjadwal yang gagal dan memeriksa Deployment:

# List the schedulers reporting Degraded kubectl get inferencegatewayconfig <name> -n <namespace> \ -o jsonpath='{range .status.schedulers[?(@.rolloutState=="Degraded")]}{.name}{"\n"}{end}' # Describe the scheduler's Endpoint Picker Deployment for pod events and container errors kubectl describe deploy -n <namespace> \ -l inference.sagemaker.aws.amazon.com/scheduler=<scheduler-name>

Titik akhir basi setelah pod model restart

Masalah: Setelah pod model dihapus dan pod pengganti menjadi Ready, Endpoint Picker terus merutekan ke alamat IP pod yang dihapus. Permintaan mengembalikan HTTP 503 atau koneksi ditolak, dan kondisinya tidak pulih dengan sendirinya.

Resolusi: Tambahkan probe kesiapan ke pod model sehingga Kubernetes menandai pod NotReady sebelum IP-nya dihapus dari pool, dan hanya mengiklankan pod pengganti setelah sepenuhnya melayani lalu lintas. Setel port ke penjadwal targetPort dan path ke titik akhir kesehatan server model Anda:

readinessProbe: httpGet: path: /health port: 8000

Solusi: Jika Anda tidak dapat segera menerapkan ulang pod model, restart Endpoint Picker penjadwal untuk memaksanya membangun kembali daftar titik akhir dari kumpulan pod saat ini:

kubectl rollout restart deploy -n <namespace> \ -l inference.sagemaker.aws.amazon.com/scheduler=<scheduler-name>

Otentikasi JWT mengembalikan 401 atau 403

Masalah: spec.auth.jwt dikonfigurasi dan permintaan ditolak sebelum mencapai model, atau gateway tidak pernah menjadi Siap setelah otentikasi JWT diaktifkan.

Gejala dan resolusi:

  • HTTP 401. Token hilang, kedaluwarsa, cacat, atau iss klaimnya tidak cocok dengan penyedia yang dikonfigurasi. Konfirmasikan klien mengirim Authorization: Bearer <token> header, dan memecahkan kode JWT untuk membandingkan klaimnyaiss. spec.auth.jwt.provider.issuer

  • HTTP 403. Validasi tanda tangan gagal, atau token aud atau requiredClaims tidak cocok dengan konfigurasi penyedia. Periksa konfigurasi penyedia dan konfirmasikan token aud dan setiap entri yang requiredClaims cocok:

    kubectl get inferencegatewayconfig <name> -n <namespace> \ -o jsonpath='{.spec.auth.jwt.provider}'
  • Gateway tidak pernah menjadi Siap dengan JWT diaktifkan. SecurityPolicyYang dihasilkan tidak Diterima oleh gateway. Periksa SecurityPolicy sumber daya untuk alasan kegagalan:

    kubectl get securitypolicy -A kubectl describe securitypolicy <name> -n <namespace>

    Penyebab umum adalah itu tidak dapat spec.auth.jwt.provider.remoteJWKS.uri dijangkau dari gateway. Konfirmasikan URI menyelesaikan dan mengembalikan dokumen JWKS yang valid.

Metrik hilang dari dasbor

Masalah: Metrik Endpoint Picker atau Body-Based Router tidak muncul di dasbor pemantauan Anda.

Gejala dan resolusi: Pengumpulan metrik diaktifkan secara default, sehingga sespan OpenTelemetry Kolektor biasanya ada. Konfirmasikan apakah sespan berjalan pada kedua jenis pod, dan apakah metrik dinonaktifkan secara eksplisit.

Periksa sespan pada pod Body-Based Router:

kubectl -n hyperpod-inference-system get pods \ -o jsonpath='{.items[*].spec.containers[*].name}' | tr ' ' '\n' | grep otel

Periksa sespan pada pod Endpoint Picker:

kubectl -n <namespace> get pods \ -o jsonpath='{.items[*].spec.containers[*].name}' | tr ' ' '\n' | grep otel

Periksa apakah metrik dinonaktifkan secara eksplisit:

kubectl get inferencegatewayconfig <name> -n <namespace> \ -o jsonpath='{.spec.observability.metrics.enabled}'

Output kosong dari perintah terakhir berarti bidang tidak diatur, dan metrik diaktifkan. Hanya eksplisit yang false menonaktifkan sespan. Jika nilainyafalse, atur ke true atau hapus bidang, dan pengontrol menyuntikkan sespan pada rekonsiliasi berikutnya.

Kegagalan permintaan

Masalah: Gateway sudah Siap, tetapi permintaan inferensi gagal.

Gejala dan resolusi:

  • HTTP 404 untuk model yang dikenal. modelNilai dalam badan permintaan tidak sama persis dengan penjadwal mana punmodelName, atau model yang diminta disajikan melalui adaptor LoRa yang tidak dideklarasikan di bawah. spec.schedulers[].loraAdapters Jika tidak ada penjadwal yang cocok dengan model yang diminta dan tidak spec.bbr.defaultBackend disetel, gateway mengembalikan 404. Verifikasi nama model dan nama adaptor yang dikonfigurasi:

    kubectl get inferencegatewayconfig <name> -n <namespace> \ -o jsonpath='{.spec.schedulers[*].modelName}' kubectl get inferencegatewayconfig <name> -n <namespace> \ -o jsonpath='{.spec.schedulers[*].loraAdapters}'
  • Permintaan hang dan kemudian time out. Model-serving pod masih memuat bobot model, atau tidak InferencePool memiliki titik akhir Siap. Tunggu hingga pod model menjadi Siap sebelum menjalankan titik akhir gateway. Gunakan modelSelector label penjadwal dari Anda InferenceGatewayConfig sebagai pemilih:

    kubectl get pods -n <namespace> -l <key>=<value> kubectl logs <pod> -n <namespace>

Mendebug pemilihan titik akhir

Masalah: Lalu lintas condong ke sejumlah kecil pod model, atau permintaan LoRa dirutekan ke pod yang tidak meng-host adaptor.

Resolusi: Tingkatkan verbositas log Endpoint Picker untuk sementara untuk memeriksa keputusan penilaiannya. Setel logLevel pada penjadwal:

spec: schedulers: - name: <scheduler-name> logLevel: 4

Arti tingkat log:

  • 1- Minta acara siklus hidup.

  • 2- Default. Peringatan dan penolakan penerimaan.

  • 3- Ringkasan titik akhir dan per-pencetak gol yang dipilih.

  • 4- Per-endpoint, skor per pencetak gol dan total tertimbang.

  • 5- Protocol-level jejak (verbose).

Periksa log Endpoint Picker:

kubectl logs -n <namespace> -l app=<scheduler-name>-epp -c epp --tail=200 -f

Kembali logLevel ke defaultnya saat penyelidikan selesai untuk menghindari volume log berlebih.

Siklus hidup dan pembersihan

Masalah: Menghapus instalasi atau memutakhirkan add-on HyperPod Inference Amazon EKS meninggalkan sumber daya yatim piatu di cluster, atau memblokir instalasi berikutnya.

Resolusi: Selalu hapus setiap InferenceGatewayConfig sumber daya sebelum menghapus atau memutakhirkan add-on. Menghapus instalasi add-on saat masih InferenceGatewayConfig ada menghapus pengontrol yang memiliki finalizer sumber daya, yang membuat sumber daya tersebut macet. Terminating

kubectl delete inferencegatewayconfig --all -A kubectl get inferencegatewayconfig -A

Konfirmasikan bahwa perintah kedua tidak mengembalikan baris sebelum melanjutkan operasi add-on.

Setelah menginstal ulang add-on, daftarkan sumber daya di namespace gateway dan hapus apa pun yang tidak lagi dipetakan ke live: InferenceGatewayConfig

kubectl get deploy,svc,httproute,inferencepool,gateway,configmap \ -n hyperpod-inference-system

Sertifikat ACM yang dikeluarkan oleh controller tidak dihapus oleh add-on uninstall. Untuk menghapusnya, filter sertifikat ACM di AWS Resource Groups Tagging API dengan tag CreatedBy=HyperPodInference dan hapus sertifikat yang tidak lagi Anda perlukan.

Kumpulkan log

Gunakan perintah berikut untuk mengambil log dari setiap komponen gateway:

# Gateway controller kubectl logs -n hyperpod-inference-system deploy/inference-gateway-controller # Body-Based Router (deployment name is <gateway-name>-bbr) kubectl logs -n hyperpod-inference-system deploy/<gateway-name>-bbr -c bbr # Endpoint Picker for a specific scheduler kubectl logs -n <namespace> -l app=<scheduler-name>-epp -c epp