Tutorial ini menunjukkan cara men-deploy dan menyajikan
DeepSeek-R1
(deepseek-ai/DeepSeek-R1), model Mixture-of-Experts dengan 671 miliar parameter
dan 37 miliar parameter aktif, di Google Kubernetes Engine (GKE) di
Google Cloud. Deployment ini menggunakan Cluster Toolkit, dua instance virtual machine (VM) multi-host A4 (a4-highgpu-8g) dengan total 16 GPU NVIDIA B200, dan framework inferensi vLLM.
Dalam konfigurasi deployment yang dijelaskan dalam tutorial ini, Anda akan menggunakan Cluster Toolkit untuk menyediakan cluster GKE dalam mode Standard. Cluster ini memiliki dua node a4-highgpu-8g yang terhubung melalui
jaringan GPUDirect Remote Direct Memory Access (RDMA). Kemudian, Anda akan melakukan staging
bobot model di Cloud Storage dan menggunakan Kubernetes JobSet API dan Ray untuk
menyajikan model di 16 GPU NVIDIA B200 dengan paralelisme tensor, paralelisme
pakar, dan cache KV FP8.
Tujuan
- Instal Cluster Toolkit dan sediakan cluster GKE A4 multi-host dalam mode Standard.
- Tempatkan bobot model DeepSeek-R1 di bucket Cloud Storage.
- Men-deploy server inferensi vLLM multi-host dengan JobSet dan Ray di dua node A4, dengan total 16 GPU NVIDIA B200.
- Kirim permintaan penyelesaian chat ke server vLLM.
- Menjalankan workload benchmark inferensi.
- Bersihkan resource yang di-deploy.
Biaya
Dalam dokumen ini, Anda akan menggunakan komponenGoogle Cloudyang dapat ditagih berikut:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga.
Sebelum memulai
Siapkan lingkungan Anda untuk tutorial:
- Instal dan lakukan inisialisasi
Google Cloud CLI, dan instal
kubectl. Jika Anda menggunakan Cloud Shell, kedua alat tersebut sudah diinstal sebelumnya. - Jika Anda menjalankan tutorial ini dari workstation Linux atau macOS, bukan Cloud Shell, instal dependensi Cluster Toolkit yang diperlukan (seperti Terraform dan Git).
Aktifkan Kubernetes Engine API, Compute Engine API, Cloud Storage API, Artifact Registry API, dan Service Usage API di project Google Cloud Anda:
Mendapatkan token akses Hugging Face
Anda memerlukan token akses Hugging Face untuk menggunakan tutorial ini. Anda dapat mendaftar untuk mendapatkan akun gratis di Hugging Face. Setelah Anda memiliki akun, buat token akses:
- Di halaman Welcome to Hugging Face, klik avatar akun Anda, lalu pilih Token akses.
- Di halaman Token akses, klik Create new token.
- Pilih jenis token Read dan masukkan nama untuk token Anda.
- Token akses Anda akan ditampilkan. Simpan token di tempat yang aman.
Peran yang diperlukan
Untuk mendapatkan izin yang Anda perlukan untuk menyelesaikan tutorial ini, minta administrator untuk memberi Anda peran IAM berikut di project Anda:
- Kubernetes Engine Admin (
roles/container.admin) - Compute Admin (
roles/compute.admin) - Storage Admin (
roles/storage.admin) - Project IAM Admin (
roles/resourcemanager.projectIamAdmin) - Service Account Admin (
roles/iam.serviceAccountAdmin) - Service Account User (
roles/iam.serviceAccountUser) - Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer)
Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.
Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.
Menyiapkan variabel lingkungan Anda
Siapkan autentikasi dan variabel lingkungan Anda untuk tutorial ini:
Siapkan autentikasi Anda:
Ekspor variabel lingkungan yang Anda gunakan di sepanjang tutorial ini:
Ganti kode berikut:
YOUR_PROJECT_ID: ID project Google Cloud Anda.YOUR_REGION: region komputasi tempat kapasitas A4 Anda berada dan tempat Anda ingin men-deploy cluster, sepertius-central1.YOUR_ZONE: zona komputasi tempat kapasitas A4 Anda berada, sepertius-central1-b.YOUR_CLUSTER_NAME: nama untuk cluster GKE dan deployment Cluster Toolkit Anda. Gunakan nama yang terdiri dari 20 karakter atau kurang agar ID akun layanan node pool yang dihasilkan (YOUR_CLUSTER_NAME-gke-np-sa) tetap berada dalam batas 30 karakter Identity and Access Management (IAM).YOUR_RESERVATION_NAME: nama pemesanan A4 Anda, atau jalur blok pemesanan yang diperluas dalam formatRESERVATION_NAME/reservationBlocks/RESERVATION_BLOCK_NAME.YOUR_HF_TOKEN: token akses Hugging Face Anda.YOUR_GCS_BUCKET: nama unik global untuk bucket Cloud Storage tempat Anda melakukan staging bobot model. Skrip ini juga menetapkanTERRAFORM_BUCKETkeYOUR_GCS_BUCKET-tf-stateguna menyimpan status Terraform untuk Cluster Toolkit.
Skrip ini juga menetapkan
CLUSTER_TOOLKIT_VERSIONkev1.104.0, yang menentukan versi Cluster Toolkit yang akan diinstal. Cluster Toolkit versiv1.104.0dan yang lebih baru menyertakan opsi konsumsi kapasitas bawaan untukexamples/gke-a4/gke-a4-deployment.yaml. Pada versi sebelumv1.104.0, Anda harus menambahkan opsi kapasitas ini secara manual.
Membuat cluster GKE
Download Cluster Toolkit dan sediakan cluster GKE dalam mode Standard dengan dua node a4-highgpu-8g, jaringan GPUDirect RDMA, dan pengontrol JobSet:
Download dan ekstrak paket Cluster Toolkit bawaan untuk versi yang ditentukan di
CLUSTER_TOOLKIT_VERSION(v1.104.0), ubah direktori kerja Anda ke direktoricluster-toolkit, dan verifikasi versi biner:Atau, lihat perintah dan flag yang tersedia di Cluster Toolkit:
Buat bucket Cloud Storage yang menyimpan status Terraform untuk deployment Cluster Toolkit Anda:
Buat file konfigurasi deployment
examples/gke-a4/gke-a4-deployment.yamluntuk dua nodea4-highgpu-8g:Secara default, blueprint
examples/gke-a4/gke-a4.yamldikonfigurasi untuk menggunakan reservasi tertentu. Jika tidak memiliki pemesanan tertentu, Anda dapat mengeditexamples/gke-a4/gke-a4.yamlsebelum men-deploy cluster untuk menggunakan salah satu opsi penggunaan berikut:- Kapasitas spot: pastikan project Anda memiliki kuota preemptible yang cukup untuk GPU, disk, dan CPU Anda. Di bagian bawah
examples/gke-a4/gke-a4.yaml, jadikan bagian--- Option 1: Specific Reservation ---sebagai komentar dan hapus tanda komentar di bagian--- Option 4: Spot ---. - Flex-start VM: pastikan project Anda memiliki kuota preemptible yang memadai untuk GPU, disk, dan CPU Anda. Di bagian bawah
examples/gke-a4/gke-a4.yaml, jadikan bagian--- Option 1: Specific Reservation ---sebagai komentar dan hapus tanda komentar pada bagian--- Option 2: DWS Flex Start ---.
- Kapasitas spot: pastikan project Anda memiliki kuota preemptible yang cukup untuk GPU, disk, dan CPU Anda. Di bagian bawah
Deploy cluster GKE menggunakan perintah
gcluster deploy:Pembuatan cluster memerlukan waktu sekitar 30 hingga 45 menit. Jika Anda menjalankan
./gcluster deploytanpa flag--auto-approve, untuk menerapkan perubahan yang diusulkan, masukkanasaat diminta. Saat deployment selesai, output akan diakhiri dengan pesan yang mirip dengan berikut ini:Apply complete! Resources: 80 added, 0 changed, 0 destroyed.Konfigurasi kredensial
kubectluntuk berkomunikasi dengan cluster Anda:
Menyiapkan bobot model di Cloud Storage
Download bobot DeepSeek-R1 ke SSD Lokal salah satu node A4 Anda dan transfer ke bucket Cloud Storage untuk streaming cepat di seluruh node:
Download file manifes Kubernetes untuk Tugas download model, server inferensi vLLM, dan Pod benchmark:
Buat bucket Cloud Storage dengan akses level bucket yang seragam untuk menyimpan bobot model:
Berikan izin IAM pada bucket ke akun layanan Kubernetes default, akun layanan Compute Engine default, dan akun layanan node pool cluster (
${CLUSTER_NAME}-gke-np-sa):Izin IAM yang diberikan oleh skrip sebelumnya mencakup peran Storage Legacy Bucket Reader (
roles/storage.legacyBucketReader), yang diperlukan untuk--load-format runai_streamer.Buat Secret Kubernetes bernama
hf-secretuntuk menyimpan token akses Hugging Face Anda:Tinjau manifes
download_model.yaml, atau buat file secara lokal jika Anda belum mendownloadnya sebelumnya:Ganti nama bucket Cloud Storage Anda ke dalam manifes
download_model.yamldan mulai Tugas download model:Tunggu hingga Pod download dimulai, lalu streaming log Tugas:
Perlu waktu sekitar 30 hingga 40 menit untuk mendownload model ke SSD NVMe Lokal node dan mengupload bobot ke bucket Cloud Storage Anda.
Setelah Tugas selesai, pastikan semua 163 shard
.safetensorsada di bucket Cloud Storage Anda:Hapus Tugas staging yang telah selesai:
Men-deploy server vLLM multi-host
Manifes workload (deepseek_r1_server.yaml) menentukan Service ClusterIP
(vllm-r1-leader) dan JobSet Kubernetes (vllm-r1) yang mengoordinasikan
penyajian multi-host di dua node a4-highgpu-8g:
- Leader (
leader): menjalankan satu replika pada node A4 dengan delapan GPU NVIDIA B200, mengambil lingkungan NCCL/gIB (/usr/local/gib/scripts/set_nccl_env.sh), memulai node head Ray pada port6379untuk cluster dua node, dan meluncurkanvllm servepada port HTTP8080. Server menstreaming bobot langsung darigs://$MODEL_BUCKET/DeepSeek-R1menggunakan--load-format runai_streamerdan memuat tokenizer dari volume Cloud Storage FUSE yang terpasang di/models/DeepSeek-R1. berjalan dengan--tensor-parallel-size 16,--pipeline-parallel-size 1,--distributed-executor-backend ray,--enable-expert-parallel,--kv-cache-dtype fp8_e4m3,--async-scheduling, dan grafik CUDA (FULL_AND_PIECEWISE). - Worker (
worker): menjalankan satu replika headless di node A4 kedua dengan delapan GPU NVIDIA B200, mengonfigurasi NCCL/gIB, dan bergabung dengan cluster Ray leader divllm-r1-leader:6379.
Deploy dan pantau server vLLM multi-host:
Tinjau manifes
deepseek_r1_server.yaml, atau buat file secara lokal jika Anda belum mendownloadnya sebelumnya:Untuk menskalakan deployment ini ke lebih banyak host, perbarui parameter di
deepseek_r1_server.yaml. Misalnya, untuk menskalakan ke empat node A4, dengan total 32 GPU NVIDIA B200, tetapkanreplicas: 3di bagian Tugas yang direplikasiworker, dan perbarui argumen leader sebagai berikut:--ray_cluster_size=4--tensor-parallel-size=16--pipeline-parallel-size=2
Ganti nama bucket Cloud Storage Anda menjadi
deepseek_r1_server.yamldan terapkan manifes ke cluster Anda:Pantau log Pod leader dan worker hingga startup server selesai:
Karena
kubectl logs -fmelakukan streaming log di latar depan, jalankan perintah log worker di sesi terminal terpisah jika Anda ingin memantau kedua Pod secara bersamaan. Untuk berhenti melakukan streaming log kapan saja, tekan Control+C.Streaming bobot awal, pemuatan model, dan pengambilan grafik CUDA memerlukan waktu sekitar 15 hingga 20 menit. Sebelum Anda mengirim permintaan, tunggu hingga log Pod leader menghasilkan pesan berikut:
(APIServer pid=1) INFO: Started server process [1] (APIServer pid=1) INFO: Waiting for application startup. (APIServer pid=1) INFO: Application startup complete.
Mengirim permintaan inferensi
Kirim permintaan penyelesaian chat ke server vLLM yang di-deploy:
Teruskan port lokal
8080ke Layananvllm-r1-leaderdi latar belakang:Kirim permintaan penyelesaian chat ke endpoint
/v1/chat/completions:
Menjalankan workload tolok ukur
Lakukan tolok ukur server DeepSeek-R1 yang di-deploy menggunakan vllm bench serve dengan konfigurasi 8.192 token input dan 1.024 token output (8k/1k):
Tinjau manifes
deepseek_r1_8k_1k.yaml, atau buat file secara lokal jika Anda belum mendownloadnya sebelumnya:Manifes menentukan 8.192 token input, 1.024 token output, 1.280 perintah, dan konkurensi maksimum 112.
Terapkan manifes
deepseek_r1_8k_1k.yaml:Tunggu hingga Pod
vllm-bench-8k-1kdimulai, lalu lakukan streaming log benchmark:Benchmark memerlukan waktu sekitar 15 menit untuk diselesaikan. Setelah benchmark selesai, cari output yang berisi metrik seperti berikut:
Output token throughputTotal token throughputTTFTTPOT
Pembersihan
Agar tidak menimbulkan biaya berkelanjutan tambahan pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus workload Kubernetes, cluster GKE, dan bucket Cloud Storage Anda:
Hapus Pod benchmark, JobSet dan Service server vLLM, Tugas download model, dan Secret Hugging Face:
Hapus bucket Cloud Storage yang menyimpan bobot model yang di-stage:
Dari direktori
cluster-toolkit, hancurkan cluster GKE dan infrastruktur terkaitnya menggunakan perintahgcluster destroy:Hapus bucket Cloud Storage yang menyimpan status Terraform:
Langkah berikutnya
- Pelajari vLLM lebih lanjut.
- Pelajari lebih lanjut VM A4 dengan GPU NVIDIA B200.
- Pelajari Cluster Toolkit lebih lanjut.
- Pelajari lebih lanjut cara mengelola cluster GKE yang dioptimalkan untuk AI.