Kalau kamu ingin menjalankan model AI sendiri, ukuran berkas unduhan belum cukup untuk menebak perangkat yang dibutuhkan. Berkas beberapa gigabyte belum tentu cukup dijalankan dengan memori kartu grafis, atau VRAM, sebesar itu. Model dengan lebih banyak parameter juga belum tentu lebih cocok untuk tugas redaksi kamu.
Saat menghasilkan jawaban, proses yang disebut inference, model membutuhkan ruang selain angka hasil pelatihan atau bobotnya. Ada simpanan hasil perhitungan perhatian atau KV cache, nilai perhitungan sementara atau aktivasi, dan ruang kerja operasi perangkat atau kernel. Menangani beberapa permintaan bersamaan juga membutuhkan ruang.
Panduan ini membantu kamu membuat perkiraan awal lalu mengujinya. Semua angka konfigurasi di sini adalah simulasi untuk memahami kebutuhan memori. Angka itu tidak menjanjikan kinerja model tertentu atau menjadi saran membeli perangkat.
Periksa seluruh paket model
Model datang bersama beberapa bagian: bobot, pemecah teks menjadi satuan kecil atau tokenizer, dan pengaturan susunan model atau arsitektur. Ada juga pola penyusunan percakapan atau chat template, serta lembar keterangan atau model card. Tokenizer atau template yang berbeda dapat mengubah masukan yang benar-benar diterima model.
Simpan penanda versi paket, baik revision maupun penanda perubahan commit, agar percobaan bisa diulang. Dokumentasi model card Hugging Face menjelaskan tempat mencatat penggunaan, batas, dan informasi model. Baca juga lisensi yang menyertai paketnya.
Bobot yang bisa diunduh, sering diberi label open weights, belum berarti seluruh proses pengembangannya terbuka. Izin penggunaan, pembagian ulang, dan penyediaan layanan juga belum tentu sama. Untuk mengambil keputusan, catat bagian apa yang tersedia dan syarat yang berlaku pada masing-masing bagian.
Bobot bisa diperkecil, tetapi hasilnya perlu diuji
Bobot dapat disimpan dengan ketelitian angka yang lebih rendah untuk mengurangi kebutuhan ruang. Cara ini disebut kuantisasi. Bitsandbytes pada Transformers menyediakan jalurnya, termasuk operasi 8-bit dan 4-bit yang didukung.
Kecocokannya bergantung pada perangkat keras, perangkat lunak pelaksana atau backend, dan jenis model. Berhasil memuat pengaturan belum menjamin semua lapisan model memakai bentuk angka yang sama. Kuantisasi juga dapat membutuhkan catatan skala angka, perhitungan dengan ketelitian lain, dan kernel yang sesuai.
Jumlah parameter dikali jumlah bit hanya memberi perkiraan awal ukuran bobot. Pemakaian memori proses tetap harus diukur. Uji kualitas pada tugasmu sendiri, karena kesalahan kecil dalam format atau angka bisa lebih mengganggu redaksi daripada perubahan rata-rata di uji pembanding umum, atau benchmark.
Hitung bobot dan simpanan perhitungan secara terpisah
Contoh lokal dengan bahasa pemrograman Python ini menghitung perkiraan untuk arsitektur perhatian konvensional. KV cache diasumsikan tidak dikompresi, dan kode tidak memuat model. Ukuran hasil memakai gibibyte atau GiB, satuan memori berbasis biner:
def estimate_memory_gib(parameters, weight_bits, layers,
kv_heads, head_dim, tokens,
sequences, kv_bytes=2):
values = [parameters, weight_bits, layers, kv_heads,
head_dim, tokens, sequences, kv_bytes]
if any(type(value) is not int or value <= 0 for value in values):
raise ValueError("Semua parameter harus integer positif")
weights = parameters * weight_bits / 8
kv_cache = 2 * layers * kv_heads * head_dim * tokens * sequences * kv_bytes
gib = 2 ** 30
return {"weights_gib": weights / gib, "kv_gib": kv_cache / gib}
print(estimate_memory_gib(
parameters=8_000_000_000, weight_bits=4, layers=32,
kv_heads=8, head_dim=128, tokens=8192, sequences=4
))
Hasilnya sekitar 3,73 GiB untuk bobot teoritis dan 4 GiB untuk KV cache. Jumlah sekitar 7,73 GiB itu belum mencakup kebutuhan tambahan proses atau overhead. Jadi, hitungan ini belum membuktikan model akan muat pada kartu grafis atau GPU 8 GiB; GB desimal dan GiB biner pun berbeda satuan.
Dalam rumus ini, key dan value adalah dua bagian simpanan perhatian model. Perhitungannya mengalikan keduanya dengan jumlah lapisan, kelompok perhatian atau KV heads, ukuran tiap kelompok atau dimensi head, jumlah satuan teks atau token, rangkaian masukan atau sequence, dan byte per elemen. Pakai susunan model yang sebenarnya, karena jumlah parameter saja tidak cukup untuk menebaknya.
Alokasi nyata bisa berubah karena arsitektur dan pembatasan perhatian ke bagian terdekat, atau sliding window. Pemampatan data, pembagian memori ke halaman atau paging, serta pembagian kerja antarperangkat juga dapat mengubahnya. Karena itu, hasil rumus tetap perlu dibandingkan dengan pengukuran.
Panjang masukan dan jumlah pengguna ikut menentukan
Dokumentasi vLLM menjelaskan cara mengendalikan memori dengan membatasi panjang konteks dan jumlah sequence. Konteks adalah masukan yang dapat ditangani model dalam satu pekerjaan. Menurunkan batasnya bisa membantu kapasitas, tetapi juga membatasi tugas yang bisa diterima aplikasi.
Pisahkan panjang masukan, panjang jawaban, dan jumlah permintaan yang berjalan bersamaan, atau konkurensi. Satu pengguna dengan dokumen panjang bisa memakai sumber daya berbeda dari beberapa pengguna dengan pesan pendek. Antrean dan penjadwalan turut menentukan waktu tunggu atau latensi, di luar jumlah token per detik saat mesin penuh.
Tentukan apa yang terjadi bila dokumen melewati batas. Memotong bagian akhir diam-diam bisa membuang catatan penting. Sesuai janji aplikasi kepada pengguna, pilih penolakan yang jelas, pemecahan tugas, atau pengambilan bagian dokumen yang memang dibutuhkan.
Uji dengan pekerjaan yang benar-benar akan kamu lakukan
Ukur waktu hingga token pertama muncul, waktu hingga jawaban selesai, dan token per detik. Catat pula puncak memori dan kegagalan pada beberapa tingkat konkurensi. Jumlah keluaran per waktu atau throughput sulit dibandingkan jika ukuran masukan dan jawaban tidak dicatat.
| Hal yang diuji | Contoh percobaan |
|---|---|
| Kualitas | Rangkuman yang memuat tanggal, angka, dan syarat akses |
| Bentuk jawaban | Keluaran mengikuti aturan bentuk data JSON |
| Memori | Konteks pendek dan panjang saat konkurensi dinaikkan bertahap |
| Waktu tunggu | p50 untuk waktu tunggu di tengah; p95 untuk batas yang masih mencakup hampir semua permintaan; gunakan pekerjaan yang sama |
| Pemulihan | Kehabisan memori atau OOM, masukan terlalu panjang, dan proses yang dimulai ulang |
| Pengelolaan | Waktu menyiapkan, memantau, dan memulihkan layanan |
Catat juga antrean yang terlalu lama dan jawaban yang tidak lolos pemeriksaan. Konfigurasi yang sering kehabisan memori atau perlu dimulai ulang bisa kehilangan manfaat biaya komputasi yang tampak murah. Kasus berhasil saja belum cukup untuk menilainya.
Hitung pekerjaan merawat layanan
Biaya tidak berhenti pada harga GPU. Hitung tingkat pemakaian kapasitas atau utilisasi, waktu menganggur, penyimpanan paket model, pemantauan, pembaruan keamanan, dan tenaga pemeliharaan. Mengelola layanan sendiri memberi kendali yang berbeda sekaligus pekerjaan pengelolaan.
Bandingkan biaya per hasil yang benar-benar diterima pada beban nyata. Pekerjaan yang sedikit dan tidak teratur bisa didominasi biaya kapasitas menganggur. Pada beban stabil, penggabungan pekerjaan atau batching dapat membantu throughput sambil mengubah waktu tunggu.
Mulai dari hitungan, lalu periksa lewat pengukuran di lingkungan uji yang tersedia. Pakai kumpulan contoh acuan redaksi untuk menilai kualitas dan catatan biaya untuk membandingkan seluruh pekerjaan. Profil pemakaianmu yang menentukan hasilnya, bukan ukuran berkas atau biaya token saja.