Cara Kekalkan Model Ollama Dalam Memori RAM
Ollama memunggah model selepas 5 minit melahu yang menyebabkan kelewatan pada permintaan seterusnya. Gunakan tetapan keep_alive untuk memastikan model kekal aktif selamanya.
Mengapa Ollama memunggah model selepas beberapa minit?
Ollama mengekalkan model dalam memori selama lima minit selepas permintaan terakhir, kemudian membebaskannya. Permintaan seterusnya perlu membaca pemberat (weights) daripada cakera dan memetakannya semula ke dalam RAM atau VRAM, menyebabkan ia terhenti seketika sebelum token pertama tiba. Itulah sebabnya UI sembang atau ejen pengekodan terasa pantas, menjadi senyap seketika, kemudian terasa perlahan semula pada mesej berikutnya. Tiada apa-apa yang rosak. Pemasa melahu telah tamat tempoh.
Pemasa ini dipanggil keep_alive. Ia adalah bagi setiap model, dan ia bermula semula setiap kali sesuatu permintaan selesai. Model yang sedang menjawab permintaan tidak akan dipunggah, kerana pelayan hanya menamatkan tempoh model yang tidak mempunyai permintaan aktif. Setakat Ogos 2026, nilai lalai ialah lima minit, dan ia terpakai kepada setiap model yang dimuatkan oleh pelayan ini.
Terdapat dua tempat untuk menetapkan keep_alive: pada permintaan individu, atau sebagai nilai lalai pelayan. Fail drop-in systemd adalah perkara yang menjadikan nilai lalai pelayan kekal selepas but semula. Panduan ini mengandaikan Ollama sudah berjalan sebagai servis. Jika belum, mulakan dengan memasang Ollama pada VPS dan kembali semula ke sini.
Model manakah yang sedang dimuatkan sekarang, dan bilakah ia akan tamat tempoh?
ollama psNAME ID SIZE PROCESSOR CONTEXT UNTIL
qwen3:8b 500a1f067a9f 6.6 GB 100% GPU 4096 4 minutes from nowOutput kosong bermakna tiada apa-apa yang dimuatkan, jadi permintaan seterusnya akan menanggung beban muatan penuh. PROCESSOR memberitahu anda ke mana berat model dihantar. 100% GPU dan 100% CPU adalah kes yang jelas. Pembahagian seperti 25%/75% CPU/GPU bermakna model tidak muat dalam VRAM, jadi sebahagian daripadanya berjalan pada pemproses dan penjanaan menjadi lebih perlahan.
UNTIL ialah kiraan detik, dan ia mencetak masa relatif seperti 4 minutes from now. Ia mencetak Forever apabila model dimuatkan dengan keep_alive negatif. Ia mencetak Stopping... semasa tempoh singkat apabila pelayan sedang memunggah model.
Set lajur telah berubah antara keluaran, jadi baca pengepala dan bukannya mengira medan dalam skrip. Untuk sebarang automasi, tanya API:
curl -s http://localhost:11434/api/psSetiap entri membawa expires_at, iaitu cap masa mutlak seperti 2026-08-09T14:38:31.83753Z, dan size_vram, iaitu bahagian model tersebut yang berada dalam memori GPU. size_vram bernilai 0 bermakna model sedang berjalan pada CPU.
Kos sebenar muat semula
Jangan membuat andaian. Ollama melaporkan masa muat dalam setiap respons, sebagai load_duration, dalam unit nanosaat.
sudo apt install -y jq
ollama stop qwen3:8b
curl -s http://localhost:11434/api/generate -d '{"model": "qwen3:8b", "prompt": "hi", "stream": false}' | jq '{load_duration, total_duration}'
curl -s http://localhost:11434/api/generate -d '{"model": "qwen3:8b", "prompt": "hi", "stream": false}' | jq '{load_duration, total_duration}'Panggilan pertama memuatkan model, jadi load_duration miliknya adalah besar. Bahagikan dengan 1000000000 untuk membacanya dalam unit saat. Panggilan kedua berjalan semasa model berada dalam memori dan melaporkan angka yang jauh lebih kecil. Jurang antara kedua-dua angka tersebut adalah kos yang ditanggung oleh setiap pengguna sebaik sahaja pemasa tamat, dan ia merupakan sebab utama untuk menukar keep_alive. Kebanyakan jurang tersebut berpunca daripada bacaan cakera, jadi jika anda telah memindahkan direktori model ke volum kedua, kelajuan volum tersebut menetapkan had minimum bagi setiap muatan sejuk (cold load). Untuk kelajuan penjanaan di kedua-dua belah jeda tersebut, lihat cara mengukur token sesaat pada mesin anda sendiri.
Pastikan model Ollama kekal dimuatkan dalam memori pada satu permintaan
Hantarkan keep_alive bersama permintaan tersebut. Ia akan terpakai pada model itu sebaik sahaja permintaan selesai.
curl -s http://localhost:11434/api/chat -d '{
"model": "qwen3:8b",
"messages": [{"role": "user", "content": "hello"}],
"keep_alive": "30m"
}'Empat bentuk nilai diterima:
- rentetan tempoh:
"30m","24h","90s" - nombor biasa, dibaca sebagai saat:
3600 - nilai negatif,
-1atau"-1m", bermaksud tiada tamat masa melahu langsung 0, bermaksud nyahmuat sebaik sahaja permintaan ini selesai
Nilai pada permintaan akan mengatasi lalai pelayan, dalam kedua-dua arah. Ini lebih penting daripada kedengarannya: klien yang menghantar keep_alive sendiri akan mengatasi apa sahaja yang anda konfigurasi pada pelayan.
Anda juga boleh memuatkan model tanpa menjana apa-apa. Hantarkan nama model sahaja. Pelayan akan memuatkannya dan mengembalikan respons kosong dengan "done": true.
curl -s http://localhost:11434/api/generate -d '{"model": "qwen3:8b", "keep_alive": "30m"}'Itu adalah arahan untuk dijalankan selepas but semula, atau selepas menarik model baharu, supaya permintaan pengguna sebenar yang pertama tidak perlu menunggu proses pemuatan. CLI melakukan tugas yang sama dengan flag:
ollama run --keepalive 30m qwen3:8b "hello"Pastikan ia dimuatkan secara lalai dengan OLLAMA_KEEP_ALIVE
Pelayan membaca OLLAMA_KEEP_ALIVE semasa permulaan dan menggunakannya untuk setiap model yang tidak mempunyai nilai tersendiri. Ia menerima format yang sama seperti medan permintaan, jadi 30m, 3600 dan -1 semuanya berfungsi.
Masalahnya ialah persekitaran mana yang perlu memuatkan nilai tersebut. Menjalankan export OLLAMA_KEEP_ALIVE=30m dalam sesi SSH anda tidak akan memberikan kesan, kerana pemasangan pakej menjalankan pelayan sebagai perkhidmatan systemd di bawah penggunanya sendiri dengan persekitaran yang tersendiri. Shell log masuk anda dan perkhidmatan tersebut tidak berhubung antara satu sama lain. Ini adalah sebab paling biasa mengapa tetapan tersebut kelihatan tidak diendahkan.
Pastikan ia bertahan selepas but semula dengan drop-in systemd
sudo systemctl edit ollama.serviceEditor akan dibuka dengan dua penanda komen. Taip di antara kedua-duanya: systemd akan membuang sebarang kandungan yang anda tulis di bawah penanda kedua.
[Service]
Environment="OLLAMA_KEEP_ALIVE=30m"Tindakan menyimpan akan menulis /etc/systemd/system/ollama.service.d/override.conf. Ini merupakan fail drop-in dan bukannya suntingan pada unit asal, jadi naik taraf pakej Ollama yang menggantikan ollama.service tidak akan menjejaskan tetapan anda. Jika fail drop-in dan unit adalah perkara baharu bagi anda, panduan servis dan pemasa systemd merangkumi mekanismenya.
sudo systemctl daemon-reload
sudo systemctl restart ollama
systemctl show ollama --property=EnvironmentArahan terakhir akan memaparkan persekitaran yang akan digunakan oleh servis tersebut semasa berjalan. Jika OLLAMA_KEEP_ALIVE=30m tiada pada baris tersebut, bermakna drop-in tidak berjaya dimuatkan, dan puncanya hampir selalu disebabkan oleh pengepala [Service] yang tertinggal atau baris yang ditaip di bawah penanda. Proses but semula akan membuang setiap model yang dimuatkan, jadi permintaan seterusnya akan menjadi muatan sejuk (cold load). Panaskan ia dengan panggilan pramuat (preload) di atas.
Kos mengekalkan model dalam memori
Lajur SIZE dalam ollama ps ialah memori yang ditahan sepanjang tempoh melahu, bukan hanya semasa permintaan diproses. Model 8B pada kuantisasi 4-bit menggunakan sekitar 5 hingga 6 GB. Model 27B pula adalah cerita yang berbeza, dan pengiraan memori untuk menjalankannya pada VPS berasaskan CPU sahaja perlu dilakukan sebelum anda membuat keputusan untuk mengekalkannya dalam memori. Tetapkan keep_alive kepada -1 dan anda telah memutuskan bahawa model tersebut lebih utama daripada segala-galanya dalam pelayan, secara kekal. Pada VPS kecil, ini merupakan pertukaran terus dengan pangkalan data, aplikasi web dan tugasan binaan (build jobs) anda.
Pantau angka sebenar daripada mempercayai anggaran. Jalankan arahan ini semasa model dimuatkan, kemudian jalankan sekali lagi selepas ollama stop:
free -hLajur available ialah memori yang masih boleh diberikan oleh kernel kepada proses baharu. Pada pelayan GPU NVIDIA, nvidia-smi menunjukkan situasi yang sama dalam VRAM. Jika pelayan kehabisan memori, kernel akan menamatkan sesuatu proses untuk mendapatkan semula ruang:
sudo dmesg -T | grep -i "out of memory"Baris yang menamakan ollama bermakna pelayan model menjadi mangsa. Baris yang menamakan pangkalan data anda bermakna model tersebut menang dan sesuatu yang penting bagi anda telah terkorban. Kedua-dua hasil ini berpunca daripada keputusan yang sama: tempoh keep-alive yang panjang pada pelayan yang tidak mempunyai ruang memori yang mencukupi.
Dua kos di sini sering terlepas pandang. Panjang konteks (context length) yang lebih besar menempah KV cache (key value cache, iaitu status perhatian per token yang disimpan oleh model semasa menjana teks) yang lebih besar, dan cache tersebut adalah sebahagian daripada saiz memori yang diduduki. Saiznya bergantung pada num_ctx, jadi meningkatkan tetingkap konteks akan meningkatkan memori yang ditahan oleh model sepanjang tempoh melahu, bukan hanya semasa ia menjawab. OLLAMA_NUM_PARALLEL melebihi 1 akan menempah cache tersebut bagi setiap slot selari. Jika anda merancang untuk melayani beberapa pengguna daripada satu model, tentukan saiz memori berdasarkan slot, bukan hanya berdasarkan berat model (weights).
Nilai lalai yang munasabah: satu model pada pelayan yang mempunyai ruang memori mencukupi boleh menggunakan -1. Pelayan yang dikongsi harus menggunakan tetingkap yang meliputi jurang antara permintaan anda, seperti 30m, supaya memori tersebut dikembalikan apabila anda berhenti bekerja.
Nyahmuat model dengan segera
ollama stop qwen3:8bIa kembali tanpa sebarang output, dan model tersebut hilang daripada ollama ps. Nama yang tidak dimuatkan akan memberikan couldn't find model "qwen3:8b" to stop. Bentuk API adalah permintaan tanpa prompt dan keep_alive ditetapkan kepada 0:
curl -s http://localhost:11434/api/chat -d '{"model": "qwen3:8b", "messages": [], "keep_alive": 0}'Balasan tersebut membawa "done_reason": "unload". Gunakan cara ini sebagai ganti memulakan semula servis. systemctl restart ollama turut mengosongkan memori, tetapi ia menggugurkan setiap model lain yang dimuatkan dan menamatkan sebarang permintaan yang sedang berjalan.
Menjalankan lebih daripada satu model pada satu pelayan
OLLAMA_MAX_LOADED_MODELS mengehadkan bilangan model yang dimuatkan serentak, dan setakat Ogos 2026, tetapan lalai adalah tiga bagi setiap GPU, atau tiga pada mesin yang hanya menggunakan CPU. Had ini mengira bilangan model, namun memori adalah had sebenar; oleh itu, model kedua yang besar mungkin ditolak kerana kekurangan ruang sebelum anda mencapai had tiga model.
Apabila model baharu diminta dan memori tidak mencukupi, penjadual akan membuang (unload) salah satu model yang sedang dimuatkan untuk memberi ruang. Ia mengutamakan model yang tidak mempunyai permintaan aktif, dan ia akan mengeluarkan model yang pemasa (timer) miliknya belum tamat, termasuk model yang dimuatkan dengan -1. Jadi, nilai keep_alive yang negatif bermaksud tiada tamat masa melahu (idle timeout). Ia tidak mengunci (pin) pemberat (weights) terhadap permintaan model lain.
Keputusan tersebut direkodkan pada tahap debug. Tambahkan baris Environment="OLLAMA_DEBUG=1" kedua pada fail drop-in yang sama, mulakan semula, dan pantau:
sudo journalctl -u ollama -fSatu baris mengenai pembuangan runner untuk memberi ruang, yang terletak bersebelahan dengan permintaan yang mencetuskannya, memberitahu anda bahawa kedua-dua model ini tidak muat untuk dijalankan bersama pada mesin ini. Penyelesaiannya adalah dengan mengurangkan bilangan model pada mesin ini, atau menetapkan tetingkap masa yang panjang untuk model yang perlu menjawab dengan pantas, dan 0 untuk model yang jarang anda gunakan.
Panduan yang kekal melangkaui keluaran seterusnya
Ollama kerap mengeluarkan versi baharu dan tetapan lalai sering berubah, jadi periksa binaan yang anda gunakan dan jangan sekadar menghafal nombor:
ollama --version
ollama serve --helpollama serve --help menyenaraikan pemboleh ubah persekitaran yang dibaca oleh binaan tersebut, termasuk OLLAMA_KEEP_ALIVE. Terdapat dua peraturan yang kekal konsisten merentas keluaran dan boleh dijadikan asas. Nilai pada permintaan mengatasi nilai lalai pelayan. Selain itu, ollama ps merupakan sumber kebenaran tentang perkara yang dimuatkan, tidak kira apa yang dinyatakan oleh fail konfigurasi.
Jika editor atau ejen mengendalikan pelayan anda, periksa perkara yang dihantar oleh klien tersebut sebelum menyalahkan pelayan. Menghalakan ejen pengekodan ke pelayan Ollama anda sendiri merangkumi lokasi tetapan permintaan tersebut disimpan.
FAQ
Mengapa Ollama memunggah model saya selepas 5 minit?
Lima minit ialah nilai lalai keep_alive, iaitu pemasa melahu yang dimulakan oleh Ollama apabila sesuatu permintaan selesai. Apabila pemasa tamat, pelayan akan membebaskan pemberat (weights), jadi permintaan seterusnya akan memuatkan semula model tersebut daripada cakera, dan proses muat semula itulah yang menyebabkan jeda yang anda rasai. Tingkatkan nilai ini untuk satu permintaan dengan menghantar "keep_alive": "30m" dalam badan JSON, atau untuk keseluruhan pelayan dengan pemboleh ubah persekitaran OLLAMA_KEEP_ALIVE.
Bagaimanakah cara untuk memastikan model Ollama kekal dimuatkan dalam memori secara tetap?
Gunakan nilai negatif: "keep_alive": -1 pada permintaan, atau OLLAMA_KEEP_ALIVE=-1 untuk pelayan. ollama ps kemudian akan memaparkan Forever dalam lajur UNTIL. Tindakan ini membuang pemasa melahu dan tidak menjejaskan perkara lain. Jika model lain diminta dan memori tidak mencukupi, penjadual masih akan memunggah model ini untuk memberi ruang.
Mengapa OLLAMA_KEEP_ALIVE diabaikan?
Semak di mana anda menetapkannya. Jalankan systemctl show ollama --property=Environment, dan jika pemboleh ubah tersebut tiada dalam output itu, pelayan tidak pernah melihatnya kerana pemboleh ubah yang dieksport dalam shell anda tidak sampai ke servis systemd. Tetapkannya dengan sudo systemctl edit ollama.service, kemudian jalankan sudo systemctl daemon-reload dan sudo systemctl restart ollama. Punca lain ialah klien yang menghantar keep_alive sendiri pada permintaan, yang mengatasi nilai lalai pelayan.
Bagaimanakah cara untuk membebaskan memori tanpa memulakan semula Ollama?
ollama stop qwen3:8b memunggah model tersebut dengan serta-merta dan membiarkan pelayan serta setiap model lain yang dimuatkan terus berjalan. Melalui API, hantar permintaan tanpa prompt dan "keep_alive": 0, dan balasan akan diterima dengan "done_reason": "unload". Sahkan dengan ollama ps, yang sepatutnya tidak lagi menyenaraikan model tersebut.