Ollama mı vLLM mi: Hangi LLM sunucusu seçilmeli?
Ollama, CPU ile de tek kullanıcı için pratik bir katmandır. vLLM, GPU üzerinde yüksek aktarım hızı sağlar. Gerçek kurulum komutlarıyla iş yükünüze göre seçim yapın.
Ollama ve vLLM, tek paragrafta
Ollama, kendisine bir sunucu eklenmiş model yöneticisidir: niceleştirilmiş ağırlıkları indirir, yükler ve 127.0.0.1:11434 üzerinde yanıt verir; makinede yalnızca CPU varsa CPU kullanır. vLLM bir aktarım hızı motorudur: aynı anda çalışan çok sayıda isteği GPU üzerinde tutar ve GPU bulunmayan bir makinede kullanılacak doğru araç değildir. Kararın tamamı budur. Yerel bir asistanla konuşan tek bir kişi için Ollama kullanılır. Bir ekibe hizmet veren uygulama için vLLM kullanılır.
Her ikisi de OpenAI uyumlu bir HTTP API sunar. Bu nedenle istemci kodu, temel URL değiştirilerek birinden diğerine taşınabilir. Fark API değildir. Fark, ilk istek hâlâ belirteç üretirken ikinci bir istek geldiğinde ne olduğudur.
Ollama'nın gerçekte ne olduğu
Ollama bir kolaylık katmanıdır. Tek bir kurulum komutuyla bir model kayıt defteri (ollama pull llama3.1:8b), ağırlıklar için yerel bir depo, sohbet istemi, bir systemd hizmeti ve bir HTTP API sağlar. Sunduğu modeller, genellikle 4 bit nicemlenmiş GGUF dosyalarıdır. Bu nedenle 7B veya 8B bir model diskte 16 GB yerine yaklaşık 5 GB yer kaplar. Nicemleme, CPU üzerinde çıkarım yapılabilmesini sağlayan temel unsurdur.
Çalıştırıcısı, GGUF nicemlemesini sıradan donanımlarda uygulanabilir hâle getiren C++ çıkarım kitaplığı llama.cpp üzerine kuruludur. Ollama, bazı yeni model aileleri için kendi motorunu da eklemiştir. Ancak sunduğu özelliklerin çoğunun temelinde hâlâ llama.cpp bulunur. Bu nedenle Ollama ile llama.cpp karşılaştırıldığında, çoğunlukla bir ergonomi katmanı ile bu katmanın sarmaladığı bileşen karşılaştırılır.
Tasarım hedefi tek bir kullanıcıdır. Temmuz 2026 itibarıyla OLLAMA_NUM_PARALLEL için varsayılan değer 1'dir. Bu, bir modelin aynı anda bir isteği işlediği ve diğer tüm isteklerin varsayılan olarak 512 öğe tutan bir kuyrukta beklediği anlamına gelir (OLLAMA_MAX_QUEUE). Paralel çalışma ayarını artırabilirsiniz. Aşağıdaki bölüm bunun maliyetini açıklar. Ollama'yı daha önce çalıştırmadıysanız Ollama'yı bir VPS üzerinde barındırma ve 11434 portunu kapalı tutma bölümünden başlayın. Çünkü API'de hiçbir tür kimlik doğrulaması yoktur.
vLLM aslında nedir
vLLM yalnızca bir çıkarım sunucusudur. Başka bir işlevi yoktur. Model kitaplığını yönetmez, sohbet istemi içermez ve istek geldiğinde sizin için model indirmez. Başlatma sırasında bir Hugging Face deposu belirtirsiniz. vLLM bu tek modeli yükler ve işlemi durdurana kadar sunar.
Bu sınırlı kapsamın karşılığında yüksek aktarım hızı elde edilir. Bunu iki mekanizma sağlar. PagedAttention, KV önbelleğini (key-value cache; modelin etkin her istek için tuttuğu belirteç başına dikkat durumunu) işletim sistemlerinin belleği sayfalama yöntemine benzer şekilde sabit boyutlu bloklarda depolar. Böylece bir isteğin, en kötü duruma göre boyutlandırılmış tek ve bitişik bir bellek alanı ayırması gerekmez. Daha önce ayrılmış ancak kullanılmayan bellek, daha fazla eşzamanlı istek için kullanılabilir hale gelir. Continuous batching, yeni bir isteğin mevcut grubun tamamlanmasını beklemek yerine bir sonraki kod çözme adımında çalışan gruba katılmasını sağlar. Bir dizi tamamlandığında gruptan hemen çıkarılır ve boşalan yuvaya yeni bir istek alınır.
Pratik sonuç şudur: tek bir GPU üzerinde eşzamanlı kullanıcı sayısı 1'den 30'a çıkarıldığında, toplam saniye başına belirteç sayısı belirgin biçimde artar. Buna karşılık kullanıcı başına hız, beklenenden çok daha az düşer. Ollama'nın varsayılan davranışında kullanıcı sayısını 1'den 30'a çıkarmak, yalnızca 29 kişinin beklemesine neden olur.
Sürekli toplu işlemenin tüm farkı
Aynı donanımda her sunucuya aynı anda ulaşan beş istek olduğunu varsayın.
Ollama, varsayılan ayarlarla ilk isteği tamamlanana kadar çalıştırır, ardından ikinci isteğe geçer. Beşinci çağrıyı yapan taraf dört tam üretimin tamamlanmasını bekler. Toplam aktarım hızı yaklaşık olarak tek bir üretimin hızı kadardır, çünkü işlemci aynı anda yalnızca bir dizi üzerinde çalışır.
vLLM, beş isteğin tümünü aynı ileri geçişte çözümler. Beş dizi için bir belirteç üretmenin maliyeti, tek dizi için bir belirteç üretmenin maliyetinden çok az fazladır. Bunun nedeni, maliyetli işlemin model ağırlıklarını bellekten okumak olmasıdır ve bu okuma tüm toplu işlem genelinde paylaşılır. CPU çıkarımını yavaşlatan bellek bant genişliği gerçeği de aynıdır: maliyet aritmetik işlemlerden değil, ağırlıkların taşınmasından kaynaklanır.
OLLAMA_NUM_PARALLEL=4 ayarlanarak bunun bir bölümü elde edilebilir. Bunun bedeli bellektir. Her paralel yuva kendi KV önbelleğine ihtiyaç duyar. Ayrıca Ollama, bağlam penceresini yuvalar arasında böler. Bu nedenle, 8192 belirteç için yapılandırılmış bir modele yönelik dört paralel istek, her istek için 2048 belirteçlik bağlam bırakır. vLLM'nin sayfalanmış önbelleği bu ödünleşimi ortadan kaldırır. Bunun nedeni, blokların istek gerçekten büyüdükçe isteğe tahsis edilmesidir.
Ollama ile kurulumu yapma ve sunma
curl -fsSL https://ollama.com/install.sh | sh
ollama pull llama3.1:8b
ollama run --verbose llama3.1:8b "Write two sentences about Linux."Kurulum betiği bir ollama sistem kullanıcısı oluşturur, ikili dosyayı kurar ve 127.0.0.1:11434 adresine bağlı ollama.service hizmetini kaydeder. --verbose tarafından yazdırılan eval rate satırı, bu sistemdeki gerçek saniye başına token sayısıdır. Yayımlanmış herhangi bir değerden önce buna güvenilmelidir.
Eşzamanlılık düzeyini artırmak için, yükseltmenin bu değişikliği üzerine yazmaması amacıyla bir systemd drop-in dosyası kullanılmalıdır:
sudo systemctl edit ollama.service[Service]
Environment="OLLAMA_NUM_PARALLEL=4"
Environment="OLLAMA_KEEP_ALIVE=30m"sudo systemctl restart ollama
ollama psollama ps yüklü olanları gösterir. Buradaki PROCESSOR sütunu gerçek durumu belirtir. 100% CPU, GPU kullanılmadığı anlamına gelir. Ollama'nın yavaş olduğuna ilişkin raporların çoğunun gerçek nedeni budur.
vLLM ile kurma ve sunma
vLLM için Linux ve Python 3.10 ile 3.13 arasındaki bir sürüm gerekir. Belirli bir PyTorch derlemesini yüklediği için vLLM ayrı bir sanal ortama kurulmalıdır:
uv venv --python 3.12 --seed
source .venv/bin/activate
uv pip install vllm --torch-backend=autoArdından bir model sunulmalıdır. Buradaki ad kısa bir etiket değil, bir Hugging Face depo kimliğidir:
vllm serve Qwen/Qwen2.5-1.5B-Instructİlk başlatma yavaştır. Önce ağırlıklar indirilir, ardından kaç KV önbellek bloğunun sığacağını belirlemek için GPU profili çıkarılır. vLLM 8000 portunu dinler. İstemci kodu yazılmadan önce sunucu denetlenmelidir:
curl http://localhost:8000/v1/models
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"model": "Qwen/Qwen2.5-1.5B-Instruct", "messages": [{"role": "user", "content": "Who won the world series in 2020?"}]}'Sunucuda Docker zaten kuruluysa resmi imaj CUDA bağımlılıklarının kurulmasıyla ilgili işlemleri ortadan kaldırır:
docker run --runtime nvidia --gpus all \
-v ~/.cache/huggingface:/root/.cache/huggingface \
--env "HF_TOKEN=$HF_TOKEN" \
-p 8000:8000 \
--ipc=host \
vllm/vllm-openai:latest \
--model Qwen/Qwen3-0.6B--ipc=host gereklidir; yalnızca göstermelik değildir. PyTorch, tensörleri işlemler arasında paylaşımlı bellek üzerinden aktarır. Docker'ın varsayılan paylaşımlı bellek ayırması, tensör paralelliğiyle çıkarım için çok küçüktür.
Üretimde en önemli seçenekler şunlardır: ödenmesi kabul edilen bağlam penceresini belirleyen --max-model-len, kartın vLLM tarafından kullanılabilecek bölümünü belirleyen --gpu-memory-utilization (Temmuz 2026 itibarıyla varsayılan değer 0.92), tek bir modelin birden fazla GPU arasında bölünmesini sağlayan --tensor-parallel-size ve --api-key.
vLLM'de kimlik doğrulama tek bir bayrakla etkinleştirilir, Ollama'da ise yoktur
vLLM'ye bir belirteç verirseniz taşıyıcı belirteci zorunlu kılar:
vllm serve Qwen/Qwen2.5-1.5B-Instruct --api-key token-abc123Aynı değer VLLM_API_KEY ortam değişkeninden de alınabilir. Bu belirteç olmadan gönderilen istek HTTP 401 yanıtı alır. Bu durum, vLLM'de hız sınırlaması bulunmadığından ve düz HTTP üzerinden gönderilen belirteç aktarım sırasında okunabildiğinden, 8000 numaralı bağlantı noktasını herkese açık bir ağ arabiriminde yayımlamak için yine de gerekçe oluşturmaz. Ancak sunucunun bir istemci kavramına sahip olduğu anlamına gelir.
Ollama'da böyle bir özellik yoktur. Anahtar, oturum açma veya izin verilenler listesi bulunmaz. 11434 numaralı bağlantı noktasına erişebilen her işlem modelleri çalıştırabilir, çekebilir veya silebilir. Loopback üzerinde tutun ve kendi barındırdığınız bir WireGuard VPN üzerinden erişin ya da TLS'yi (transport layer security) sonlandıran ve kimlik doğrulaması yapan bir reverse proxy kullanın.
Donanım: her birinin gereksinimleri
Ollama CPU üzerinde çalışır. 4 bit nicemlenmiş bir model, her bir milyar parametre için yaklaşık yarım gigabayt RAM kullanır. Buna yaklaşık bir gigabayt çalışma zamanı ek yükü ve bağlam için gereken ek bellek dahildir. Bu nedenle 3B model için yaklaşık 4 GB boş bellek, 8B model için ise yaklaşık 8 GB boş bellek gerekir. Paylaşımlı bir vCPU üzerindeki hız, saniyede tek haneli ile düşük çift haneli token arasındadır. Bunun nedeni bellek bant genişliğidir; yanlış yapılandırma değildir ve hiçbir flag bunu düzeltemez.
vLLM bir GPU varsayar. Varsayılan yol, ağırlıkları 16 bit duyarlıkta ve nicemlenmemiş olarak sunar. Bu, her bir milyar parametre için yaklaşık 2 GB anlamına gelir. 8B model, yalnızca ağırlıklar için yaklaşık 16 GB video belleği gerektirir. Buna, vLLM'yi çalıştırma nedeniniz olan eşzamanlılığı sağlayan KV önbelleği dahil değildir. 24 GB'lık bir kartta önbellek için kullanılabilir alan kalır. 16 GB'lık bir kartta kalmaz. Bu durumda daha küçük bir model seçilir veya nicemlenmiş bir kontrol noktasıyla --quantization iletilir. CPU arka ucu mevcuttur, ancak standart wheel paketleri bunun için derlenmemiştir. Ayrıca vLLM'yi çalıştırma gerekçesini ortadan kaldırır.
Bu nedenle donanım sorusu çoğu zaman yazılım sorusunu yanıtlar. GPU yoksa Ollama kullanılır. Kiralanmış bir GPU, istekler serileştirildiği için %5 kullanım oranında çalışıyorsa vLLM kullanılır.
İş yükünüz için hangisi
- Bir kişi, CPU VPS, taslak hazırlama ve özetleme: Ollama. Hızı kabul edilebilir ve bundan daha basit bir seçenek yoktur.
- Bir kodlama yardımcısı veya yalnızca sizin çağırdığınız araçlarınızı yerel bir modele bağlayan bir MCP sunucusu: Ollama. Gerçek iş yükü tek eşzamanlı istektir.
- Bu hafta beş modeli karşılaştırma: Ollama. Etiketli modelleri indirmek ve silmek tam olarak güçlü olduğu iştir; vLLM ise her model için işlem yeniden başlatma gerektirir.
- Gerçek kullanıcıları olan bir dahili uygulama, sohbet ürünü veya alma işlem hattı: vLLM. GPU maliyetini karşılayan kullanım alanı budur.
- Gece boyunca yüz bin belgeyi puanlayan bir toplu iş: yüksek
--max-num-seqsile vLLM. Önemli olan tek ölçüt aktarım hızıdır; belge başına gecikme önemli değildir. - Aynı anda modele istek gönderen birkaç kendi barındırdığınız yapay zeka aracısının bulunduğu bir aracı platformu: vLLM. Bunun nedeni, aracı trafiğinin ani yoğunluklar oluşturması ve doğası gereği paralel olmasıdır.
Görülecek dizelerle hata durumları
vLLM, KV önbelleği hatasıyla başlatılamıyor. İleti her iki sayıyı da belirtir:
ValueError: The model's max seq len (32768) is larger than the maximum number of tokens that can be stored in KV cache (8192). Try increasing gpu_memory_utilization or decreasing max_model_len when initializing the engine.Model, ağırlıklar yüklendikten sonra kullanılabilir bellekte kalandan daha büyük bir bağlam penceresi tanımlar. --max-model-len 8192 ile bu değeri düşürün veya kartı başka bir işlem kullanmıyorsa --gpu-memory-utilization değerini artırın. Kullanımı yaklaşık 0.95 değerinin üzerine çıkarmak, bu başlatma hatasını daha sonra yük altında oluşan CUDA out-of-memory çökmesiyle değiştirme eğilimindedir. Bu iki durumdan daha kötüsü budur.
Ollama, üretim sırasında Killed yazdırıyor. Linux out-of-memory killer, modelin sistemde mevcut RAM'den daha fazlasına ihtiyaç duyması nedeniyle işlemi durdurmuştur. sudo dmesg | grep -i oom ile doğrulayın. Çözüm bir ayar değiştirmek değil, daha küçük veya daha yoğun kuantize edilmiş bir model kullanmaktır.
Ollama tek başına düzgün yanıt veriyor, ancak yük altında duraklıyor. Hiçbir yerde hata görünmez. İstekler, çağrı yapanların sayısı arttıkça daha uzun sürer; bunun nedeni OLLAMA_NUM_PARALLEL=1 değerinin istekleri sıraya almasıdır. Bu değeri artırıp istek başına daha küçük bir bağlamı kabul edin veya iş yükünü vLLM'ye taşıyın.
vLLM her çağrıda 401 döndürüyor. Sunucuyu --api-key ile başlattınız, ancak istemci Authorization başlığı göndermiyor. Çoğu OpenAI istemci kitaplığı, anahtar olarak kendisine ilettiğiniz değeri gönderir. Bu nedenle flag'i kaldırmak yerine anahtarı istemci tarafında ayarlayın.
vLLM modelin bulunamadığını belirtiyor. Ollama gerektiğinde indirme yapar, vLLM ise yapmaz. İstek gövdesindeki model alanı, sunucuyu başlatırken kullandığınız repository id ile veya --served-model-name ayarladıysanız onun değeriyle eşleşmelidir. Tam dizeyi curl http://localhost:8000/v1/models ile doğrulayın.
İkisini birlikte çalıştırmak makul bir çözümdür
Bunlar birbirini dışlamaz. Yaygın bir yapı, uygulamaya hizmet veren bir GPU instance üzerinde vLLM çalıştırmak ve yerel betikler, cron işleri ve yeni model sürümlerini denemek için normal VPS üzerinde Ollama kullanmaktır. Her iki uç nokta da OpenAI uyumludur. Bu nedenle tek bir istemci kitaplığı ve base URL değişikliği yeterlidir. Burada maliyet denetimi, motorlardan daha önemlidir. Çünkü boşta olan bir GPU da yoğun kullanılan bir GPU ile aynı ücreti oluşturur. Aracı ve çıkarım maliyetlerini öngörülebilir tutmak ise sunucu seçmekten ayrı bir disiplindir.
FAQ
vLLM, Ollama'dan daha hızlı mıdır?
Aynı GPU üzerinde tek bir istek için fark sınırlıdır. Bunun nedeni, her ikisinin de aynı aritmetik işlemleri gerçekleştirmesidir. Eşzamanlı birçok istek için vLLM çok daha hızlıdır. Bunun nedeni, sürekli toplu işlemenin her etkin diziyi tek bir ileri geçişte çözümlemesidir. Ollama'nın varsayılan çalışma biçimi ise istekleri art arda işler. Yalnızca CPU kullanılan bir makinede bu soru geçerli değildir. Ollama burada çalışır, vLLM ise pratik olarak çalışmaz.
vLLM GPU olmadan çalışabilir mi?
Kullanılabilir biçimde çalışmaz. Standart paketler NVIDIA veya AMD GPU'larını hedefler. vLLM'nin varlık nedeni, toplu isteklerle bir hızlandırıcıyı sürekli meşgul tutmaktır. Bu amaç CPU üzerinde geçerli değildir. Geliştirme çalışmaları için bir CPU arka ucu bulunur. Gerçek CPU çıkarımı için doğrudan Ollama veya llama.cpp kullanılması gerekir.
Ollama ile llama.cpp arasındaki fark nedir?
llama.cpp çıkarım kitaplığıdır. GGUF ise bu kitaplığın nicemlenmiş ağırlık biçimidir. Ollama'nın çalıştırıcısı llama.cpp üzerine kuruludur. Ayrıca model kayıt defteri, otomatik indirme, sürekli çalışan sunucu, systemd birimi ve OpenAI uyumlu uç nokta gibi llama.cpp'nin kullanıcıya bıraktığı bileşenleri ekler. Ollama, bazı yeni model aileleri için kendi motorunu da eklemiştir. Bu nedenle iki ürünün altyapısı artık tamamen aynı değildir.
8B model için vLLM ne kadar GPU belleğine ihtiyaç duyar?
16 bit duyarlılıkta yalnızca ağırlıklar yaklaşık 16 GB yer kaplar. Bu, milyar parametre başına yaklaşık 2 GB anlamına gelir. Ayrıca KV önbelleği için ek alan gerekir. 24 GB kapasiteli bir kart rahat kullanım sağlar. 16 GB kapasiteli bir kartta nicemlenmiş bir kontrol noktası veya daha küçük bir model gerekir. vLLM, kartın --gpu-memory-utilization ile belirlenen bir bölümünü kullanır. Bu değer Temmuz 2026 itibarıyla varsayılan olarak 0.92'dir.
Aralarında geçiş yapmak için uygulama kodunu değiştirmem gerekir mi?
Genellikle yalnızca temel URL'nin, API anahtarının ve model adının değiştirilmesi gerekir. Ollama, OpenAI uyumlu arayüzünü http://127.0.0.1:11434/v1 adresinde sunar ve anahtarı yok sayar. vLLM ise http://localhost:8000/v1 adresinde hizmet verir ve bir anahtar ayarlanmışsa bunu zorunlu kılar. Model adlarının biçimi farklıdır: Ollama için llama3.1:8b, vLLM için Qwen/Qwen2.5-1.5B-Instruct gibi tam bir depo kimliği kullanılır.