- Menggunakan model yang dimuat dengan cepat dan memerlukan transformasi minimal ke dalam struktur yang siap menggunakan GPU, serta mengoptimalkan cara pemuatannya.
- Menggunakan konfigurasi yang memungkinkan eksekusi serentak yang efisien dan maksimal untuk mengurangi jumlah GPU yang diperlukan untuk melayani permintaan target per detik sekaligus menekan biaya.
Cara yang direkomendasikan untuk memuat model ML besar di Cloud Run
Google merekomendasikan untuk mendownload model ML dari Cloud Storage dan mengaksesnya melalui Google Cloud CLI. Sebagai alternatif, Anda dapat menyimpan model di dalam image container, tetapi metode ini paling cocok untuk model yang lebih kecil dari 10 GB.
Trade-off menyimpan dan memuat model ML
Berikut perbandingan opsi:
| Lokasi model | Waktu deployment | Pengalaman pengembangan | Waktu mulai container | Biaya penyimpanan |
Cloud Storage, didownload secara serentak menggunakan perintah Google Cloud CLI gcloud storage cp atau Cloud Storage API seperti yang ditunjukkan dalam contoh kode download serentak pengelola transfer.
|
Tercepat. Model didownload selama waktu mulai container. Pastikan instance Cloud Run memiliki RAM yang cukup dialokasikan untuk menyimpan file model. | Sedikit lebih sulit disiapkan, karena Anda harus menginstal Google Cloud CLI di image atau mengupdate kode untuk menggunakan Cloud Storage API. Untuk mengetahui informasi selengkapnya tentang cara mengambil kredensial dari server metadata, lihat Pengantar identitas layanan. | Cepat saat Anda menggunakan pengoptimalan jaringan. Google Cloud CLI mendownload file model secara paralel. | Satu salinan di Cloud Storage. |
| Cloud Storage, dimuat menggunakan pemasangan volume Cloud Storage FUSE | Lebih cepat. Model didownload selama waktu mulai container. | Tidak sulit disiapkan, tidak memerlukan perubahan pada image Docker. | Cepat saat Anda menggunakan pengoptimalan jaringan. | Satu salinan di Cloud Storage. |
| Image container | Cepat. Image yang berisi model besar akan memerlukan waktu lebih lama untuk diimpor ke Cloud Run. | Anda harus membuat image baru setiap kali ingin menggunakan model yang berbeda. Perubahan pada image container akan memerlukan deployment ulang, yang mungkin lambat untuk image besar. | Bergantung pada ukuran model. Untuk model yang sangat besar, gunakan Cloud Storage untuk performa yang lebih dapat diprediksi tetapi lebih lambat. | Berpotensi memiliki beberapa salinan di Artifact Registry. |
| Internet | Lambat. Model didownload selama waktu mulai container. | Biasanya lebih sederhana (banyak framework mendownload model dari repositori pusat). | Biasanya buruk dan tidak dapat diprediksi:
|
Bergantung pada penyedia hosting model. |
Menyimpan model di Cloud Storage
Untuk mengoptimalkan pemuatan model ML saat memuat model ML dari Cloud Storage,
baik menggunakan pemasangan volume Cloud Storage
maupun langsung menggunakan Cloud Storage API atau command line, Anda harus menggunakan VPC Langsung dengan
nilai setelan keluar yang ditetapkan ke all-traffic, bersama dengan Akses Google Pribadi.
Dengan biaya tambahan, penggunaan Cache Cepat dapat mengurangi latensi pemuatan model dengan melakukan caching data secara efisien di SSD untuk pembacaan yang lebih cepat.
Untuk mengurangi waktu pembacaan model, coba opsi pemasangan berikut untuk mengaktifkan fitur Cloud Storage FUSE:
cache-dir: Aktifkan fitur caching file dengan pemasangan volume dalam memori untuk digunakan sebagai direktori dasar untuk mempertahankan file. Tetapkan nilai opsi pemasangancache-dirke nama volume dalam memori dalam format,cr-volume:{volume name}. Misalnya, jika Anda memiliki volume dalam memori bernamain-memory-1yang ingin digunakan sebagai direktori cache, tentukancr-volume:in-memory-1. Jika nilai ini ditetapkan, Anda juga dapat menetapkanfile-cacheflag lainnya yang tersedia untuk dikonfigurasi untuk cache.enable-buffered-read: Tetapkan kolomenable-buffered-readketrueuntuk pengambilan data awal asinkron dari bagian objek Cloud Storage ke dalam buffer dalam memori. Hal ini memungkinkan pembacaan berikutnya untuk disajikan dari buffer, bukan memerlukan panggilan jaringan. Saat mengonfigurasi kolom ini, Anda juga dapat menetapkan kolomread-global-max-blocksuntuk mengonfigurasi jumlah maksimum blok yang tersedia untuk pembacaan yang di-buffer di semua pengendali file.
Jika cache-dir dan enable-buffered-read digunakan, cache-dir akan diprioritaskan. Perhatikan bahwa mengaktifkan salah satu fitur ini akan mengubah akuntansi resource dari proses Cloud Storage FUSE yang akan dihitung dalam batas memori container. Pertimbangkan untuk menaikkan batas memori container dengan mengikuti petunjuk tentang cara mengonfigurasi batas memori.
Menyimpan model di image container
Dengan menyimpan model ML di image container, pemuatan model akan mendapatkan manfaat dari infrastruktur streaming container Cloud Run yang dioptimalkan. Namun, membangun image container yang menyertakan model ML adalah proses yang menggunakan banyak resource, terutama saat menggunakan model besar. Secara khusus, proses build dapat menjadi bottleneck pada throughput jaringan. Saat menggunakan Cloud Build, sebaiknya gunakan mesin build yang lebih canggih dengan peningkatan performa komputasi dan jaringan. Untuk melakukannya, buat image menggunakan file konfigurasi build yang memiliki langkah-langkah berikut:
steps: - name: 'gcr.io/cloud-builders/docker' args: ['build', '-t', 'IMAGE', '.'] - name: 'gcr.io/cloud-builders/docker' args: ['push', 'IMAGE'] images: - IMAGE options: machineType: 'E2_HIGHCPU_32' diskSizeGb: '500'
Anda dapat membuat satu salinan model per image jika lapisan yang berisi model berbeda antar-image (hash yang berbeda). Mungkin ada biaya Artifact Registry tambahan karena mungkin ada satu salinan model per image jika lapisan model Anda unik di setiap image.
Memuat model dari internet
Untuk mengoptimalkan pemuatan model ML dari internet, arahkan semua traffic melalui
jaringan VPC dengan nilai setelan keluar
yang ditetapkan ke all-traffic dan siapkan Cloud NAT untuk menjangkau internet publik dengan bandwidth tinggi.
Pertimbangan desain build, deployment, runtime, dan sistem
Bagian berikut menjelaskan pertimbangan untuk desain build, deployment, runtime, dan sistem.
Pada waktu build
Daftar berikut menunjukkan pertimbangan yang perlu Anda perhatikan saat merencanakan build:
- Pilih image dasar yang tepat. Anda harus memulai dengan image dari Deep Learning Containers atau container registry NVIDIA untuk framework ML yang Anda gunakan. Image ini telah diinstal dengan paket terkait performa terbaru. Sebaiknya jangan membuat image kustom.
- Pilih model kuantisasi 4 bit untuk memaksimalkan konkurensi kecuali jika Anda dapat membuktikan bahwa model tersebut memengaruhi kualitas hasil. Kuantisasi menghasilkan model yang lebih kecil dan lebih cepat, sehingga mengurangi jumlah memori GPU yang dibutuhkan untuk menyajikan model, dan dapat meningkatkan paralelisme pada waktu eksekusi. Idealnya, model harus dilatih pada kedalaman bit target, bukan dikuantisasi ke kedalaman bit target.
- Pilih format model dengan waktu pemuatan yang cepat untuk meminimalkan waktu mulai container, seperti GGUF. Format ini lebih akurat mencerminkan jenis kuantisasi target dan memerlukan lebih sedikit transformasi saat dimuat ke GPU. Untuk alasan keamanan, jangan gunakan checkpoint format pickle.
- Buat dan inisialisasi cache LLM pada waktu build. Mulai LLM di mesin build saat membangun image Docker. Aktifkan caching perintah dan berikan perintah umum atau contoh perintah untuk membantu menginisialisasi cache agar siap digunakan di dunia nyata. Simpan output yang dihasilkan untuk dimuat saat runtime.
- Simpan model inferensi Anda sendiri yang Anda buat selama waktu build. Tindakan ini menghemat banyak waktu dibandingkan dengan memuat model yang disimpan secara kurang efisien dan menerapkan transformasi seperti kuantisasi saat container dimulai.
Saat deployment
Daftar berikut menunjukkan pertimbangan yang perlu Anda perhatikan saat merencanakan deployment:
- Tetapkan waktu tunggu tugas selama satu jam atau kurang untuk eksekusi tugas.
- Jika Anda menjalankan tugas paralel dalam eksekusi tugas, tentukan dan tetapkan paralelisme ke kurang dari kuota GPU tanpa redundansi zona yang dialokasikan untuk project Anda. Untuk meminta penambahan kuota, lihat Cara menambah kuota. Tugas GPU dimulai secepat mungkin, dan mencapai maksimum yang bervariasi bergantung pada jumlah kuota GPU yang Anda alokasikan untuk project dan region yang dipilih. Deployment akan gagal jika Anda menetapkan paralelisme ke lebih dari batas kuota GPU.
Saat runtime
- Kelola jendela konteks yang didukung secara aktif. Makin kecil jendela konteks yang Anda dukung, makin banyak kueri yang dapat Anda dukung untuk berjalan secara paralel. Detail cara melakukannya bergantung pada framework.
- Gunakan cache LLM yang Anda buat pada waktu build. Berikan flag yang sama yang Anda gunakan selama waktu build saat Anda membuat cache perintah dan awalan.
- Muat dari model tersimpan yang baru saja Anda tulis. Lihat Trade-off menyimpan dan memuat model untuk perbandingan cara memuat model.
- Pertimbangkan untuk menggunakan cache nilai kunci terkuantisasi jika framework Anda mendukungnya. Hal ini dapat mengurangi persyaratan memori per kueri dan memungkinkan konfigurasi paralelisme yang lebih banyak. Namun, hal ini juga dapat memengaruhi kualitas.
- Sesuaikan jumlah memori GPU yang akan dicadangkan untuk bobot, aktivasi, dan cache nilai kunci model. Tetapkan setinggi mungkin tanpa mendapatkan error kehabisan memori.
- Periksa apakah framework Anda memiliki opsi untuk meningkatkan performa startup container (misalnya, menggunakan paralelisme pemuatan model).
Di tingkat desain sistem
- Tambahkan cache semantik jika sesuai. Dalam beberapa kasus, melakukan caching seluruh kueri dan respons dapat menjadi cara yang bagus untuk membatasi biaya kueri umum.
- Kontrol varians dalam pembukaan Anda. Cache perintah hanya berguna jika berisi perintah secara berurutan. Cache secara efektif di-cache dengan awalan. Penyisipan atau pengeditan dalam urutan berarti bahwa perintah tersebut tidak di-cache atau hanya sebagian yang ada.