Showing posts with label Python. Show all posts
Showing posts with label Python. Show all posts

Thursday, January 22, 2026

LLAMA 3 ve Unsloth ile Adım Adım Fine-Tuning Rehberi

LLAMA 3 ve Unsloth ile Nutuk Eğitimi: Adım Adım Fine-Tuning Rehberi

Merhabalar arkadaşlar, Murat Karakaya Akademi YouTube kanalına hoş geldiniz. Bugün, daha önce başladığımız "İnce Ayar (Fine-Tuning)" eğitim serimizin en kritik aşamalarından birini gerçekleştireceğiz. 8 milyar parametreli devasa bir dil modeli olan LLAMA 3'ü, kendi hazırladığımız Nutuk veri setiyle nasıl eğitebileceğimizi ve ona Atatürk'ün ölümsüz eseri hakkında nasıl uzmanlık kazandırabileceğimizi göreceğiz.

Bu eğitimde sadece kod yazmayacağız; arkadaki matematiksel hileyi (LoRA), bellek optimizasyonunu ve modelin neden Unsloth kütüphanesiyle 2 kat daha hızlı eğitildiğini derinlemesine inceleyeceğiz. Hazırsanız, yapay zekanın "ince ayar" dünyasına giriş yapalım.

Bu konuyu uygulamalı olarak görmek ve kodları adım adım takip etmek için videoyu izlemenizi öneririm:

Bu Eğitimde Neler Öğreneceksiniz?

  • PEFT ve LoRA Kavramları: Milyarlarca parametreyi eğitmek yerine neden küçük "adaptörler" kullanıyoruz?
  • Unsloth Kütüphanesi: Bellek dostu ve yüksek performanslı Fine-Tuning nasıl yapılır?
  • Veri Hazırlığı: Nutuk metinlerini ShareGPT formatına ve modelin anlayacağı "Instruction" yapısına dönüştürme.
  • QLoRA (4-bit Quantization): T4 gibi ücretsiz GPU'larda dev modelleri eğitmenin sırrı.
  • Model Yayını: Eğitilen modeli Hugging Face'e yükleme ve tekrar geri çağırma.

Fine-Tuning'in Arkasındaki "Sihir": LoRA ve Düşük Dereceli Matrisler

Normalde 8 milyar parametreli bir modeli baştan aşağı eğitmek (Full Fine-Tuning) devasa sunucu parkları gerektirir. Ancak biz LoRA (Low-Rank Adaptation) yöntemini kullanıyoruz. Peki bu nedir?

Düşünün ki dev bir matrisiniz var (modelin ağırlıkları). Biz bu matrisin kendisini değiştirmek yerine, onun yanına çok daha küçük iki matris ekliyoruz. Bu iki küçük matrisin çarpımı, orijinal matristeki değişimi temsil ediyor. Örneğin, 200 milyon parametreyi temsil etmek için sadece 120 bin parametre eğitmemiz yetiyor. İşte bu "matematiksel hile", evdeki bilgisayarlarımızda bile yapay zeka eğitmemizi sağlıyor.

Yapay Zeka Eğitim Görseli

Teknik Derinleşme: Unsloth ve Model Yükleme

Unsloth kütüphanesi, Hugging Face ve Llama.cpp kütüphanelerini temel alarak optimizasyonlar yapar. Bellek kullanımını %70'e kadar azaltırken hızı 2 kat artırabilir. İlk adım olarak modelimizi 4-bit kuantize edilmiş halde yüklüyoruz:

from unsloth import FastLanguageModel
import torch

max_seq_length = 2048 # İstediğiniz uzunluk
dtype = None # Otomatik algılama
load_in_4bit = True # Bellek dostu eğitim için

model, tokenizer = FastLanguageModel.from_pretrained(
    model_name = "unsloth/llama-3-8b-Instruct-bnb-4bit",
    max_seq_length = max_seq_length,
    dtype = dtype,
    load_in_4bit = load_in_4bit,
)

Veri Seti Hazırlığı: Nutuk'u Modele Öğretmek

Bir önceki dersimizde hazırladığımız 4300 soruluk Nutuk veri setini, modelin "sohbet" edebilmesi için ShareGPT formatına çeviriyoruz. Modelin sadece soruyu değil, bir sohbet akışını (User -> Assistant) anlaması için "Conversation" yapısını kuruyoruz:

def formatting_prompts_func(examples):
    instructions = examples["instruction"]
    inputs       = examples["input"]
    outputs      = examples["output"]
    texts = []
    for instruction, input, output in zip(instructions, inputs, outputs):
        # Modelin chat template'ine göre formatlama
        text = f"### Instruction:\n{instruction}\n\n### Input:\n{input}\n\n### Response:\n{output}"
        texts.append(text)
    return { "text" : texts, }

# Veri setini yükleme ve formatlama adımı burada gerçekleşir

Eğitim Parametreleri ve Optimizasyon

Eğitim esnasında en önemli parametrelerden biri Rank (R) değeridir. Bu değer, adaptörün ne kadar karmaşık olacağını belirler. Biz bu örnekte R=16 kullandık. Daha yüksek değerler daha fazla öğrenme kapasitesi sunsa da bellek maliyetini artırır. 17 dakikalık bir eğitim sonucunda modelin "loss" değerinin 2.7'den 1.2'ye düştüğünü gözlemledik.

Önemli Not: Fine-tuning yapmadan önce model Sivas Kongresi sorularına İngilizce cevap verirken, eğitim sonrası veri setimizdeki üslupla Türkçe ve net cevaplar vermeye başladı.

Sıkça Sorulan Sorular (SSS)

1. Kendi veri setimle bu eğitimi yapabilir miyim?
Kesinlikle. Tek yapmanız gereken verilerinizi "Soru-Cevap" formatında bir JSON veya CSV dosyasına dönüştürmek ve videoda gösterdiğimiz formatting_prompts_func fonksiyonuyla modele sunmaktır.

2. LoRA Rank (R) değerini nasıl belirlemeliyim?
Genellikle 8, 16 veya 32 değerleri standarttır. Eğer modeliniz çok karmaşık bir konuyu (örneğin ileri düzey tıp veya hukuk) öğreniyorsa rank değerini artırabilirsiniz, ancak aşırı öğrenme (overfitting) riskine dikkat etmelisiniz.

3. Google Colab'ın ücretsiz GPU'su yeterli mi?
Evet, Unsloth kütüphanesinin 4-bit optimizasyonu sayesinde LLAMA 3 (8B) modelini ücretsiz T4 GPU'da sorunsuzca eğitebilirsiniz. Bellek kullanımımız yaklaşık 13-15 GB civarında seyretmektedir.

Sonuç

Özetle; doğru araçları (Unsloth), doğru yöntemleri (QLoRA) ve kaliteli bir veri setini (Nutuk) bir araya getirdiğinizde, devasa dil modellerini kendi ihtiyaçlarınıza göre özelleştirmeniz artık hayal değil. Bu model artık sadece genel bir dil modeli değil, aynı zamanda Nutuk konusunda uzmanlaşmış bir asistandır.

Daha Fazlasını Keşfedin:
Yapay zeka ve yazılım dünyasındaki gelişmeleri kaçırmamak için Murat Karakaya Akademi YouTube kanalına abone olun.

Kanalı Ziyaret Et & Abone Ol 🚀

#MuratKarakayaAkademi #FineTuning #Llama3 #Unsloth #Nutuk #YapayZeka #DeepLearning #Python

Google Gemma 3 Vision: Python ile Görüntü İşleme, OCR ve Tarihi Analiz Deneyimleri

Google Gemma 3 Vision: Python ile Görüntü İşleme, OCR ve Tarihi Analiz Deneyimleri

Merhaba değerli arkadaşlar, ben Prof. Dr. Murat Karakaya. Murat Karakaya Akademi'ye hoş geldiniz. Bugün hem teknik hem de manevi açıdan çok özel bir inceleme ile karşınızdayım. 18 Mart Çanakkale Zaferi vesilesiyle, Google'ın yeni multimodal modeli Gemma 3 (4B)'ü, Çanakkale Savaşı'na ait tarihi fotoğraflar, belgeler ve menüler üzerinde test ettik.

Amacımız şu: Sadece 4 milyar parametreli küçük bir model, karmaşık tarihi belgeleri okuyabilir mi (OCR)? Yıpranmış siyah beyaz fotoğraflardaki duyguyu ve bağlamı anlayabilir mi? Ve en önemlisi, bunları Türkçe olarak hatasız yorumlayabilir mi? Sonuçlar beni gerçekten şaşırttı. Gelin, bu deneyimi ve Python kodlarını birlikte inceleyelim.

Bu duygusal ve teknik analizi baştan sona izlemek, modelin tarihi belgeleri nasıl yorumladığına şahit olmak için videoya göz atmanızı öneririm:

Bu Eğitimde Neler Öğreneceksiniz?

  • Hugging Face Transformers kütüphanesi ile Gemma 3 Vision kurulumu.
  • Gemma 3'ün OCR (Optik Karakter Tanıma) performansı ve kalori hesabı örneği.
  • Eski ve yıpranmış fotoğraflarda duygu ve bağlam analizi.
  • Yabancı dildeki (İngilizce/Yunanca) tarihi belgelerin analizi ve çevirisi.
  • Python ile Multimodal (Resim + Metin) pipeline oluşturma.

Gemma 3 Vision ve Teknik Altyapı

Gemma 3, sadece metin üreten bir LLM değil, aynı zamanda görüntüleri de "görebilen" bir VLM (Vision Language Model). Modelin içinde bir Vision Encoder bulunuyor. Bu encoder, görüntüyü küçük parçalara (patch) bölüyor, token'lara çeviriyor ve dil modelinin anlayabileceği bir formata dönüştürüyor.

Bu çalışmada, henüz çok yeni olduğu için Hugging Face'in transformers kütüphanesinin geliştirici sürümünü (GitHub branch) kullandık. Model olarak da 4 milyar parametreli (4B-it) versiyonu tercih ettik. Neden? Çünkü Colab'ın ücretsiz T4 GPU'sunda veya standart bir bilgisayarda (yaklaşık 7-8 GB VRAM ile) rahatlıkla çalışabiliyor.

Çanakkale Özel: Model Neleri Başardı?

1. OCR ve Mantıksal Çıkarım (Asker Menüsü)

Modele, Çanakkale Savaşı'nda askerlerimize verilen yemek listesini (15 Haziran, 26 Haziran gibi tarihlerin ve öğünlerin yazdığı eski bir belge) gösterdik. Gemma 3'ten sadece okumasını değil, askerlerin günlük kalorisini hesaplamasını ve günümüz hamburger menüsüyle kıyaslamasını istedik.

Sonuç: Model, tablodaki "Üzüm Hoşafı", "Yarım Ekmek" gibi silik yazıları kusursuz okudu. Askerin günlük ortalama 270 kalori aldığını hesapladı ve bunu günümüzün 1100 kalorilik menüsüyle kıyaslayarak aradaki uçurumu (yokluğu ve fedakarlığı) çok net ortaya koydu.

2. Duygu Analizi (Siperdeki Askerler)

Atatürk'ün cephede gözlemlediği anları anlattığı bir mektubun görselini ve siperdeki askerlerin bir fotoğrafını verdik. "Buradaki ruh halini özetle" dedik. Model, askerlerin yüzündeki kararlılık, korku, gerginlik ve vatan sevgisi ifadelerini metinle birleştirerek lise düzeyinde bir öğrencinin yazabileceği kalitede duygusal bir analiz yaptı.

3. Bağlamı Anlama (Fotoğraf Nerede Çekildi?)

Hiçbir yazı içermeyen, sadece askerlerin olduğu bir fotoğraf gösterdik. Model, üniformalardan, kask yapısından (her ne kadar kalpak yerine kask dese de) ve ortamdan bunun 1. Dünya Savaşı, Osmanlı Cephesi olduğunu ve muhtemelen Çanakkale veya Filistin cephesi olabileceğini "akıl yürüterek" buldu.

Python Kodları: Gemma 3 Vision Kurulumu

Bu analizi kendi bilgisayarınızda veya Google Colab'da yapmak için aşağıdaki Python kodlarını kullanabilirsiniz. Transformers kütüphanesinin güncel olduğundan emin olun.

import torch
from transformers import pipeline
from PIL import Image
import requests

# 1. Pipeline'ı Hazırlama
# 'image-text-to-text' görevi multimodal modeller içindir.
pipe = pipeline(
    "image-text-to-text",
    model="google/gemma-3-4b-it",
    device_map="auto",
    torch_dtype=torch.bfloat16 # Bellek tasarrufu için bfloat16 önemli
)

# 2. Resmi Yükleme (Örnek URL)
image_url = "https://example.com/canakkale_fotografi.jpg"
image = Image.open(requests.get(image_url, stream=True).raw)

# 3. Modele Mesaj Gönderme
# Gemma 3 için özel mesaj formatı
messages = [
    {
        "role": "user",
        "content": [
            {"type": "image", "image": image},
            {"type": "text", "text": "Bu resimde ne görüyorsun? Askerlerin ruh halini ve ortamı detaylıca analiz et."}
        ]
    }
]

# 4. Cevabı Üretme
output = pipe(messages, max_new_tokens=1024)
print(output[0]["generated_text"][-1]["content"])

Sıkça Sorulan Sorular (SSS)

1. Gemma 3 Türkçe OCR konusunda ne kadar başarılı?

4 milyar parametreli bir model için inanılmaz başarılı. Çanakkale menüsündeki eski yazı tiplerini, Atatürk'ün el yazısına yakın notlarını ve yıpranmış gazete küpürlerini %95'in üzerinde doğrulukla okuyup Türkçeye çevirebildi.

2. Bu model sadece CPU ile çalışır mı?

Evet, Llama.cpp gibi araçlarla CPU üzerinde çalıştırılabilir ancak bu rehberde kullandığımız Transformers kütüphanesi ile GPU (Colab T4 veya yerel RTX kartlar) kullanmak çok daha hızlı sonuç verir. CPU'da bir resmin analizi dakikalar sürebilir.

3. Llama 3.2 Vision ile farkı nedir?

Gemma 3, özellikle Türkçe dil desteği ve muhakeme (reasoning) yeteneği konusunda çok daha "yerel" hissettiriyor. Yaptığımız testlerde Türk tarihi ile ilgili bağlamları (üniformalar, coğrafya) şaşırtıcı derecede doğru tanıdı.

Sonuç

Bu 18 Mart'ta, teknolojiyi tarihimizi anlamak için kullandık. Gemma 3, 4 milyar parametresine rağmen, o dönemin zorluklarını, askerimizin fedakarlığını ve tarihin tozlu sayfalarındaki detayları bize bir kez daha, yapay zeka gözüyle gösterdi. Bize bu vatanı emanet eden tüm kahramanlarımızı saygı ve rahmetle anıyoruz.

Daha Fazlasını Keşfedin:
Yapay zeka modellerinin sınırlarını zorladığımız, teknik analizleri milli değerlerimizle harmanladığımız videoları kaçırmamak için Murat Karakaya Akademi YouTube kanalına abone olun.

Kanalı Ziyaret Et & Abone Ol 🚀

#MuratKarakayaAkademi #Gemma3 #VisionAI #CanakkaleZaferi #YapayZeka #Python

Google Gemini 2.0 Flash ile Otomatik Fonksiyon Çağırma: Python ile Uygulamalı Rehber

Google Gemini 2.0 Flash ile Otomatik Fonksiyon Çağırma: Python ile Uygulamalı Rehber

Merhaba değerli arkadaşlar, ben Prof. Dr. Murat Karakaya. Murat Karakaya Akademi'ye hoş geldiniz. Daha önceki eğitimlerimizde, Gemini API kullanarak "Function Calling" (Fonksiyon Çağırma) yapısını detaylıca incelemiştik. O zamanlar süreç biraz daha manuel ilerliyordu; model bize hangi fonksiyonu çağıracağını söylüyor, biz kod tarafında o fonksiyonu çalıştırıyor ve sonucu tekrar modele veriyorduk.

Ancak teknoloji yerinde durmuyor! Google'ın Gemini SDK'sına gelen yeni bir güncelleme ile artık "Automatic Function Calling" (Otomatik Fonksiyon Çağırma) özelliğini kullanabiliyoruz. Bu özellik, geliştiricilerin üzerindeki kod yükünü ciddi oranda alıyor ancak beraberinde bazı dikkat edilmesi gereken "kara kutu" risklerini de getiriyor. Bu yazıda, bu yeni özelliği Python ile nasıl uygulayacağımızı, avantajlarını ve dezavantajlarını gerçek bir senaryo üzerinden inceleyeceğiz.

Bu konuyu uygulamalı olarak görmek ve kodları adım adım takip etmek için videoyu izlemenizi öneririm:

Bu Eğitimde Neler Öğreneceksiniz?

  • Manuel ve Otomatik Fonksiyon Çağırma arasındaki temel farklar.
  • Google Gemini Python SDK ile otomatik araç (tool) kullanımı.
  • Fonksiyon tanımlarında "Docstring" ve "Type Hinting"in önemi.
  • Modelin "görünmez" ara adımlarını nasıl takip edebileceğiniz (Loglama stratejileri).
  • Paralel fonksiyon çağırma ve halüsinasyon risklerine karşı alınacak önlemler.

Otomatik Fonksiyon Çağırma (Automatic Function Calling) Nedir?

Geleneksel (manuel) yöntemde süreç üç adımdan oluşuyordu:

  1. Kullanıcı soruyu sorar, model uygun fonksiyonu ve parametreleri seçer (JSON olarak döner).
  2. Geliştirici bu fonksiyonu kendi kodunda çalıştırır (API isteği, veritabanı sorgusu vb.).
  3. Çıkan sonucu geliştirici tekrar modele gönderir ve model nihai yanıtı üretir.
Bu süreç, özellikle karmaşık döngülerde çok fazla "boilerplate" (basmakalıp) kod yazmamıza neden oluyordu. Otomatik modda ise, SDK aradaki bu trafiği üstleniyor. Biz sadece fonksiyonları tanımlayıp modele veriyoruz; SDK, modelin isteği doğrultusunda Python fonksiyonunu arka planda çalıştırıp sonucunu modele kendisi iletiyor. Bize sadece nihai doğal dil yanıtı kalıyor.

Uygulama: Kargo ve Vergi Hesaplayan AI Asistanı

Videoda, Gemini 2.0 Flash modelini kullanarak bir senaryo kurguladık. Senaryomuzda; ürünün fiyatını, gönderileceği şehirleri (mesafe hesabı için) ve döviz kurunu hesaplayan bir sistem tasarladık. İşte dikkat etmeniz gereken kritik noktalar:

1. Fonksiyonların Hazırlanması ve Docstring Önemi

Modelin bir fonksiyonu ne zaman ve nasıl çağıracağını anlaması için Python'daki docstring (açıklama satırları) hayati önem taşır. Parametrelerin tiplerini ve fonksiyonun ne işe yaradığını çok net belirtmelisiniz.

def calculate_delivery_cost(distance: float) -> float:
    """
    Calculates the delivery cost based on the distance.
    Returns the cost in USD.
    
    Args:
        distance (float): The distance in km.
    """
    # Basit bir mantık: Mesafenin %10'u kadar ücret
    return distance * 0.10

2. Gemini İstemcisini Ayarlama

Yeni SDK yapısında tools parametresine fonksiyon listemizi veriyoruz. SDK varsayılan olarak otomatik çağırmayı desteklese de, konfigürasyonda bunu açıkça belirtmek veya kapatmak mümkündür.

# Gerekli araçları (fonksiyonları) listeye ekliyoruz
tools = [calculate_delivery_cost, calculate_tax, get_exchange_rate]

# Modeli başlatırken tools parametresini veriyoruz
model = genai.GenerativeModel(
    model_name='gemini-2.0-flash',
    tools=tools,
    system_instruction="Sen vergi ve kargo hesaplama uzmanısın..."
)

# Sohbeti başlatıyoruz (SDK otomatik döngüyü yönetir)
chat = model.start_chat(enable_automatic_function_calling=True)

3. "Kara Kutu" Sorunu ve Çözümü

Otomatik modun en büyük dezavantajı şeffaflıktır. Kod çalıştığında, response.text size sadece "Toplam maliyet 540 TL" der. Ancak modelin arka planda hangi kurla çarptığını, mesafeyi kaç km aldığını göremezsiniz.

Bu problemi aşmak için Chat History veya Response Object içindeki geçmişi incelemeniz gerekir. Videoda gösterdiğim gibi, arka planda modelin adım adım (örneğin önce kuru alıp, sonra vergiyi hesaplayıp, sonra mesafeyi bulması) yaptığı işlemleri loglamanız, kurumsal uygulamalarda hesap verilebilirlik açısından şarttır.

Sıkça Sorulan Sorular (SSS)

1. Otomatik Fonksiyon Çağırma her zaman güvenli midir?

Hayır, model bazen "halüsinasyon" görebilir. Örneğin, kodda olmayan bir parametreyi uydurabilir veya fonksiyonu yanlış sırada çağırabilir. Bu yüzden kritik finansal işlemlerde mutlaka doğrulama katmanları eklemeli veya manuel modu tercih etmelisiniz.

2. Hangi Gemini modelleri bu özelliği destekliyor?

Şu an için Gemini 1.5 Pro, 1.5 Flash ve yeni çıkan Gemini 2.0 Flash modelleri destekliyor. Ancak "Lite" gibi daha düşük kapasiteli modellerde veya eski versiyonlarda bu özellik stabil çalışmayabilir.

3. Modelin yaptığı hesaplamaları nasıl görebilirim?

Standart çıktı sadece sonucu verir. Ara adımları görmek için chat.history objesini incelemeli veya sistem prompt'unda modelden "Adım adım ne yaptığını açıklayarak cevap ver" (Chain of Thought) isteğinde bulunmalısınız.

Sonuç

Otomatik Fonksiyon Çağırma, yapay zeka ajanları (AI Agents) geliştirirken kodlama yükünü azaltan harika bir özellik. Ancak kontrolü elden bırakmamak, logları iyi tutmak ve modelin kapasitesine göre (Gemini 2.0 gibi güçlü modellerle) çalışmak gerekiyor. Daha karmaşık projeler için tek bir modele 20 tane araç vermek yerine, "Multi-Agent" (Çoklu Ajan) mimarilerini kullanmanızı tavsiye ederim.

Daha Fazlasını Keşfedin:
Yapay zeka ve yazılım dünyasındaki gelişmeleri kaçırmamak, kodları detaylı incelemek için Murat Karakaya Akademi YouTube kanalına abone olun.

Kanalı Ziyaret Et & Abone Ol 🚀

#MuratKarakayaAkademi #GeminiAPI #Python #YapayZeka #FunctionCalling #LLM