Topik ini menjelaskan cara menggunakan KServe untuk men-deploy layanan inferensi model DeepSeek yang siap produksi di Alibaba Cloud Container Service for Kubernetes (ACK).
Informasi latar belakang
Model DeepSeek-R1
KServe
Arena
Prasyarat
Anda telah membuat kluster Kubernetes yang berisi GPU. Untuk informasi selengkapnya, lihat Menambahkan kelompok node GPU ke kluster.
Anda telah menghubungkan ke kluster menggunakan kubectl. Untuk informasi selengkapnya, lihat Menghubungkan ke kluster menggunakan kubectl.
Anda telah menginstal komponen ack-kserve. Untuk informasi selengkapnya, lihat Menginstal komponen ack-kserve.
Anda telah menginstal klien Arena. Untuk informasi selengkapnya, lihat Mengonfigurasi klien Arena.
Spesifikasi instans GPU dan estimasi biaya
Parameter model merupakan konsumen utama Memori GPU selama fase inferensi. Anda dapat menghitung Memori GPU yang dibutuhkan menggunakan rumus berikut:
Sebagai contoh, pertimbangkan model 7B dengan presisi default FP16. Jumlah parameter model adalah 7 miliar. Jumlah byte untuk presisi tipe data adalah 2 byte (bilangan titik mengambang 16-bit / 8 bit per byte).
Selain Memori GPU yang diperlukan untuk memuat model, Anda juga harus mempertimbangkan ukuran KV Cache dan pemanfaatan GPU selama komputasi. Biasanya disediakan buffer tambahan. Oleh karena itu, kami merekomendasikan penggunaan instans GPU-accelerated dengan Memori GPU sebesar 24 GiB, seperti ecs.gn7i-c8g1.2xlarge atau ecs.gn7i-c16g1.4xlarge. Untuk informasi selengkapnya tentang tipe instans GPU-accelerated dan penagihan, lihat Keluarga instans yang dioptimalkan untuk komputasi dengan akselerasi GPU dan Penagihan Layanan GPU Elastis.
Penerapan model
Langkah 1: Siapkan file model DeepSeek-R1-Distill-Qwen-7B
Jalankan perintah berikut untuk mengunduh model DeepSeek-R1-Distill-Qwen-7B dari ModelScope.
CatatanPastikan plug-in git-lfs telah diinstal. Jika belum diinstal, Anda dapat menjalankan
yum install git-lfsatauapt-get install git-lfs. Untuk informasi selengkapnya tentang metode instalasi, lihat Install Git Large File Storage.git lfs install GIT_LFS_SKIP_SMUDGE=1 git clone https://www.modelscope.cn/deepseek-ai/DeepSeek-R1-Distill-Qwen-7B.git cd DeepSeek-R1-Distill-Qwen-7B/ git lfs pullBuat direktori di OSS dan unggah model ke OSS.
CatatanUntuk informasi selengkapnya tentang cara menginstal dan menggunakan ossutil, lihat Menginstal ossutil.
ossutil mkdir oss://<your-bucket-name>/models/DeepSeek-R1-Distill-Qwen-7B ossutil cp -r ./DeepSeek-R1-Distill-Qwen-7B oss://<your-bucket-name>/models/DeepSeek-R1-Distill-Qwen-7BBuat volume persisten (PV) dan klaim volume persisten (PVC). Konfigurasikan PV dan PVC bernama
llm-modeluntuk kluster target. Untuk informasi selengkapnya, lihat Menggunakan volume penyimpanan statis ossfs 1.0.Contoh Konsol
Tabel berikut menjelaskan konfigurasi dasar untuk PV contoh.
Item Konfigurasi
Deskripsi
Tipe PV
OSS
Nama
llm-model
Sertifikat Akses
Konfigurasikan ID AccessKey dan Rahasia AccessKey untuk mengakses OSS.
ID Bucket
Pilih bucket OSS yang Anda buat pada langkah sebelumnya.
Jalur OSS
Pilih jalur tempat model disimpan, seperti
/models/DeepSeek-R1-Distill-Qwen-7B.Tabel berikut menjelaskan konfigurasi dasar untuk PVC contoh.
Item konfigurasi
Deskripsi
Tipe Klaim Penyimpanan
OSS
Nama
llm-model
Mode Alokasi
Pilih PV yang sudah ada.
PV yang Ada
Klik tautan untuk memilih PV yang sudah ada, lalu pilih PV yang telah Anda buat.
Contoh kubectl
Berikut ini adalah contoh file YAML:
apiVersion: v1 kind: Secret metadata: name: oss-secret stringData: akId: <your-oss-ak> # ID AccessKey untuk mengakses OSS. akSecret: <your-oss-sk> # Rahasia AccessKey untuk mengakses 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> # Titik akhir, 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, jalurnya adalah /models/DeepSeek-R1-Distill-Qwen-7B/. --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: llm-model spec: accessModes: - ReadOnlyMany resources: requests: storage: 30Gi selector: matchLabels: alicloud-pvname: llm-model
Langkah 2: Men-deploy layanan inferensi
Jalankan perintah berikut untuk memulai layanan inferensi bernama deepseek.
arena serve kserve \ --name=deepseek \ --image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/vllm:v0.6.6 \ --gpus=1 \ --cpu=4 \ --memory=12Gi \ --data=llm-model:/models/DeepSeek-R1-Distill-Qwen-7B \ "vllm serve /models/DeepSeek-R1-Distill-Qwen-7B --port 8080 --trust-remote-code --served-model-name deepseek-r1 --max-model-len 32768 --gpu-memory-utilization 0.95 --enforce-eager"Tabel berikut menjelaskan parameter-parameter tersebut.
Parameter
Wajib
Deskripsi
--name
Ya
Nama layanan inferensi yang akan dikirimkan. Nama harus unik secara global.
--image
Ya
Alamat citra layanan inferensi.
--gpus
Tidak
Jumlah GPU yang dibutuhkan oleh layanan inferensi. Nilai default adalah 0.
--cpu
Tidak
Jumlah CPU yang dibutuhkan oleh layanan inferensi.
--memory
Tidak
Jumlah memori yang dibutuhkan oleh layanan inferensi.
--data
Tidak
Jalur model layanan. Dalam topik ini, model ditentukan sebagai PV
llm-modelyang Anda buat pada langkah sebelumnya. PV dipasang ke direktori /models/ di dalam kontainer.Keluaran yang diharapkan:
inferenceservice.serving.kserve.io/deepseek created INFO[0003] The Job deepseek has been submitted successfully INFO[0003] You can run `arena serve get deepseek --type kserve -n default` to check the job status
Langkah 3: Verifikasi layanan inferensi
Jalankan perintah berikut untuk memeriksa status deployment layanan inferensi KServe.
arena serve get deepseekKeluaran yang diharapkan:
Name: deepseek Namespace: default Type: KServe Version: 1 Desired: 1 Available: 1 Age: 3m Address: http://deepseek-default.example.com Port: :80 GPU: 1 Instances: NAME STATUS AGE READY RESTARTS GPU NODE ---- ------ --- ----- -------- --- ---- deepseek-predictor-7cd4d568fd-fznfg Running 3m 1/1 0 1 cn-beijing.172.16.1.77Keluaran tersebut menunjukkan bahwa layanan inferensi KServe telah dideploy.
Jalankan perintah berikut untuk menggunakan alamat IP gerbang NGINX Ingress guna mengakses layanan inferensi.
# Mendapatkan alamat IP NGINX Ingress. NGINX_INGRESS_IP=$(kubectl -n kube-system get svc nginx-ingress-lb -ojsonpath='{.status.loadBalancer.ingress[0].ip}') # Mendapatkan hostname layanan inferensi. SERVICE_HOSTNAME=$(kubectl get inferenceservice deepseek -o jsonpath='{.status.url}' | cut -d "/" -f 3) # Mengirim permintaan untuk mengakses layanan inferensi. curl -H "Host: $SERVICE_HOSTNAME" -H "Content-Type: application/json" http://$NGINX_INGRESS_IP:80/v1/chat/completions -d '{"model": "deepseek-r1", "messages": [{"role": "user", "content": "Say this is a test!"}], "max_tokens": 512, "temperature": 0.7, "top_p": 0.9, "seed": 10}'Keluaran yang diharapkan:
{"id":"chatcmpl-0fe3044126252c994d470e84807d4a0a","object":"chat.completion","created":1738828016,"model":"deepseek-r1","choices":[{"index":0,"message":{"role":"assistant","content":"<think>\n\n</think>\n\nIt seems like you're testing or sharing some information. How can I assist you further? If you have any questions or need help with something, feel free to ask!","tool_calls":[]},"logprobs":null,"finish_reason":"stop","stop_reason":null}],"usage":{"prompt_tokens":9,"total_tokens":48,"completion_tokens":39,"prompt_tokens_details":null},"prompt_logprobs":null}
Observabilitas
Observabilitas untuk layanan inferensi LLM di lingkungan produksi sangat penting untuk menemukan dan menyelesaikan masalah secara proaktif. Framework vLLM menyediakan banyak metrik inferensi LLM. Untuk informasi selengkapnya, lihat dokumen Metrik. KServe juga menyediakan metrik untuk membantu memantau kinerja dan kesehatan layanan model. Kemampuan ini diintegrasikan ke dalam Arena. Anda dapat menambahkan parameter --enable-prometheus=true saat mengirimkan aplikasi untuk mengaktifkannya.
arena serve kserve \
--name=deepseek \
--image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/vllm:v0.6.6 \
--gpus=1 \
--cpu=4 \
--memory=12Gi \
--enable-prometheus=true \
--data=llm-model:/models/DeepSeek-R1-Distill-Qwen-7B \
"vllm serve /models/DeepSeek-R1-Distill-Qwen-7B --port 8080 --trust-remote-code --served-model-name deepseek-r1 --max-model-len 32768 --gpu-memory-utilization 0.95 --enforce-eager"Anda dapat menggunakan Dasbor Grafana untuk memantau layanan inferensi LLM yang dideploy dengan vLLM. Untuk melakukannya, impor model JSON Grafana vLLM ke Grafana, lalu buat dasbor observabilitas untuk layanan inferensi LLM. Anda dapat memperoleh model JSON dari situs resmi vLLM. Tampilan dasbor yang dikonfigurasi sebagai berikut:

Prosedur mengimpor dasbor Grafana
Skalabilitas Elastis
Saat men-deploy dan mengelola layanan model KServe, Anda mungkin menghadapi fluktuasi beban dinamis. KServe menggunakan Horizontal Pod Autoscaler (HPA) Kubernetes dan komponen ack-alibaba-cloud-metrics-adapter dari ACK untuk secara otomatis menyesuaikan jumlah pod layanan model berdasarkan pemanfaatan CPU, memori, dan GPU, serta metrik kinerja khusus, guna memastikan stabilitas dan efisiensi layanan. Untuk informasi selengkapnya, lihat Mengonfigurasi penskalaan otomatis untuk layanan.
Akselerasi Model
Dengan perkembangan teknologi, ukuran model yang digunakan dalam aplikasi AI semakin meningkat. Saat menarik file besar dari layanan penyimpanan seperti Object Storage Service (OSS) dan Penyimpanan File NAS (NAS), masalah seperti latensi tinggi atau cold start dapat terjadi. Anda dapat menggunakan Fluid untuk secara signifikan mempercepat kecepatan pemuatan model dan mengoptimalkan kinerja layanan inferensi, terutama layanan inferensi berbasis KServe. Untuk informasi selengkapnya, lihat Menggunakan Fluid untuk akselerasi model.
Rilis Bertahap
Rilis bertahap merupakan strategi penting di lingkungan produksi untuk memastikan stabilitas bisnis dan meminimalkan risiko yang terkait dengan perubahan. ACK mendukung berbagai kebijakan rilis bertahap, termasuk pendekatan berbasis persentase lalu lintas dan berbasis header permintaan. Untuk informasi selengkapnya, lihat Menerapkan rilis bertahap untuk layanan inferensi.
Inferensi Berbagi GPU
Model DeepSeek-R1-Distill-Qwen-7B hanya membutuhkan 14 GB Memori GPU. Jika Anda menggunakan GPU berkapasitas lebih tinggi, pertimbangkan untuk menggunakan teknologi inferensi berbagi GPU guna meningkatkan pemanfaatan GPU. Teknologi ini mempartisi GPU sehingga beberapa layanan inferensi dapat berbagi GPU tersebut, yang meningkatkan pemanfaatan GPU secara keseluruhan. Untuk informasi selengkapnya, lihat Men-deploy layanan inferensi berbagi GPU.





