Ollama num_predict ile cikis token sayisi nasil sinirlanir
Ollama num_predict ayari ile modelin uretecegi maksimum token sayisini belirleyin. Hangi ayarin oncelikli oldugunu, done_reason parametresini ve num_ctx farkini ogrenin.
Ollama icerisinde num_predict ne ise yarar
num_predict, bir modelin tek bir yanitta uretebilecegi token sayisini sinirlandiran Ollama ayaridir. Yalnizca cikis tokenlarini sayar, bu nedenle istem (prompt) bu sinira dahil edilmez. Model sinira ulastiginda uretim oldugu yerde durur; bu durum bazen kelime ortasinda gerceklesebilir ve yanit, done_reason degeri length olarak ayarlanmis sekilde doner.
Ozelligin tamami bundan ibarettir. Zorluk, Ollama'nin bu degeri ayarlamaniz icin size uc ayri yer sunmasi ve istege en yakin olan ayarin gecerli olmasidir. "num_predict hicbir sey yapmiyor" seklindeki neredeyse tum bildirimler, bir katmanin digerini sessizce gecersiz kilmasindan kaynaklanir.
num_predict, num_ctx ile aynı şey değildir
Ollama içerisinde en çok karıştırılan iki ayar bunlardır ve bu karışıklık ciddi hata ayıklama sürelerinin kaybedilmesine neden olur.
num_ctx, modelin ne kadar okuyabileceğini belirler. Bu, istemi ve şimdiye kadar üretilen her şeyi barındıran bağlam penceresinin (context window) boyutudur. Bu değeri artırmak bellek kullanımını artırır; çünkü modelin bu belirteçler (tokens) için tuttuğu anahtar/değer önbelleği, pencere boyutuyla birlikte büyür. Donanımınız için num_ctx boyutlandırma işlemi, kendine has hata modları olan ayrı bir görevdir.
num_predict, modelin ne kadar yazacağını belirler. Bu bir bellek ayırma işlemi değil, bir durdurma kuralıdır. Bu değeri artırmak RAM yerine işlem süresini etkiler ve önceden ayrılan herhangi bir kaynak yoktur.
Bu iki ayar tek bir noktada kesişir. Üretilen belirteçler, oluşturuldukça bağlam penceresinin içine yerleşir. Bu nedenle bir yanıt, belirlediğiniz sınıra ulaşıldığı için değil, bağlam penceresi dolduğu için de durabilir. Ollama her iki durumda da length raporu verir; bu yüzden ikisini birbirinden ayıran değer, aşağıda detaylandırılan eval_count değeridir.
Bir Modelfile ile tek seferde ayarlayın
Bir Modelfile, değeri oluşturduğunuz bir modele kalıcı olarak işler. Dosyayı şu şekilde yazın:
FROM qwen3:8b
PARAMETER num_ctx 8192
PARAMETER num_predict 512Ardından modeli derleyin ve oluşturduğunuz içeriği görüntüleyin:
ollama create qwen3-capped -f Modelfile
ollama show --parameters qwen3-cappedollama show --parameters, depolanan her parametreyi değeriyle birlikte tek bir satırda yazdırır. Eğer num_predict bu çıktıda yer almıyorsa, modelin içinde tanımlı bir sınır yoktur ve Ollama'nın kendi varsayılan değeri geçerli olur. ollama show --modelfile qwen3-capped, tüm tanımı yazdırır; bu yöntem, mevcut bir modelin halihazırda sahip olduğu parametreleri kopyalamanın en hızlı yoludur.
Bu katman, her çağrıcının devralmasını istediğiniz bir değer için doğru yerdir. Eğer değerin nihai olmasını bekliyorsanız bu katman yanlıştır, çünkü bu değer nihai değildir.
Seçenekler nesnesi içinde istek bazlı ayarlama
Her üretim uç noktası bir options nesnesi alır ve num_predict bunun içine yerleştirilir:
curl http://localhost:11434/api/generate -d '{
"model": "qwen3:8b",
"prompt": "Explain what a reverse proxy does.",
"stream": false,
"options": { "num_predict": 128 }
}'/api/chat, aynı anlama gelen aynı options anahtarını kullanır. Buradaki değer yalnızca o çağrı için geçerlidir ve başka hiçbir şeyi etkilemez. Burası araçlarınızın kullandığı katmandır: bir sohbet arayüzü, bir betik, bir SDK sarmalayıcısı veya bir kodlama ajanı. Bunların hepsi, size bunun için bir kutu gösterseler de göstermeseler de bir options nesnesi gönderir.
/set parametresi ile tek oturumluk yapılandırma
ollama run içerisinde, etkileşimli oturum, seçenekleri o oturumun geri kalanı için ayarlar:
>>> /set parameter num_predict 256
>>> /show parameters/show parameters, bir sonraki mesajınızla birlikte oturumun ne göndereceğini yazdırır; bu, bir değişikliğin etkili olduğunu doğrulamanın en hızlı yoludur. Değer, /bye yazana kadar geçerliliğini korur. Ayarı kalıcı hale getirmek için /save qwen3-capped, parametreler dahil mevcut oturumu yeni bir model olarak kaydeder. Burada /set yaptığınız hiçbir şey başka bir istemciye ulaşmaz.
Hangi ayar geçerli olur ve ayarlarınız neden yok sayılıyor gibi görünür
Sıralama kısadır. İstekle birlikte gönderilen seçenekler her şeyin önüne geçer. Modelfile içindeki bir PARAMETER num_predict satırı, istekte herhangi bir değer bulunmadığında kullanılan yedek ayardır. İkisinin de olmadığı durumda, Ollama'nın yerleşik varsayılanı uygulanır.
/set parameter üçüncü bir kural değildir. Etkileşimli oturum bir API istemcisidir; bu nedenle orada ayarladığınız her şey, o isteğin options değeri olarak gönderilir. Modelfile ayarının oturum boyunca geçersiz kılınmasının nedeni tam olarak budur.
Şimdi bu durumun açıkladığı hataya bakalım. PARAMETER num_predict 512 ekleyip modeli yeniden oluşturuyorsunuz ancak yanıtlar hala binlerce token uzunluğunda oluyor. Ayarınız mevcut ve ollama show --parameters bunu kanıtlıyor. Ayarınız her istekte geçersiz kılınıyor çünkü istemci, kendi içinde kendi sayısını taşıyan options nesnesini gönderiyor; bu genellikle aylar önce bir ayarlar ekranına yazdığınız ve unuttuğunuz bir sayıdır. ollama show kayıtlı modeli okur. HTTP üzerinden neyin geldiğini size gösteremez.
Sunucu tarafını tek bir komutla doğrulayın. Uzun bir yanıt üretecek bir istek gönderin, sınırı düşük tutmaya zorlayın ve iki alanı okuyun:
curl -s http://localhost:11434/api/generate -d '{
"model": "qwen3-capped",
"prompt": "Describe the Linux boot process in detail.",
"stream": false,
"options": { "num_predict": 32 }
}' | jq '.done_reason, .eval_count'Bu komut "length" ve 32 değerlerini yazdırmalıdır. Eksikse sudo apt install -y jq ile önce jq paketini kurun. "length" ve 32 yanıtı, sunucunun seçeneğe uyduğunu ve uygulamanızın farklı bir değer gönderdiğini gösterir. Sunucunun bir isteğe dair kendi kayıtlarını görmek için, ortam değişkenlerine OLLAMA_DEBUG=1 ekleyerek sunucuyu yeniden başlatın ve uygulamanız sunucuyla iletişim kurarken journalctl -u ollama -f günlüğünü izleyin.
Negatif değerler ve kopyalamamanız gereken sayılar
num_predict negatif değerleri de kabul eder; ancak bunlar birer sayaç değil, işaretçi (sentinel) değerlerdir. Bir negatif değer "sınırlandırma, üretmeye devam et" anlamına gelir. Bir diğeri ise "kalan bağlamı doldur" anlamında kullanılmıştır. Ağustos 2026 itibarıyla Ollama Modelfile referansı varsayılan değeri -1, yani sonsuz üretim olarak belirtmektedir; aynı tablonun önceki sürümlerinde ise bağlamı doldurmak için -2 değeri listelenmiştir.
Tüm bunları sürüme bağlı değişkenler olarak değerlendirin, çünkü bu değerler zamanla değişmiştir. Referans dokümanı, 2024 yılı sonunda düzeltilene kadar uzun süre varsayılan değeri 128 olarak göstermiştir; bu nedenle birçok kılavuz hala eski sayıyı tekrarlamaktadır. Çalıştırdığınız sürüm için Modelfile parametre referansını okuyun ve ardından yukarıdaki eval_count kontrolü ile davranışı doğrulayın. Kendi sunucunuzda doğruladığınız bir değer, bu yazı dahil olmak üzere herhangi bir yerde okuduğunuz değerden daha güvenilirdir.
CPU tabanlı bir VPS üzerinde çıktı uzunluğunun temel maliyet kalemi olmasının nedeni
Üretim süreci, birbirinden çok farklı hızlarda işleyen iki aşamadan oluşur. İstemi oluşturan token'lar toplu halde, aynı anda birçok adet olacak şekilde değerlendirilir. Çıktı token'ları ise tek tek üretilir ve her biri için model ağırlıkları üzerinden tam bir geçiş yapılması gerekir. CPU tabanlı bir VPS üzerinde bu geçiş, bellek bant genişliği ile sınırlıdır; bu nedenle üretilen bir token'ın maliyeti, bir istem token'ının maliyetinden çok daha yüksektir.
Akış (streaming) özelliği kapalı bir yanıt talep ettiğinizde rakamlar net bir şekilde ortaya çıkar:
"prompt_eval_count": 26,
"prompt_eval_duration": 107345000,
"eval_count": 237,
"eval_duration": 4289432000Süreler nanosaniye cinsindendir. Herhangi bir sunucunun ölçümü yerine Ollama API dokümantasyonunda örnek yanıt olarak yayınlanan bu blokta, 26 istem token'ı yaklaşık 0.1 saniye sürerken, 237 çıktı token'ı yaklaşık 4.3 saniye sürmüştür. Kendi üretim hızınız, eval_count değerinin eval_duration değerine bölünüp saniyeye çevrilmesiyle elde edilir ve kendi donanımınızda saniyedeki token sayısını ölçmek, başka herhangi bir ayar yapmadan önce mutlaka gerçekleştirilmelidir. Bu hız, makine kadar kullanılan modele de bağlıdır; bu nedenle uzun yanıtlar gerçek maliyeti oluşturuyorsa, VPS üzerinde Nemotron 3.5 Lightning gibi hızlı kod çözme (decoding) için optimize edilmiş bir model, düşük bir sınırın aksi takdirde koruyacağı sürenin bir kısmını geri kazandırır.
Geriye kalan tek şey aritmetiktir. Saniyede 8 token hızında, 2.000 token'lık bir yanıt makineyi dört dakikadan fazla meşgul eder ve model, sizin sadece bir paragraf istediğinizi bilemez. Bazı modeller ayrıca döngüye girerek bir ifadeyi, bir şey onları durdurana kadar tekrarlayabilir. Bir sınır olmadığında, bu tek istek bağlam penceresi dolana kadar bir çekirdeği meşgul eder. num_predict, bu durumu sınırlayan ayardır ve tek bir uzun isteğin tüm makineyi kilitlediği küçük bir kendi kendine barındırılan Ollama VPS üzerinde büyük önem taşır.
Kırpılmış çıktı genellikle bir sınırlandırmadır, model hatası değildir
Belirtiler model hatası gibi görünür. Cümlenin ortasında kesilen bir yanıt. Kapanış parantezi gelmediği için ayrıştırılamayan bir JSON. İlk refleks modeli veya kuantizasyonu suçlamaktır. Ancak önce yanıtı okuyun.
done_reason soruyu doğrudan yanıtlar. stop, modelin kendi kendine bittiği, yani ya dizi sonu belirtecini (end-of-sequence token) yaydığı ya da stop seçeneğinizdeki dizelerden biriyle eşleştiği anlamına gelir. length, üretim alanının tükenmesi nedeniyle kesintiye uğradığı anlamına gelir. length değerini gördüğünüzde, eval_count ile sınırınızı karşılaştırın: tam eşleşme num_predict değerinin durdurduğunu, daha küçük bir sayı ise bağlam penceresinin (context window) dolduğunu gösterir.
Akış (stream) sırasında bu alanlar, "done": true değerini taşıyan son parçada gelir. Birçok istemci kütüphanesi bu parçayı atar ve kodunuza yalnızca metni iletir; bu nedenle aynı kırpılma, bir uygulama içinde açıklanamaz görünürken curl altında bariz hale gelir. Eğer bir kütüphane bunu gizliyorsa, sunucunun gerçekte ne dediğini öğrenmek için curl ile bir istek gönderin.
Bir nokta daha, boşa harcanan bir öğleden sonrayı kurtarır. num_predict değerini artırmak, modelin daha fazla yazmasını sağlamaz. Sadece bir tavanı kaldırır. Eğer bir yanıt done_reason üzerinden stop ile 200 belirteçte (token) bitiyorsa, model işinin bittiğine karar vermiştir ve daha büyük bir sınır hiçbir şeyi değiştirmez. stop ile biten kısa yanıtlar bir istem (prompt) sorunudur. length ile biten kısa yanıtlar ise bir sınırlandırma sorunudur.
Bir değer seçimi
- Etkileşimli sohbetler için sınırı kaldırmalı ve kontrolsüz bir yanıtı durdurmak için Ctrl+C tuşlarını kullanmalısınız. Zaten ekranı izliyor olacaksınız.
- Betik ile çalıştırılan işlemler için mutlaka bir sınır belirleyin. Döngü içindeki sınırsız bir üretim, on dakika sürmesi gereken bir toplu işin ertesi sabah hala çalışıyor olmasına neden olur.
- Yapılandırılmış çıktılar için sınırı, beklediğiniz en büyük geçerli belgenin üzerinde bir değere ayarlayın; ardından
done_reasonilelengthdurumunu bir hata olarak ele alıp gelen veriyi ayrıştırmak yerine işlemi yeniden deneyin. - Bir kodlama aracısı için bu değer, aracının kendi yapılandırmasında yer almalıdır; çünkü aracı her istekte kendi seçeneklerini gönderir. Bir kodlama aracısını Ollama'ya yönlendirme bölümü, bu ayarların nerede bulunduğunu açıklar.
Sınır, kelimeleri veya karakterleri değil, token'ları sayar; bu nedenle tahminde bulunmayın. Sınırsız bir şekilde temsili bir yanıt oluşturun, eval_count değerini okuyun ve sınırı bu değerin rahatça üzerine ayarlayın. Model aileleri farklı şekilde token'laştırma yapar; bu nedenle bir Llama modeline uygun olan değer, aynı VPS üzerindeki bir Qwen 3 modeli için aynı yanıtı kırpabilir.
FAQ
Ollama'da num_ctx ve num_predict arasındaki fark nedir?
num_ctx, bağlam penceresinin boyutudur; dolayısıyla modelin ne kadar okuyabileceğini belirler: istem ve şimdiye kadar üretilen her şey. Bu değer bellek tüketir, çünkü anahtar/değer önbelleği (key/value cache) bu değerle birlikte büyür. num_predict ise modelin tek bir yanıtta kaç token yazabileceğini belirler. Bu değer bellekten ziyade zaman tüketir ve önceden herhangi bir alan ayrılmaz. Üretilen token'lar her iki sınıra da dahil edilir, bu nedenle bir yanıt her iki sınırdan biri nedeniyle kesilebilir.
num_predict ayarım neden yok sayılıyor gibi görünüyor?
Çünkü istek ile gönderilen bir değer, modelde saklanan değeri geçersiz kılar. Bir Modelfile içine PARAMETER num_predict 512 ekleyip ardından bu modeli bir sohbet arayüzü veya kodlama aracısı üzerinden çalıştırdığınızda, istemci kendi options nesnesini gönderir ve bu nesnedeki sayı geçerli olur. ollama show --parameters yine de sizin değerinizi yazdırır, çünkü sadece kayıtlı modeli okur ve HTTP üzerinden neyin geldiğini göremez. "options": {"num_predict": 32} kullanarak curl ile bir istek gönderin ve eval_count değerinin 32 olarak döndüğünü doğrulayın; bu, sunucunun doğru çalıştığını teyit eder ve sorunu uygulamanızın içinde aramanızı sağlar.
Çıktımın num_predict tarafından kesilip kesilmediğini nasıl anlarım?
İsteği "stream": false ile gönderin ve done_reason değerini okuyun. stop değeri, modelin kendi kendine tamamlandığı anlamına gelir. length değeri ise modelin alanının tükendiği anlamına gelir. Ardından eval_count değerini sınırınızla karşılaştırın: eğer tam olarak eşleşiyorlarsa num_predict işlemi durdurmuştur; eğer eval_count daha küçükse, bağlam penceresi önce dolmuştur. Akış (streaming) sırasında her iki alan da son parçada "done": true ile birlikte gelir; birçok istemci kütüphanesi, kodunuz görmeden önce bu veriyi atar.
num_predict varsayılan değeri nedir?
Bunu bir makaleden değil, kendi kurulumunuzdan okuyun. Ağustos 2026 itibarıyla Ollama Modelfile referansı varsayılan değeri -1 olarak belirtmektedir; bu, üretimin sınırlanmadığı anlamına gelir. Bu girdi, 128 değerinin yıllarca belgelenmesinin ardından 2024 sonunda düzeltilmiştir. Negatif değerler birer sayı değil, işaretçidir (sentinel); aynı tablonun eski sürümleri, kalan bağlamı doldurmak için -2 değerini de listelemiştir. Sürümünüz için Modelfile parametre referansını kontrol edin, ardından bunu ollama show --parameters ve bir curl isteği ile doğrulayın.
num_predict değerini artırmak modelin daha uzun yanıtlar yazmasını sağlar mı?
Hayır. Sadece bir tavan sınırını kaldırır. Eğer bir yanıt stop üzerinden done_reason ile bitiyorsa, model işinin bittiğine karar vermiştir ve daha yüksek bir sınır hiçbir şeyi değiştirmez. Bu durumda uzunluk bir istem (prompt) konusudur: belirli bir yapı, bölüm sayısı veya belirtilen bir detay düzeyi isteyin. num_predict değerini yalnızca done_reason değeri length olarak döndüğünde artırın.