Beranda Panduan Artikel Tentang

Menyiapkan memori untuk model bahasa lokal dan dokumen panjang

Ukuran berkas model belum mencakup seluruh kebutuhan memori. Pahami cache KV, panjang konteks, kuantisasi, dan pembagian kerja CPU serta GPU.

Isi artikel
  1. Bobot membutuhkan format, bukan hanya jumlah parameter
  2. Baca angka pemakaian dengan benar
  3. Percakapan memiliki cache sendiri
  4. Pengguna bersamaan mengubah alokasi
  5. Presisi cache perlu keputusan tersendiri
  6. Periksa kapasitas RAM dan waktu penyelesaian setelah memindahkan data ke CPU
  7. Tentukan laporan yang benar-benar akan diproses
  8. Sumber

Sebelum memasukkan laporan ke asisten lokal, Anda membuka daftar berkas model dan memeriksa ukurannya. Ukuran unduhannya mungkin terlihat cukup kecil untuk memori yang tersedia. Namun, teks yang sedang diproses juga membutuhkan ruang. Inferensi menyimpan hasil perhitungan perhatian dan memakai alokasi kerja di luar bobot model.12

Karena itu, uji kapasitas perlu berlangsung sampai jawaban selesai. Penjelasan berikut bersumber dari dokumentasi resmi, tanpa hasil pengujian perangkat keras sendiri. Tujuannya membantu menentukan apa yang perlu diamati pada pekerjaan Anda.

Bobot membutuhkan format, bukan hanya jumlah parameter

Bobot menyimpan parameter hasil pelatihan. Kuantisasi mengurangi presisi penyimpanannya untuk menekan kebutuhan memori, sambil berusaha mempertahankan akurasi. Maka jumlah parameter perlu disertai format dan berkas yang akan digunakan sebelum dijadikan dasar perkiraan.3

Untuk bobot saja, jumlah parameter dikali bit per bobot lalu dibagi delapan menghasilkan perkiraan byte. Asumsinya ketat: semua parameter memakai presisi yang sama dan tersimpan rapat. Dalam praktiknya, metode kuantisasi dapat menyimpan konstanta tambahan dan mempertahankan modul tertentu pada presisi lain. Laporan program dan berkas aktual diperlukan untuk memperbaiki perkiraan itu.34

Anggaran selama inferensi juga mencakup cache KV, ruang perhitungan sementara, serta alokasi lingkungan eksekusi. Aplikasi lain perlu jatah tersendiri. Pembagian ini merupakan perkiraan perencanaan, bukan rumus universal; lokasi penyimpanan dan cara memuat model memengaruhi penggunaan serta puncaknya.152

Baca angka pemakaian dengan benar

Pada PyTorch dengan CUDA, memori tensor aktif dan memori yang dikelola allocator cache merupakan ukuran berbeda. memory_allocated() menunjukkan alokasi tensor, sementara memory_reserved() menunjukkan ruang yang dikelola allocator. Tersedia pula pencatat nilai puncak. Ruang cadangan yang belum digunakan dapat tetap terlihat terpakai di nvidia-smi.5

Memori tensor aktif termasuk dalam total memori yang dikelola allocator. Karena itu, kedua angka tersebut tidak boleh dijumlahkan sebagai kebutuhan memori yang terpisah. empty_cache() membebaskan blok cache yang tidak digunakan; tensor aktif tetap berada di memori. Memanggilnya tidak menghapus bobot atau cache KV yang masih diperlukan.5

Fungsi tersebut milik PyTorch. Jika memakai llama.cpp, lihat laporan lingkungan itu sendiri. Kebutuhan inisialisasi dan ruang kerja juga perlu diamati, bukan diberi tambahan persentase seragam untuk semua program.62

Percakapan memiliki cache sendiri

Transformer autoregresif menghasilkan token berikutnya menggunakan konteks sebelumnya. Cache KV menyimpan key dan value dari lapisan perhatian untuk token yang sudah diproses. Hasil itu dipakai kembali agar perhitungan yang sama tidak diulang. Keadaan ini terkait permintaan, terpisah dari bobot hasil pelatihan.1

Cache dinamis tumbuh selama jawaban dihasilkan. Cache statis memesan ukuran maksimum lebih awal, sehingga percakapan pendek dapat tetap memiliki alokasi besar. Lapisan dengan perhatian berjendela geser atau berbentuk blok memiliki batas pertumbuhan sesuai mekanismenya. Perilaku suatu arsitektur tidak otomatis berlaku pada model lain.7

Untuk cache perhatian penuh yang lazim, perkiraan mempertimbangkan token tersimpan, urutan yang diproses bersamaan, jumlah lapisan, kepala KV, dimensi kepala, dan presisi cache. Jumlah parameter tidak menentukan seluruh unsur tersebut. Pertahankan model serta presisi ketika ingin melihat pengaruh panjang teks.17

Pengguna bersamaan mengubah alokasi

Ollama menjelaskan bahwa konteks lebih panjang memerlukan lebih banyak memori. Pemrosesan permintaan paralel pada model yang sama juga meningkatkan alokasi konteks. Bobot dapat dipakai bersama, sedangkan permintaan aktif tetap memerlukan keadaannya masing-masing. Mengalikan ukuran berkas dengan jumlah pengguna tidak cukup menjelaskan kondisi tersebut.89

Untuk penggunaan pribadi, mulai dengan permintaan berurutan. Jika asisten akan dipakai bersama, lanjutkan dengan beberapa pekerjaan panjang yang waktunya bertumpang tindih. Bedakan permintaan aktif dari yang masih mengantre. Ollama menyediakan pengaturan berbeda untuk paralelisme dan antrean.8

Batas yang dipilih sebaiknya mengikuti pekerjaan yang memang dibutuhkan. Jangan menjadikan kapasitas saat menganggur sebagai janji untuk penggunaan bersama. Ulangi masukan representatif pada tingkat paralelisme yang direncanakan.8

Presisi cache perlu keputusan tersendiri

Berkas bobot yang dikuantisasi tidak menentukan presisi cache KV. llama.cpp menyediakan pengaturan terpisah untuk tipe cache key dan value. Ollama juga mendokumentasikan pilihan kuantisasi cache. Periksa dukungan pada backend yang sedang dipakai sebelum mengubahnya.86

Penghematan memori perlu dibandingkan dengan hasil jawaban. Menurut Ollama, dampak kuantisasi cache pada kualitas bergantung pada model dan tugas. Gunakan laporan yang sama untuk memeriksa rincian yang terlewat atau format yang salah. Ubah satu pengaturan presisi setiap kali agar penyebab perubahan lebih mudah diketahui.8

Kuantisasi cache juga tidak selalu mempercepat respons. Dokumentasi Transformers memperingatkan bahwa latensi bisa memburuk pada konteks pendek bila memori GPU sebenarnya sudah cukup. Terapkan setelah mengetahui batas yang ingin diatasi, lalu ukur kembali pekerjaan yang sama.7

Periksa kapasitas RAM dan waktu penyelesaian setelah memindahkan data ke CPU

llama.cpp memungkinkan pembatasan jumlah lapisan yang disimpan di VRAM. Transformers memiliki mekanisme pemindahan cache yang menempatkan sebagian besar cache lapisan di CPU dan mengambilnya saat diperlukan. Catat apakah yang dipindahkan bobot atau cache karena keduanya berbeda.76

Hitung RAM sistem dan VRAM khusus secara terpisah. Pemindahan cache dapat mengurangi laju generasi karena adanya transfer. Dokumentasi tidak memberikan faktor perlambatan yang berlaku untuk semua perangkat. Gunakan waktu penyelesaian tugas sendiri untuk menentukan apakah pengaturan itu masih nyaman.72

Keadaan yang diamatiBagian yang perlu diperiksaPerbandingan berikutnya
Gagal saat memuatBobot, penempatan, puncak pemuatan2Berkas lebih kecil, pengaturan lain sama
Gagal dengan laporan panjangAlokasi konteks dan cache KV79Konteks lebih pendek, model sama
Gagal ketika permintaan bertumpukAlokasi untuk permintaan paralel8Tugas yang sama secara berurutan
Penggunaan memori GPU tetap tinggi setelah respons selesaiTensor aktif dan cadangan PyTorch5Bandingkan allocated serta reserved
Terlalu lambat setelah pindah ke CPUTransfer dan eksekusi72Ubah penempatan saja

Tabel ini memberikan dugaan awal, bukan diagnosis pasti. Simpan versi model dan program, konteks, presisi cache, penempatan, serta jumlah permintaan aktif. Amati pemuatan, pemrosesan masukan, dan generasi karena alokasinya berbeda.12

Pertahankan laporan contoh itu setelah konfigurasi dipilih. Saat mengganti model atau memperbarui program, jalankan lagi tugas yang sama dan periksa kualitas jawaban serta waktu penyelesaiannya.

Tentukan laporan yang benar-benar akan diproses

Simpan contoh laporan beserta instruksi dan riwayat percakapan yang diperlukan. Sisakan kapasitas konteks untuk jawaban. Token yang sudah diproses menjadi bagian dari keadaan yang dipertahankan selama generasi, sehingga ukuran teks masukan saja belum menggambarkan seluruh kebutuhan.19

Pada Ollama, ollama ps memperlihatkan konteks yang dialokasikan serta pembagian CPU/GPU. Tetapkan panjang konteks secara eksplisit saat membandingkan pengaturan. FAQ dan panduan konteks saat ini menjelaskan nilai bawaan yang berbeda, sehingga pengaturan aktual lebih cocok dijadikan catatan pembanding.89

Tentukan pula jawaban seperti apa yang dianggap memadai. Untuk membaca laporan, misalnya, siapkan beberapa rincian yang bisa diperiksa langsung. Ini usulan cara evaluasi, bukan klaim tingkat akurasi model tertentu.

Sumber

Footnotes

  1. Hugging Face Transformers — Penjelasan asli berbahasa Inggris tentang cache KV dan dimensi tensor: https://huggingface.co/docs/transformers/en/cache_explanation ↩ ↩2 ↩3 ↩4 ↩5 ↩6

  2. Hugging Face Accelerate — Pemuatan, pembagian perangkat, dan memori eksekusi; sumber Inggris: https://huggingface.co/docs/accelerate/en/concept_guides/big_model_inference ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7

  3. Hugging Face Transformers — Dokumen resmi berbahasa Inggris tentang kuantisasi dan akurasi: https://huggingface.co/docs/transformers/en/quantization/overview ↩ ↩2

  4. Hugging Face bitsandbytes — Konstanta kuantisasi dan perbedaan presisi modul; sumber Inggris: https://huggingface.co/docs/transformers/en/quantization/bitsandbytes ↩

  5. PyTorch CUDA — Alokasi tensor, cadangan, nilai puncak, dan pembebasan cache; sumber Inggris: https://docs.pytorch.org/docs/2.14/notes/cuda.html ↩ ↩2 ↩3 ↩4

  6. llama.cpp server — Dokumentasi resmi pengaturan lapisan GPU dan tipe cache: https://github.com/ggml-org/llama.cpp/blob/master/tools/server/README.md ↩ ↩2 ↩3

  7. Hugging Face Transformers — Cache dinamis, statis, terkuantisasi, dan pemindahan ke CPU; sumber Inggris: https://huggingface.co/docs/transformers/en/kv_cache ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7

  8. Ollama FAQ — Paralelisme, antrean, penempatan, dan kuantisasi cache; dokumen resmi Inggris: https://docs.ollama.com/faq ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7

  9. Ollama — Panjang konteks dan pemeriksaan alokasi; dokumen resmi Inggris: https://docs.ollama.com/context-length ↩ ↩2 ↩3 ↩4