Bagaimana Ollama Mengelola Permintaan Paralel
Mengonfigurasi ollama untuk eksekusi permintaan paralel.
Ketika server Ollama menerima dua permintaan secara bersamaan, perilakunya bergantung pada konfigurasinya dan sumber daya sistem yang tersedia.
Pengelolaan Permintaan yang Berjalan Secara Bersamaan
-
Pemrosesan Paralel: Ollama mendukung pemrosesan paralel dari permintaan. Jika sistem memiliki cukup memori yang tersedia (RAM untuk inferensi CPU, VRAM untuk inferensi GPU), beberapa model dapat dimuat sekaligus, dan setiap model yang dimuat dapat menangani beberapa permintaan secara paralel. Ini dikontrol oleh variabel lingkungan
OLLAMA_NUM_PARALLEL
, yang menetapkan jumlah maksimum permintaan paralel yang dapat diproses sekaligus oleh setiap model. Secara default, nilai ini diatur menjadi 4 (atau 1, tergantung ketersediaan memori), tetapi dapat diubah. -
Pembungkusan (Batching): Ketika beberapa permintaan untuk model yang sama tiba secara bersamaan, Ollama akan memprosesnya dalam satu batch. Ini berarti bahwa kedua permintaan tersebut akan ditangani secara paralel, dan pengguna akan melihat respons yang dikembalikan secara bersamaan. Server tidak sengaja menunggu untuk mengisi satu batch; pemrosesan dimulai segera setelah permintaan tersedia.
Antrian dan Batasan
-
Antrian: Jika jumlah permintaan yang berjalan secara bersamaan melebihi tingkat paralel yang dikonfigurasi (misalnya, lebih dari
OLLAMA_NUM_PARALLEL
permintaan untuk sebuah model), permintaan tambahan akan diantrikan. Antrian beroperasi dengan prinsip first-in, first-out (FIFO). -
Batas Antrian: Jumlah maksimum permintaan yang diantrikan dikontrol oleh
OLLAMA_MAX_QUEUE
(default: 512). Jika antrian penuh, permintaan baru akan menerima kesalahan 503 yang menunjukkan bahwa server sedang terlalu beban. -
Pemuatan Model: Jumlah model berbeda yang dapat dimuat sekaligus dikontrol oleh
OLLAMA_MAX_LOADED_MODELS
. Jika sebuah permintaan memerlukan pemuatan model baru dan memori tidak cukup, Ollama akan mengosongkan model yang tidak aktif untuk membuat ruang, dan permintaan akan diantrikan hingga model tersebut dimuat.
Contoh Skenario
Jika dua permintaan untuk model yang sama tiba secara bersamaan dan tingkat paralel server diatur setidaknya 2, kedua permintaan akan diproses bersama dalam satu batch, dan kedua pengguna akan menerima respons secara bersamaan. Jika tingkat paralel diatur menjadi 1, satu permintaan diproses segera, dan permintaan lainnya diantrikan hingga permintaan pertama selesai.
Jika permintaan tersebut untuk model berbeda dan memori cukup, kedua model dapat dimuat dan permintaan ditangani secara paralel. Jika tidak, satu model mungkin perlu dikosongkan, dan permintaan akan diantrikan hingga model tersebut dimuat.
Tabel Ringkasan
Skenario | Hasil |
---|---|
Dua permintaan, model yang sama, cukup paralel | Keduanya diproses secara paralel (dibungkus dalam batch) |
Dua permintaan, model yang sama, paralel=1 | Satu diproses, yang kedua diantrikan hingga yang pertama selesai |
Dua permintaan, model berbeda, cukup memori | Kedua model dimuat, permintaan ditangani secara paralel |
Dua permintaan, model berbeda, tidak cukup memori | Satu diantrikan hingga memori tersedia atau model dikosongkan |
Secara ringkas, Ollama dirancang untuk menangani beberapa permintaan sekaligus secara efisien, asalkan server dikonfigurasi untuk konvergensi dan memiliki sumber daya yang cukup. Jika tidak, permintaan akan diantrikan dan diproses berdasarkan urutan.
Pengelolaan Kekurangan Memori
Ketika Ollama menghadapi kekurangan memori untuk menangani permintaan yang masuk, ia menggunakan kombinasi mekanisme antrian dan strategi manajemen sumber daya untuk menjaga stabilitas:
Antrian Permintaan
- Permintaan baru ditempatkan dalam antrian FIFO (First-In, First-Out) ketika memori tidak dapat dialokasikan segera.
- Ukuran antrian dikontrol oleh OLLAMA_MAX_QUEUE (default: 512 permintaan).
- Jika antrian mencapai kapasitas, permintaan baru akan menerima kesalahan 503 “Server Overloaded”.
Manajemen Model
- Model aktif mungkin dikosongkan dari memori ketika menjadi tidak aktif untuk membebaskan sumber daya bagi permintaan yang diantrikan.
- Jumlah model yang dimuat secara bersamaan dibatasi oleh OLLAMA_MAX_LOADED_MODELS (default: 3×GPU count atau 3 untuk CPU).
Optimasi Memori
- Upaya untuk memproses permintaan yang sama dalam batch untuk memaksimalkan efisiensi memori.
- Untuk inferensi GPU, diperlukan alokasi VRAM penuh per model - beban parsial tidak didukung.
Skenario Gagal
Kekurangan Memori Kritis: Ketika bahkan permintaan yang diantrikan melebihi sumber daya yang tersedia, Ollama mungkin:
- Menggunakan disk (secara signifikan menurunkan kinerja)
- Mengembalikan kesalahan “out of memory”
- Menghentikan instansi model dalam kasus ekstrem
Pengaturan Konfigurasi | Tujuan | Nilai Default |
---|---|---|
OLLAMA_MAX_QUEUE | Maksimal permintaan yang diantrikan | 512 |
OLLAMA_NUM_PARALLEL | Permintaan paralel per model yang dimuat | 4 (atau 1 jika terbatas) |
OLLAMA_MAX_LOADED_MODELS | Maksimal model yang dimuat secara bersamaan | 3×GPU count atau 3 |
Administrator sebaiknya memantau penggunaan memori dan menyesuaikan parameter ini berdasarkan kemampuan perangkat keras mereka. Pengelolaan kekurangan memori menjadi penting ketika menjalankan model yang lebih besar (7B+ parameter) atau memproses beberapa permintaan yang berjalan secara bersamaan.
Strategi Optimisasi Ollama
Aktifkan percepatan GPU dengan export OLLAMA_CUDA=1
dan atur jumlah thread CPU dengan export OLLAMA_NUM_THREADS=84
.
Peningkatan Perangkat Keras
- RAM: 32GB+ untuk model 13B, 64GB+ untuk model 70B
- Penyimpanan: SSD NVMe untuk mempercepat pemrosesan model/muat ulang
- GPU: NVIDIA RTX 3080/4090 dengan 16GB+ VRAM untuk model yang lebih besar
Strategi Operasional
- Pembungkusan Permintaan: Proses beberapa pertanyaan sekaligus untuk mengurangi beban memori
- Pembebasan Otomatis Model: Izinkan Ollama mengosongkan model yang tidak aktif dari memori
- Cache Model yang Sering Digunakan: Pertahankan model yang umum digunakan dalam memori
Pemantauan dan Pemecahan Masalah
- Gunakan
nvidia-smi
(GPU) danhtop
(CPU/RAM) untuk mengidentifikasi bottleneck - Untuk kesalahan memori:
- Upgrade ke model yang dikuantisasi
- Kurangi permintaan yang berjalan secara bersamaan
- Tambahkan ruang swap
Contoh alur optimisasi:
# Gunakan model yang dikuantisasi dengan percepatan GPU
export OLLAMA_CUDA=1
ollama run llama2:7b-q4_0 --context-size 2048
# Batasi model yang dimuat dan permintaan paralel
export OLLAMA_MAX_LOADED_MODELS=2
export OLLAMA_NUM_PARALLEL=4
Penyesuaian ini dapat mengurangi penggunaan memori sebesar 30-60% sambil mempertahankan kualitas respons, terutama bermanfaat ketika menjalankan beberapa model atau menangani volume permintaan yang tinggi.
Ollama: Pembungkusan Permintaan vs Eksekusi Paralel
Pembungkusan di Ollama merujuk pada praktik mengelompokkan beberapa permintaan masuk bersama dan memprosesnya sebagai satu unit. Ini memungkinkan penggunaan sumber daya komputasi yang lebih efisien, terutama ketika berjalan pada perangkat keras yang memperoleh keuntungan dari operasi paralel (seperti GPU).
Ketika beberapa permintaan untuk model yang sama tiba secara bersamaan, Ollama dapat memprosesnya bersama dalam satu batch jika memori memungkinkan. Ini meningkatkan throughput dan dapat mengurangi latensi untuk setiap permintaan, karena model dapat memanfaatkan operasi matriks yang dioptimalkan atas batch.
Pembungkusan terutama efektif ketika permintaan memiliki ukuran dan kompleksitas yang serupa, karena ini memungkinkan penggunaan perangkat keras yang lebih baik.
Eksekusi paralel di Ollama berarti menangani beberapa permintaan secara bersamaan, baik untuk model yang sama atau model berbeda, tergantung pada ketersediaan memori dan konfigurasi.
Ollama mendukung dua tingkat paralelisme:
- Pemuatan Model Berbeda: Jika cukup memori tersedia, beberapa model dapat dimuat dan melayani permintaan secara bersamaan.
- Permintaan Paralel per Model: Setiap model yang dimuat dapat memproses beberapa permintaan secara paralel, dikontrol oleh pengaturan OLLAMA_NUM_PARALLEL (default adalah 1 atau 4, tergantung memori).
Ketika permintaan melebihi batas paralel, mereka akan diantrikan (FIFO) hingga OLLAMA_MAX_QUEUE.
Kesimpulan
Ollama memanfaatkan pembungkusan dan eksekusi paralel untuk memproses beberapa permintaan secara efisien. Pembungkusan mengelompokkan permintaan untuk diproses secara bersamaan, sementara eksekusi paralel memungkinkan beberapa permintaan (atau model) berjalan secara bersamaan. Kedua metode bergantung pada memori sistem dan dapat dikonfigurasi untuk kinerja optimal.
Tautan yang Berguna
- Kartu cepat Ollama
- Pindahkan Model Ollama ke Drive atau Folder Berbeda
- Bagaimana Ollama Menggunakan Kinerja dan Core Efisien Intel CPU
- Ollama Space
- Self-hosting Perplexica - dengan Ollama
- Uji Deepseek-r1 pada Ollama
- Bagaimana Ollama Menangani Permintaan Paralel
- Uji Deepseek-r1 pada Ollama
- Kartu Cepat Python
- Python Space
- Pemeringkatan ulang dokumen teks dengan Ollama dan Model Qwen3 Embedding - dalam Go