Topik ini menggunakan model Qwen3-32B sebagai contoh untuk menunjukkan cara menyebarkan layanan inferensi model terdistribusi multi-node dalam kluster Container Service for Kubernetes (ACK) menggunakan kerangka kerja vLLM dan SGLang.
Latar Belakang
Qwen3-32B
Qwen3-32B merupakan evolusi terbaru dari seri Qwen, menampilkan arsitektur padat 32,8B-parameter yang dioptimalkan untuk efisiensi penalaran dan kelancaran percakapan.
Fitur Utama:
Kinerja Dual-Mode: Unggul dalam tugas kompleks seperti penalaran logis, matematika, dan pembuatan kode, sambil tetap sangat efisien untuk pembuatan teks umum.
Kemampuan Canggih: Menunjukkan kinerja luar biasa dalam mengikuti instruksi, dialog multi-giliran, penulisan kreatif, dan penggunaan alat terbaik untuk tugas agen AI.
Jendela Konteks Besar: Secara asli menangani hingga 32.000 token konteks, yang dapat diperluas hingga 131.000 token menggunakan teknologi YaRN.
Dukungan Multibahasa: Memahami dan menerjemahkan lebih dari 100 bahasa, menjadikannya ideal untuk aplikasi global.
Untuk informasi lebih lanjut, lihat blog, GitHub, dan dokumentasi.
vLLM
vLLM adalah pustaka yang cepat dan ringan, dirancang untuk mengoptimalkan inferensi LLM serta penyajiannya, dengan secara signifikan meningkatkan throughput dan mengurangi latensi.
Optimasi Inti:
PagedAttention: Algoritma perhatian inovatif yang secara efisien mengelola cache Key-Value (KV) untuk meminimalkan pemborosan memori dan meningkatkan throughput.
Inferensi Canggih: Meningkatkan kecepatan dan pemanfaatan dengan pengelompokan berkelanjutan, dekoding spekulatif, dan percepatan grafik CUDA/HIP.
Rentang Paralelisme Luas: Mendukung Tensor Parallelism (TP), Pipeline Parallelism (PP), Data Parallelism (DP), dan Expert Parallelism (EP) untuk penskalaan di beberapa GPU.
Dukungan Kuantisasi: Kompatibel dengan format kuantisasi populer seperti GPTQ, AWQ, INT4/8, dan FP8 untuk mengurangi jejak memori model.
Kompatibilitas Luas:
Perangkat Keras dan Model: Berjalan pada GPU NVIDIA, AMD, dan Intel serta mendukung model utama dari Hugging Face dan ModelScope (seperti Qwen, Llama, Deepseek, dan E5-Mistral).
API Standar: Menyediakan API yang kompatibel dengan OpenAI, sehingga mudah diintegrasikan ke dalam aplikasi yang ada.
Untuk informasi lebih lanjut, lihat vLLM GitHub.
SGLang
SGLang adalah mesin inferensi yang menggabungkan backend berkinerja tinggi dan frontend fleksibel, dirancang khusus untuk beban kerja LLM serta multimodal.
Backend Berkinerja Tinggi:
Caching Canggih: Fitur RadixAttention (cache awalan efisien) dan PagedAttention untuk memaksimalkan throughput selama tugas inferensi kompleks.
Eksekusi Efisien: Menggunakan pengelompokan berkelanjutan, dekoding spekulatif, pemisahan PD, dan pengelompokan multi-LoRA untuk melayani banyak pengguna dan model fine-tuned secara efisien.
Paralelisme Penuh dan Kuantisasi: Mendukung TP, PP, DP, dan EP paralelisme, bersama dengan berbagai metode kuantisasi (FP8, INT4, AWQ, GPTQ).
Frontend yang fleksibel:
Antarmuka Pemrograman Kuat: Memungkinkan pengembang dengan mudah membangun aplikasi kompleks dengan fitur seperti generasi berantai, alur kontrol, dan pemrosesan paralel.
Multimodal dan Interaksi Eksternal: Secara asli mendukung input multimodal (seperti teks dan gambar) dan memungkinkan interaksi dengan alat eksternal, menjadikannya ideal untuk alur kerja agen tingkat lanjut.
Dukungan Model Luas: Mendukung model generatif (Qwen, DeepSeek, Llama), model penyematan (E5-Mistral), dan model hadiah (Skywork).
Untuk informasi lebih lanjut, lihat SGLang GitHub.
Penyebaran terdistribusi
Seiring dengan bertambahnya ukuran LLM, parameter mereka sering kali melebihi memori GPU tunggal. Untuk menjalankan model besar ini, berbagai strategi paralelisasi digunakan untuk membagi tugas inferensi menjadi beberapa subtugas. Subtugas ini dialokasikan di seluruh GPU. Hasilnya kemudian digabungkan untuk menyelesaikan tugas inferensi LLM dengan cepat. Strategi paralelisasi umum:
Data Parallelism (DP)
Setiap GPU menyimpan salinan lengkap model tetapi memproses batch data yang berbeda. Ini adalah strategi paling sederhana dan paling umum.

Tensor Parallelism (TP)
Membagi matriks bobot model (tensor) di beberapa GPU. Setiap GPU hanya menyimpan sebagian dari bobot model dan menghitung pada bagian tersebut.

Pipeline Parallelism (PP)
Mengalokasikan lapisan model yang berbeda ke GPU yang berbeda, menciptakan pipa. Output satu lapisan pada GPU dilewatkan sebagai input ke lapisan berikutnya pada GPU lain.

Expert Parallelism (EP)
Model dengan arsitektur Mixture-of-Experts (MoE) berisi banyak sub-model "ahli". Hanya sebagian dari ahli ini yang diaktifkan untuk memproses setiap permintaan. Oleh karena itu, sub-model ahli ini dapat disimpan di GPU yang berbeda. Ketika beban kerja inferensi memerlukan ahli tertentu, data diarahkan ke GPU yang relevan.

Prasyarat
Anda memiliki kluster ACK yang dikelola yang menjalankan Kubernetes 1.28 atau lebih baru dengan dua atau lebih node yang dipercepat GPU. Setiap node yang dipercepat GPU harus memiliki setidaknya 32 GB memori. Untuk instruksi, lihat Buat Kluster ACK yang Dikelola dan Tambahkan Node yang Dipercepat GPU ke Kluster.
Tipe instans ecs.gn8is.4xlarge direkomendasikan. Untuk detail, lihat Instansi Komputasi yang Dioptimalkan dengan Percepatan GPU Family gn8is.
Komponen LeaderWorkerSet versi V0.6.0 atau lebih baru telah diinstal. Anda dapat menginstalnya melalui Konsol ACK:
Masuk ke Konsol ACK.
Di panel navigasi di sebelah kiri, klik Clusters, lalu klik nama kluster yang Anda buat.
Di panel navigasi di sebelah kiri, klik . Di halaman Helm, klik Deploy.
Pada langkah Basic Information, masukkan Application Name dan Namespace. Temukan lws di bagian Chart, lalu klik Next. Dalam contoh ini, nama aplikasi (lws) dan namespace (lws-system) digunakan.
Pada langkah Parameters, pilih versi terbaru dari Chart Version, lalu klik OK untuk menginstal lws.

Penyebaran model
Langkah 1: Persiapkan file model Qwen3-32B
Jalankan perintah berikut untuk mengunduh model Qwen3-32B dari ModelScope.
Jika plugin
git-lfsbelum diinstal, jalankanyum install git-lfsatauapt-get install git-lfsuntuk menginstalnya. Untuk metode instalasi lainnya, lihat Menginstal Git Large File Storage.git lfs install GIT_LFS_SKIP_SMUDGE=1 git clone https://www.modelscope.cn/Qwen/Qwen3-32B.git cd Qwen3-32B/ git lfs pullMasuk ke Konsol OSS dan catat nama bucket Anda. Jika Anda belum membuatnya, lihat Buat Bucket. Buat direktori di Object Storage Service (OSS) dan unggah model ke dalamnya.
Untuk informasi lebih lanjut tentang cara menginstal dan menggunakan ossutil, lihat Instal ossutil.
ossutil mkdir oss://<your-bucket-name>/Qwen3-32B ossutil cp -r ./Qwen3-32B oss://<your-bucket-name>/Qwen3-32BBuat volume persisten (PV) bernama
llm-modeldan klaim volume persisten (PVC) untuk kluster Anda. Untuk instruksi terperinci, lihat Buat PV dan PVC.Contoh menggunakan konsol
Buat PV
Masuk ke Konsol ACK. Di panel navigasi di sebelah kiri, klik Clusters.
Di halaman Clusters, temukan kluster yang Anda inginkan dan klik namanya. Di panel di sebelah kiri, pilih .
Di halaman PersistentVolumes, klik Create di pojok kanan atas.
Di kotak dialog Create PersistentVolume, konfigurasikan parameter.
Tabel berikut menjelaskan konfigurasi dasar PV contoh:
Parameter
Deskripsi
PV Type
Dalam contoh ini, pilih OSS.
Volume Name
Dalam contoh ini, masukkan llm-model.
Access Certificate
Konfigurasikan ID AccessKey dan rahasia AccessKey yang digunakan untuk mengakses bucket OSS.
Bucket ID
Pilih bucket OSS yang Anda buat di langkah sebelumnya.
OSS Path
Masukkan path tempat model berada, seperti
/Qwen3-32B.
Buat PVC
Di halaman Clusters, temukan kluster yang Anda inginkan dan klik namanya. Di panel di sebelah kiri, pilih .
Di halaman PersistentVolumeClaims, klik Create di pojok kanan atas.
Di halaman Create PersistentVolumeClaim, masukkan parameter yang diperlukan.
Tabel berikut menjelaskan konfigurasi dasar PVC contoh.
Item Konfigurasi
Deskripsi
PVC Type
Dalam contoh ini, pilih OSS.
Name
Dalam contoh ini, masukkan llm-model.
Allocation Mode
Dalam contoh ini, pilih Existing Volumes.
Existing Volumes
Klik hyperlink Select PV dan pilih PV yang Anda buat.
Contoh menggunakan kubectl
Gunakan template YAML berikut untuk membuat file bernama
llm-model.yaml, berisi konfigurasi untuk Secret, PV statis, dan PVC statis.apiVersion: v1 kind: Secret metadata: name: oss-secret stringData: akId: <your-oss-ak> # ID AccessKey yang digunakan untuk mengakses bucket OSS. akSecret: <your-oss-sk> # Rahasia AccessKey yang digunakan untuk mengakses bucket OSS. --- apiVersion: v1 kind: PersistentVolume metadata: name: llm-model labels: alicloud-pvname: llm-model spec: capacity: storage: 30Gi accessModes: - ReadOnlyMany persistentVolumeReclaimPolicy: Retain csi: driver: ossplugin.csi.alibabacloud.com volumeHandle: llm-model nodePublishSecretRef: name: oss-secret namespace: default volumeAttributes: bucket: <your-bucket-name> # Nama bucket. url: <your-bucket-endpoint> # Endpoint, seperti oss-cn-hangzhou-internal.aliyuncs.com. otherOpts: "-o umask=022 -o max_stat_cache_size=0 -o allow_other" path: <your-model-path> # Dalam contoh ini, path adalah /Qwen3-32B/. --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: llm-model spec: accessModes: - ReadOnlyMany resources: requests: storage: 30Gi selector: matchLabels: alicloud-pvname: llm-modelBuat Secret, PV statis, dan PVC statis.
kubectl create -f llm-model.yaml
Langkah 2: Sebarkan layanan inferensi terdistribusi
Topik ini menggunakan beban kerja LeaderWorkerSet untuk menyebarkan layanan inferensi pada dua node yang dipercepat GPU dengan ukuran TP 2.
Sebarkan dengan vLLM
Buat file bernama
vllm_multi.yaml.Jalankan perintah berikut untuk menyebarkan layanan inferensi LLM multi-node menggunakan kerangka kerja vLLM:
kubectl create -f vllm_multi.yaml
Sebarkan dengan SGLang
Buat file bernama
sglang_multi.yaml.Jalankan perintah berikut untuk menyebarkan layanan inferensi LLM multi-node menggunakan kerangka kerja SGLang:
kubectl create -f sglang_multi.yaml
Langkah 3: Validasi layanan inferensi
Jalankan perintah berikut untuk menetapkan penerusan port antara layanan inferensi dan lingkungan lokal Anda.
PentingPenerusan port yang ditetapkan oleh
kubectl port-forwardkurang memiliki keandalan, keamanan, dan skalabilitas tingkat produksi. Ini cocok untuk tujuan pengembangan dan debugging saja dan tidak boleh digunakan dalam lingkungan produksi. Untuk solusi jaringan siap produksi di kluster Kubernetes, lihat Manajemen Ingress.kubectl port-forward svc/multi-nodes-service 8000:8000Keluaran yang Diharapkan:
Forwarding from 127.0.0.1:8000 -> 8000 Forwarding from [::1]:8000 -> 8000Jalankan perintah berikut untuk mengirim permintaan inferensi sampel ke layanan:
curl http://localhost:8000/v1/chat/completions -H "Content-Type: application/json" -d '{"model": "/models/Qwen3-32B", "messages": [{"role": "user", "content": "Test it"}], "max_tokens": 30, "temperature": 0.7, "top_p": 0.9, "seed": 10}'Keluaran yang Diharapkan:
{"id":"chatcmpl-ee6b347a8bd049f9a502669db0817938","object":"chat.completion","created":1753685847,"model":"/models/Qwen3-32B","choices":[{"index":0,"message":{"role":"assistant","reasoning_content":null,"content":"<think>\nOkay, the user sent "Test it". I need to confirm their request first. They might be testing my functionality or want to see my reaction.","tool_calls":[]},"logprobs":null,"finish_reason":"length","stop_reason":null}],"usage":{"prompt_tokens":10,"total_tokens":40,"completion_tokens":30,"prompt_tokens_details":null},"prompt_logprobs":null,"kv_transfer_params":null}Keluaran ini mengonfirmasi bahwa layanan model terdistribusi berfungsi dengan baik dan dapat menghasilkan respons.