Panduan ini menunjukkan cara menayangkan model bahasa besar (LLM) menggunakan Unit Pemrosesan Tensor (TPU) di Google Kubernetes Engine (GKE) dengan JetStream melalui PyTorch. Dalam panduan ini, Anda akan mendownload bobot model ke Cloud Storage dan men-deploynya di cluster GKE Autopilot atau Standard menggunakan penampung yang menjalankan JetStream.
Jika Anda memerlukan skalabilitas, ketahanan, dan efektivitas biaya yang ditawarkan oleh fitur Kubernetes saat men-deploy model di JetStream, panduan ini adalah titik awal yang baik.
Panduan ini ditujukan untuk pelanggan AI Generatif yang menggunakan PyTorch, pengguna baru atau lama GKE, Engineer ML, engineer MLOps (DevOps), atau administrator platform yang tertarik untuk menggunakan kemampuan orkestrasi penampung Kubernetes untuk menayangkan LLM.
Latar belakang
Dengan menayangkan LLM menggunakan TPU di GKE dengan JetStream, Anda dapat membuat solusi penayangan yang andal dan siap produksi dengan semua manfaat Kubernetes terkelola, termasuk efisiensi biaya, skalabilitas, dan ketersediaan yang lebih tinggi. Bagian ini menjelaskan teknologi utama yang digunakan dalam tutorial ini.
Tentang TPU
TPU adalah sirkuit terintegrasi khusus aplikasi (ASIC) Google yang dikembangkan secara khusus dan digunakan untuk mempercepat machine learning dan model AI yang dibuat menggunakan framework seperti TensorFlow, PyTorch, dan JAX.
Sebelum menggunakan TPU di GKE, sebaiknya selesaikan jalur pembelajaran berikut:
- Pelajari ketersediaan versi TPU saat ini dengan arsitektur sistem Cloud TPU.
- Pelajari TPU di GKE.
Tutorial ini membahas penayangan berbagai model LLM. GKE men-deploy model di node TPUv5e host tunggal dengan topologi TPU yang dikonfigurasi berdasarkan persyaratan model untuk menayangkan perintah dengan latensi rendah.
Tentang JetStream
JetStream adalah framework penayangan inferensi open source yang dikembangkan oleh Google. JetStream memungkinkan inferensi berperforma tinggi, throughput tinggi, dan dioptimalkan untuk memori di TPU dan GPU. JetStream menyediakan pengoptimalan performa lanjutan, termasuk pengelompokan berkelanjutan, pengoptimalan cache KV, dan teknik kuantisasi, untuk memfasilitasi deployment LLM. JetStream memungkinkan penayangan TPU PyTorch/XLA dan JAX untuk mencapai performa yang optimal.
Pengelompokan Berkelanjutan
Pengelompokan berkelanjutan adalah teknik yang secara dinamis mengelompokkan permintaan inferensi yang masuk ke dalam batch, sehingga mengurangi latensi dan meningkatkan throughput.
Kuantisasi cache KV
Kuantifikasi cache KV melibatkan kompresi cache nilai kunci yang digunakan dalam mekanisme perhatian, sehingga mengurangi persyaratan memori.
Kuantisasi bobot Int8
Kuantisasi bobot Int8 mengurangi presisi bobot model dari floating point 32-bit menjadi bilangan bulat 8-bit, sehingga menghasilkan komputasi yang lebih cepat dan mengurangi penggunaan memori.
Untuk mempelajari pengoptimalan ini lebih lanjut, lihat repositori project JetStream PyTorch dan JetStream MaxText.
Tentang PyTorch
PyTorch adalah framework machine learning open source yang dikembangkan oleh Meta dan kini menjadi bagian dari payung Linux Foundation. PyTorch menyediakan fitur tingkat tinggi seperti komputasi tensor dan jaringan neural dalam.
Tujuan
- Siapkan cluster GKE Autopilot atau Standard dengan topologi TPU yang direkomendasikan berdasarkan karakteristik model.
- Men-deploy komponen JetStream di GKE.
- Mendapatkan dan memublikasikan model Anda.
- Menayangkan dan berinteraksi dengan model yang dipublikasikan.
Arsitektur
Bagian ini menjelaskan arsitektur GKE yang digunakan dalam tutorial ini. Arsitektur ini mencakup cluster GKE Autopilot atau Standard yang menyediakan TPU dan menghosting komponen JetStream untuk men-deploy dan menayangkan model.
Diagram berikut menunjukkan komponen arsitektur ini:
Arsitektur ini mencakup komponen berikut:
- Cluster regional GKE Autopilot atau Standard.
- Dua node pool slice TPU host tunggal yang menghosting deployment JetStream.
- Komponen Layanan menyebarkan traffic masuk ke semua replika
JetStream HTTP
. JetStream HTTP
adalah server HTTP yang menerima permintaan sebagai wrapper untuk format yang diperlukan JetStream dan mengirimkannya ke klien GRPC JetStream.JetStream-PyTorch
adalah server JetStream yang melakukan inferensi dengan pengelompokan berkelanjutan.
Sebelum memulai
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Make sure that billing is enabled for your Google Cloud project.
-
Aktifkan API yang diperlukan.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Make sure that billing is enabled for your Google Cloud project.
-
Aktifkan API yang diperlukan.
-
Make sure that you have the following role or roles on the project: roles/container.admin, roles/iam.serviceAccountAdmin
Check for the roles
-
In the Google Cloud console, go to the IAM page.
Go to IAM - Select the project.
-
In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.
- For all rows that specify or include you, check the Role colunn to see whether the list of roles includes the required roles.
Grant the roles
-
In the Google Cloud console, go to the IAM page.
Buka IAM - Pilih project.
- Klik Berikan akses.
-
Di kolom New principals, masukkan ID pengguna Anda. Ini biasanya adalah alamat email untuk Akun Google.
- Di daftar Pilih peran, pilih peran.
- Untuk memberikan peran tambahan, klik Tambahkan peran lain, lalu tambahkan setiap peran tambahan.
- Klik Simpan.
-
- Pastikan Anda memiliki kuota yang cukup untuk delapan chip PodSlice Lite TPU v5e. Dalam tutorial ini, Anda akan menggunakan instance on-demand.
- Buat token Hugging Face, jika Anda belum memilikinya.
Mendapatkan akses ke model
Mendapatkan akses ke berbagai model di Hugging Face untuk di-deploy ke GKE
Gemma 7B-it
Untuk mendapatkan akses ke model Gemma untuk di-deploy ke GKE, Anda harus menandatangani perjanjian izin lisensi terlebih dahulu.
- Mengakses halaman izin model Gemma di Hugging Face
- Login ke Hugging Face jika Anda belum melakukannya.
- Tinjau dan setujui Persyaratan dan Ketentuan model.
Llama 3 8B
Untuk mendapatkan akses ke model Llama 3 untuk di-deploy ke GKE, Anda harus menandatangani perjanjian izin lisensi terlebih dahulu.
- Mengakses halaman izin model Llama 3 di Hugging Face
- Login ke Hugging Face jika Anda belum melakukannya.
- Tinjau dan setujui Persyaratan dan Ketentuan model.
Menyiapkan lingkungan
Dalam tutorial ini, Anda akan menggunakan Cloud Shell untuk mengelola resource yang dihosting di Google Cloud. Cloud Shell telah diinstal dengan software yang akan Anda perlukan untuk tutorial ini, termasuk kubectl
dan
gcloud CLI.
Untuk menyiapkan lingkungan Anda dengan Cloud Shell, ikuti langkah-langkah berikut:
Di konsol Google Cloud, luncurkan sesi Cloud Shell dengan mengklik Aktifkan Cloud Shell di konsol Google Cloud. Tindakan ini akan meluncurkan sesi di panel bawah Konsol Google Cloud.
Tetapkan variabel lingkungan default:
gcloud config set project PROJECT_ID export PROJECT_ID=$(gcloud config get project) export CLUSTER_NAME=CLUSTER_NAME export BUCKET_NAME=BUCKET_NAME export REGION=REGION export LOCATION=LOCATION export CLUSTER_VERSION=CLUSTER_VERSION
Ganti nilai berikut:
PROJECT_ID
: project ID Google Cloud Anda.CLUSTER_NAME
: nama cluster GKE Anda.BUCKET_NAME
: nama bucket Cloud Storage Anda. Anda tidak perlu menentukan awalangs://
.REGION
: region tempat cluster GKE, bucket Cloud Storage, dan node TPU Anda berada. Region ini berisi zona tempat jenis mesin TPU v5e tersedia (misalnya,us-west1
,us-west4
,us-central1
,us-east1
,us-east5
, ataueurope-west4
). Untuk cluster Autopilot, pastikan Anda memiliki resource zonal TPU v5e yang memadai untuk region pilihan Anda.- (Khusus cluster standar)
LOCATION
: zona tempat resource TPU tersedia (misalnya,us-west4-a
). Untuk cluster Autopilot, Anda tidak perlu menentukan zona, hanya region. CLUSTER_VERSION
: versi GKE, yang harus mendukung jenis mesin yang ingin Anda gunakan. Perhatikan bahwa versi GKE default mungkin tidak tersedia untuk TPU target Anda. Untuk mengetahui daftar versi GKE minimum yang tersedia berdasarkan jenis mesin TPU, lihat Ketersediaan TPU di GKE.
Membuat dan mengonfigurasi resource Google Cloud
Ikuti petunjuk ini untuk membuat resource yang diperlukan.
Membuat cluster GKE
Anda dapat menayangkan Gemma di TPU dalam cluster GKE Autopilot atau Standard. Sebaiknya gunakan cluster Autopilot untuk pengalaman Kubernetes yang dikelola sepenuhnya. Untuk memilih mode operasi GKE yang paling sesuai untuk workload Anda, lihat Memilih mode operasi GKE.
Autopilot
Buat cluster GKE Autopilot:
gcloud container clusters create-auto CLUSTER_NAME \
--project=PROJECT_ID \
--region=REGION \
--cluster-version=CLUSTER_VERSION
Standard
Buat cluster GKE Standar regional yang menggunakan Workload Identity Federation for GKE:
gcloud container clusters create CLUSTER_NAME \ --enable-ip-alias \ --machine-type=e2-standard-4 \ --num-nodes=2 \ --cluster-version=CLUSTER_VERSION \ --workload-pool=PROJECT_ID.svc.id.goog \ --location=REGION
Pembuatan cluster mungkin memerlukan waktu beberapa menit.
Buat node pool TPU v5e dengan topologi
2x4
dan dua node:gcloud container node-pools create tpu-nodepool \ --cluster=CLUSTER_NAME \ --machine-type=ct5lp-hightpu-8t \ --project=PROJECT_ID \ --num-nodes=2 \ --region=REGION \ --node-locations=LOCATION
Membuat bucket Cloud Storage
Buat bucket Cloud Storage untuk menyimpan titik pemeriksaan yang dikonversi:
gcloud storage buckets create gs://BUCKET_NAME --location=REGION
Membuat token Hugging Face CLI di Cloud Shell
Buat token Hugging Face baru jika Anda belum memilikinya:
- Klik Profil Anda > Setelan > Token Akses.
- Klik New Token.
- Tentukan Nama pilihan Anda dan Peran minimal
Read
. - Klik Generate a token.
- Edit izin ke token akses Anda agar memiliki akses baca ke repositori Hugging Face model Anda.
- Salin token yang dihasilkan ke papan klip Anda.
Membuat Secret Kubernetes untuk kredensial Hugging Face
Di Cloud Shell, lakukan hal berikut:
Konfigurasi
kubectl
untuk berkomunikasi dengan cluster Anda:gcloud container clusters get-credentials CLUSTER_NAME --location=REGION
Buat Secret untuk menyimpan kredensial Hugging Face:
kubectl create secret generic huggingface-secret \ --from-literal=HUGGINGFACE_TOKEN=HUGGINGFACE_TOKEN
Ganti
HUGGINGFACE_TOKEN
dengan token Hugging Face Anda.
Mengonfigurasi akses workload menggunakan Workload Identity Federation for GKE
Tetapkan Kubernetes ServiceAccount ke aplikasi dan konfigurasikan Kubernetes ServiceAccount tersebut untuk bertindak sebagai akun layanan IAM.
Buat akun layanan IAM untuk aplikasi Anda:
gcloud iam service-accounts create wi-jetstream
Tambahkan binding kebijakan IAM untuk akun layanan IAM Anda agar dapat mengelola Cloud Storage:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:wi-jetstream@PROJECT_ID.iam.gserviceaccount.com" \ --role roles/storage.objectUser gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:wi-jetstream@PROJECT_ID.iam.gserviceaccount.com" \ --role roles/storage.insightsCollectorService
Izinkan ServiceAccount Kubernetes untuk meniru identitas akun layanan IAM dengan menambahkan binding kebijakan IAM antara kedua akun layanan tersebut. Dengan binding ini, Kubernetes ServiceAccount dapat bertindak sebagai akun layanan IAM:
gcloud iam service-accounts add-iam-policy-binding wi-jetstream@PROJECT_ID.iam.gserviceaccount.com \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:PROJECT_ID.svc.id.goog[default/default]"
Beri anotasi pada akun layanan Kubernetes dengan alamat email akun layanan IAM:
kubectl annotate serviceaccount default \ iam.gke.io/gcp-service-account=wi-jetstream@PROJECT_ID.iam.gserviceaccount.com
Mengonversi checkpoint model
Di bagian ini, Anda akan membuat Tugas untuk melakukan hal berikut:
- Download checkpoint dasar dari Hugging Face ke direktori lokal.
- Konversikan titik pemeriksaan ke titik pemeriksaan yang kompatibel dengan JetStream-Pytorch.
- Upload checkpoint ke bucket Cloud Storage.
Men-deploy Tugas konversi checkpoint model
Gemma 7B-it
Download dan konversikan file checkpoint model Gemma 7B:
Simpan manifes berikut sebagai
job-checkpoint-converter.yaml
:
Llama 3 8B
Download dan konversi file checkpoint model Llama 3 8B:
Simpan manifes berikut sebagai
job-checkpoint-converter.yaml
:
Ganti
BUCKET_NAME
dengan GSBucket yang Anda buat sebelumnya:sed -i "s|BUCKET_NAME|BUCKET_NAME|g" job-checkpoint-converter.yaml
Terapkan manifes:
kubectl apply -f job-checkpoint-converter.yaml
Tunggu hingga Pod yang menjadwalkan Tugas mulai berjalan:
kubectl get pod -w
Outputnya akan mirip dengan berikut ini, dan mungkin memerlukan waktu beberapa menit:
NAME READY STATUS RESTARTS AGE checkpoint-converter-abcd 0/1 ContainerCreating 0 28s checkpoint-converter-abcd 1/1 Running 0 51s
Untuk cluster Autopilot, mungkin perlu waktu beberapa menit untuk menyediakan resource TPU yang diperlukan.
Verifikasi bahwa Tugas telah selesai dengan melihat log untuk Tugas:
kubectl logs -f jobs/checkpoint-converter
Setelah Tugas selesai, output-nya akan terlihat seperti berikut:
Completed uploading converted checkpoint from local path /pt-ckpt/ to GSBucket gs://BUCKET_NAME/pytorch/<model_name>/final/bf16/"
Men-deploy JetStream
Deploy container JetStream untuk menayangkan model Anda:
Simpan manifes berikut sebagai jetstream-pytorch-deployment.yaml
:
Gemma 7B-it
Llama 3 8B
Manifes menetapkan properti utama berikut:
size
: ukuran model Anda.model_name
: nama model (gemma
,llama-3
).batch_size
: ukuran batch decoding per perangkat, dengan satu chip TPU sama dengan satu perangkat.max_cache_length
: panjang maksimum cache kv.quantize_weights
: apakah checkpoint dikuantifikasi.quantize_kv_cache
: apakah cache kv dikuantifikasi.tokenizer_path
: jalur ke file tokenizer model.checkpoint_path
: jalur ke checkpoint.
Ganti
BUCKET_NAME
dengan GSBucket yang Anda buat sebelumnya:sed -i "s|BUCKET_NAME|BUCKET_NAME|g" jetstream-pytorch-deployment.yaml
Terapkan manifes:
kubectl apply -f jetstream-pytorch-deployment.yaml
Verifikasi Deployment:
kubectl get deployment
Outputnya mirip dengan hal berikut ini:
NAME READY UP-TO-DATE AVAILABLE AGE jetstream-pytorch-server 2/2 2 2 ##s
Untuk cluster Autopilot, mungkin perlu waktu beberapa menit untuk menyediakan resource TPU yang diperlukan.
Lihat log server HTTP untuk memeriksa apakah model telah dimuat dan dikompilasi. Mungkin perlu waktu beberapa menit bagi server untuk menyelesaikan operasi ini.
kubectl logs deploy/jetstream-pytorch-server -f -c jetstream-http
Outputnya mirip dengan hal berikut ini:
kubectl logs deploy/jetstream-pytorch-server -f -c jetstream-http INFO: Started server process [1] INFO: Waiting for application startup. INFO: Application startup complete. INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
Lihat log server JetStream-PyTorch dan pastikan kompilasi telah selesai:
kubectl logs deploy/jetstream-pytorch-server -f -c jetstream-pytorch-server
Outputnya mirip dengan hal berikut ini:
Started jetstream_server.... 2024-04-12 04:33:37,128 - root - INFO - ---------Generate params 0 loaded.---------
Menayangkan model
Di bagian ini, Anda akan berinteraksi dengan model.
Menyiapkan penerusan port
Anda dapat mengakses Deployment JetStream melalui Layanan ClusterIP yang Anda buat pada langkah sebelumnya. Layanan ClusterIP hanya dapat dijangkau dari dalam cluster. Oleh karena itu, untuk mengakses Layanan dari luar cluster, selesaikan langkah-langkah berikut:
Untuk membuat sesi penerusan port, jalankan perintah berikut:
kubectl port-forward svc/jetstream-svc 8000:8000
Berinteraksi dengan model menggunakan curl
Pastikan Anda dapat mengakses server HTTP JetStream dengan membuka terminal baru dan menjalankan perintah berikut:
curl --request POST \ --header "Content-type: application/json" \ -s \ localhost:8000/generate \ --data \ '{ "prompt": "What are the top 5 programming languages", "max_tokens": 200 }'
Permintaan awal dapat memerlukan waktu beberapa detik untuk diselesaikan karena pemanasan model. Outputnya mirip dengan hal berikut ini:
{ "response": " for data science in 2023?\n\n**1. Python:**\n- Widely used for data science due to its readability, extensive libraries (pandas, scikit-learn), and integration with other tools.\n- High demand for Python programmers in data science roles.\n\n**2. R:**\n- Popular choice for data analysis and visualization, particularly in academia and research.\n- Extensive libraries for statistical modeling and data wrangling.\n\n**3. Java:**\n- Enterprise-grade platform for data science, with strong performance and scalability.\n- Widely used in data mining and big data analytics.\n\n**4. SQL:**\n- Essential for data querying and manipulation, especially in relational databases.\n- Used for data analysis and visualization in various industries.\n\n**5. Scala:**\n- Scalable and efficient for big data processing and machine learning models.\n- Popular in data science for its parallelism and integration with Spark and Spark MLlib." }
Memecahkan masalah
- Jika Anda mendapatkan pesan
Empty reply from server
, mungkin penampung belum selesai mendownload data model. Periksa log Pod lagi untuk menemukan pesanConnected
yang menunjukkan bahwa model siap ditayangkan. - Jika Anda melihat
Connection refused
, pastikan penerusan port Anda aktif.
Pembersihan
Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.
Menghapus resource yang di-deploy
Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang dibuat dalam panduan ini, jalankan perintah berikut dan ikuti petunjuknya:
gcloud container clusters delete CLUSTER_NAME --region=REGION
gcloud iam service-accounts delete wi-jetstream@PROJECT_ID.iam.gserviceaccount.com
gcloud storage rm --recursive gs://BUCKET_NAME
Langkah selanjutnya
- Temukan cara menjalankan model Gemma di GKE dan cara menjalankan beban kerja AI/ML yang dioptimalkan dengan kemampuan orkestrasi platform GKE.
- Pelajari TPU di GKE lebih lanjut.
- Jelajahi repositori GitHub JetStream.
- Jelajahi Vertex AI Model Garden.