<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Kerem Çeliker | MasterLabs</title>
    <description>The latest articles on DEV Community by Kerem Çeliker | MasterLabs (@masterlabs).</description>
    <link>https://dev.to/masterlabs</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4046332%2F33b2faa1-e1d8-49ff-9647-339f70375625.jpeg</url>
      <title>DEV Community: Kerem Çeliker | MasterLabs</title>
      <link>https://dev.to/masterlabs</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/masterlabs"/>
    <language>en</language>
    <item>
      <title>Bölüm 2 • POC: Dört Eski İş İstasyonundan Production Inference Çalışması</title>
      <dc:creator>Kerem Çeliker | MasterLabs</dc:creator>
      <pubDate>Sun, 02 Aug 2026 13:21:01 +0000</pubDate>
      <link>https://dev.to/masterlabs/bolum-2-poc-dort-eski-is-istasyonundan-production-inference-calismasi-54np</link>
      <guid>https://dev.to/masterlabs/bolum-2-poc-dort-eski-is-istasyonundan-production-inference-calismasi-54np</guid>
      <description>&lt;p&gt;*&lt;em&gt;**Bir önceki bölümde AirLLM'in ne yaptığını anlatmıştım: _&lt;/em&gt;&lt;em&gt;koca bir modeli tek seferde belleğe almak yerine, katman katman yükleyip sınırlı bir GPU'da bile çalıştırmayı&lt;/em&gt;*_..&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhsv3nw1prisjjc7ndvr5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhsv3nw1prisjjc7ndvr5.png" alt=" " width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Saha tek bir şeyi umursar: vardiyada kaç rapor işleniyor. Mimarinin ne kadar havalı da olduğu, kimseyi ilgilendirmez orada.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Şuan paylaşacağım Bölüm 2 içinde ise mantık hafızayı ekip olarak nasıl düşünerek oluşturuyor ve karar sonuç ilişkisi kurduğumuzu gösteriyor olacağım. Burada ki temel amaç, hemen haydi tekniğe geçelim, süslü ve komplex code ve algoritmaları da paylaşıp, özellikle dikkat çekmek olmadığı için.. &lt;/p&gt;

&lt;p&gt;Doğrudan bu işi hakkıyla “İş Süreç Akış ve Tasarımı” da nasıl oluşturduşumuzu bir sonraki &lt;strong&gt;&lt;em&gt;Bölüm 3’de ki Core Teknik ve Platform kısmına&lt;/em&gt;&lt;/strong&gt; özellikle hemen girmeden bu yazıyı paylaşmak istiyorum. &lt;/p&gt;

&lt;p&gt;Teknik ve platform bir şekilde halledilir fakat paylaştığımız kısımlar da hayali bir senaryo üzerinden olmadan; gerçek “Sahadan yansımalar” olduğu için roadmap’iniz için bir anlam ifade edeceğine eminim.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fabrika ve Detayları&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Türkiye’de büyük bir otomotiv yan sanayi tesisinden bir POC talebi geldi. İsim veremem, aramızda bu konuda kritik bir NDA var, ama teknik tarafı rahatlıkla anlatabilirim.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Üç vardiya, 7/24 dönen bir hat. Kalite kontrol raporlarını, bakım loglarını, operatör notlarını işleyecek yerel bir dil modeli istiyorlardı. Ortam tamamen izole. Veri dışarı çıkmayacak, bulut yok, bu konu masaya bile gelmedi.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;“Şuan eldeki donanım ile başlayacağız, patron ve yönetim kurulu çok istekli fakat şuan henüz bütçe yok” dediler ama bu dönüşümde ciddi motivasyonları olduğunu belirttiler. Artık bu cümleyi ekipçe ezbere tabii biliyoruz.. (:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;İlk hafta özellikle kod yazmadık.&lt;/strong&gt; Ortamda assestment yaptık ve değerli analiz ederek veri topladık yani özetle; evdeki bıçakla, ne kadar ve ne türde uygun Et keseriz onu anlamaya çalıştık. &lt;strong&gt;Kod yazmadan önce ölçmek işin en can sıkıcı kısmıdır.. Fakat bu adımı atlarsanız, ezbere next-copy-paste yaparsanız, kesinlikle %100 bedelini ödüyorsunuz.&lt;/strong&gt; Sahada bu niş alanlar da aktif proje ve danışmanlık yapan bir kişi ve şirket olarak, tekrar özellikle hatırlatmak ve altını önemle çizmek isterim.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgjbm5l81tmr0qsmp8qjj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgjbm5l81tmr0qsmp8qjj.png" alt=" " width="800" height="294"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Burada Ekran kartıyla sistem arasındaki veri yolu pratikte saniyede 11-12 GB taşıyor. Yerel ortamdaki SSD saniyede yaklaşık 500 MB okuyor. NAS’a ağ üzerinden erişim ise 180 MB/s ile zaten bayağı yavaştı. &lt;strong&gt;Bunlar laboratuvar rakamı filan da değil, sahada bizzat telemetrik ölçtüğümüz müşteri ortamı bench-sayıları..&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Bu değerleri bilmeden bir zamanlama ve başarı kriteri de kuramazsınız.. Yanlış varsayımla başlarsanız da GPU’nun çoğu zaman boşta durduğunu görür, “neden bu kadar yavaş” diye eldeki GPU kartı da suçlarsınız, patronun ekranına ve satın almaya yeni GPU ihtiyacı yapmak için devamlı talep geçersiniz.&lt;/em&gt;&lt;/strong&gt; Oysaki gördüğümüz birçok proje ve detaylı ihtiyaçta meselenin aslında “Evet, Kesinlikle..” GPU kartı olmadığını da çok açıkça görüyoruz. &lt;strong&gt;Burada gerçek sahadaki formül şu; Verinin nereden -&amp;gt; nereye ve -&amp;gt; hangi sırayla aktığıdır..&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;_Önce “Ölçmelisin”, sonra “Zamanlamalı”, en son “Optimize” etmelisin. _&lt;/strong&gt;Bunu her projede ekibime ve müşterilerde proje içine involve olacak ekiplere söylüyorum ve imtina da etmiyorum, çünkü genelde sıra tam tersine çevriliyor yada özellikle çevriltmek isteniyor. Bu 2 tarafında ticari karakteri yada beklentileri ile çoğu zaman doğru yada ters orantılı oluyor..&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9535iyy0vy9jtiz6n659.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9535iyy0vy9jtiz6n659.jpeg" alt=" " width="800" height="301"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;MasterLabs Technologies ekibi olarak, Open-Source AirLLM’in katman katman yükleme mantığını aldık, bu donanıma özel bir zamanlayıcı yazdık. &lt;strong&gt;Bu bize peki ne sağladı ?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GPU bir katmanı hesaplarken bir sonraki katman aynı anda diskten okunup belleğe hazırlanıyor ve hesaplama ile aktarım üst üste biniyor.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Pratikte CUDA’nın paralel veri kanalları, belleğin özel ayrılması, aktarılan parçanın boyutu derken ilk denemede tutmadı. &lt;strong&gt;Üç kez baştan başladım, dördüncüde oturdu.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Kritik olan parça boyutuydu. Küçük parçalar taşırsanız her transferin kendi yükü sizi yorar; büyük parçalar taşırsanız GPU işini bitirip bekler. 512 KB ile 2 MB arasında denedik, bu sistemde 1 MB en iyi dengeyi verdi. &lt;strong&gt;Başka bir donanımda başka bir sayı çıkar, bunu ölçmeden asla kesinlik almayın.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Modelin çoğu katmanında 4-bit sıkıştırma kullandık. Neden ?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Bu soru kafada yer edebilir. Sebeb sayıları normalden çok daha az yer kaplayacak şekilde bilerek ve geleneksel kitapta yazdığı gibi değil de ezber bozan şekilde yuvarlamak istedik.. &lt;/p&gt;

&lt;p&gt;Evet şunda çok iyi biliyor ve farkındayız ki bu karar Bellekten büyük tasarruf ama Küçük bir doğruluk riski de getiriyor.&lt;/p&gt;

&lt;p&gt;Sahadaki yazılı ve çizili raporlar “spindle”, “RMS”, “tolerans”, “kalibrasyon”, “runout” gibi örneklemeler ile malum yazılmış, tabi realitede uygulanabilir değil, hep teori sineması var.. Biz yinede bu teoriler üzerinden de test ettik ve saygımızı da eksik etmedik. (:&lt;/p&gt;

&lt;p&gt;Sahada tabikii Teoriler dışında “4-bit gibi bir sıkıştırma” ölçülebilir bir bozulma da yaratır.. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Küçük ama gerçek, nur topu gibi bir bozulma diyebiliriz. Ve sahada küçük bir bozulma, yanlış yazılmış bir Üretim Bakım Formuna, tehlikeli olabilecek şekilde dönüşebiliyor.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Biz ekip olarak ne yaptık ? Modelimizin girişe yakın ilk 8 katmanını 8-bit’te bıraktık, kalanını 4-bit’e düşürdük. Böylece İlk katmanlar önce bir kelimenin ne olduğuna karar veriyor; sonra da orada bozulma olursa çıktı en baştan yada anlık yanlış hemen çıkarıyor. Nasıl kulağa hoş geliyor değil mi ? Kesinlikle..&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frw353o5fup636gq997l2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frw353o5fup636gq997l2.png" alt=" " width="800" height="324"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Son katmanlarda ise Teknik yaptığımız analiz ve değerlendirmelerde küçük bir hassasiyet kaybı oldu. Olması da beklenir. Fakat genel çalışmayı, data modeli ile machine learning algoritmasının çalışması, sonuç ve anlamını asla “bu dar ve kısıtlı seviyelerde” etkilemiyor.&lt;/p&gt;

&lt;p&gt;Bir Saha notu: “İlk 8 katman” genel bir kural asla değil (Teoride takılmayın lütfen). Biz özellikle mevcut bu modele, o test verisine özel bulduğumuz bir sayı.. Başka bir modelde kendi ölçümünüzü yapın ve doğrulayarak devam edin.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;4.Haftamız bitmeden bu rakamlar ve çıktılarımız ile &lt;strong&gt;POC’i teslim kanıt belgeleri ile tamamladık&lt;/strong&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Telemetrik Sonuç Verileri;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bir kalite kontrol raporu yaklaşık 120 kelime ile, 47 saniye sürdü.&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dört istasyon birlikte çalıştığında vardiyada ortalama 350 rapor tamamlanabiliyor.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Bu kuyruklamada giriş hazırlığı, health-check ile beraber sahada yaşanacak aksaklıkları da daima baz almasınız. &lt;strong&gt;Hiçbirşey kağıt üzerindeki hesap gibi olmuyor.. Bu yüzden planlama ve hesabınızı buna göre yapmanızda kesinlikle fayda var..&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcgdxcsafvbn9g3z8xf1m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcgdxcsafvbn9g3z8xf1m.png" alt=" " width="799" height="316"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tesisin temel ihtiyacı “şuan ilk Ready fazı için” vardiya başına özelikle 200-250 gibi bir ortalama rakam belirlemişlerdi. &lt;strong&gt;_MasterLabs Technologies olarak biz bunu karşıladık ve hali hazırda üzerine de çıktık. _&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Artık Fabrika Operatörü arızayı kendi cümleleriyle doğal bir şekilde yazıyor, model bunu düzenli bir bakım formuna çevirerek sonuç üretiyor.&lt;/strong&gt; Gayet başarılı ve bir çıktısı olan, şuan &lt;strong&gt;&lt;em&gt;ready fazında bile bir yararı olan çalışma oldu&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Bu kısıtlı bütçe ile dar kapsamlı çalışma ile eskiden manuel çalışma yapan bir mühendis bu işi elle yapmak için günde 6-7 saat harcıyordu. Artık harcadan tamamlıyor oldu.&lt;/p&gt;

&lt;p&gt;“Sahadan Yansımalar Serisinin” bu 2. bölümünde ki Çıkarılacak Ders nedir ?&lt;/p&gt;

&lt;p&gt;Yeni bir ekran kartı aldırmadık, yeni sunucu da aldırmadık. Eldeki; Dört eski workstation, doğru assestment, doğru bellek yönetimi ve doğru veri akışı ve ML/Data Engineering algoritması geliştirmek yetti.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bunun anlamı lütfen şu olmasın, özellikle ifade ediyorum. Buraki “eski donanım her zaman yeterlidir” yazısı yada kung-fu show’u değil.. Böyle bir show yaparak commit de etmek riski sebebiyle yeterince aptalca olurdu.&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Yeni söylemek istediğim, yatırım kararınınızdan önce pain-point’leriniz üzerinden use-case’lerinizi çıkartın, mevcut darboğazınızı ölçün ve bazen bu ölçümünüz sandığınızda da geniş çaplı ihtiyaçlarınız olduğunu da görmenize sebeb olur, bazen de olmayacaktır. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2nu3v5ifg6q7hzem3jd5.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2nu3v5ifg6q7hzem3jd5.jpeg" alt=" " width="799" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bu yüzden bu yola çıkmadan önce; taslak bir kurumsal gizlilik sözleşmesi ile detaylı analiz ve assestment sonucu çalışması raporu talep etmeniz çok mantıklı hareket olacaktır. &lt;strong&gt;Riski üzerinizde tutmayın, devamlı dağıtın ve çalıştırın. Siz sadece Süreci Yöneten olun..&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Böylece masalarda şu dönem içinde yapılan güzellemeler sebebiyle, bir masada har vurulup, diğer masada da harman savrulurken; sizde bu “Kurumların Kaslarını” da hem güzelce bir test etmiş de olursunuz..🙂&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Not:&lt;/strong&gt; Bu yazıda Production kelimesini POC-Prod_Ready kapsamında kullanıyoruz. Yani sistem 7/24 çalışıyor ama henüz monitoring arayüzü yazmadık yada kurmadık. Disk arızasında otomatik yedekleme de devreye girmiyordu. Dolayısı ile henüz teknik borç (Technical Dept.) var. Bunları Bölüm 3'te High Level çalışması ve Teknik Kurulum da ele alacağız.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>programming</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>Bölüm 1 • 50B/70B LLM’leri Düşük Bütçeli Donanımda Çalıştırmanın Yolu var mı ?</title>
      <dc:creator>Kerem Çeliker | MasterLabs</dc:creator>
      <pubDate>Sat, 25 Jul 2026 07:31:31 +0000</pubDate>
      <link>https://dev.to/masterlabs/bolum-1-50b70b-llmleri-dusuk-butceli-donanimda-calistirmanin-yolu-var-mi--3c0j</link>
      <guid>https://dev.to/masterlabs/bolum-1-50b70b-llmleri-dusuk-butceli-donanimda-calistirmanin-yolu-var-mi--3c0j</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmsxdrcy35jy70b53is2q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmsxdrcy35jy70b53is2q.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Gönümüzün Pain-Point’i ve Sık Sorulan Sorusu..&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;50B/70B LLM’leri Düşük Bütçeli Altyapılarda ve Donanımlarda Çalıştırmanın bir Yolu var mı ?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Evet, Pek mümkün tabiki.. (:&lt;/p&gt;

&lt;p&gt;Şartlar doğru sağlandığında, 70B parametreli bir modelin ağırlık matrisleri ortalama 140 GB yer kaplıyor. 4 GB VRAM bunun %3’ünü bile tutamaz. Bu basit bir aritmetik meselesi, tartışılacak bir tarafı da pek yok, başka bir makalede detaylıca tartışırız bunu..&lt;/p&gt;

&lt;p&gt;Ama şu da bir gerçek: Türkiye’deki üretim sahalarının büyük kısmında, kontrol odalarındaki iş istasyonlarında 8 GB VRAM’li ekran kartları duruyor. RTX 3070, bazen daha eskisi. Ve bu tesisler, hat üzerindeki kalite raporlarını, bakım loglarını, operatör notlarını işleyecek bir dil modeli istiyor. Veri tesisten çıkmayacak. Bulut seçeneği masada yok. Yeni donanım bütçesi de yok.&lt;/p&gt;

&lt;p&gt;Bu cümleyi son bir yılda 50’den fazla farklı üretim tesis’inden duydum. Bunun bir çözümü bazı limitasyonlar dahilinde var. Malasef sektörlerde ve kurumlarda ki uzmanlık bu alanda henüz yeni geliştiği için süreçler tıkanabiliyor. &lt;/p&gt;

&lt;p&gt;AirLLM bu tıkanan Düşük Bütçeli çözüm uzayında ve arayışında ilginç bir noktada duruyor. Ekiplerimiz düşük bütçeli (Startup) Savunma Sanayi POC’imiz de Masterlabs olarak bu problemi biraz ezber bozan ve farklı şekilde çözmeyi bir müşterimiz için başardı.&lt;/p&gt;

&lt;p&gt;AirLLM ne yapıyor ?&lt;/p&gt;

&lt;p&gt;Modelinizi komple VRAM’e almak yerine, her seferinde tek bir katmanı yüklüyor, ardından forward pass’i yapıyorsun ve ara aktivasyonu host belleğe yazıyorsun. Böylece ne oluyor..? Sen bu arada kalan katmanı boşaltıyorsun ve öbürünü getirip, rahatlıkla düşük bütçe ile çalıştırıyorsun. Güzel değil mi ? :)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsmh4zz5uikgwz78pcm8f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsmh4zz5uikgwz78pcm8f.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Aslında bu, operating system’lerde 1960’lardan beri olan (Eski Gurme’ler bilir) page swapping mantığı. Yeni bir fikir falan da değil. Ama bunu transformer inference’a uyarlamak demek, duyduğunuzu tahmin ettiğim CUDA stream yönetimi, pinned memory tahsisi, PCIe transfer zamanlaması gibi farklı katman serialization formatı ile çalışmak da demek oluyor.. &lt;/p&gt;

&lt;p&gt;Yani ben bu “Fikri Biliyorum” ile “Çalışan Kod Yazıyorum” arasında hani ciddi bir mesafe de artık var..&lt;/p&gt;

&lt;p&gt;Pek tabii, AirLLM o mesafeyi de kapatmış. API tarafında transformers ile aynı şeyi kolaylıkla yazabiliyorsun:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;airllm&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;AutoModel&lt;/span&gt;

&lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;AutoModel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;from_pretrained&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Qwen/Qwen3-32B&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Hat 3 operatör terminalinden gelen ham bakım notu
&lt;/span&gt;&lt;span class="n"&gt;ham_not&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CNC-07 spindle titreşim 0.8 mm/s RMS, devir 12000 rpm, normal değer 0.3. Bakım formu oluştur.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;tokenlar&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;tokenizer&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;ham_not&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;return_tensors&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;pt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;max_length&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;128&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;truncation&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;t0&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;perf_counter&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;cikti&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tokenlar&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;input_ids&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;cuda&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="n"&gt;max_new_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;sure&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;perf_counter&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;t0&lt;/span&gt;

&lt;span class="n"&gt;sonuc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tokenizer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cikti&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sequences&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;skip_special_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;[&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;sure&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; sn] &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;sonuc&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Yeni artık bir soyutlama sistemini öğrenmene de gerek kalmadı. Bu bizce çok doğru bir tasarım kararı olmuş. Artık kimse zaten bu dönemde hadi kalk 45gün bootcamp’e zaman harcayalım, kafayı kıralım, öğrenelim demeyecektir. Herkes “Hızlı Üretim” yolunun peşinde sürükleniyor.&lt;/p&gt;

&lt;p&gt;Son günlerin samanyolu yıldızı, Qwen3-235B, 3 GB VRAM ile rahatlıkla çalışıyor. Ayrıca test ettiğimiz Llama 3.1 405B modeli ile 8 GB’de sorunsuz çalışmaktadır. &lt;/p&gt;

&lt;p&gt;Sessiz, yavaş ama sesi daima tok gelen model olan, DeepSeek-V3’ün 671B’lik modeli olan 12 GB’de sorunsuz işlem ve testler de gerçekleştirebildik.&lt;/p&gt;

&lt;p&gt;İlk çalıştırmada model katmanlara bölünüp diske yazılıyor, bu bir kere oluyor. 70B bir model yaklaşık ortalama 140 GB ek disk alanı istiyor. Disk alanı yetmezse “MetadataIncompleteBuffer” hatası alırsınız ve baştan başlarsınız. Buna dikkat edin, çok Sinir bozucu bir durum ama disk alanını önceden kontrol ederseniz yaşamazsınız.&lt;/p&gt;

&lt;p&gt;Bir de “bitsandbytes” ile “opsiyonel blok quantization” var. Buda şu anlama geliyor; model’in Hassasiyet kaybı ölçülebilir seviyenin altında kalırsa, hızınızı yaklaşık 3 kat artıyor. Buda diğer ince önemli bir bilgi..&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OpenSource olması sebebiyle, varsayılan Limitasyonlar nedir ?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;MasterLabs olarak, POC’miz de Limitasyonlarını test ettiğimiz ve bizlere sağlanan platform ve altyapı kaynağı aşağıdaki gibidir;&lt;/p&gt;

&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt; 8 GB VRAM&lt;/li&gt;
&lt;li&gt; NVMe SSD&lt;/li&gt;
&lt;li&gt; 32 GB RAM&lt;/li&gt;
&lt;li&gt; 3xLinux (RT/CoreOS/Ubuntu)&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;AirLLM tek kullanıcı ve tek sequence üstünde çalışır. &lt;br&gt;
Batch inference henüz yok.&lt;br&gt;
Concurrent request geliştirme seviyedinde. &lt;br&gt;
Production serving istiyorsanız, bunun üzerine birde core mühendislik koymanız gerekir. &lt;br&gt;
Py-Scheduler yazacaksınız, I/O pipeline’ını optimize etmelisiniz, quantization stratejisini kendi use case’inize göre ayarlanmalı. &lt;/p&gt;

&lt;p&gt;Özetle, Açık Kaynak bir dağıtılımı olan AirLLM Kütüphanesi size mantıklı ve çözüm odaklı bir iskelet veriyor. Geri kalanını siz inşa ediyorsunuz.&lt;br&gt;
Latency de limitasyon var. &lt;br&gt;
Disk alanı ve Storage algoritması ile bunlar çözülebiliyor.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpvgno0yv1r8srzh0lnxy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpvgno0yv1r8srzh0lnxy.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bunlar Açık Kaynak (OpenSource) dağıtımlar da tasarımın doğal bir sonucu. Bunu bilerek giriyorsanız, beklentiniz doğruysa, daima işe yarıyor. &lt;/p&gt;

&lt;p&gt;Beklentiniz; Skoda Superb ile yolda BMW 5.20 performansı almak ise çok yanlış yerdesiniz demektir.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;POC’de nasıl bir mimari ve pattern oluşturduk ?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;MasterLabs yaklaşımında Live-Prod ve POC-Test ortamları birbirinden tamamen farklı mimari prensiplerle ele alınır. &lt;/p&gt;

&lt;p&gt;Projelerin temeli örneğin çoğunlukla DDD ve EDA Pattern’leri ile oluştuysa, müşterinin teknik ve iş gereksinimlerine bağlı olarak çözümü Hexagonal Architecture veya Clean Architecture ile şekillendiririz. POC seviyesinde, ham (RAW) veya kontrolsüz dağıtık (Mass-Distributed) bir yapıda bırakmayız; yönetilebilir, devamlı ölçeklenebilir, gözlemlenebilir ve üretim ortamına uygun kurumsal bir sürdürülebilir mimariye dönüştürürüz.&lt;/p&gt;

&lt;p&gt;Hata yönetimi, metrik toplama, katman optimizasyonu ve yapılandırılmış çıktı üretimi ekliyoruz. Aynı inference sonucunu veriyor ama güvenilir şekilde çalışıyor:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;logging&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;pathlib&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Path&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;dataclasses&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;dataclass&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;torch&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;airllm&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;AutoModel&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;airllm.utils&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;split_and_save_layers&lt;/span&gt;

&lt;span class="n"&gt;logging&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;basicConfig&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;level&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;logging&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;INFO&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;%(asctime)s [%(levelname)s] %(message)s&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;logger&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;logging&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getLogger&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;inference_worker&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="nd"&gt;@dataclass&lt;/span&gt;
&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;InferenceConfig&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;model_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Qwen/Qwen3-32B&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;cache_dir&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/opt/model_cache/split_layers&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;compression&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;4bit&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;profiling&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;bool&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;
    &lt;span class="n"&gt;max_input_len&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;512&lt;/span&gt;
    &lt;span class="n"&gt;max_output_len&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;256&lt;/span&gt;


&lt;span class="nd"&gt;@dataclass&lt;/span&gt;
&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;InferenceResult&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;
    &lt;span class="n"&gt;first_token_ms&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.0&lt;/span&gt;
    &lt;span class="n"&gt;total_ms&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.0&lt;/span&gt;
    &lt;span class="n"&gt;token_count&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="n"&gt;tokens_per_sec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.0&lt;/span&gt;


&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;LayeredInferenceEngine&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;InferenceConfig&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cfg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cfg&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;_ensure_split&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;_ensure_split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;split_path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cache_dir&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;model_id&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;--&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;split_path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;exists&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;split_path&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;metadata.json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;exists&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
            &lt;span class="n"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Katman bölme işlemi başlıyor: %s&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;model_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="nf"&gt;split_and_save_layers&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;model_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;output_dir&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;split_path&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
                &lt;span class="n"&gt;compression&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;compression&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bölme tamamlandı: %s&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;split_path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Mevcut bölünmüş katmanlar kullanılıyor: %s&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;split_path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Model yükleniyor: %s (compression=%s)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;model_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;compression&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;t0&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;perf_counter&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;AutoModel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;from_pretrained&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;model_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;compression&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;compression&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;profiling&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;profiling&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;elapsed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;perf_counter&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;t0&lt;/span&gt;
        &lt;span class="n"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Model hazır. Yükleme süresi: %.1f sn&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;elapsed&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;generate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;InferenceResult&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;load&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

        &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;InferenceResult&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;t_start&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;perf_counter&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

        &lt;span class="n"&gt;input_tokens&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;tokenizer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
            &lt;span class="n"&gt;return_tensors&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;pt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;max_length&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;max_input_len&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;truncation&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;input_ids&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;input_tokens&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;input_ids&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;cuda&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

        &lt;span class="n"&gt;t_first&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;perf_counter&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;output&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;input_ids&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;max_new_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;max_output_len&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;do_sample&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;temperature&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;t_end&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;perf_counter&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

        &lt;span class="n"&gt;generated_ids&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;output&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sequences&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;input_ids&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;shape&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]:]&lt;/span&gt;
        &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tokenizer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;generated_ids&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;skip_special_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;token_count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;generated_ids&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;first_token_ms&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;t_first&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;t_start&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;
        &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;total_ms&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;t_end&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;t_start&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;
        &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tokens_per_sec&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;token_count&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;t_end&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;t_start&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="mf"&gt;1e-6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Üretim tamamlandı | token=%d | ilk_token=%.0fms | toplam=%.0fms | hız=%.1f tok/s&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;token_count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;first_token_ms&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;total_ms&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tokens_per_sec&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;cfg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;InferenceConfig&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;model_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Qwen/Qwen3-32B&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;cache_dir&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/opt/model_cache/split_layers&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;compression&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;4bit&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;engine&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;LayeredInferenceEngine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;engine&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;load&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="n"&gt;operator_note&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Hat 3&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;teki CNC tezgahı son 2 saattir titreşim yapıyor. &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Spindle hızı 12000 rpm&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;de iken 0.8 mm/s RMS ölçüldü. &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Normal değer 0.3 mm/s. Bakım formu oluştur.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;engine&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;operator_note&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;--- Yapılandırılmış Bakım Formu ---&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;[Metrik] &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;token_count&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; token, &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;total_ms&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; ms, &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tokens_per_sec&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; tok/s&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Yukarıda paylaştığım code’u ayrıca test ettiğim de AirLLM ile nerdeyse aynı sonucu üretti. Fakat bunun katman bölüm kontrolü, hata yönetimi, metrik toplama ve yapılandırılmış çıktı başlıklarını sağlamayı ve hazırlamayı unutmamak gerekiyor. &lt;/p&gt;

&lt;p&gt;Üretim sahasında “Çalışıyor” ile “Güvenilir ve Sürdürülebilir şekilde Çalışıyor” arasındaki farkı görmek istiyorsanız. Bu işin “Gizli Formülü” de bu katmanlarda saklı olduğunu unutmayın..&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sonraki 2.Bölüm de..&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8qhygywjhich52j179gt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8qhygywjhich52j179gt.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bir sonraki &lt;strong&gt;2.Bölüm’de ki yazıda&lt;/strong&gt;, bu inference engine’i gerçek bir üretim sahasına nasıl taşıdığımızı anlatacağım. &lt;br&gt;
Türkiye’de büyük bir otomotiv yan sanayi üretim tesisinde yaptığımız POC’un teknik detayları kısıtlı donanım, izole private AI Model ortamı (air-gapped) tasarımı ile yeni bir donanım almadan ve production-grade bir ortamda nasıl verim alınır paylaşmış olacağız.&lt;/p&gt;

&lt;p&gt;Kerem Çeliker&lt;br&gt;
Founder, Chief Technology &amp;amp; Product Officer&lt;br&gt;
MasterLabs Teknoloji A.Ş.&lt;br&gt;
•masterlabs.com.tr ||•&lt;a href="mailto:info@masterlabs.com.tr"&gt;info@masterlabs.com.tr&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>architecture</category>
      <category>infrastructure</category>
    </item>
  </channel>
</rss>
