GPU’suz LLM Olur mu? 16 Core’luk CPU’lu Bir VM’de 35 Milyar Parametreli MoE Modeli OpenCode ile Agent’a Dönüştürme Sürecim.

Aslında makalenin çıkış noktası GPU’suz ne kadar performanslı bir şekilde LLM+Harness yapısı kurabilirimdi. Verebileceğim CPU kaynağım 16 core’du ve RAM’i ise 64 olarak vermeyi planladım. Bu noktadan sonra yaptığım araştırmalarda sağlayabileceğim kaynaklara özel olarak en kullanılabilecek en efektir AI modelinin qwen3.6:35b-a3b olduğunu gördüm. LLM Service tarafında ise vLLM kullanamazdım çünkü GPU kaynağım yok bu yüzden ollama kullanmaya karar verdim. Son olarak Harness tarafı için ise OpenCode ile ilerlemeye karar verdim çünkü gayet geniş entegrasyonlara sahip bir harness yapısı.

Öncelikle LLM ve ollama için gerekli kaynaklarda bir Linux VM kurunuz. Yukarıda bahsettiğimiz gibi CPU kaynağını 16 core, RAM kaynağını ise 64 GB olarak verdim. Aynı zamanda 200 GB disk kaynağı verdim ve OS olarak ubuntu server 24.04 kullandım. Burada önemli noktalardan biri, sanallaştırma platformu üzerindeyseniz eğer, LLM VM’inin CPU’unu Host CPU olarak vermeniz gerekebilir.

Benzer şekilde Opencode için de bir Ubundu kurabilirsiniz. Kaynakları daha küçük olabilir. Mesela 4 core, 4 GB RAM ve 50-100 GB arası da disk.

VM ayağa kalktıktan sonra AVX2 ve AVX512f desteği kontrol edelim CPU passthrough ile gelmiş mi diye.

  • grep -o -w ‘avx2|avx512f’ /proc/cpuinfo | sort -u

AVX2 ve AVX512f x86 komut setinin uzantılarıdır.SIMD (Single Instruction, Multiple Data) komut setidir ve tek bir instruction ile bir sayı yerine birden fazla sayı ile işlem yapılmasını sağlar.

Bir de ekstra hızlandırma sağlayan VNNI desteğine de bakalım.

  • grep -o -w ‘avx512_vnni\|avx512_bf16\|amx_tile’ /proc/cpuinfo | sort -u

Sıra ollama kurmaya geldi. qwen bir modeldir ve tek başına çalışan bir yapıda değildir. Yaklaşık 20 GB boyutlarındaki bir veri dosyası özünde. ollama ise bu veri dosyasını RAM’e yükleyip CPU’da çalıştıran ve bir API açan servistır. OpenCode da bu API’ye bağlanır ve model ile konuşur.

Aşağıdaki komutlarla ollama kurulabilmektedir.

  • apt-get update && apt-get upgrade -y && apt-get install -y curl jq ufw
  • curl -fsSL https://ollama.com/install.sh | sh
  • ollama –version
  • systemctl status ollama

Bahsettiğimiz gibi bir GPU’muz yok. Bu yüzden CPU üzerinden devam edebileceğimizin uyarısını alıyoruz.

Ollama için genel birkaç ayarı tamamlamak için de yine aşağıdaki komut setini çalıştırabilirsiniz.

mkdir -p /etc/systemd/system/ollama.service.d

cat > /etc/systemd/system/ollama.service.d/override.conf <<‘EOF’

[Service]

Environment=”OLLAMA_HOST=0.0.0.0:11434″

Environment=”OLLAMA_KEEP_ALIVE=-1″

Environment=”OLLAMA_CONTEXT_LENGTH=32768″

Environment=”OLLAMA_NUM_PARALLEL=1″

Environment=”OLLAMA_MAX_LOADED_MODELS=1″

EOF

systemctl daemon-reload

systemctl restart ollama

-OLLAMA_KEEP_ALIVE=-1 -> Modeli RAM’den hiç atmaz.

-OLLAMA_CONTEXT_LENGTH=32768 -> Context değerini 32K seviyelerine getirdik.

Opencode üzerinden gelecek istekler için de fw kurallarını ekleyelim.

  • ufw allow OpenSSH
  • ufw allow from <opencode-ip> to any port 11434 proto tcp
  • ufw –force enable
  • ufw status

Artık modeli indirmeye başlayabiliriz.

  • ollama pull qwen3.6:35b-a3b

Modelin inmesinin ardından test edelim. Bu model reasoning desteklediğinden hem reasoning açıkken hem de kapalıyken test edebilirsiniz hızlarını görmek için. Ancak ilk çalıştırmada modelin diskten RAM’e transferi gerçekleştiğinden beklendiğinden biraz daha geç cevap verebilir. Devamındaki girdilerin çıktıları ise görece ilkine göre ço kdaha hızlı olmasını bekliyoruz.

  •  ollama run qwen3.6:35b-a3b –think=false
  •  ollama run qwen3.6:35b-a3b –think=true

İlk çalıştırmada model diskten ram’e yüklendiğinden görece biraz daha uzun sürebilir ilk yanıtın gelmesi.

Yanıt gelirken de CPU tarafında steal time’a bakmak kritik çünkü modelin bulunduğu vm, cpu zamanı olarak bekletiliyor mu yani cpu kaynağına erişmesi zaman alıyor mu bunu kontrol edebiliriz. Eğer yanıt çok uzun sürede geliyorsa burada bahsettiğimiz gibi cpu wait süresi uzuyor olabilir.

Harness Tarafına Geçelim

Burada Opencode tercih ettim. Bunu local PC’mizde de kurabiliriz ancak izole ve testler sırasında yıkıcı sonuçlar doğurmasından çekiniyorsanız başka bir sunucuda da kurabilirsiniz. Ben ubuntu 24.04 üzerine kurmayı tercih ediyorum.

İlk olarak sistem güncellemesi ve temel paketleri kuralım.

  • sudo apt-get update && sudo apt-get upgrade -y
  • sudo apt-get install -y curl git ufw

Devamında Node.js ve OpenCode’u kuralım

Opencode için config dosyamızı ve proje directory’mizi  hazırlayalım ve opencode’u deneyelim.

mkdir -p /home/opencode/.config/opencode cat > /home/opencode/.config/opencode/opencode.json <<‘EOF’ { “$schema”: “https://opencode.ai/config.json“, “provider”: { “ollama”: { “npm”: “@ai-sdk/openai-compatible”, “name”: “Ollama (Qwen)”, “options”: { “baseURL”: “http://<LLMServerIP>:11434/v1” }, “models”: { “qwen3.6:35b-a3b”: { “name”: “Qwen3.6 35B-A3B”, “options”: { “reasoningEffort”: “none” }, “limit”: { “context”: 32768, “output”: 8192 } } } } }, “model”: “ollama/qwen3.6:35b-a3b” } EOF chown -R opencode:opencode /home/opencode/.config

http://LLMServerIP:11434/v1 kısmına yukarıda hazırladığınız llm serverinizin ip adresini yazınız.

  • mkdir -p ~/projeler/deneme && cd ~/projeler/deneme
  • git init
  • opencode

Shell ekranında opencode’un geldiğini görmemiz gerekiyor.

Ayrıca reasoning eforunu da config dosyası içerisinde değiştirebilirsiniz.

 vim ~/.config/opencode/opencode.json

Terminal yerine herhangi bir erişim olan yerden browser üzerinden opencode’a erişmek için ise opencode sunucunuzda aşağıdaki gibi user ve şifre tanımlayarak publish edebilirsiniz. Ancak burada Terminal o an meşgul kalır.

OPENCODE_SERVER_USERNAME=’ali’ OPENCODE_SERVER_PASSWORD=’StrongPassword’ opencode web –hostname 0.0.0.0 –port 4096

Şimdi el ile kendimiz başlatmayalım her seferinde Opencode’u. Bir servis haline getirelim.

Aşağıdaki <Şifreniz> kısmında şifre belirleyin

mkdir -p /etc/opencode

cat > /etc/opencode/web.env <<‘EOF’

OPENCODE_SERVER_USERNAME=opencode

OPENCODE_SERVER_PASSWORD=<Şifreniz>

EOF

chmod 600 /etc/opencode/web.env

cat /etc/opencode/web.env

cat > /etc/systemd/system/opencode-web.service <<‘EOF’

[Unit]

Description=OpenCode web arayuzu

After=network-online.target

Wants=network-online.target

[Service]

User=opencode

Group=opencode

WorkingDirectory=/home/opencode/projeler

Environment=HOME=/home/opencode

EnvironmentFile=/etc/opencode/web.env

ExecStart=/usr/bin/opencode web –hostname 127.0.0.1 –port 4096

Restart=on-failure

RestartSec=5

[Install]

WantedBy=multi-user.target

EOF

systemctl daemon-reload

systemctl enable –now opencode-web

systemctl status opencode-web –no-pager

ss -tlnp | grep ‘:4096’

Kendi browserinizden erişmek isterseniz local Powershell’inizde ssh port yönlendirme yapmanız gerekebilir opencode sunucunuza doğru.

ssh -L 4096:localhost:4096 opencode@<IP>

Ardından PFT to Text toolu kuralım çünkü pdf incelemesi istendiğinde bu lazım olmaktadır.

Browserden ise http://localhost:4096/ şeklinde opencode’a erişebilirsiniz.

apt-get install -y poppler-utils

Kurulduktan sonra proje dizininize moba veya başka bir tool ile ilgili pdf dosyasını atınız ve aşağıdaki gibi bir promt kullanınız.

report.pdf dosyasını pdftotext -layout ile metne çevir ve oku ve sana sorduğum soruları cevapla.

Denemelere başlayabilirsiniz.


Posted

in

by

Tags:

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *