NordBastion kutup ayısı maskotu, karanlık bir Nordic kasada oyma taş bir bankta oturuyor, kucağında bir dizüstü bilgisayar var; yanındaki sunucu rafının üzerinde altıgen bir cam kabın içine mühürlenmiş parlayan camgöbeği bir sinir ağı ızgarası ve kaptan ekranına doğru akan kısa bir camgöbeği token akışı, kapalı bir runik kapının arkasında
Nasıl yapılır · Yapay zeka ajanları·17 dakika okuma · 30 dakika uygulamalı

VPS'te kendi LLM'ini barındırın.
GPU yok. API anahtarı yok. Hiçbir prompt binadan çıkmaz.

Kendi donanımınızda yanıt veren bir LLM'e giden altı adım — token/saniye hızınızı sunucuyu almadan önce hesaplayan aritmetik, 4, 8, 16 veya 32 GB'a hangi modelin sığdığı, Ollama'nın hazır sunmadığı kimlik doğrulama ve uymayan işlerin dürüst bir listesi. Debian 12'de test edildi.

Altı adım
  1. 01

    Boyut

    Çekirdek değil, bant genişliği

  2. 02

    Kur

    Ollama

  3. 03

    Ölç

    Kendi token/sn değeriniz

  4. 04

    Koru

    TLS + bir token

  5. 05

    Bağlan

    Tek bir base URL

  6. 06

    Sınırla

    Bağlam, RAM, disk

Başlamadan önce · Aritmetik

Tek bir bölme işlemi, sunucunun ne yapabileceğini söyler. Sunucuyu almadan önce yapın.

Dil modellerini yerel olarak çalıştırma konusunda yazılanların neredeyse tamamı ekran kartlarıyla ilgilidir, elinizdeki bir sanal makineyse bu pek işe yaramaz. Burada işe yarayan zihinsel model, GPU söyleminin ima ettiğinden daha basittir ve tek bir cümleye sığar: tek bir token üretmek için yoğun bir model, ağırlıklarının tamamını bellekten okumak zorundadır. Bir kısmını değil — tamamını, her token için bir kez.

Bu tek gerçek, tüm performans sorusunu çözer. Üretim hızına kaç çekirdek kiraladığınız değil, makinenin modeli RAM'den ne kadar hızlı akıtabildiği karar verir. Bu da, hiçbir şey harcamadan önce zarfın arkasında hesaplayabileceğiniz bir tavan verir:

tokens per second  ≈  memory bandwidth (GB/s)  ÷  model size (GB)

Nicelenmiş bir 8B model yaklaşık 5 GB kaplar. Gerçekçi olarak yaklaşık 20 GB/sn akış sağlayabildiğiniz sanallaştırılmış bir sunucuda tavan saniyede yaklaşık dört token'dır ve gerçekte gözlemleyeceğiniz sayı muhtemelen bunun yarısı ile üçte ikisi arasındadır. Kabaca saniyede üç kelime. Bunu bir hayal kırıklığı değil, iş yükü hakkında bir gerçek olarak okuyun: bir sohbet penceresi için yavaştır, bir belgeyi sınıflandırıp tek satır JSON döndüren bir iş için tamamen yeterlidir.

Çekirdekler hâlâ önemli, sadece insanların sandığı sebepten değil. Daha fazla iş parçacığı, bellek yolunu doyurana kadar yardımcı olur; bu da bu makinelerde erken gerçekleşir — genellikle dört ila sekiz iş parçacığı civarında. Bu noktadan sonra fazladan çekirdekler boşta kalır, çünkü her şey RAM'i bekler. On altı çekirdekli bir sunucunun metin üretmede dört çekirdekli bir sunucudan dört kat hızlı olmamasının nedeni budur — ve hız umuduyla çekirdek için para ödemek, yanlış paketi satın almanın en yaygın yoludur.

Okumak hızlıdır, yazmak yavaştır. Her istekte iki aşama vardır ve hiç birbirine benzemezler. Prompt'u işlemek — prefill — tüm girdi üzerinde bir kerede yapılan, işlem gücüne bağımlı bir matris işlemidir ve üretimden kat kat hızlı çalışır. Yanıtı üretmek ise yukarıda anlatılan, tek seferde bir token işleyen, belleğe bağımlı kısımdır. Bu yüzden modele iki bin kelimelik bir belge verip karşılığında üç cümle istemek rahat bir iş yüküdür, iki bin kelimelik bir deneme istemek ise değildir. Prompt'larınızı bu asimetriye göre tasarlayın, bir CPU sunucusu token hızının ima ettiğinden çok daha iyi hissettirir.

Katman Bellek En büyük rahat sığan model Büyüklük mertebesi Ne işe yarar
Sentinel · $3.904 GBQ4'te 3B (~2 GB)saniyede bir cümleSınıflandırma, etiketleme, yönlendirme, embedding
Garrison · $7.908 GBQ4'te 8B (~5 GB)saniyede birkaç kelimeVarsayılan. Özetler, JSON çıkarma, RAG yanıtları
Ravelin · $16.9016 GBQ4'te 14B (~9 GB)yukarıdakinin yaklaşık yarısıDaha zor akıl yürütme, uzun bağlam, toplu iş hatları
Bulwark · $32.9032 GBQ4'te 32B (~20 GB)saniyede bir kelimenin altındaHızdan çok kalite. Yalnızca asenkron işler
Citadel · $62.9064 GBQ4'te 70B (~40 GB)yanıt başına dakikalarSığar. Etkileşimli değildir. Gece boyu işler

Model boyutları, genellikle fark edilmeyecek kadar küçük bir kalite payını belleğin yarısından azıyla takas eden alışılagelmiş Q4_K_M nicelemeleridir. Hız sütunu bir benchmark değil, yukarıdaki bölme işleminden türetilen bir büyüklük mertebesidir — 03. adımın amacı, bu tablo dahil hiçbir tabloya güvenmeden kendi makinenizi ölçmenizdir.

Başlamadan önce · Sığma

CPU'ya gerçekten ne sığar. Ve ne sığmaz, açıkça söylenmiş.

Bu bölümün dürüst hâli, hevesli bir hâlinden daha değerlidir; çünkü kendi barındırdığınız bir modelden vazgeçmenin en hızlı yolu, onu en kötü olduğu bir işe yöneltip tüm fikrin saçma olduğu sonucuna varmaktır.

Rahatça sığar. Çıktının kısa olduğu ve değerin düzyazıda değil değerlendirmede yattığı her şey. Bir mesajı birkaç kategoriden birine sınıflandırmak. Bir destek talebinin acil olup olmadığına karar vermek. Bir faturadan beş alanı JSON olarak çıkarmak. Bir konuşma dizisini üç cümleye özetlemek. Bir belgeyi etiketlemek. Bir ürün açıklamasını yeniden yazmak. Kısa bir metni çevirmek. İki kaydın aynı kişiyi tanımlayıp tanımlamadığını tespit etmek. Bir paragraf başka bir yere gitmeden önce içindeki isimleri karartmak. Bunların her biri uzun bir girdi tüketir ve kısa bir çıktı üretir — bu tam olarak bir CPU'nun iyi başa çıktığı asimetridir.

Sabırla sığar. Kimsenin beklemediği iş. Gece boyu toplu işler, kuyruk işçileri, günün belgeleri üzerinden gece geçişi, zamanlanmış bir rapor. Hiçbir şey yanıtı beklemiyorsa, bir sohbet penceresinde katlanılmaz olacak bir token hızı hiç önemli olmaktan çıkar — sabahın üçünde altı dakika süren bir iş, sadece çalışmış bir iştir.

Sığmıyor. İnsanların gerçekten kullanmaktan keyif alacağı etkileşimli bir asistan: bu hızlarda imleç sürünür ve deneyim asistansız olmaktan daha kötüdür. Tüm çıktının yavaş kısım olduğu uzun metin üretimi — bana iki bin kelime yaz. Hem bağlamın hem kalite çıtasının küçük bir modelin kaldırabileceğini aştığı, büyük bir depo üzerinde yineleme yapan kodlama ajanları. Tek başına önbelleğin makineyi aştığı, yüz bin token'lık bağlam gerektiren her şey. Ve tamamen farklı bir disiplin olan ve gerçekten bir GPU isteyen görüntü veya video modelleri.

İş yükünüz o son grupta yer alıyorsa, akıllıca cevap daha büyük bir CPU sunucusu almak değil, hibrit bir yaklaşımdır. Çağrıların büyük kısmı için yerel bir model tutun ve öncü akıl yürütme gerektiren azınlığı barındırılan bir API'ye yönlendirin — bu tam olarak bir yapay zeka ajanını 7/24 çalıştırma kılavuzunun çalışma zamanı tarafı için tarif ettiği şekildir. O kılavuz, modelin kendisini bilinçli olarak kapsam dışı bırakmıştı. Bu kılavuz ise eksik yarısıdır.

Adım 01 · Boyut

Çekirdek için değil, model için satın alın. Ve pay bırakın.

İşten geriye doğru çalışın. Modelin ne yapması gerektiğine karar verin, bunu yapan en küçük boyutu seçin, o boyutun Q4_K_M'de ne kadar yer kapladığına bakın, sonra ek yükleri ekleyin:

RAM needed  =  model file  +  KV cache  +  ~2 GB for the system

  3B  Q4_K_M  ≈  2.0 GB        KV cache at 8k context   ≈  0.5–1 GB
  8B  Q4_K_M  ≈  4.9 GB        KV cache at 32k context  ≈  2–4 GB
 14B  Q4_K_M  ≈  9.0 GB
 32B  Q4_K_M  ≈ 20.0 GB
 70B  Q4_K_M  ≈ 40.0 GB

Anahtar-değer önbelleği, insanların unuttuğu ek yüktür. Konuşmada zaten bulunan her token, model onu yeniden hesaplamasın diye bellekte tutulur ve bu depo izin verdiğiniz bağlamla birlikte büyür. Bağlamı ikiye katlamak, bunu da kabaca ikiye katlar. 4k bağlamla sığan bir model, 32k'de sığmayabilir ve bu, birinci istekte değil onuncu istekte başarısız olur — bu da onu bir aritmetik hatası yerine bir gizem gibi gösterir.

Burada yumuşak bir bozulma yoktur. Toplam RAM'i aştığında kernel nazikçe yavaşlamaz: her tek token'da model ağırlıklarını diske ve diskten swap etmeye başlar. Dört saniyelik bir üretim dört dakika olur, load average onlara tırmanır ve sunucudaki her şey — veritabanı, web sunucusu, SSH oturumunuz — bundan payını alır. Belleğe sığmak bir optimizasyon değildir. Bir zorunluluktur.

Panelde: Sipariş → VPS → aritmetiğin işaret ettiği paket, imaj Debian 12. Hesap açmak için e-posta adresi gerekmez, hiçbir aşamada kimlik belgesi istenmez ve fatura Monero, Bitcoin, Lightning veya diğer desteklenen varlıklardan biriyle ödenir — bunun sıradan bir web sunucusundan daha fazla önem taşımasının nedenlerini anonim VPS barındırma üzerine temel kılavuz açıklıyor, aşağıdaki gizlilik bölümü de bunu özel olarak promptlara uyguluyor.

Adım 02 · Kurulum

Tek komut, tek servis. Loopback'e bağlı, ve orada bırakılmış.

Önce makineyi güçlendirin — yalnızca anahtarla SSH, istemediğiniz hiçbir şeye izin vermeyen bir güvenlik duvarı, otomatik güvenlik güncellemeleri. İlk saat kontrol listesi yaklaşık bir saat sürer ve bu, kısa süre sonra sorduğunuz her soruyu barındıracak bir sunucudur.

Ardından çalıştırıcıyı kurun. Ollama, etrafına bir model kayıt defteri, bir REST API ve bir systemd birimi sarılmış llama.cpp'dir ve tek satırlık kurulum betiği üçünü de kurar:

apt update && apt install -y curl
curl -fsSL https://ollama.com/install.sh | sh

systemctl status ollama --no-pager
ss -ltnp | grep 11434
# → 127.0.0.1:11434 — loopback only. Leave it that way.

O son satır iki kez okunmaya değer. Kutudan çıktığı hâliyle servis loopback arayüzünde dinler, ki bu tam olarak doğrudur; sonraki on dakikada yapılan en yaygın hata, başka bir makinedeki bir şey ona ulaşamadığı için OLLAMA_HOST'u 0.0.0.0 olarak ayarlamaktır. 04. adım ona doğru şekilde nasıl ulaşılacağını anlatır; bunun 11434 portunun doğrudan internete baktığı bir versiyonu yoktur.

Sonradan keşfetmek yerine şimdi ayarlanmaya değer iki ayar var. Modeller varsayılan olarak /usr/share/ollama altında saklanır ve büyüktürler, bu yüzden bunu yerinizin olduğu bir yere yönlendirin. Ve varsayılan ayar, son istekten sonra bir modeli beş dakika boyunca RAM'de tutar — bu, başka işler de yapan bir sunucuda cömert bir süredir:

systemctl edit ollama
[Service]
Environment="OLLAMA_MODELS=/var/lib/ollama/models"
Environment="OLLAMA_KEEP_ALIVE=30m"
Environment="OLLAMA_NUM_PARALLEL=1"
Environment="OLLAMA_MAX_LOADED_MODELS=1"
systemctl daemon-reload && systemctl restart ollama

Paralel istekler ve birden fazla yüklü model, bellek kullanımını katlar; tam olarak bir modeli barındıracak şekilde boyutlandırılmış bir makinede ikinci bir kopya için yedek gigabayt yoktur. Kuyruğu sıralı hâle getirmek bu donanımda bir kısıtlama değildir; çökmeyen tek yapılandırmadır.

Adım 03 · Ölç

Kendi rakamınızı elde edin. Başkasının benchmark'ı sizin makineniz hakkında değildir.

Bir model indirin. İlk ölçüm için güncel 8B sınıfı instruct modellerinden herhangi biri yeterlidir — boyut olarak yeterince yakınlar, bu yüzden zamanlama size model hakkında değil donanım hakkında bilgi verir:

ollama pull llama3.1:8b        # ~4.9 GB at Q4_K_M
ollama list
ollama ps                      # nothing resident yet

Şimdi zamanlamalar açıkken bir üretim çalıştırın. Önemli olan sayı eval rate'dir — prompt okunduktan sonra saniyede üretilen token sayısı:

ollama run llama3.1:8b --verbose "Reply with exactly one sentence about the Baltic Sea."
total duration:        14.2s
load duration:          3.1s
prompt eval count:        24 token(s)
prompt eval rate:      92.11 tokens/s      ← reading: fast
eval count:               38 token(s)
eval rate:              3.42 tokens/s      ← writing: the real ceiling

İki satır, iki farklı dünya. Okuma saniyede doksan küsur token hızında çalıştı; yazma ise üç buçukta. Bu oran, aritmetik bölümündeki asimetridir, kendi donanımınızda ölçülmüştür ve bugün toplayacağınız en kullanışlı tek gerçektir. Şunu söyler: bu sunucuya uzun girdiler verin ve kısa çıktılar isteyin.

İki veya üç model boyutu arasındaki karşılaştırmayı script'lemeyi düşünüyorsanız asıl istediğiniz şey olan, API üzerinden aynı ölçüm:

apt install -y jq

curl -s http://127.0.0.1:11434/api/generate -d '{
  "model":  "llama3.1:8b",
  "prompt": "List three Nordic capitals.",
  "stream": false
}' | jq '{
  tokens: .eval_count,
  seconds: (.eval_duration / 1000000000),
  rate: (.eval_count / (.eval_duration / 1000000000))
}'

Alttaki boyutu ve üstteki boyutu ölçün, sonra durun. Bir 3B ve bir 14B indirin, aynı prompt'u her ikisinden geçirin ve üç hızı da not edin. Artık bu makinede takasın tam olarak neye mal olduğunu biliyorsunuz — genellikle her iki yönde de ikiye katlanmaya yakın bir şey — ve fikre göre değil işe göre seçim yapabilirsiniz. Ardından tutmayacağınız modelleri kaldırın, çünkü her biri birkaç gigabayttır.

Herhangi bir modelin ilk çalıştırmasında bir uyarı: o çıktıdaki load duration, ağırlıkların diskten RAM'e okunması için harcanan süredir. Bu, yalnızca model henüz bellekte yüklü değilse ödenir — bunu kontrol eden şey OLLAMA_KEEP_ALIVE'dır. Hızları karşılaştırırken bunu dahil etmeyin ve bundan kaygılanmayın — NVMe'de birkaç saniyedir ve yalnızca bir kez olur.

Adım 04 · Koru

Ollama'da kimlik doğrulama yok. Hiç yok. Zayıf bir tanesi değil — hiç yok.

Bu, kılavuzun kötü bir şeyin olmasını engelleyen kısmı, bu yüzden çekinmeden söylenir: Ollama API'sinin parolası, token'ı, kullanıcı modeli veya izin sistemi yoktur. 11434 portuna TCP bağlantısı açabilen her şey CPU'nuzda metin üretebilir, indirdiğiniz modelleri listeleyebilir, yenilerini indirebilir ve kullandıklarınızı silebilir. Açılacak bir ayar yoktur, çünkü açılacak bir mekanizma yoktur.

11434 portu sürekli olarak taranır, bunun bariz bir nedeni vardır: açık bir model çalıştırıcısı, başkasına ait bedava işlem gücüdür. Belirti bir uyarı değildir. İki hafta boyunca yavaş hissettiren bir makine ve yaptığınız hiçbir şeyle örtüşmeyen bir bant genişliği grafiğidir. Servisi loopback'te tutun ve önüne kimin aradığını soran bir şey koyun.

Bu makinenin dışında hiçbir şey modele ihtiyaç duymuyorsa burada durun — zaten bitirdiniz. Loopback artı bir güvenlik duvarı eksiksiz bir yanıttır ve aynı VPS üzerinde çalışan bir ajan, bir otomasyon yığını veya bir web uygulaması, aşağıdakilerin hiçbirine gerek kalmadan modele 127.0.0.1 üzerinden ulaşır. Yalnızca başka bir makinedeki bir şeyin onu çağırması gerekiyorsa devam edin.

Proxy, ve token. Uzun rastgele bir token oluşturun, bir A kaydını sunucuya yönlendirin ve hem sertifikayı hem de kapıyı Caddy'nin halletmesine izin verin:

openssl rand -hex 32      # → the bearer token, store it in a password manager
apt install -y caddy

/etc/caddy/Caddyfile

llm.example.com {
    @unauthorised not header Authorization "Bearer PASTE_THE_HEX_TOKEN_HERE"
    respond @unauthorised "unauthorised" 401

    reverse_proxy 127.0.0.1:11434 {
        # Generation is slow by nature — do not let the proxy give up first.
        transport http {
            read_timeout 10m
        }
    }
}
systemctl reload caddy
ufw allow 80,443/tcp
ufw status                # 11434 must appear nowhere

Temel kimlik doğrulama yerine bir bearer token seçmenin ufak bir zarafeti var. Ollama, OpenAI uyumlu bir API sunar, her OpenAI istemcisi anahtarını tam olarak o başlıkla gönderir, böylece az önce oluşturduğunuz token, uygulamalarınızın zaten taşımayı bildiği API anahtarı hâline gelir. Hiçbir şeyin özel bir başlığa ihtiyacı yoktur ve erişimi döndürmek Caddyfile'da bir satır ve çağıran tarafta bir ortam değişkenidir.

Sunucu olmayan bir makineden doğrulayın. İlk çağrı reddedilmeli, ikincisi yanıt vermelidir:

curl -s -o /dev/null -w '%{http_code}\n' https://llm.example.com/api/tags
# → 401

curl -s https://llm.example.com/api/tags -H "Authorization: Bearer THE_TOKEN" | jq '.models[].name'
# → the list of models you pulled

Model sizin yerinize ajanlar tarafından çağrılacaksa, maruziyet sorusu uzak bir MCP sunucusu barındırma kılavuzunda daha kapsamlı ele alınmayı hak ediyor — TLS, token'lar ve nereden nereye erişilebilir olması gerektiği konusundaki aynı mantık, token yerine araç veren bir hizmete uygulanmış hâliyle.

Adım 05 · Bağlanma

Tek bir base URL, ve her şey zaten bu dili konuşuyor. Tek yaptığınız bir metni değiştirmek.

Ollama, kendi API'sinin yanı sıra /v1 üzerinde OpenAI uyumlu bir yüzey de sunar. Entegrasyon hikayesinin tamamı bu: OpenAI için yazılmış her şey — resmi SDK'lar, framework sarmalayıcıları, otomasyon node'ları — base URL ve anahtarı değiştirerek çalışır, başka hiçbir şey değişmez.

curl -s https://llm.example.com/v1/chat/completions \
  -H "Authorization: Bearer THE_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "llama3.1:8b",
    "messages": [{"role":"user","content":"Reply with the word OK."}]
  }' | jq -r '.choices[0].message.content'

Python'dan bakıldığında, barındırılan bir kurulumdan farklı olan tek satırlar en üstteki ikisidir:

from openai import OpenAI

client = OpenAI(
    base_url="https://llm.example.com/v1",
    api_key="THE_TOKEN",
)

r = client.chat.completions.create(
    model="llama3.1:8b",
    messages=[{"role": "user", "content": "Classify: 'the invoice is overdue'"}],
)
print(r.choices[0].message.content)

JSON isteyin, JSON alın. Otomasyon için tek en kullanışlı özellik kısıtlı çıktıdır. Ollama, modelin uslu durmasını ummak yerine yanıtı geçerli JSON olmaya zorlayabilir; bu da küçük bir modeli güvenilmez bir anlatıcıdan güvenilir bir ayrıştırıcıya dönüştürür — gözetimsiz çalışan bir iş akışı ile her kırkıncı öğede bozulan bir iş akışı arasındaki fark budur:

curl -s http://127.0.0.1:11434/api/generate -d '{
  "model":  "llama3.1:8b",
  "prompt": "Extract the total and the currency: Invoice 4021, 1 249,90 EUR due 30 days.",
  "format": "json",
  "stream": false
}' | jq -r .response
# → {"total": 1249.90, "currency": "EUR"}

Bir otomasyon yığınında da aynısı geçerlidir: n8n özel bir Ollama node'u ile gelir ve OpenAI node'u özel bir base URL kabul eder, böylece mevcut bir iş akışı tek bir kimlik bilgisini düzenleyerek yerel çıkarıma geçer. n8n kendi kendine barındırma kılavuzu otomasyon motorunun kendisini anlatır; mümkünse ikisini ayrı sunucularda çalıştırın, çünkü boşta 700 MB tüketen bir motor ile beş gigabayt isteyen bir model, sekiz gigabaytlık bir makinede mutsuz komşulardır.

Ve bu sunucunun asıl karşılığını verdiği yer olan embedding uç noktası. Embedding modelleri, üretim modellerinden iki büyüklük mertebesi daha küçüktür ve üretecek hiçbir şey olmadan parça başına tek bir geçiş yaparlar, bu yüzden bir CPU bunları neredeyse anlık hissettiren bir hızda işler:

ollama pull nomic-embed-text      # ~275 MB

curl -s http://127.0.0.1:11434/api/embed -d '{
  "model": "nomic-embed-text",
  "input": ["the first chunk of a document", "the second chunk"]
}' | jq '.embeddings | length'
Adım 06 · Sınırla

Sınırsız bir model çalıştırıcısı elinizdeki her şeyi kullanır. Ona sınırlar koyun.

Bağlamı sınırlayın. Bağlam uzunluğu, bellek kullanımının ana kadranıdır ve varsayılan değer küçük bir sunucunun istediğinden daha cömerttir. Bunu, en uzun gerçekçi prompt'unuzun gerçekte ihtiyaç duyduğu değere global olarak ayarlayın — çoğu sınıflandırma ve çıkarma işi dört bin token içinde rahattır — ve daha fazlasına ihtiyaç duyan nadir bir çağrıda istek başına yükseltin:

Environment="OLLAMA_CONTEXT_LENGTH=4096"
curl -s http://127.0.0.1:11434/api/generate -d '{
  "model": "llama3.1:8b",
  "prompt": "…a long document…",
  "options": { "num_ctx": 16384 },
  "stream": false
}'

Modelin bellekte ne kadar süre kalacağına karar verin. Bellekte yüklü bir model anında çağrılır ve birkaç gigabaytı rehin tutar. Yalnızca çıkarım için ayrılmış bir makinede sonsuza dek yüklü tutun; paylaşılan bir makinede ise bir süre sonra bellekten düşmesine izin verin. Bu değer istek başına da ayarlanabilir, böylece gece çalışan bir toplu iş modeli çalışması boyunca sabitleyip sonunda serbest bırakabilir:

OLLAMA_KEEP_ALIVE=-1     # resident until the service restarts
OLLAMA_KEEP_ALIVE=30m    # a sensible default on a shared box
OLLAMA_KEEP_ALIVE=0      # unload immediately after each request

ollama ps                # what is resident right now, and how much it holds

Kuyruğu sıralı hâle getirin. Tek bir modele karşı eşzamanlı iki istek iki kat hızlı gitmez; aynı doymuş bellek yolu için yarışırlar ve her biri yavaşlar, Ollama onları karşılamak için ikinci bir kopya yüklemeye karar verirse sunucunun RAM'i biter. Bu sınıf donanımda, önünde bir kuyruk olan, tek seferde bir istek, hem en hızlı hem de tek güvenli yapılandırmadır — OLLAMA_NUM_PARALLEL ve OLLAMA_MAX_LOADED_MODELS'in 02. adımda bire sabitlenmesinin nedeni budur.

Diski izleyin. Dört modeli karşılaştırmak geriye dört model bırakır ve her biri beş gigabayt olduğunda bu, hiçbir şey şikayet etmezken sessizce dolan bir disk demektir. Temizliği sonraya bırakılacak bir görev değil, karşılaştırmanın bir parçası yapın:

ollama list
du -sh /var/lib/ollama/models
ollama rm mistral:7b qwen2.5:14b

Son olarak, yeniden üretilemeyen şeyi yedekleyin. Model ağırlıkları buna dahil değil — bir indirme onları geri getirir. Bir depoya değer olan şey; yapılandırma, Caddyfile, token, üç hafta boyunca inceltiğiniz promptlar ve eğer oluşturduysanız retrieval'ınızın arkasındaki vektör indeksidir. Şifreli yedekleme kılavuzu mekaniği anlatır; bu sunucu için dahil edilecek liste kısadır ve yazmaya değer.

İyi kısım · Retrieval

CPU'nun tezi çürüttüğü yer. Embedding yavaş değildir.

Yukarıdakilerin hepsi, bir CPU'nun yavaş yaptığı kısım olan üretimle ilgiliydi. Retrieval, çoğu kullanışlı sistemin diğer yarısıdır ve tabloyu tamamen tersine çevirir — bu yüzden bu sayfadaki en ucuz paket, üzerinde hiç token üretmeseniz bile gerçekten değerli bir şey yapabilir.

Bir embedding modeli bir metin parçasını bir vektöre dönüştürür. Gigabayt değil, yüzlerce megabayt cinsinden ölçülür; parça başına tam olarak bir ileri geçiş yapar ve bellek bant genişliğine bağımlı olan token-token döngüsü yoktur. 8B bir modelin saniyede üç kelime yazdığı aynı sunucuda, bir embedding modeli bir belge kütüphanesini dosya kopyalamayı andıran bir hızda işler.

Bunun şekli. Belgelerinizi birkaç yüz kelimelik parçalara bölün. Her parçayı bir kez embed edin ve vektörü saklayın. Soru zamanında soruyu embed edin, en yakın birkaç parçayı bulun ve bunları soruyla birlikte bir modele verin. Depolama için egzotik bir şeye gerek yok: vektör eklentili bir SQLite veritabanı, tek bir VPS'te on binlerce parça için yeterlidir, pgvector'lü PostgreSQL ise bunun çok ötesini kapsar. Özel bir vektör veritabanı, ilerideki bir gün için istenecek güzel bir şeydir ama ilk günden gereksiz bir bağımlılıktır.

Bunun neden hızdan daha önemli olduğu. Her yarısının neye dokunduğuna bakın. Üretim adımı bir soru ve birkaç paragraf görür. Embedding adımı ise <em>sahip olduğunuz her belgeyi</em> görür — tüm arşiv, her sözleşme, her not, her mesaj, modelden tek seferde bir parça olarak geçirilir. Bu adım barındırılan bir uç noktaya karşı çalışıyorsa, tüm arşiviniz indekslenmek üzere bir üçüncü tarafa aktarılmış demektir. Kendi makinenizde çalışıyorsa, hiçbiri yerinden kımıldamamıştır.

Bu, öncü kaliteden vazgeçmek istemeyen herkes için gerçekten iyi bir hibrit sağlar: yerel olarak indeksleyin, yerel olarak retrieval yapın ve yanıtın mükemmel olması gerektiğinde yalnızca soruyu ve getirilen üç parçayı barındırılan bir modele gönderin. Arşiv evde kalır; ondan ince bir dilim, ve yalnızca talep üzerine yolculuk eder.

Bu sitedeki iki komşu, bu deseni somutlaştırır. Kendi barındırılan bir SearXNG, retrieval katmanına bir arşiv yerine açık web için özel bir ön yüz verir; kendi kendine barındırılan bir belge deposu ise ona arşivi verir. İkisi de, artı model, tek bir barındırılan koltuktan ayda daha ucuza mal olan paketlere sığar.

Modelin altındaki katman

Hassas olan kısım prompt'lardır. Yanıtlar değil — sorular.

İnsanlar model gizliliği hakkında sanki risk çıktıdaymış gibi düşünüyor. Değil. Çıktı jenerik bir metindir; binlerce başka insan da benzer bir şey almıştır. Açığa çıkarıcı olan artefakt girdidir — ve bir yıllık girdiler bir kuruluşun oldukça eksiksiz bir portresidir.

Bir istek kaydının gerçekte ne içerdiğini düşünün. Özetlenmesi için yapıştırdığınız sözleşme. İçinde müşterinin de yer aldığı, sınıflandırılmasını istediğiniz müşteri e-postası. Tıbbi mektup, maaş rakamı, taslağını hazırladığınız istifa dilekçesi, herkese açık olmayan bir depodan gelen kod. Sonra da etrafındaki meta veri: hangi sorular, hangi sırayla, hangi saatte, hangi adresten, kaç ay boyunca. Kimse "işte stratejimiz" yazan bir belge imzalamaz — ama soruların sırası, sizin tarafınızdan, dürüstçe, tek seferde bir çağrı ile derlenen o belgenin ta kendisidir.

Birinci katman — uç noktanın tuttuğu şey. Ciddi sağlayıcılar ciddi politikalar yayımlar ve iyi olanlar iş API trafiği üzerinde gerçekten eğitim yapmaz. Bu, kaydetmemekle aynı vaat değildir. İstekler tipik olarak kötüye kullanım izlemesi için bir süre saklanır, tanımlı koşullar altında personel tarafından erişilebilirdir ve yasal süreç kapsamında ibraz edilebilir — bu, büyük bir platformu işletmenin tam olarak doğru yolu ve bir yabancıya e-postayla göndermeyeceğiniz bir metin için tam olarak yanlış yerdir. Kendi makinenizdeki bir model, siz bir tane yazmadıkça böyle bir kayıt tutmaz.

İkinci katman — kaydın eşleştiği kimlik. Tek başına saklama, maruziyetin yalnızca yarısıdır. Diğer yarısı eşleştiği anahtardır: bir hesap, bir şirket adı, bir fatura adresi, bir kart. Bu eşleşme, "birisi bir rakibi satın almak hakkında soru sordu"yu "bu şirket, o salı günü sordu"ya dönüştüren şeydir. Modeli denklemden çıkarmak saklamayı kaldırır; kimliği makineden çıkarmak eşleşmeyi kaldırır. E-posta adresi veya kimlik belgesi olmadan, Nordic bir yargı bölgesinde açılmış, Monero ile ödenmiş bir VPS, aynı hamlenin diğer yarısıdır.

Üçüncü katman — kendi yazdığınız kayıtlar. Kendi kendine barındırma riski silmek yerine taşır, ve bunun nereye düştüğü konusunda net görüşlü olmakta fayda var. Uygulamanız muhtemelen kendi prompt'larını kaydediyor. Ters proxy'niz her istek satırını kaydediyor. İki ay önceki bir hata ayıklama oturumu, journal'da ayrıntılı çıktı bırakmış olabilir. Modelin kendisi çağrılar arasında hiçbir şey tutmaz, ama etrafındaki makine her şeyi tutabilir — bu yüzden neyin kaydedileceğine bilinçli olarak karar verin, üzerine bir saklama süresi koyun ve o kaydı, başkasından kabul etmeye yanaşmayacağınız standarda tutun.

Bunların hiçbiri, yerel bir modeli tek başına bir gizlilik garantisi yapmaz. Onu, garantiyi vermenin size ait olduğu tek mimari yapar: metin, kiraladığınız donanımda, seçtiğiniz bir yargı bölgesinde, verdiğiniz bir token'ın arkasında kalır ve başka hiçbir şeye hesap vermez.

Saha notları · Altı tuzak

İnsanları hayal kırıklığına uğratan altı yol. Bunlardan beşi önlenebilir.

Tuzak 01 · Bellek

Sunucu yavaşlamak yerine dondu

Model artı bağlam önbelleği RAM'i aştı ve kernel her token'da ağırlıkları swap etmeye başladı. Belleğe sığdırın ya da bir boyut küçültün — ortası yoktur.

Tuzak 02 · Maruziyet

Başka biri CPU'nuzu kullanıyormuş

Bir istemcinin çalışması için OLLAMA_HOST 0.0.0.0 olarak ayarlandı. API'nin hiçbir kimlik doğrulaması yok ve 11434 taranıyor. Loopback artı bir token kontrol eden proxy.

Tuzak 03 · Beklenti

Çalışır, ve bir faks makinesi gibi yazar

Etkileşimli bir asistan için 32B bir model seçildi. Boyutu etkileşime göre ayarlayın: etkileşimli olan küçük ister, kalite olan asenkron ister.

Tuzak 04 · Bağlam

İlk istek sorunsuzdu, onuncusu sürünerek ilerledi

Büyüyen bir konuşma önbelleği de büyütür ve tüm geçmiş her turda yeniden okunur. Bağlamı sınırlayın, sonsuza dek eklemek yerine yeni bir konuşma başlatın.

Tuzak 05 · Kalıcılık

Beş gigabayt gitti ve hiçbir şey çalışmıyor

Model, tasarım gereği son çağrıdan sonra da bellekte kalır. OLLAMA_KEEP_ALIVE'ı sunucuya göre ayarlayın ve başka bir şeyi suçlamadan önce ollama ps'i okuyun.

Tuzak 06 · Disk

Disk, bir kez karşılaştırdığınız modellerle doldu

Her biri beş gigabayt olan dört aday, hiçbiri silinmemiş. ollama rm'i karşılaştırmanın bir parçası yapın ve disk uyarıları geldiğinde model dizinini kontrol edin.

SSS · Yerel modeller

Sorular, yanıtlandı.

Aklınızdaki iş için yalnızca CPU'lu bir modelin doğru araç olup olmadığına karar veren on soru.

GPU olmadan gerçekten LLM çalıştırılabilir mi?

Evet, hız hakkında dürüst bir uyarıyla birlikte. Nicelenmiş bir model, sıradan sunucu CPU'larında gayet iyi çalışır — ağırlıklar RAM'de durur, aritmetik rahatlıkla erişilebilirdir ve süreçte ekran kartı gerektiren hiçbir şey yoktur. Bir GPU'nun satın aldığı şey bellek bant genişliğidir ve üretim hızını belirleyen de bant genişliğidir. Bu yüzden yalnızca CPU'lu bir sunucu, modele bağlı olarak saniyede birkaç ila birkaç düzine kelime arasında, doğru ve eksiksiz biçimde yanıt verir. Bu, bir sohbet penceresi için yavaştır ve çoğu insanın gerçekte otomatikleştirdiği iş için tamamen uygundur: bir mesajı sınıflandırmak, bir belgeden yapılandırılmış JSON çekmek, bir sayfayı özetlemek, arama için metni embed etmek, bir paragrafı yeniden yazmak. Soru hiçbir zaman "yapabilir mi" değildir — "hangi hızda, ve bu hız bu iş için önemli mi"dir.

Saniyede kaç token beklemeliyim?

Bizimki de dahil olmak üzere kimsenin benchmark'ına güvenmek yerine hesabı kendiniz yapın. Yoğun bir model, tek bir token üretmek için ağırlıklarının tamamını bellekten okur, dolayısıyla tavan kabaca bellek bant genişliğinin model boyutuna bölümüdür. Yaklaşık 2 GB'a nicelenmiş bir 3B model, etkin 20 GB/sn'ye sahip bir makinede saniyede yaklaşık 10 token tavanına sahiptir; 4,4 GB'lık bir 7B yaklaşık 4,5'tir; 20 GB'lık bir 32B ise 1'in altındadır. Gerçek rakamlar tavanın altında kalır — yüzde 50 ila 70 diyelim — ve sunucuya, komşulara ve iş parçacığı sayısına göre değişir. Prompt işleme tamamen farklı bir konudur: işlem gücüne bağımlıdır, kat kat daha hızlı çalışır ve bu yüzden uzun bir belgeyi özetlemek rahatken büyük bir modelle sohbet etmek rahat değildir.

8 GB'da hangi modelle başlamalıyım?

Q4_K_M'de 8B sınıfında bir instruct model, yaklaşık 4,5 ila 5 GB'a oturur ve işletim sistemi ile bağlam önbelleği için yer bırakır. Bu boyut şu anki tatlı nokta: talimatları güvenilir biçimde izleyecek, istendiğinde geçerli JSON üretecek, özetleyecek, sınıflandıracak ve yeniden yazacak kadar yeterli; yanıt verebilir kalacak kadar küçük. Altında, bir 3B model sınıflandırma, etiketleme ve yönlendirme için gerçekten kullanışlıdır ve kabaca iki kat hızlıdır. Üstünde, bir 14B çok adımlı akıl yürütmede belirgin biçimde daha iyidir ve kabaca yarı hızdadır — toplu iş için makul bir takas, etkileşimli herhangi bir şey için kötü bir takas. 8B'den başlayın, ölçün, ardından ölçümün işaret ettiği yöne doğru ilerleyin.

Bir model gerçekte ne kadar RAM'e ihtiyaç duyar?

Nicelenmiş dosya boyutu, artı bağlam önbelleği, artı sistem için yer — ve toplamın sığması gerekir, çünkü başarısızlık biçimi yavaşlık değil çöküştür. Model sığmadığında kernel model ağırlıklarını diske swap etmeye başlar ve dört saniye sürmesi gereken bir üretim dört dakika sürerken load average onlara tırmanır. Q4_K_M'de çalışma kuralı olarak: bir 3B model yaklaşık 2 GB, bir 8B yaklaşık 5 GB, bir 14B yaklaşık 9 GB, bir 32B yaklaşık 20 GB, bir 70B yaklaşık 40 GB'dır. Debian ve servisleri için iki gigabayt ekleyin, izin verdiğiniz bağlamın uzunluğuna bağlı olarak anahtar-değer önbelleği için bir ila dört gigabayt daha ekleyin. Ardından tam uyan paketi değil, cevabın bir üstündeki paketi satın alın.

Ollama mı, llama.cpp mi?

Ollama, etrafına bir model kayıt defteri, bir REST API ve bir systemd servisi sarılmış hâliyle llama.cpp'dir. Aksini gerektiren özel bir sebebiniz olmadıkça Ollama kullanın: tek bir kurulum komutu, GGUF dosyaları aramak yerine ollama pull, OpenAI uyumlu bir uç nokta ve iş parçacığı sayısı ile bellek için makul varsayılanlar. Ollama'nın sunmadığı bir bayrak istediğinizde, yeniden üretilebilirlik için tam bir sürümü sabitlemek istediğinizde veya sonsuza dek tek bir yapılandırmayla tek bir model çalıştırıp hiçbir şeyi yönetecek bir daemon istemediğinizde doğrudan llama.cpp'ye yönelin. İkisi de aynı ağırlıkları aynı hızda çalıştırır; fark tamamen operasyonlardadır.

Kendi barındırdığınız bir model, büyük barındırılan modeller kadar iyi mi?

Hayır, ve aksini varsaymak öğleden sonranızı çöpe atar. Bir API'nin arkasındaki öncü bir model, bir sanal makineye sığabilecek her şeyden büyüktür ve zor akıl yürütme, uzun bağlam ve kodda daha iyi olacaktır. Küçük bir yerel modelin gerçekten rekabetçi olduğu yer, gerçek işin devasa orta kesimidir: bir e-postanın altı kategoriden hangisine ait olduğuna karar vermek, bir faturadan beş alan çıkarmak, bir destek konuşmasını özetlemek, bir açıklamayı yeniden yazmak, bir belgeyi etiketlemek, iki kaydın aynı kişi olup olmadığına karar vermek. Bu tür görevler için bir 8B ile öncü bir model arasındaki fark küçüktür, maliyet farkı toptandır ve gizlilik farkı mutlaktır. Verimli tutum "API'yi değiştirmek" değil, "asla ayrılması gerekmeyen yüzde doksanı ona göndermeyi bırakmak"tır.

Ollama'da kimlik doğrulama var mı?

Hayır — hiç yok, ve bu kılavuzdaki en önemli operasyonel gerçek budur. Parola yok, token yok, kullanıcı modeli yok. 11434 portuna TCP bağlantısı açabilen herkes metin üretebilir, modellerinizi listeleyebilir, yenilerini indirebilir ve mevcut olanları silebilir. Bu port düzenli olarak taranır ve korumasız örnekler yabancılar tarafından bulunup bedava işlem gücü olarak kullanılır — bu da önce esrarengiz bir load average, ardından bir bant genişliği faturası olarak ortaya çıkar. Ollama'yı 127.0.0.1'e bağlı tutun, önüne bir ters proxy koyun, TLS'i orada sonlandırın ve proxy'de bir bearer token veya istemci sertifikası zorunlu kılın. Kutunun dışında hiçbir şey modele ihtiyaç duymuyorsa, onu hiç dışarı açmayın.

n8n veya ajan çalışma zamanım yerel bir modeli kullanabilir mi?

Evet, ve genellikle tek bir alan yeterlidir. Ollama, /v1 üzerinde OpenAI uyumlu bir API sunar, bu yüzden bir base URL ayarlamanıza izin veren her istemci — OpenAI SDK'ları, LangChain, n8n OpenAI node'u, çoğu ajan framework'ü — https://your-host/v1'e işaret ederek ve anahtar olarak boş olmayan herhangi bir metin göndererek onunla konuşur. n8n ayrıca özel bir Ollama node'u ile de gelir. Pratikte iyi işleyen desen hibrit olanıdır: yığın hâlindeki, sıkıcı, yüksek hacimli çağrıları yerel modele yönlendirin ve gerçekten öncü akıl yürütme gerektiren az sayıdaki adımı, yerel model geçerli JSON üretmeyi reddederse bir yedek planla birlikte, barındırılan API'ye ayırın.

CPU'da embedding çalıştırmaya değer mi?

Bu sayfadaki en iyi değer/fiyat oranına sahip şeydir. Embedding modelleri ufaktır — gigabayt değil, onlarca ila yüzlerce megabayt — ve token-token üretim olmadan parça başına tek bir ileri geçiş yaparlar, bu yüzden bir CPU bunların içinden keyifle geçer. Bu, bir RAG sisteminin tüm retrieval yarısının — belgelerinizi indeksleyin, sorguyu embed edin, en yakın parçaları bulun — en ucuz pakette rahatça çalıştığı anlamına gelir, aynı zamanda sahip olduğunuz her belgeye dokunan yarısıdır da. Üretim adımının barındırılan bir API'ye ait olmasına karar verseniz bile, embedding adımını kendi makinenize taşımak arşivinizi başkasınınkinden uzak tutar.

Bir API daha hızlı ve ucuzken modeli neden kendi kendine barındırayım ki?

Önem sırasına göre artan üç neden. Maliyetin bir şekli vardır: bir API belirli bir noktaya kadar ucuzdur, ve ayda elli bin mesajı sınıflandıran bir iş akışının faturası büyürken bir $7.90 VPS'inki büyümez. Erişilebilirlik: hız sınırı yok, üzerine kurduğunuz modelin kullanımdan kaldırılması yok, başkasının durum sayfasında kesinti yok. Ve kararı veren neden — prompt'larınız ürettiğiniz en açığa vurucu metindir. Yanıtlar değil, sorular. Ne sordunuz, kimin hakkında, hangi gün, hangi sırayla. Barındırılan bir uç nokta bunların hepsini görür, bir fatura kimliğiyle eşleştirilmiş olarak. Kimlik belgesi olmadan, Nordic bir yargı bölgesinde kiraladığınız, Monero ile ödediğiniz bir makinede çalışan bir model ise aynı metni görür ve kimseye bildirmez.

Sunucuyu edinin

Yalnızca size yanıt veren bir model için Nordic VPS. KYC gerektirmez, kripto ile ödeme.

Garrison (4 vCPU, 8 GB, 240 GB NVMe, $7.90/ay) bağlam önbelleği ve sistem için yer bırakarak bir 8B model çalıştırır — çoğu kişinin başlaması gereken paket budur. Ravelin, 14B modeller ve uzun bağlamlar için belleği ikiye katlar. Kayıt sırasında e-posta yok, kimlik belgesi yok, token başına ücret yok.

Son inceleme · 2026-08-24 · Kaynaklar · Ollama belgeleri ve API referansı, llama.cpp belgeleri, Caddy ters proxy belgeleri, referans verilen nicelenmiş sürümler için yayımlanmış model kartları · Kadans · yıllık