# İnce ayar

İnce ayar, büyük bir önceden eğitilmiş modelin, belirli bir görev veya alana özgü daha küçük bir veri setinde eğitimine devam etmesidir. Örneğin, kodlama örneklerinden oluşan bir veri seti üzerinde ince ayar yapmak, modelin kodlamada daha iyi olmasını sağlar. İnce ayar, rastgele ağırlıklarla başlanmaması dışında ön eğitimle aynıdır. Ayrıca çok daha az hesaplama gücü, veri ve zaman gerektirir.

Aşağıdaki öğretici, [Trainer](/docs/transformers/v5.23.0/tr/main_classes/trainer#transformers.Trainer) ile büyük bir dil modelinin ince ayarını adım adım anlatır.

> [!AgentPrompt]
> Kullanıcının görevi için bir ince ayar çalışması planlamasına yardımcı olun. Bir yapılandırma önermeden önce, görevi, önceden eğitilmiş modeli ve revizyonunu, veri seti alanlarını, değerlendirme verilerini, Transformers sürümünü, donanımı ve kullanılabilir belleği belirleyin. Bu öğreticiyi, durumlarına uygulanan veri hazırlama, model yükleme ve `Trainer` kurulumunu kontrol etmek için kullanın. Örnek veri setinin veya modelin farklı bir göreve uygun olduğunu varsaymayın.
>
> 1. Model, ön işleme veya eğitim kurulumunu değiştirebilecek eksik ayrıntıları sorun. Varsayımlarınızı belirtin. 2. Değerlendirme örneklerini eğitim verisinden ayrı tutun. Görev için bir model ve tokenizer seçin, modelin beklediği girdileri ve etiketleri hazırlayın ve bu girdilerle eşleşen bir veri toplayıcı (data collator) seçin. 3. `TrainingArguments` değerlerini kullanıcının donanımına ve hedeflerine uygun şekilde ayarlayın. Kullanıcı ihtiyaç duyduğunda değerlendirme ve checkpoint kaydetme işlemlerini yapılandırın. Tam bir eğitim işinden önce küçük bir test çalıştırın ve modelin beklenen girdileri aldığını, kaybın (loss) sonlu olduğunu ve değerlendirmenin tamamlandığını kontrol edin. 4. Kullanıcı istemedikçe tam bir eğitim çalıştırmasını başlatmayın veya artefakt yüklemeyin. Önerilen yapılandırmayı, herhangi bir testten elde edilen kanıtları, beklenen kaynak ödünleşimlerini ve doğrulanamayan her şeyi raporlayın.

İnce ayarını yaptığınız modeli Hub'a göndermek için kullanıcı token'ınızla Hugging Face hesabınıza giriş yapın.

```py
from huggingface_hub import login

login()
```

## Tokenizasyon

Bir veri seti yükleyin ve modelin eğitim göreceği metin sütununu (`horoscope`) [tokenize](./fast_tokenizers) edin.

<iframe src="https://huggingface.co/datasets/karthiksagarn/astro_horoscope/embed/viewer/default/train" frameborder="0" width="100%" height="560px"
>

Tokenizer, model girdilerini, `input_ids` ve `attention_mask` oluşturur. Modelin forward metodu yalnızca `input_ids` ve `attention_mask` kabul ettiği için, tokenizasyon sonrası `horoscope` gibi sütunları düşürmek üzere `remove_columns` parametresini ayarlayın.

- `truncation=True` değerini ve `max_length` parametresini ayarlayarak, daha uzun dizileri belirtilen maksimum uzunluğa kısaltın.
- Modeli değerlendirmek için bir test bölmesi oluşturmak üzere `train_test_split` yöntemini kullanın.

```py
from datasets import load_dataset
from transformers import AutoTokenizer, DataCollatorForLanguageModeling

model_name = "Qwen/Qwen3-0.6B"
tokenizer = AutoTokenizer.from_pretrained(model_name)
dataset = load_dataset("karthiksagarn/astro_horoscope", split="train")

def tokenize(batch):
    return tokenizer(
        batch["horoscope"],
        truncation=True,
        max_length=512,
    )

dataset = dataset.map(tokenize, batched=True, remove_columns=dataset.column_names)
dataset = dataset.train_test_split(test_size=0.1)
```

Bir veri toplayıcı (data collator), modelin işlemesi için veri seti örneklerini partilere (batch) dönüştürür. [DataCollatorForLanguageModeling](/docs/transformers/v5.23.0/tr/main_classes/data_collator#transformers.DataCollatorForLanguageModeling), veri setindeki tüm dizileri aynı uzunluğa doldurmak yerine, her partiyi *dinamik olarak* o partideki en uzun diziye göre doldurur. Bu sayede gereksiz dolgu token'larının hesaplanmasından kaçınılarak hesaplama ve bellek tasarrufu sağlanır.

- Rastgele token maskelenmesini önlemek için `mlm=False` olarak ayarlayın.

```py
data_collator = DataCollatorForLanguageModeling(tokenizer, mlm=False)
```

## Bir modelin yüklenmesi

İnce ayar yapmak için önceden eğitilmiş bir kontrol noktası yükleyin (model yükleme hakkında daha fazla ayrıntı için [Modelleri yükleme](./models) kılavuzuna bakın).

- Ağırlıkları kaydedildikleri dtype ile yüklemek için `dtype="auto"` değerini ayarlayın. Bu ayar yapılmadığında PyTorch, ağırlıkları `torch.float32` olarak yükler; bu da ağırlıkların başlangıçta `torch.bfloat16` olması durumunda bellek kullanımını ikiye katlar.

```py
from transformers import AutoModelForCausalLM, TrainingArguments, Trainer

model_name = "Qwen/Qwen3-0.6B"
model = AutoModelForCausalLM.from_pretrained(model_name, dtype="auto")
```

## Eğitim yapılandırması

[TrainingArguments](/docs/transformers/v5.23.0/tr/main_classes/trainer#transformers.TrainingArguments), bir eğitim çalıştırmasını özelleştirmek için tüm seçenekleri sağlar. Burada yalnızca en yaygın kullanılan argümanlar ele alınır. Diğer her şeyin makul varsayılanları vardır veya dağıtık eğitim gibi belirli senaryolara özgüdür. Argümanların tam listesi için [TrainingArguments](/docs/transformers/v5.23.0/tr/main_classes/trainer#transformers.TrainingArguments) API belgelerine bakın.

- `num_train_epochs` ve `per_device_train_batch_size`, eğitim süresini ve parti boyutunu kontrol eder. `learning_rate`, optimizör için başlangıç öğrenme oranını belirler.

- Donanımınız destekliyorsa (Ampere+ GPU'lar) hızlı karma hassasiyetli eğitim için `bf16=True` olarak ayarlayın. Aksi takdirde, daha eski donanımlarda `fp16=True` değerine geri dönün.
- `gradient_accumulation_steps`, ağırlıkların güncellenmesinden önce birden çok ileri geçiş boyunca gradyanları biriktirerek daha büyük bir etkili batch boyutunu simüle eder.
- `gradient_checkpointing`, ara aktivasyonları saklamak yerine geriye yayılım sırasında yeniden hesaplayarak hesaplama gücünü bellek karşılığında takas eder. Bellek ve hız arasında bir denge için [kısmi checkpointing](./grad_checkpointing#partial-checkpointing) bölümüne bakın.
- `gradient_checkpointing=True` olduğunda, uzun diziler için GPU bellek kullanımını azaltmak ve kaydedilen aktivasyonları sabitlenmiş ana bellekte tutmak için `gradient_checkpointing_kwargs={"offload": True}` ayarlayın. Bu ödünleşim için [kaydedilen aktivasyonların dışa aktarılması](./grad_checkpointing#offloading-the-saved-activations) bölümüne bakın.
- Benzer uzunluklardaki örnekleri gruplayarak padding'i azaltmak için `train_sampling_strategy="group_by_length"` değerini ayarlayın. İşleyici tabanlı çok modlu veri kümeleri ve önceden hesaplanmış uzunluklar için [uzunluğa göre örnek gruplama](./trainer_recipes#group-samples-by-length) bölümüne bakın.

- `eval_strategy` ve `save_strategy`, eğitim sırasında modelin ne zaman değerlendirileceğini ve bir kontrol noktasının ne zaman kaydedileceğini belirler.
- `load_best_model_at_end`, eğitim bittiğinde en iyi kontrol noktasını yükler. Bunun için `eval_strategy` ayarlanmış olmalıdır.

- `logging_steps`, eğitim sırasında kaybın ne sıklıkla güncelleneceğini ve döndürüleceğini kontrol eder.

```py
training_args = TrainingArguments(
    output_dir="qwen3-finetuned",
    num_train_epochs=3,
    per_device_train_batch_size=2,
    gradient_accumulation_steps=8,
    gradient_checkpointing=True,
    gradient_checkpointing_kwargs={"every_n_layers": 4},
    bf16=True,
    learning_rate=2e-5,
    logging_steps=10,
    eval_strategy="epoch",
    save_strategy="epoch",
    load_best_model_at_end=True,
)
```

## Eğitim

Gerekli tüm bileşenlerle bir [Trainer](/docs/transformers/v5.23.0/tr/main_classes/trainer#transformers.Trainer) örneği oluşturun, ardından başlamak için [train()](/docs/transformers/v5.23.0/tr/main_classes/trainer#transformers.Trainer.train) çağrısını yapın.

```py
trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=dataset["train"],
    eval_dataset=dataset["test"],
    processing_class=tokenizer,
    data_collator=DataCollatorForLanguageModeling(tokenizer, mlm=False),
)

trainer.train()
trainer.push_to_hub()
```

[push_to_hub()](/docs/transformers/v5.23.0/tr/main_classes/trainer#transformers.Trainer.push_to_hub), ince ayar yapılmış ağırlıkları, üretim yapılandırmasını, belirteç ayrıştırıcısını ve model yapılandırmasını Hub'a yükler.

## Sonraki adımlar

- Özel kayıp fonksiyonları, bellek verimli değerlendirme, checkpoint oluşturma ve daha fazlası gibi yaygın Trainer özelliklerinin minimal çalışan örnekleri için [Trainer özellikleri](./trainer_recipes) kılavuzunu okuyun.
- Yeni ve özel işlevselliği desteklemek için [Trainer](/docs/transformers/v5.23.0/tr/main_classes/trainer#transformers.Trainer) yöntemlerini nasıl alt sınıflandıracağınızı öğrenmek için [Subclassing Trainer methods](./trainer_customize) rehberini okuyun.
- Eğitim olaylarına kayıt tutma, erken durdurma ve diğer özel davranışlar için nasıl bağlanacağınızı öğrenmek için [Callbacks](./trainer_callbacks) rehberini okuyun.
- Örneklerin toplu işlemlere nasıl derlendiğini özelleştirmeyi öğrenmek için [Veri toplayıcıları](./data_collators) rehberini okuyun.
- Kiralanan bir GPU üzerinde [Hugging Face Jobs](https://huggingface.co/docs/hub/jobs-training) ile bir eğitim betiği çalıştırın.
- Farklı metin, ses, görüntü ve çok modlu görevler için ek eğitim örnekleri görmek üzere [notebook](./notebooks)ları veya **Resources > Task Recipes** bölümünü inceleyin.

