Ana içeriğe atla

PyTorch ile Bir LLM Nasıl Eğitilir

PyTorch kullanarak büyük dil modellerini eğitme sürecini, ilk kurulumdan son uygulamaya kadar öğrenin.
Güncel 3 Eki 2026  · 8 dk. oku

Yapay Zeka ile Keşfedin

ChatGPTClaudePerplexity

Büyük Dil Modelleri (LLM’ler), özellikle doğal dil işleme için, modern yapay zekâ uygulamalarının başlıca bileşenleridir. Sanal asistanlardan makine çevirisine, metin özetlemeden soru-cevaplamaya kadar uzanan kullanım alanlarıyla, insan dilini verimli bir şekilde işleme ve anlama potansiyeline sahiptirler.

LangChain gibi kütüphaneler, yukarıda bahsedilen türden uçtan uca yapay zekâ uygulamalarının hayata geçirilmesini kolaylaştırır. Veri Mühendisliği ve Veri Uygulamaları için LangChain’e Giriş adlı eğitimimiz, LangChain ile neler yapabileceğinize, LangChain’in çözdüğü problemlere ve veri kullanım örneklerine genel bir bakış sunar.

Bu makale, çalışma alanının kurulmasından PyTorch 2.0.1 kullanılarak yapılan son uygulamaya kadar, büyük bir dil modelini eğitme sürecinin tamamını açıklayacaktır. PyTorch, net ve kolay bir model uygulamasına imkân veren dinamik ve esnek bir derin öğrenme çatısıdır.

Önkoşullar

Bu içerikten en iyi şekilde yararlanmak için Python programlamada rahat olmanız, derin öğrenme kavramları ve transformer’lar hakkında temel bilgiye sahip olmanız ve PyTorch çatısına aşina olmanız önemlidir. Tüm kaynak kodu GitHub’da mevcut olacaktır.

Temel uygulamaya dalmadan önce ilgili kütüphaneleri kurup içe aktarmamız gerekiyor. Ayrıca, eğitim betiğinin Hugging Face’teki bu depodan esinlendiğini not etmek önemlidir.

Kütüphane kurulumu

Kurulum süreci aşağıda ayrıntılandırılmıştır:

Öncelikle, Jupyter Notebook’ta tek bir hücrede bash komutu olarak kurulum komutlarını çalıştırmak için %%bash ifadesini kullanıyoruz.

  • Trl: pekiştirmeli öğrenme ile transformer dil modellerini eğitmek için kullanılır.
  • Peft: önceden eğitilmiş modelin verimli şekilde uyarlanmasını sağlamak için parametre-verimli ince ayar (PEFT) yöntemlerini kullanır.
  • Torch: yaygın olarak kullanılan açık kaynak bir makine öğrenimi kütüphanesi.
  • Datasets: yaygın makine öğrenimi veri kümelerinin indirilmesi ve yüklenmesine yardımcı olur.

Transformers: Hugging Face tarafından geliştirilmiş olup, sınıflandırma, özetleme ve çeviri gibi çeşitli metin tabanlı görevler için binlerce önceden eğitilmiş modelle birlikte gelir.

%%bash
pip -q install trl
pip -q install peft
pip -q install torch
pip -q install datasets
pip -q install transformers

Artık bu modüller aşağıdaki gibi içe aktarılabilir:

import torch
from trl import SFTTrainer
from datasets import load_dataset
from peft import LoraConfig, get_peft_model, prepare_model_for_int8_training
from transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments

Veri Yükleme ve Hazırlama

alpaca veri seti, Hugging Face’te ücretsiz olarak mevcuttur ve bu örnekte kullanılacaktır. Veri setinin üç ana sütunu vardır: instructions, input ve output. Bu sütunlar birleştirilerek nihai bir metin sütunu oluşturulur.

İlgilenilen veri setinin adını, yani tatsu-lab/alpaca’yı vererek veri setini yükleme talimatı aşağıda verilmiştir:

train_dataset = load_dataset("tatsu-lab/alpaca", split="train")
print(train_dataset)

Ortaya çıkan verilerin iki anahtar içeren bir sözlük yapısında olduğunu görebiliriz:

  • Features: verilerin ana sütunlarını içerir
  • Num_rows: verideki toplam satır sayısına karşılık gelir

Eğitim veri setinin yapısı

train_dataset’in yapısı

İlk beş satır aşağıdaki komutla görüntülenebilir. Önce sözlüğü bir pandas veri çerçevesine dönüştürün, ardından satırları gösterin.

pandas_format = train_dataset.to_pandas()
display(pandas_format.head())

Eğitim veri setinin ilk beş satırı

train_dataset’in ilk beş satırı

Daha iyi görselleştirme için, ilk üç satıra ait bilgileri yazdıralım; ancak bundan önce, satır başına en fazla 50 kelime sınırı koymak için textwrap kütüphanesini kurmamız gerekiyor. İlk yazdırma ifadesi her bloğu 15 kısa çizgi ile ayırır.

import textwrap
for index in range(3):
   print("---"*15)
   print("Instruction:        
       {}".format(textwrap.fill(pandas_format.iloc[index]["instruction"],    
       width=50)))
   print("Output:  
       {}".format(textwrap.fill(pandas_format.iloc[index]["output"],  
       width=50)))
   print("Text: 
       {}".format(textwrap.fill(pandas_format.iloc[index]["text"],  
       width=50)))

İlk üç satırın ayrıntıları

İlk üç satırın ayrıntıları

Model Eğitimi

Modele eğitim vermeye geçmeden önce bazı önkoşulları ayarlamamız gerekiyor:

  • Önceden Eğitilmiş Model: Hugging Face’te bulunan Salesforce/xgen-7b-8k-base adlı önceden eğitilmiş modeli kullanacağız. Salesforce, XGen-7B olarak adlandırılan bu 7B LLM serisini, 1,5T tokene kadar 8K diziler üzerinde standart yoğun dikkat (dense attention) ile eğitti.
  • Tokenizer: Eğitim verisi üzerinde tokenleştirme görevleri için gereklidir. Önceden eğitilmiş model ve tokenizer’ı yüklemek için kod aşağıdaki gibidir:
pretrained_model_name = "Salesforce/xgen-7b-8k-base"
model = AutoModelForCausalLM.from_pretrained(pretrained_model_name, torch_dtype=torch.bfloat16)
tokenizer = AutoTokenizer.from_pretrained(pretrained_model_name, trust_remote_code=True)

Eğitim yapılandırması

Eğitim için bazı argümanlar ve yapılandırmalar gerekir; aşağıda iki önemli yapılandırma nesnesi tanımlanmıştır: bir TrainingArguments örneği, bir LoraConfig modeli örneği ve son olarak SFTTrainer modeli.

TrainingArguments

Bu sınıf, model eğitimi için parametreleri tanımlamakta kullanılır.

Bu özel senaryoda, önce output_dir özniteliğini kullanarak eğitilmiş modelin depolanacağı hedefi belirleyip, ardından öğrenme oranı, epoch sayısı ve diğerleri gibi ek hiperparametreleri tanımlıyoruz.

model_training_args = TrainingArguments(
       output_dir="xgen-7b-8k-base-fine-tuned",
       per_device_train_batch_size=4,
       optim="adamw_torch",
       logging_steps=80,
       learning_rate=2e-4,
       warmup_ratio=0.1,
       lr_scheduler_type="linear",
       num_train_epochs=1,
       save_strategy="epoch"
   )

LoRAConfig

Bu senaryoda kullanılan ana argümanlar şunlardır: LoRA’daki düşük dereceli dönüşüm matrisinin rütbesi 16 olarak ayarlanmıştır. Ardından, LoRA’daki ek parametreler için ölçekleme katsayısı 32 olarak belirlenmiştir.

Ayrıca, bırakma (dropout) oranı 0,05’tir; bu da eğitim sırasında giriş birimlerinin %5’inin yok sayılacağı anlamına gelir. Son olarak, nedensel dil modellemesiyle uğraştığımız için görev CAUSAL_LM özniteliğiyle başlatılır.

SFTTrainer

Bu bileşen, modeli eğitim verileri, tokenizer ve yukarıdaki modeller gibi ek bilgilerle eğitmeyi amaçlar.

Eğitim verilerindeki text alanını kullandığımızdan, belirli bir dizideki maksimum token sayısını belirlemeye yardımcı olması için dağılıma göz atmak önemlidir.

import matplotlib.pyplot as plt


pandas_format['text_length'] = pandas_format['text'].apply(len)


plt.figure(figsize=(10,6))
plt.hist(pandas_format['text_length'], bins=50, alpha=0.5, color='g')
plt.title('Distribution of Length of Text')
plt.xlabel('Length of Text')
plt.ylabel('Frequency')
plt.grid(True)
plt.show()

Metin sütununun uzunluk dağılımı

Metin sütunu uzunluğunun dağılımı

Yukarıdaki gözleme dayanarak, metinlerin çoğunluğunun uzunluğunun 0 ile 1000 arasında olduğunu görebiliriz. Ayrıca, aşağıda gördüğümüz gibi, metin belgelerinin yalnızca %4,5’inin uzunluğu 1024’ten büyüktür.

mask = pandas_format['text_length'] > 1024
percentage = (mask.sum() / pandas_format['text_length'].count()) * 100


print(f"The percentage of text documents with a length greater than 1024 is: {percentage}%")

image6.png

Daha sonra, dizideki maksimum token sayısını 1024 olarak ayarlıyoruz; böylece bundan daha uzun olan metinler kesilir.

SFT_trainer = SFTTrainer(
       model=model,
       train_dataset=train_dataset,
       dataset_text_field="text",
       max_seq_length=1024,
       tokenizer=tokenizer,
       args=model_training_args,
       packing=True,
       peft_config=lora_peft_config,
   )

Eğitimi yürütme

Tüm önkoşullar hazır olduğuna göre, artık modelin eğitim sürecini aşağıdaki gibi çalıştırabiliriz:

tokenizer.pad_token = tokenizer.eos_token
model.resize_token_embeddings(len(tokenizer))
model = prepare_model_for_int8_training(model)
model = get_peft_model(model, lora_peft_config)
training_args = model_training_args
trainer = SFT_trainer
trainer.train()

Bu eğitimin, genel eğitim sürecini hızlandıran GPU’lu bir bulut ortamında gerçekleştirildiğini belirtmek önemlidir. Ancak, yerel bir bilgisayarda eğitim daha uzun sürebilir.

LLM’leri Bulutta Kullanmanın Artıları ve Eksileri ile Yerelde Çalıştırma başlıklı blog yazımız, LLM’ler için en uygun dağıtım stratejisini seçmeye yönelik temel değerlendirmeleri sunar.

Yukarıdaki kod parçasında neler olduğuna bakalım:

  • tokenizer.pad_token = tokenizer.eos_token: Doldurma (padding) token’ını, cümle sonu (EOS) token’ı ile aynı olacak şekilde ayarlar.
  • model.resize_token_embeddings(len(tokenizer)): Modelin token gömme katmanını, tokenizer sözlüğünün uzunluğuna uyacak şekilde yeniden boyutlandırır.
  • model = prepare_model_for_int8_training(model): Modeli muhtemelen kuantizasyon uygulayarak INT8 hassasiyette eğitime hazırlar.
  • model = get_peft_model(model, lora_peft_config): Verilen modeli PEFT yapılandırmasına göre uyarlar.
  • training_args = model_training_args: Önceden tanımlanmış eğitim argümanlarını training_args değişkenine atar.
  • trainer = SFT_trainer: SFTTrainer örneğini trainer değişkenine atar.
  • trainer.train(): Sağlanan özelliklere göre modelin eğitim sürecini başlatır.

Sonuç

Bu makale, PyTorch kullanarak büyük bir dil modelinin nasıl eğitileceğine dair net bir rehber sundu. Veri seti hazırlığından başlayarak, önkoşulların hazırlanması, eğitmenin kurulması ve nihayetinde eğitim sürecinin yürütülmesi adımlarını ele aldı.

Spesifik bir veri seti ve önceden eğitilmiş bir model kullanılmış olsa da süreç, diğer uyumlu seçenekler için de büyük ölçüde aynıdır. Artık bir LLM’in nasıl eğitileceğini anladığınıza göre, bu bilgiyi çeşitli NLP görevleri için diğer gelişmiş modelleri eğitmekte kullanabilirsiniz.

LangChain ile LLM uygulamaları nasıl geliştirilir rehberimize göz atarak büyük dil modellerinin gücünü daha fazla keşfedin. Ya da hâlâ büyük dil modeli kavramlarını keşfetmeniz gerekiyorsa, öğreniminizi ilerletmek için kursumuza göz atın.


Zoumana Keita 's photo
Author
Zoumana Keita
LinkedIn
Twitter

Bilgisini paylaşmaktan ve başkalarına katkı sunmaktan keyif alan, çok yönlü bir veri bilimci olan Zoumana, YouTube’da içerik üretiyor ve Medium’da önde gelen teknoloji yazarları arasında yer alıyor. Konuşmaktan, kod yazmaktan ve öğretmekten büyük zevk alıyor. Zoumana’nın iki yüksek lisans derecesi bulunuyor: İlki Fransa, Paris’te Makine Öğrenmesi odaklı Bilgisayar Bilimleri; ikincisi ise ABD’de Texas Tech University’den Veri Bilimi. Kariyerine Fransa’da Groupe OPEN’da Yazılım Geliştirici olarak başladı; ardından IBM’de Makine Öğrenmesi Danışmanı olarak çalıştı ve sigorta şirketleri için uçtan uca yapay zeka çözümleri geliştirdi. Paris ve Montreal merkezli ilk Sürdürülebilir YZ girişimi olan Axionable’a katıldı. Burada Veri Bilimci olarak görev yaptı ve çoğunlukla NLP kullanım örnekleri olmak üzere, Fransa, Montreal, Singapur ve İsviçre’den müşteriler için YZ ürünleri hayata geçirdi. Ayrıca zamanının %5’ini Araştırma ve Geliştirme’ye ayırdı. Hâlihazırda IFC – Dünya Bankası Grubu’nda Kıdemli Veri Bilimci olarak çalışmaktadır.

Konular
Yapay Zeka
İlgili

blog

Hızlı Sevkiyat İçin Pratik Vibe Kodlama Teknoloji Yığını

Ön uç, arka uç, veritabanları, kimlik doğrulama, depolama, e-posta, test, dağıtım ve izleme için en iyi araçları keşfedin.
Abid Ali Awan's photo

Abid Ali Awan

14 dk.

blog

2026’da En Popüler 40 Yazılım Mühendisi Mülakat Sorusu

Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Dario Radečić's photo

Dario Radečić

15 dk.

Eğitim

Python'da Listeyi String'e Nasıl Dönüştürürsünüz

Bu hızlı eğitimde, Python'da bir listeyi string'e nasıl dönüştüreceğinizi öğrenin.
Adel Nehme's photo

Adel Nehme

Eğitim

.gitignore Nasıl Kullanılır: Örneklerle Pratik Bir Giriş

Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Kurtis Pykes 's photo

Kurtis Pykes

8 dk.

Devamını GörDevamını Gör