performans ipuçları etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
performans ipuçları etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

19 Ekim 2025 Pazar

Tarayıcıda Python Çalıştırma Rehberi: WebAssembly ve Pyodide ile Adım Adım

WebAssembly (WASM) ve Pyodide sayesinde Python kodunu doğrudan tarayıcıda, sunucuya ihtiyaç duymadan çalıştırmak artık mümkün. Bu yazıda, Pyodide nedir, nasıl entegre edilir, paket yönetimi ve performans ipuçları nelerdir gibi sorulara adım adım yanıt veriyorum. Hedefimiz, hem modern web uygulamalarına Python gömmenin pratik yolunu göstermek hem de gerçek hayatta işinize yarayacak optimizasyon önerilerini sunmak.

Pyodide Nedir?

Pyodide, CPython yorumlayıcısını ve birçok bilimsel Python paketini WebAssembly’ye derleyerek tarayıcıda çalıştırmanıza olanak tanır. NumPy, Pandas, Matplotlib gibi kütüphanelerin “pure-Python” olanlarını veya WASM’a derlenmiş varyantlarını tarayıcıya getirir. Ağ bağlantısı olmasa bile, gerekli dosyalar indirildikten sonra kodunuzu yerel olarak işletir. Bu da interaktif eğitim içerikleri, gömülü veri görselleştirme, offline notebook deneyimleri ve güvenli istemci tarafı prototipleme için güçlü bir zemin sunar.

Hızlı Başlangıç: Basit Entegrasyon

Aşağıdaki minimal örnekle tarayıcıda Python çalıştırabilirsiniz. Kodu bir HTML dosyasına koyup açmanız yeterli.

<!-- Pyodide yükleyici -->
<script src="https://cdn.jsdelivr.net/pyodide/v0.26.0/full/pyodide.js"></script>
<script>
(async () => {
const pyodide = await loadPyodide({ indexURL: "https://cdn.jsdelivr.net/pyodide/v0.26.0/full/" });
await pyodide.runPythonAsync(`import sys; print(sys.version)`);
const result = await pyodide.runPythonAsync("sum(range(10))");
console.log("Python sonucu:", result);
})();
</script>

Burada loadPyodide ile WASM tabanlı Python ortamı yükleniyor, ardından runPythonAsync ile kod yürütülüyor. Konsolda Python sürümü ve örnek bir hesaplamanın sonucu görünecektir.

Paket Yönetimi: micropip ve Yerleşik Paketler

Pyodide, birçok popüler kütüphaneyi hazır olarak getirir. Ek bir pakete ihtiyaç duyduğunuzda micropip ile pure-Python paketleri (C uzantısı gerektirmeyenler) kolayca kurulabilir.

await pyodide.runPythonAsync(`import micropip; await micropip.install("requests")`);

NumPy veya Pandas gibi ağır paketler için Pyodide’ın yerleşik kaynaklarını kullanmak daha verimlidir. Bunlar çoğunlukla pyodide.loadPackage ile önceden yüklenebilir:

await pyodide.loadPackage(["numpy", "pandas"]);

Paket yüklemelerini sayfa ilk açılışında toplu yapmak, kullanıcı etkileşimi sırasında gecikmeleri azaltır. İlk kez yüklemede CDN’den indirme yapılırken, sonraki sayfa yenilemelerinde tarayıcı önbelleğinden faydalanılır.

Tarayıcı Dosya Sistemi ve Veri Paylaşımı

Pyodide, Emscripten’in sanal dosya sistemini (MEMFS) kullanır. JavaScript tarafındaki veriyi Python tarafına aktarmak için dosya sistemine yazmak pratik bir yöntemdir:

const csv = "a,b\\n1,2\\n3,4";
pyodide.FS.writeFile("/tmp/data.csv", csv);
await pyodide.runPythonAsync(`import pandas as pd; df = pd.read_csv("/tmp/data.csv"); print(df.sum().to_dict())`);

Alternatif olarak, doğrudan JS-Python köprüsünden yararlanabilir ve pyodide.toPy / pyodide.toJs ile veri alışverişi yapabilirsiniz. Büyük verilerde kopyalamayı en aza indirmek için bu köprüleri tercih edin.

Performans İpuçları

- Lazy yükleme yapın: İlk ekranda gerekmeyen büyük paketleri, kullanıcı etkileşimiyle tetiklenen aşamada yükleyin.
- runPython yerine runPythonAsync kullanın: Uzun süren işlemler UI’ı kilitlemesin.
- Ön ısıtma (warm-up): Sayfa yüklenir yüklenmez küçük bir Python ifadesi çalıştırmak, JIT yoksa bile modül başlatmalarını önceden yaparak ilk gerçek görevde gecikmeyi azaltır.
- Önbellekleme: CDN varlıklarını (pyodide.js, .wasm, paket indeksleri) Service Worker ile cache-first stratejisiyle saklayın. Böylece offline veya zayıf ağda bile hızlı açılış sağlanır.
- Veri boyutunu sınırlayın: Tarayıcı belleği kısıtlıdır. Tek seferde işlenen veri setlerini makul boyutta tutun ve gereksiz kopyalardan kaçının.

Güvenlik ve Sandbox

Pyodide, tarayıcının güvenli çalışma alanında koşar. Varsayılan olarak yerel dosya sistemine erişemez ve ağ istekleri tarayıcı CORS kurallarına tabidir. Üçüncü taraf paketleri yüklerken yalnızca güvendiğiniz kaynakları kullanın. Kullanıcıdan gelen Python kodunu çalıştıracaksanız, suistimali azaltmak için zaman sınırı, bellek sınırı ve izinli API listesi (allowlist) gibi korumalar düşünün.

Ne Zaman Pyodide? Ne Zaman Sunucu?

- Pyodide’ı tercih edin: Hızlı prototip, eğitim içerikleri, etkileşimli dokümantasyon, gizlilik gerektiren istemci tarafı analizler, offline kullanım senaryoları.
- Sunucuyu tercih edin: Büyük veri işlemleri, yoğun CPU bellek kullanımı, kurumsal paket bağımlılıkları, kalıcı depolama ve erişim kontrolünün kritik olduğu projeler.

Örnek Kullanım: Mini Veri Görselleştirme

Aşağıdaki örnek, küçük bir veri kümesiyle Matplotlib’i kullanır. İlk etapta paketi yükleyin, ardından grafiği base64 olarak üretip bir <img> etiketine atayabilirsiniz. (Bu yazıda görsel eklemiyoruz, ancak yaklaşım bu şekildedir.)

await pyodide.loadPackage(["matplotlib", "numpy"]);
const png = await pyodide.runPythonAsync(`import matplotlib.pyplot as plt, io, base64, numpy as np
x = np.linspace(0, 2*np.pi, 200)
y = np.sin(x)
plt.figure(figsize=(3,2), dpi=150)
plt.plot(x, y)
buf = io.BytesIO()
plt.savefig(buf, format="png", bbox_inches="tight")
base64.b64encode(buf.getvalue()).decode()`);
// document.getElementById("plot").src = "data:image/png;base64," + png;

Sonuç

Pyodide ve WebAssembly, Python’u tarayıcıya taşıyarak ön uç geliştirmeye yeni kapılar açıyor. Doğru paket yönetimi, akıllı önbellekleme ve verimli veri paylaşımıyla hem akıcı bir kullanıcı deneyimi hem de sürdürülebilir performans elde edebilirsiniz. Küçük başlayın, ihtiyaç duydukça paketleri ve optimizasyonları ekleyin. Böylece ister eğitim amaçlı mini bir laboratuvar, ister ürününüze gömülü etkileşimli bir analiz modülü geliştirin; modern webin olanaklarından en iyi şekilde yararlanırsınız.

15 Ekim 2025 Çarşamba

WebGPU ile Tarayıcıda Nesne Tespiti: ONNX Runtime Web ile Adım Adım Kurulum

Giriş

Tarayıcıda makine öğrenmesi artık bir demodan öte; üretim senaryolarına hazır. WebGPU sayesinde GPU hızlandırmalı hesaplama, Chrome ve Edge gibi modern tarayıcılarda varsayılan olarak açıldı. Bu rehberde, ONNX Runtime Web (ORT Web) kullanarak tarayıcı içinde nesne tespiti (YOLO ailesi gibi) modelini çalıştırmayı ve WebGPU yürütme sağlayıcısı ile performansı nasıl artırabileceğinizi anlatıyorum. Kurulum adımlarını, küçük kod parçacıklarıyla ve pratik ipuçlarıyla beraber bulacaksınız.

Neden WebGPU?

WebGPU, WebGL’in ötesine geçerek daha modern bir grafik ve hesaplama API’si sunar. ML tarafında en kritik fark, tensör hesaplamalarını verimli çalıştırabilmesi ve veri kopyalamayı azaltmasıdır. Sonuç olarak, aynı model WebAssembly (WASM) ile 200-400 ms sürerken, WebGPU ile 60-120 ms aralığına inebilir; bu özellikle canlı kamera akışında kare kaçırmamak için belirleyici bir fark yaratır.

Ön Koşullar ve Tarayıcı Desteği

- Chrome 113+ ve Edge 113+ sürümlerinde WebGPU masaüstünde varsayılan olarak açık. Mac’te Apple Silicon ile daha istikrarlı sonuçlar alırsınız. Firefox’ta Nightly ile about:config altında dom.webgpu.enabled bayrağını etkinleştirmeniz gerekebilir. Safari’de ise Technology Preview önerilir.
- Geliştirme için basit bir statik sunucu kullanın: npx serve, python -m http.server veya VS Code Live Server eklentisi işinizi görür. Dosyaları doğrudan diskten açmak (file://) CORS hatalarına yol açar.

Proje Yapısı

Minimum örnek için şu dosyaları oluşturun: index.html, app.js ve model dosyanız (ör. yolov8n.onnx). Test için bir görüntü dosyası veya webcam akışı kullanabilirsiniz. Kamera ile test edecekseniz, HTTPS üzerinde yayınlamayı unutmayın; tarayıcılar güvenlik nedeniyle kamera erişimini HTTP’de kısıtlar.

ONNX Runtime Web’i Ekleme

CDN ile hızlı başlamak için index.html içine ORT Web’i ekleyebilirsiniz: <script src="https://cdn.jsdelivr.net/npm/onnxruntime-web/dist/ort-web.min.js"></script>. Alternatif olarak modüler kullanım için paket yöneticileriyle onnxruntime-web kurabilir, bundler ile projeye dahil edebilirsiniz. WebGPU hızlandırma için çalışma zamanı seçeneklerinde executionProviders: ['webgpu'] belirtmeniz yeterli.

Oturum Oluşturma ve WebGPU’yu Açma

Temel başlatma adımı şöyledir: const session = await ort.InferenceSession.create('yolov8n.onnx', { executionProviders: ['webgpu'], graphOptimizationLevel: 'all' });. Eğer cihazda WebGPU yoksa otomatik olarak WASM’a düşmek isteyebilirsiniz; o durumda önce WebGPU ile dene, başarısız olursa executionProviders: ['wasm'] ile yeniden oluştur şeklinde bir sarmalayıcı yazın.

Girdi Hazırlama

Nesne tespiti modelleri tipik olarak BxCxHxW float32 tensörü bekler. Tarayıcı tarafında Canvas üzerinden resmi alıp 640x640 gibi modele uygun boyuta yeniden örnekleyin, ardından ImageData piksellerinden Float32Array oluşturun. Kanal sıralaması (NCHW vs NHWC) ve normalizasyon (0-1 arası ölçek, ortalama-standart sapma) modelinize göre değişir; ONNX ihracını yaparken hangi düzen kullanıldıysa ona sadık kalın. Örnek: const input = new ort.Tensor('float32', floatArray, [1,3,640,640]);

Çıktıların İşlenmesi

YOLO tarzı modeller, her kutu için [x, y, w, h, score, class] veya benzeri bir yapı üretir. Post-processing adımları: skor eşiği uygulama (örn. 0.25), Non-Maximum Suppression ile çakışan kutuları eleme ve sınıf etiketleri ile renklendirme. ORT WebGPU bazı durumlarda çıktı tensörünü GPU belleğinde tutabilir; tarayıcı tarafında çizmek için CPU’ya kopyalamanız gerekir. Performans için tek bir canvas üzerinde hem görüntü hem de kutuları çizmek, her karede gereksiz tahsislerden kaçınmak önemlidir.

Performans İpuçları

- Model boyutu: YOLOv8n gibi küçük varyantlarla başlayın; tarayıcıda latency dramatik şekilde düşer.
- Precision: FP16 desteği olan cihazlarda otomatik kazanç sağlanır. ORT Web, WebGPU arka ucunda uygunsa bunu kullanır.
- İşletim birleştirme: graphOptimizationLevel: 'all' genellikle faydalı. Bazı modellerde ek kazanımlar için ONNX’ı optimize edin (Fusion/Constant folding).
- Batch=1: Akış senaryolarında tekli batch en düşük gecikmeyi verir.
- Sıcak çalışma: İlk çalıştırmadan önce bir kez “ısındırma” inference’ı yapın; shader derlemeleri ve önbellekler sonrası kare süreleri iyileşir.

Güvenlik ve Barındırma

Model dosyanız büyükse (ör. 20-50 MB), ilk yükleme süresi kullanıcı deneyimini etkiler. HTTP istemci önbelleği için uzun Cache-Control süreleri ayarlayın ve sürümleme yapın. Kamera kullanan sayfalar için HTTPS zorunlu. Cross-origin model yüklerken CORS başlıklarını doğru verin (Access-Control-Allow-Origin). Ayrıca, kullanıcı donanımlarında GPU kaynakları sınırlı olabilir; bir hata durumunda kibarca WASM’a düşmek, uygulamanın kırılmasını engeller.

Hata Ayıklama

- navigator.gpu yoksa tarayıcı sürümünüzü ve bayrakları kontrol edin.
- ValidationError görüyorsanız tensör şekilleri/hizalamaları uyuşmuyor olabilir. Girdiyi ve modelin beklediği düzeni tekrar gözden geçirin.
- Performance sekmesiyle CPU/GPU zamanlarını izleyin; çoğu darboğaz, görüntü ön-işlemede ortaya çıkar. Web Workers ile ön-işlemeyi ana iş parçacığından ayırmak sayfa akıcılığını artırır.

Sonuç

WebGPU ve ONNX Runtime Web birleşimi, tarayıcıda ML uygulamaları için yeni bir performans eşiği sunuyor. Sunucuya görüntü yüklemeden, gizlilik dostu ve düşük gecikmeli nesne tespiti mümkün. Bu rehberdeki yapı ile kısa sürede çalışan bir prototip çıkarabilir, ardından model optimizasyonu, önbellekleme ve UI cilasıyla üretim seviyesine taşıyabilirsiniz. Bir kez kurduktan sonra, segmentasyon, yüz mesh’i ya da metin tespiti gibi diğer ONNX modellerini de aynı altyapı üzerinde hızla deneyebilirsiniz.

5 Ekim 2025 Pazar

Ollama ile Yerel LLM Kurulumu: Llama 3.1 ve Mistral’i Bilgisayarınızda Çalıştırma Rehberi

Giriş

Yapay zekâ araçlarını bulutta kullanmak pratik olsa da, gizlilik, maliyet ve hız gibi konularda sınırlamalar yaratabiliyor. Ollama, güncel büyük dil modellerini (LLM) bilgisayarınızda, internet bağlantısı olmadan ve düşük kurulum maliyetiyle çalıştırmanızı sağlayan hafif bir platform. Bu rehberde, Llama 3.1 ve Mistral gibi modelleri Ollama ile nasıl kuracağınızı, yerel API’yi nasıl kullanacağınızı ve performansı artırmak için dikkat etmeniz gereken noktaları adım adım anlatıyorum.

Neden Yerel LLM?

Yerel LLM çalıştırmanın en büyük avantajı verilerinizin bilgisayarı terk etmemesi. Özellikle müşteri verileri, kaynak kodu veya şirket içi belgelerle çalışıyorsanız gizlilik kritik hale gelir. Ek olarak, isteğe bağlı kullanımda bulut maliyetleri hızla artabilir. Yerel kurulumda ise bir kez model dosyasını indirip, dilediğiniz kadar kullanabilirsiniz. Son olarak, kısa sorgularda gecikme (latency) dramatik şekilde düşer; ağ gecikmesi olmadığı için yanıtlar daha akıcı gelir.

Sistem Gereksinimleri

Minimum gereksinimler modele göre değişse de pratik bir başlangıç için 16 GB RAM önerilir. 7B-8B parametreli modellerde 8-12 GB RAM ile de çalışabilirsiniz. GPU’nuz varsa (NVIDIA, Apple Silicon veya yeni nesil AMD) performans çarpıcı biçimde artar; VRAM miktarı ne kadar yüksekse, model o kadar hızlı ve akıcı yanıt verir. Diskte en az 10-20 GB boş alan ayırın; model dosyaları büyük olabilir. Windows, macOS ve Linux platformları desteklenir.

Kurulum

Ollama’yı ollama.com üzerinden işletim sisteminize uygun yükleyiciyi indirerek kurabilirsiniz. Kurulum tamamlandıktan sonra Ollama arka planda bir hizmet olarak çalışır. Terminal veya Komut İstemi’ni açıp basit bir komutla test edebilirsiniz. Eğer Windows kullanıyorsanız en güncel sürümü tercih edin; GPU desteği ve kararlılık son dönemde hızla iyileştirildi.

Model İndirme ve Çalıştırma

Ollama’nın en pratik yanı model yönetimini tek komutla yapabilmesi. Örneğin Llama 3.1’i denemek için terminalde şu komutu çalıştırın: ollama run llama3.1. Bu komut ilk seferde modeli indirir ve etkileşimli bir oturum başlatır. Benzer şekilde, hızlı ve hafif bir alternatif için: ollama run mistral. Oturumdayken sorularınızı yazıp anında yanıt alabilirsiniz. Çıkmak için Ctrl+C yeterli.

Belirli bir kullanım senaryosu için farklı boyut seçenekleri mevcut olabilir (örneğin 8B, 13B, 70B). Boyut büyüdükçe doğruluk ve bağlam yönetimi gelişir; ancak RAM/VRAM ihtiyacı artar. İlk denemelerde 7B-8B sınıfı modellerle başlayıp, donanımınız el verdiği ölçüde daha büyük modellere geçmeniz iyi bir stratejidir.

Yerel API ile Entegrasyon

Ollama bir REST API sunar. Kendi uygulamanızdan yerel modele istek atmak için http://localhost:11434 adresini kullanabilirsiniz. Temel uç noktalardan biri /api/generate’tir. Gövdeye prompt, model adı ve opsiyonel parametreler (maksimum token, sıcaklık gibi) göndererek yanıt alırsınız. Örnek akışta, yanıtlar parça parça (stream) dönebilir; bu sayede sohbet arayüzlerinde yazı yazılırken canlı akış efektini rahatça sağlayabilirsiniz.

Geliştiriciler için pratik bir yöntem de araya bir istemci kütüphanesi koymak. JavaScript, Python veya Go gibi dillerdeki minimal HTTP istekleriyle hızlıca prototip yapabilirsiniz. Mevcut sohbet uygulamanıza veya dahili araçlarınıza bir “yerel asistan” eklemek için bu yöntem idealdir.

Modelfile ile Özelleştirme

Ollama’nın Modelfile yapısı, bir modelin nasıl başlatılacağını, sistem yönergelerini ve ek kaynakları tanımlamanıza olanak tanır. Örneğin bir kurumsal asistanda “şirket politikasına uygun, kısa ve güvenli yanıtlar ver” gibi bir sistem talimatını kalıcı hale getirebilirsiniz. Bu dosyayı oluşturarak ollama create komutuyla adını verdiğiniz özel modeli yayınlayabilir, ekip içinde aynı profili paylaşabilirsiniz.

Performans İpuçları

- GPU kullanın: Mümkünse modele ayrılan katmanları GPU’ya offload edin; bu, yanıt süresini dratik biçimde azaltır. Apple Silicon’da Metal hızlandırma, NVIDIA’da CUDA desteği ciddi fark yaratır.

- Hafif kuantizasyon: 4-bit veya 5-bit kuantize modeller RAM/VRAM baskısını düşürürken kabul edilebilir doğruluk sunar. İlk kurulumda Q4 veya Q5 sürümlerini deneyebilirsiniz.

- Maksimum token ve sıcaklık: Uzun yanıtlar kaynak tüketimini artırır. Maksimum token değerini ihtiyaca göre sınırlayıp, sıcaklığı 0.2-0.7 aralığında ayarlamak denge sağlar.

Güvenlik, Gizlilik ve Bakım

Yerel çalıştırmada veriler cihazınızda kaldığından gizlilik avantajı elde edersiniz. Yine de hassas içerikleri disk şifreleme ve kullanıcı erişim kısıtlarıyla korumayı unutmayın. Modelleri güncel tutmak önemlidir; yeni sürümler hem kaliteyi artırır hem de hataları giderir. Ayrıca, şirket içi kullanımda model davranışını izlemek ve denetim kayıtları tutmak uyumluluk açısından faydalıdır.

Karşılaşılan Yaygın Sorunlar

- Yetersiz bellek: Model yüklenemiyorsa daha küçük bir varyant deneyin veya kuantize sürüme geçin. Arka planda çalışan ağır uygulamaları kapatın.

- Yavaş yanıt: GPU hızlandırmayı açın, akış (stream) modunu kullanın, maksimum token değerini düşürün.

- Uygulama entegrasyonu: API uç noktalarını doğrulayın, istek gövdesindeki parametreleri (prompt, model) doğru gönderdiğinizden emin olun.

Sonuç

Ollama ile Llama 3.1 ve Mistral gibi modelleri yerel olarak çalıştırmak, hem geliştiriciler hem de içerik üreticileri için esnek, hızlı ve güvenli bir çözüm sunuyor. Basit kurulum adımları, tek komutla model yönetimi ve REST API sayesinde, deneme-yanılma döngüleri kısalıyor ve üretkenlik artıyor. Donanımınıza uygun model boyutunu seçip, Modelfile ile özelleştirme ve kuantizasyon gibi teknikleri kullanarak kısa sürede verimli bir yerel yapay zekâ ortamı oluşturabilirsiniz.