- Gunakan model yang dimuat dengan cepat dan memerlukan transformasi minimal ke dalam struktur yang siap GPU, dan optimalkan cara pemuatannya.
- Gunakan konfigurasi yang memungkinkan eksekusi serentak yang efisien dan maksimal untuk mengurangi jumlah GPU yang diperlukan untuk melayani target permintaan per detik sekaligus menekan biaya.
Cara yang direkomendasikan untuk memuat model ML besar di Cloud Run
Google merekomendasikan untuk menyimpan model ML di dalam image container atau mengoptimalkan pemuatannya dari Cloud Storage.
Pertimbangan menyimpan dan memuat model ML
Berikut perbandingan opsinya:
Lokasi model | Waktu deployment | Pengalaman pengembangan | Waktu startup penampung | Biaya penyimpanan |
Image container | Lambat. Image yang berisi model besar akan membutuhkan waktu lebih lama untuk diimpor ke Cloud Run. | Perubahan pada image container akan memerlukan deployment ulang, yang mungkin lambat untuk gambar berukuran 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. |
Cloud Storage, dimuat menggunakan pemasangan volume Cloud Storage FUSE | Cepat. Model didownload selama startup container. | Tidak sulit disiapkan, tidak memerlukan perubahan pada image Docker. | Cepat saat Anda menggunakan pengoptimalan jaringan. Tidak melakukan download secara paralel. | Satu salinan di Cloud Storage. |
Cloud Storage, didownload secara bersamaan menggunakan perintah Google Cloud CLI gcloud storage cp atau Cloud Storage API seperti yang ditunjukkan dalam contoh kode download serentak pengelola transfer.
|
Cepat. Model didownload selama startup container. | Sedikit lebih sulit untuk disiapkan, karena Anda harus menginstal Google Cloud CLI di image atau memperbarui kode untuk menggunakan Cloud Storage API. | Cepat saat Anda menggunakan pengoptimalan jaringan. Google Cloud CLI mendownload file model secara paralel, sehingga lebih cepat daripada pemasangan FUSE. | Satu salinan di Cloud Storage. |
Internet | Cepat. Model didownload selama startup container. | Biasanya lebih sederhana (banyak framework mendownload model dari repositori pusat). | Biasanya buruk dan tidak dapat diprediksi:
|
Bergantung pada penyedia hosting model. |
Menyimpan model dalam image container
Dengan menyimpan model ML dalam image container, pemuatan model akan memanfaatkan infrastruktur streaming container yang dioptimalkan Cloud Run. Namun, membangun image container yang menyertakan model ML adalah proses yang membutuhkan banyak resource, terutama saat bekerja dengan model besar. Khususnya, proses build dapat menjadi terhambat oleh 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 gambar jika lapisan yang berisi model berbeda di antara gambar (hash yang berbeda). Mungkin ada biaya tambahan Artifact Registry karena mungkin ada satu salinan model per gambar jika lapisan model Anda unik di setiap gambar.
Menyimpan model di Cloud Storage
Untuk mengoptimalkan pemuatan model ML saat memuat model ML dari Cloud Storage, baik menggunakan pemasangan volume Cloud Storage atau langsung menggunakan Cloud Storage API atau command line, Anda harus menggunakan Direct VPC dengan nilai setelan keluar ditetapkan ke all-traffic
, bersama dengan Akses Google Pribadi.
Memuat model dari internet
Untuk mengoptimalkan pemuatan model ML dari internet, rutekan semua traffic melalui
jaringan VPC dengan nilai setelan traffic keluar
yang ditetapkan ke all-traffic
dan siapkan Cloud NAT untuk menjangkau internet publik dengan bandwidth tinggi.
Pertimbangan build, deployment, runtime, dan desain sistem
Bagian berikut menjelaskan pertimbangan untuk build, deployment, runtime, dan desain sistem.
Pada waktu build
Daftar berikut menunjukkan pertimbangan yang perlu Anda perhatikan saat Anda merencanakan pembangunan:
- Pilih gambar dasar yang bagus. Anda harus memulai dengan image dari Deep Learning Containers atau NVIDIA container registry untuk framework ML yang Anda gunakan. Image ini telah menginstal paket terkait performa terbaru. Sebaiknya jangan membuat image kustom.
- Pilih model terkuantisasi 4-bit untuk memaksimalkan serentak, kecuali jika Anda dapat membuktikan bahwa model tersebut memengaruhi kualitas hasil. Kuantisasi menghasilkan model yang lebih kecil dan lebih cepat, mengurangi jumlah memori GPU yang diperlukan untuk menayangkan model, dan dapat meningkatkan paralelisme saat runtime. Idealnya, model harus dilatih pada kedalaman bit target, bukan dikuantisasi ke bawah.
- Pilih format model dengan waktu pemuatan yang cepat untuk meminimalkan waktu startup container, seperti GGUF. Format ini mencerminkan jenis kuantisasi target secara lebih akurat dan memerlukan lebih sedikit transformasi saat dimuat ke GPU. Untuk alasan keamanan, jangan gunakan checkpoint format pickle.
- Membuat dan memanaskan cache LLM pada waktu build. Mulai LLM di mesin build saat membangun image docker. Aktifkan penyimpanan cache perintah dan masukkan perintah umum atau contoh untuk membantu memanaskan cache untuk penggunaan di dunia nyata. Simpan output yang dihasilkan untuk dimuat saat runtime.
- Simpan model inferensi Anda sendiri yang Anda buat selama waktu build. Hal ini menghemat waktu yang signifikan dibandingkan dengan memuat model yang disimpan secara kurang efisien dan menerapkan transformasi seperti kuantisasi saat startup penampung.
Saat deployment
Daftar berikut menunjukkan pertimbangan yang perlu Anda perhatikan saat merencanakan deployment:
- Tetapkan waktu tunggu tugas satu jam atau kurang untuk eksekusi tugas.
- Jika Anda menjalankan tugas paralel dalam eksekusi tugas, tentukan dan tetapkan paralelisme ke kurang dari nilai terendah batas kuota yang berlaku yang Anda alokasikan untuk project Anda. Secara default, kuota instance tugas GPU ditetapkan ke
5
untuk tugas yang berjalan secara paralel. 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 menyetel paralelisme ke lebih dari batas kuota GPU.
Pada waktu proses
- Mengelola panjang konteks yang didukung secara aktif. Makin kecil jendela konteks yang Anda dukung, makin banyak kueri yang dapat Anda dukung untuk dijalankan secara paralel. Detail cara melakukannya bergantung pada framework.
- Gunakan cache LLM yang Anda buat pada waktu build. Berikan tanda 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 Kompromi penyimpanan dan pemuatan model untuk mengetahui perbandingan cara memuat model.
- Pertimbangkan untuk menggunakan cache nilai kunci yang dikuantisasi jika framework Anda mendukungnya. Hal ini dapat mengurangi persyaratan memori per-kueri dan memungkinkan konfigurasi lebih banyak paralelisme. Namun, hal ini juga dapat memengaruhi kualitas.
- Sesuaikan jumlah memori GPU yang akan dicadangkan untuk bobot model, aktivasi, dan cache key-value. Tetapkan setinggi mungkin tanpa mendapatkan error kehabisan memori.
- Periksa apakah framework Anda memiliki opsi untuk meningkatkan performa startup penampung (misalnya, menggunakan paralelisasi pemuatan model).
Di tingkat desain sistem
- Tambahkan cache semantik jika sesuai. Dalam beberapa kasus, menyimpan cache seluruh kueri dan respons dapat menjadi cara yang bagus untuk membatasi biaya kueri umum.
- Mengontrol varians dalam pembukaan Anda. Cache perintah hanya berguna jika berisi perintah secara berurutan. Cache di-cache secara efektif berdasarkan awalan. Penyisipan atau pengeditan dalam urutan berarti bahwa item tersebut tidak di-cache atau hanya ada sebagian.