Tutorial ini menunjukkan cara menjalankan model bahasa besar (LLM) di pipeline Dataflow streaming menggunakan Apache Beam RunInference API.
Untuk mengetahui informasi selengkapnya tentang RunInference API, lihat bagian Tentang Beam ML dalam dokumentasi Apache Beam.
Contoh kode tersedia di GitHub.
Tujuan
- Buat topik dan langganan Pub/Sub untuk input dan respons model.
- Muat model ke Cloud Storage menggunakan tugas kustom Vertex AI.
- Menjalankan pipeline.
- Ajukan pertanyaan kepada model dan dapatkan respons.
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang dapat ditagih berikut:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, baca bagian Pembersihan.
Sebelum memulai
Jalankan tutorial ini di komputer yang memiliki ruang disk kosong minimal 5 GB untuk menginstal dependensi.
- Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
-
Instal Google Cloud CLI.
-
Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.
-
Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:
gcloud init -
Buat atau pilih Google Cloud project.
Peran yang diperlukan untuk memilih atau membuat project
- Pilih project: Memilih project tidak memerlukan peran IAM tertentu—Anda dapat memilih project mana pun yang telah diberi peran.
-
Membuat project: Untuk membuat project, Anda memerlukan peran Pembuat Project
(
roles/resourcemanager.projectCreator), yang berisi izinresourcemanager.projects.create. Pelajari cara memberikan peran.
-
Buat Google Cloud project:
gcloud projects create PROJECT_ID
Ganti
PROJECT_IDdengan nama untuk Google Cloud project yang Anda buat. -
Pilih project Google Cloud yang Anda buat:
gcloud config set project PROJECT_ID
Ganti
PROJECT_IDdengan nama project Google Cloud Anda.
-
Verifikasi bahwa penagihan diaktifkan untuk project Google Cloud Anda.
Aktifkan Dataflow, Compute Engine, Cloud Storage, Pub/Sub, dan Vertex AI API:
Peran yang diperlukan untuk mengaktifkan API
Untuk mengaktifkan API, Anda memerlukan peran IAM Service Usage Admin (
roles/serviceusage.serviceUsageAdmin), yang berisi izinserviceusage.services.enable. Pelajari cara memberikan peran.gcloud services enable dataflow.googleapis.com
compute.googleapis.com storage.googleapis.com pubsub.googleapis.com aiplatform.googleapis.com -
Jika Anda menggunakan shell lokal, buat kredensial autentikasi lokal untuk akun pengguna Anda:
gcloud auth application-default login
Anda tidak perlu melakukan langkah ini jika menggunakan Cloud Shell.
Jika error autentikasi ditampilkan, dan Anda menggunakan penyedia identitas (IdP) eksternal, konfirmasi bahwa Anda telah login ke gcloud CLI dengan identitas gabungan Anda.
-
Memberikan peran ke akun pengguna Anda. Jalankan perintah berikut satu kali untuk setiap peran IAM berikut:
roles/iam.serviceAccountUsergcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
Ganti kode berikut:
PROJECT_ID: Project ID Anda.USER_IDENTIFIER: ID untuk akun pengguna Anda. Misalnya,myemail@example.com.ROLE: Peran IAM yang Anda berikan ke akun pengguna Anda.
-
Instal Google Cloud CLI.
-
Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.
-
Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:
gcloud init -
Buat atau pilih Google Cloud project.
Peran yang diperlukan untuk memilih atau membuat project
- Pilih project: Memilih project tidak memerlukan peran IAM tertentu—Anda dapat memilih project mana pun yang telah diberi peran.
-
Membuat project: Untuk membuat project, Anda memerlukan peran Pembuat Project
(
roles/resourcemanager.projectCreator), yang berisi izinresourcemanager.projects.create. Pelajari cara memberikan peran.
-
Buat Google Cloud project:
gcloud projects create PROJECT_ID
Ganti
PROJECT_IDdengan nama untuk Google Cloud project yang Anda buat. -
Pilih project Google Cloud yang Anda buat:
gcloud config set project PROJECT_ID
Ganti
PROJECT_IDdengan nama project Google Cloud Anda.
-
Verifikasi bahwa penagihan diaktifkan untuk project Google Cloud Anda.
Aktifkan Dataflow, Compute Engine, Cloud Storage, Pub/Sub, dan Vertex AI API:
Peran yang diperlukan untuk mengaktifkan API
Untuk mengaktifkan API, Anda memerlukan peran IAM Service Usage Admin (
roles/serviceusage.serviceUsageAdmin), yang berisi izinserviceusage.services.enable. Pelajari cara memberikan peran.gcloud services enable dataflow.googleapis.com
compute.googleapis.com storage.googleapis.com pubsub.googleapis.com aiplatform.googleapis.com -
Jika Anda menggunakan shell lokal, buat kredensial autentikasi lokal untuk akun pengguna Anda:
gcloud auth application-default login
Anda tidak perlu melakukan langkah ini jika menggunakan Cloud Shell.
Jika error autentikasi ditampilkan, dan Anda menggunakan penyedia identitas (IdP) eksternal, konfirmasi bahwa Anda telah login ke gcloud CLI dengan identitas gabungan Anda.
-
Memberikan peran ke akun pengguna Anda. Jalankan perintah berikut satu kali untuk setiap peran IAM berikut:
roles/iam.serviceAccountUsergcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
Ganti kode berikut:
PROJECT_ID: Project ID Anda.USER_IDENTIFIER: ID untuk akun pengguna Anda. Misalnya,myemail@example.com.ROLE: Peran IAM yang Anda berikan ke akun pengguna Anda.
-
Berikan peran ke akun layanan default Compute Engine Anda. Jalankan perintah berikut satu kali untuk setiap peran IAM berikut:
roles/dataflow.adminroles/dataflow.workerroles/storage.adminroles/pubsub.editorroles/aiplatform.user
gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" --role=SERVICE_ACCOUNT_ROLE
Ganti kode berikut:
PROJECT_ID: project ID Anda.PROJECT_NUMBER: nomor project Anda. Untuk menemukan nomor project Anda, gunakan perintahgcloud projects describe.SERVICE_ACCOUNT_ROLE: setiap peran individual.
- Salin Google Cloud project ID. Anda akan memerlukan nilai ini nanti dalam tutorial ini.
Buat resource Google Cloud
Bagian ini menjelaskan cara membuat resource berikut:
- Bucket Cloud Storage untuk digunakan sebagai lokasi penyimpanan sementara
- Topik Pub/Sub untuk perintah model
- Topik dan langganan Pub/Sub untuk respons model
Membuat bucket Cloud Storage
Buat bucket Cloud Storage menggunakan gcloud CLI. Bucket ini digunakan sebagai lokasi penyimpanan sementara oleh pipeline Dataflow.
Untuk membuat bucket, gunakan
perintah gcloud storage buckets create:
gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION
Ganti kode berikut:
- BUCKET_NAME: nama untuk bucket Cloud Storage Anda yang memenuhi persyaratan penamaan bucket. Nama bucket Cloud Storage harus unik secara global.
- LOCATION: lokasi bucket.
Salin nama bucket. Anda akan memerlukan nilai ini nanti dalam tutorial ini.
Membuat topik dan langganan Pub/Sub
Buat dua topik Pub/Sub dan satu langganan. Satu topik adalah untuk perintah input yang Anda kirim ke model. Topik lainnya dan langganan terlampirnya adalah untuk respons model.
Untuk membuat topik, jalankan perintah
gcloud pubsub topics createdua kali, sekali untuk setiap topik:gcloud pubsub topics create PROMPTS_TOPIC_ID gcloud pubsub topics create RESPONSES_TOPIC_IDGanti kode berikut:
- PROMPTS_TOPIC_ID: ID topik untuk perintah input
yang akan dikirim ke model, seperti
prompts - RESPONSES_TOPIC_ID: ID topik untuk respons model, seperti
responses
- PROMPTS_TOPIC_ID: ID topik untuk perintah input
yang akan dikirim ke model, seperti
Untuk membuat langganan dan melampirkannya ke topik respons, gunakan perintah
gcloud pubsub subscriptions create:gcloud pubsub subscriptions create RESPONSES_SUBSCRIPTION_ID --topic=RESPONSES_TOPIC_IDGanti RESPONSES_SUBSCRIPTION_ID dengan ID langganan untuk respons model, seperti
responses-subscription.
Salin ID topik dan ID langganan. Anda memerlukan nilai ini nanti dalam tutorial ini.
Menyiapkan lingkungan Anda
Download contoh kode, lalu siapkan lingkungan Anda untuk menjalankan tutorial.
Contoh kode di repositori GitHub python-docs-samples menyediakan kode yang Anda butuhkan untuk menjalankan pipeline ini. Saat Anda siap membuat pipeline sendiri, Anda dapat menggunakan kode contoh ini sebagai template.
Anda membuat lingkungan virtual Python yang terisolasi untuk menjalankan project pipeline dengan menggunakan venv. Lingkungan virtual memungkinkan Anda mengisolasi dependensi satu project dari dependensi project lainnya. Untuk mengetahui informasi selengkapnya tentang cara menginstal Python dan membuat lingkungan virtual, lihat Menyiapkan lingkungan pengembangan Python.
Gunakan perintah
git cloneuntuk meng-clone repositori GitHub:git clone https://github.com/GoogleCloudPlatform/python-docs-samples.gitBuka direktori
run-inference:cd python-docs-samples/dataflow/run-inferenceJika Anda menggunakan command prompt, pastikan Anda telah menjalankan Python 3 dan
pipdi sistem Anda:python --version python -m pip --versionJika diperlukan, instal Python 3.
Jika menggunakan Cloud Shell, Anda dapat melewati langkah ini karena Cloud Shell sudah menginstal Python.
Buat lingkungan virtual Python:
python -m venv /tmp/env source /tmp/env/bin/activateInstal dependensinya:
pip install -r requirements.txt --no-cache-dir
Contoh kode pemuatan model
Kode pemuatan model dalam tutorial ini meluncurkan tugas kustom Vertex AI yang memuat objek state_dict model ke Cloud Storage.
File awal akan terlihat seperti berikut:
Contoh kode pipeline
Kode pipeline dalam tutorial ini men-deploy pipeline Dataflow yang melakukan hal-hal berikut:
- Membaca perintah dari Pub/Sub dan mengenkode teks menjadi tensor token.
- Menjalankan transformasi
RunInference. - Mendekode tensor token output menjadi teks dan menulis respons ke Pub/Sub.
File awal akan terlihat seperti berikut:
Memuat model
LLM dapat berupa model yang sangat besar. Model yang lebih besar yang dilatih dengan lebih banyak parameter umumnya memberikan hasil yang lebih baik. Namun, model yang lebih besar memerlukan mesin yang lebih besar dan lebih banyak memori untuk dijalankan. Model yang lebih besar juga dapat berjalan lebih lambat di CPU.
Sebelum menjalankan model PyTorch di Dataflow, Anda perlu memuat objek state_dict model. Objek
state_dict model
menyimpan bobot untuk model.
Dalam pipeline Dataflow yang menggunakan transformasi
RunInference, objek state_dict model harus dimuat ke
Cloud Storage. Mesin yang Anda gunakan untuk memuat objekstate_dict ke Cloud Storage harus memiliki memori yang cukup untuk memuat model. Mesin
juga memerlukan koneksi internet yang cepat untuk mendownload bobot dan
menguploadnya ke Cloud Storage.
Tabel berikut menunjukkan jumlah parameter untuk setiap model dan memori minimum yang diperlukan untuk memuat setiap model.
| Model | Parameter | Memori yang diperlukan |
|---|---|---|
google/flan-t5-small |
80 juta | > 320 MB |
google/flan-t5-base |
250 juta | > 1 GB |
google/flan-t5-large |
780 juta | > 3,2 GB |
google/flan-t5-xl |
3 miliar | > 12 GB |
google/flan-t5-xxl |
11 miliar | > 44 GB |
google/flan-ul2 |
20 miliar | > 80 GB |
Meskipun Anda dapat memuat model yang lebih kecil secara lokal, tutorial ini menunjukkan cara meluncurkan tugas kustom Vertex AI yang memuat model dengan VM berukuran sesuai.
Karena LLM bisa sangat besar, contoh dalam tutorial ini menyimpan objek
state_dict sebagai format float16, bukan format float32 default.
Dengan konfigurasi ini, setiap parameter menggunakan 16 bit, bukan 32 bit, sehingga
ukuran objek state_dict menjadi setengahnya. Ukuran yang lebih kecil akan meminimalkan waktu yang
diperlukan untuk memuat model. Namun, mengonversi format berarti VM harus memuat model dan objek state_dict ke dalam memori.
Tabel berikut menunjukkan persyaratan minimum untuk memuat model setelah objek state_dict disimpan sebagai format float16. Tabel ini juga menunjukkan jenis mesin yang disarankan untuk memuat model menggunakan Vertex AI. Ukuran disk minimum (dan default) untuk Vertex AI adalah 100 GB, tetapi beberapa model mungkin memerlukan disk yang lebih besar.
| Nama model | Memori yang diperlukan | Jenis mesin | Memori VM | Disk VM |
|---|---|---|---|---|
google/flan-t5-small |
> 480 MB | e2-standard-4 |
16 GB | 100 GB |
google/flan-t5-base |
> 1,5 GB | e2-standard-4 |
16 GB | 100 GB |
google/flan-t5-large |
> 4,8 GB | e2-standard-4 |
16 GB | 100 GB |
google/flan-t5-xl |
> 18 GB | e2-highmem-4 |
32 GB | 100 GB |
google/flan-t5-xxl |
> 66 GB | e2-highmem-16 |
128 GB | 100 GB |
google/flan-ul2 |
> 120 GB | e2-highmem-16 |
128 GB | 150 GB |
Muat objek state_dict model ke Cloud Storage menggunakan
tugas kustom Vertex AI:
python download_model.py vertex \
--model-name="MODEL_NAME" \
--state-dict-path="gs://BUCKET_NAME/run-inference/MODEL_NAME.pt" \
--job-name="Load MODEL_NAME" \
--project="PROJECT_ID" \
--bucket="BUCKET_NAME" \
--location="LOCATION" \
--machine-type="VERTEX_AI_MACHINE_TYPE" \
--disk-size-gb="DISK_SIZE_GB"
Ganti kode berikut:
- MODEL_NAME: nama model, seperti
google/flan-t5-xl. - VERTEX_AI_MACHINE_TYPE: jenis mesin untuk menjalankan
tugas kustom Vertex AI, seperti
e2-highmem-4. - DISK_SIZE_GB: ukuran disk untuk VM, dalam GB. Ukuran minimumnya adalah 100 GB.
Bergantung pada ukuran model, mungkin perlu waktu beberapa menit untuk memuat model. Untuk melihat statusnya, buka halaman Custom jobs Vertex AI.
Menjalankan pipeline
Setelah memuat model, Anda menjalankan pipeline Dataflow. Untuk menjalankan pipeline, model dan memori yang digunakan oleh setiap pekerja harus sesuai dengan memori.
Tabel berikut menunjukkan jenis mesin yang direkomendasikan untuk menjalankan pipeline inferensi.
| Nama model | Jenis mesin | Memori VM |
|---|---|---|
google/flan-t5-small |
n2-highmem-2 |
16 GB |
google/flan-t5-base |
n2-highmem-2 |
16 GB |
google/flan-t5-large |
n2-highmem-4 |
32 GB |
google/flan-t5-xl |
n2-highmem-4 |
32 GB |
google/flan-t5-xxl |
n2-highmem-8 |
64 GB |
google/flan-ul2 |
n2-highmem-16 |
128 GB |
Menjalankan pipeline:
python main.py \
--messages-topic="projects/PROJECT_ID/topics/PROMPTS_TOPIC_ID" \
--responses-topic="projects/PROJECT_ID/topics/RESPONSES_TOPIC_ID" \
--model-name="MODEL_NAME" \
--state-dict-path="gs://BUCKET_NAME/run-inference/MODEL_NAME.pt" \
--runner="DataflowRunner" \
--project="PROJECT_ID" \
--temp_location="gs://BUCKET_NAME/temp" \
--region="REGION" \
--machine_type="DATAFLOW_MACHINE_TYPE" \
--requirements_file="requirements.txt" \
--requirements_cache="skip" \
--experiments="use_sibling_sdk_workers" \
--experiments="no_use_multiple_sdk_containers"
Ganti kode berikut:
- PROJECT_ID: the project ID
- PROMPTS_TOPIC_ID: ID topik untuk perintah input yang akan dikirim ke model
- RESPONSES_TOPIC_ID: ID topik untuk respons model
- MODEL_NAME: nama model, seperti
google/flan-t5-xl - BUCKET_NAME: nama bucket
- REGION: region tempat tugas
di-deploy, seperti
us-central1 - DATAFLOW_MACHINE_TYPE: VM untuk menjalankan pipeline
di, seperti
n2-highmem-4
Untuk memastikan model dimuat hanya sekali per worker dan tidak kehabisan
memori, Anda mengonfigurasi worker untuk menggunakan satu proses dengan menyetel opsi
pipeline --experiments=no_use_multiple_sdk_containers. Anda tidak perlu membatasi jumlah thread karena transformasi RunInference berbagi model yang sama dengan beberapa thread.
Pipeline dalam contoh ini berjalan dengan CPU. Untuk model yang lebih besar, diperlukan waktu yang lebih lama untuk memproses setiap permintaan. Anda dapat mengaktifkan GPU jika memerlukan respons yang lebih cepat.
Untuk melihat status pipeline, buka halaman Jobs Dataflow.
Mengajukan pertanyaan kepada model
Setelah pipeline mulai berjalan, Anda memberikan perintah ke model dan menerima respons.
Kirim perintah Anda dengan memublikasikan pesan ke Pub/Sub. Gunakan perintah
gcloud pubsub topics publish:gcloud pubsub topics publish PROMPTS_TOPIC_ID \ --message="PROMPT_TEXT"Ganti
PROMPT_TEXTdengan string yang berisi perintah yang ingin Anda berikan. Apit perintah dengan tanda kutip.Gunakan perintah Anda sendiri, atau coba salah satu contoh berikut:
Translate to Spanish: My name is LukaComplete this sentence: Once upon a time, there was aSummarize the following text: Dataflow is a Google Cloud service that provides unified stream and batch data processing at scale. Use Dataflow to create data pipelines that read from one or more sources, transform the data, and write the data to a destination.
Untuk mendapatkan respons, gunakan perintah
gcloud pubsub subscriptions pull.Bergantung pada ukuran model, mungkin diperlukan waktu beberapa menit agar model dapat membuat respons. Model yang lebih besar memerlukan waktu lebih lama untuk di-deploy dan untuk menghasilkan respons.
gcloud pubsub subscriptions pull RESPONSES_SUBSCRIPTION_ID --auto-ackGanti
RESPONSES_SUBSCRIPTION_IDdengan ID langganan untuk respons model.
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 project
Menghapus Google Cloud project:
gcloud projects delete PROJECT_ID
Menghapus resource satu per satu
-
Keluar dari lingkungan virtual Python:
deactivate
-
Hentikan pipeline:
-
Mencantumkan ID tugas untuk tugas Dataflow yang sedang berjalan, lalu catat ID tugas untuk tugas tutorial:
gcloud dataflow jobs list --region=REGION --status=active
-
Membatalkan tugas:
gcloud dataflow jobs cancel JOB_ID --region=REGION
-
-
Hapus bucket dan apa pun yang ada di dalamnya:
gcloud storage rm gs://BUCKET_NAME --recursive
-
Hapus topik dan langganan:
gcloud pubsub topics delete PROMPTS_TOPIC_ID gcloud pubsub topics delete RESPONSES_TOPIC_ID gcloud pubsub subscriptions delete RESPONSES_SUBSCRIPTION_ID
-
Cabut peran yang Anda berikan ke akun layanan default Compute Engine. Jalankan perintah berikut satu kali untuk setiap peran IAM berikut:
roles/dataflow.adminroles/dataflow.workerroles/storage.adminroles/pubsub.editorroles/aiplatform.user
gcloud projects remove-iam-policy-binding PROJECT_ID --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com --role=SERVICE_ACCOUNT_ROLE
Opsional: Cabut peran dari Akun Google Anda.
gcloud projects remove-iam-policy-binding PROJECT_ID --member="user:EMAIL_ADDRESS" --role=roles/iam.serviceAccountUser
-
Opsional: Cabut kredensial autentikasi yang Anda buat, dan hapus file kredensial lokal.
gcloud auth application-default revoke
-
Opsional: Cabut kredensial dari gcloud CLI.
gcloud auth revoke
Langkah berikutnya
- Jelajahi Dataflow ML.
- Pelajari lebih lanjut RunInference API.
- Dapatkan informasi mendalam tentang penggunaan ML dengan Apache Beam dalam dokumentasi pipeline AI/ML Apache Beam.
- Pelajari notebook Menggunakan RunInference untuk AI Generatif.
- Pelajari arsitektur referensi, diagram, dan praktik terbaik tentang Google Cloud. Lihat Cloud Architecture Center kami.