GPU untuk riset ML · Pembayaran kripto tanpa KYC
IteraGPU
Memori inferensi · Konteks dan konkurensi

Berapa banyak memori yang harus dialokasikan untuk cache KV?

Untuk cache padat yang seragam, hitung dua tensor, K dan V, untuk setiap lapisan, kepala KV, posisi yang disimpan, dan sekuens bersamaan. Gunakan format cache yang sebenarnya, bukan format bobot. Perhitungan ini memberi volume teoretis dari satu wadah memori; ia tidak memprediksi puncak total GPU, latensi, maupun kualitas jawaban. Setelah itu verifikasi strategi alokasi dengan beban kerja Anda.

01 /

Menjelaskan apa yang tetap tersimpan di memori

Selama generasi autoregresif, kunci dan nilai dari token yang telah diproses dapat disimpan untuk langkah berikutnya. Cache ini dimiliki oleh lapisan perhatian. Volumenya karena itu bergantung pada model dan riwayat yang disimpan, bukan hanya pada jumlah parameter. Konteks suatu percakapan juga mencakup instruksi, pesan sebelumnya, dan dokumen yang ditambahkan oleh aplikasi.

Keputusan pertama Anda bersifat operasional: berapa banyak sekuens yang harus tetap aktif, sampai panjang berapa? Antrean dua puluh permintaan dengan dua dieksekusi secara bersamaan tidak selalu berarti dua puluh cache residen. Catat penerimaan permintaan yang sebenarnya dan kemungkinan sekuens tambahan yang dibuat oleh generasi.

Siapkan lembar catatan berisi revisi model, lapisan perhatian, kepala KV, dimensi kunci dan nilai, dtype-nya, dan strategi cache. Hitung token setelah tokenizer dan templat percakapan. Batas dalam karakter tidak menggambarkan alokasi ini.

Sumber teknis: Hugging Face — cara kerja dan bentuk cache per lapisan

02 /

Menggunakan kepala KV, terutama dengan GQA

Jumlah kepala kueri Q dan jumlah kepala KV bisa berbeda. Pada perhatian multi-kepala klasik, keduanya sama. Dengan MQA, hanya satu kepala KV yang dibagikan; GQA mengelompokkan beberapa kepala Q di sekitar satu kepala KV. Bacalah num_key_value_heads dalam konfigurasi ketika bidang itu ada dan verifikasi maknanya untuk arsitektur tersebut.

Misalnya, empat puluh kepala Q dan delapan kepala KV membentuk lima kepala Q per grup KV. Rumus cache yang disimpan menggunakan delapan, bukan empat puluh. Rasio ini tidak menggambarkan seluruh memori attention: operasi atau konversi dapat menghasilkan variabel sementara.

Jangan sekadar mengubah angka ini untuk mengurangi kebutuhan memori model yang sudah dilatih. Skema attention merupakan bagian dari arsitekturnya. Dua model dengan jumlah kepala berbeda tidak menjadi varian yang setara hanya melalui perhitungan kapasitas; kualitasnya harus dievaluasi secara terpisah.

Sumber teknis: Hugging Face — bidang LlamaConfig dan perbedaan MHA, MQA, GQA · PyTorch — dimensi Q/K/V dan batasan attention GQA

03 /

Merumuskan rumus dan satuannya

Dalam kasus seragam, L adalah jumlah layer, Hkv jumlah kepala KV, D dimensinya, T jumlah posisi yang disimpan per sekuens, B jumlah sekuens, dan q jumlah byte per nilai. Faktor dua menghitung K dan V. Perkiraan ini mengasumsikan key dan value berdimensi serta berformat sama, tanpa kompresi maupun berbagi prefix.

Konversikan hanya hasil akhirnya: satu GiB sama dengan 1.073.741.824 byte; satu GB desimal sama dengan 1.000.000.000 byte. Simpan nilai dalam byte pada catatan Anda agar pembulatan atau perubahan satuan tidak menyembunyikan selisih.

Untuk panjang yang berbeda tanpa padding, gantikan B × T dengan jumlah posisi yang benar-benar disimpan. Untuk layer yang heterogen, lakukan penjumlahan layer per layer. Penyimpanan padat dengan padding, alokasi per blok, atau reservasi statis mengharuskan Anda menghitung slot yang dialokasikan, yang bisa melebihi token berguna.

KV teoretis (byte) = 2 × L × Hkv × D × T × B × q ; KV (GiB) = KV (byte) ÷ 1.073.741.824

Sumber teknis: Hugging Face — dimensi tensor cache · NIST — satuan desimal dan prefix biner

04 /

Contoh perhitungan: enam sekuens, tanpa pengukuran GPU

Ambil contoh arsitektur fiktif dengan empat puluh layer, delapan kepala KV, dan dimensi 128. Asumsikan cache seragam dengan dua byte per nilai. Setiap sekuens menerima paling banyak 3.072 token masukan dan reservasi untuk 1.024 token tambahan, sehingga batasnya 4.096 posisi. Ini adalah asumsi pedagogis, bukan konfigurasi model yang terverifikasi.

Biaya yang dihitung per posisi dan per sekuens adalah 2 × 40 × 8 × 128 × 2 = 163.840 byte. Sekuens dengan 4.096 posisi berarti 671.088.640 byte, yaitu 0,625 GiB. Enam sekuens menghasilkan 4.026.531.840 byte, yaitu 3,75 GiB hanya untuk cache.

Menggandakan panjang yang disimpan akan menggandakan pos ini dalam rumus ini. Mengganti delapan kepala KV dengan empat puluh akan mengalikannya dengan lima, dengan semua asumsi lain tidak berubah. Proporsi ini tidak menjanjikan percepatan, penurunan kualitas, maupun kompatibilitas dengan model nyata.

Aritmetika teoretis semata: L = 40, D = 128, q = 2 byte; bobot dan variabel sementara dikecualikan.
Sekuens BPosisi TKepala KVByte terhitungGiB
14 0968671 088 6400,625
64 09684 026 531 8403,75
68 19288 053 063 6807,5
64 0964020 132 659 20018,75
05 /

Menyesuaikan anggaran dengan strategi cache

Cache dinamis bertumbuh seiring posisi yang disimpan. Cache statis mereservasi kapasitas maksimum: ukurlah reservasi ini, bukan hanya permintaan pendek yang teramati saat awal. Untuk attention dengan jendela geser, sebagian layer dapat membatasi riwayatnya; layer dengan attention penuh memerlukan perhitungan tersendiri.

Kuantisasi cache dan pengalihannya ke CPU adalah strategi lain yang bergantung pada model dan perangkat lunak. Keduanya mengubah batasan penyimpanan, transfer, atau komputasi. Mengkuantisasi bobot tidak membuktikan bahwa cache memiliki format yang sama.

Catat kelas cache dan parameternya yang eksplisit. Periksa juga pelepasan slot setelah permintaan selesai atau dibatalkan. Untuk beban yang mencampur sekuens pendek dan panjang, reservasi maksimum yang seragam bisa lebih berat daripada sekadar jumlah konten berguna.

Sumber teknis: Hugging Face — cache dinamis, statis, terkuantisasi, dan dialihkan

06 /

Memverifikasi beban representatif secara bertahap

Susun tiga kasus: masukan biasa, masukan panjang yang diharapkan, dan jumlah maksimum permintaan simultan yang diizinkan. Tetapkan model, tokenizer, templat, batas generasi, dan aturan penghentian. Ubah satu dimensi dalam satu waktu; respons yang dipersingkat atau dokumen yang terpotong akan mengubah pekerjaan yang dilakukan.

Catat secara terpisah pemuatan, pemrosesan awal input, dan generasi. Sinkronkan device di sekitar fase yang diukur waktunya, pertahankan level memori awal dan puncaknya. Metode memori menjelaskan mengapa allocated dan reserved tidak dijumlahkan dan mengapa selisih nilai maksimumnya tidak mengisolasi cache.

Kontrol Anda harus menghasilkan batas yang teruji dan output yang dapat diterima: ID permintaan yang selesai, error, panjang yang dihasilkan, dan kriteria kualitas. Peluncuran yang bertahan pada input pendek tidak memvalidasi konkurensi maksimum. Error memori sebelum selesai bukanlah pengukuran kebutuhan eksekusi penuh.

Sumber teknis: PyTorch — sinkronisasi pekerjaan pada device yang dipilih · PyTorch — cakupan penghitung memori

07 /

Singkirkan error yang mendistorsi pilihan

Jangan mengubah cache yang dihitung menjadi kapasitas GPU total. Tambahkan analisis bobot, aktivasi sementara, output yang disimpan, dan perangkat lunak. Jangan pula membagi volume ini secara otomatis dengan jumlah kartu: penempatan layer atau head harus benar-benar dikonfigurasi dan diverifikasi pada setiap device.

Notebook IteraGPU Lab adalah latihan instrumentasi pada jaringan dense kecil tanpa attention. Ini membantu membaca fase memori; parameter context-nya tidak memvalidasi perhitungan KV ini. Gunakan lembar beban dan folder inferensi untuk mempersiapkan uji model Anda sendiri.

Bandingkan kapasitas penawaran hanya setelah membedakan volume aritmetika, maksimum yang benar-benar teramati, dan kasus yang belum diuji. Paket sewa mengatur jendela kerja Anda; ini tidak menjamin panjang konteks maupun laju generasi apa pun.

  • Mencampur head Q dan head KV: ambil kembali konfigurasi arsitekturnya.
  • Hanya menganggarkan prompt: sertakan generasi dan reservasi efektif.
  • Membaca "bobot 4 bit" sebagai "cache 4 bit": catat kedua formatnya.
  • Melupakan konkurensi: hitung sekuens yang benar-benar residen.
  • Menjanjikan memori bersama antar kartu: verifikasi penempatan sebenarnya.

Pertanyaan praktis

Bisakah saya mengetahui cache KV hanya dari jumlah parameter?

Tidak. Diperlukan juga arsitektur layer attention, head KV, dimensinya, format cache, posisi yang disimpan, dan sekuens residen. Dua model berukuran mirip bisa membutuhkan anggaran KV yang berbeda.

Apakah cache statis hanya mengonsumsi panjang permintaan saya?

Kapasitas yang direservasi harus diperhitungkan. Permintaan pendek tidak memungkinkan menyimpulkan alokasi maksimum ini. Catat parameter cache dan ukur konfigurasi yang benar-benar dibuat.

Apakah hasil rumusnya cukup untuk memilih kartu?

Rumus itu hanya mengestimasi cache berdasarkan asumsi yang dinyatakan. Pilihan juga harus mempertimbangkan pos memori lain, kompatibilitas perangkat lunak, dan uji lengkap dengan konteks, konkurensi, dan kualitas yang representatif.