# Derleme

## Genel Bakış

Pytorch 2.0, PyTorch kodunu optimize edilmiş çekirdeklere JIT derleyerek PyTorch kodunun daha hızlı çalışmasını sağlayan güçlü bir özellik olan `torch.compile`'i tanıttı. `torch.compile`'in ana özellikleri şunlardır:

- **Performans İyileştirmesi**: Hesaplama grafiğini optimize ederek model çalıştırma hızını önemli ölçüde artırır.
- **Kullanım Kolaylığı**: Uygulamak için minimal kod değişikliği gerektirir, bu da onu son derece erişilebilir kılar.
- **Uyumluluk**: Mevcut PyTorch kodları ve modelleriyle sorunsuz çalışır.

Accelerate ile kullanıldığında, `torch.compile` dağıtık eğitim iş akışlarına sorunsuz bir şekilde entegre olur ve dağıtık yürütme ile derleme optimizasyonlarından aynı anda yararlanmanızı sağlar.

Derlenmiş kodun ilk çalıştırılması, derleme süresini içerdiği için genellikle daha uzun sürer, ancak sonraki çalıştırmalar önemli ölçüde daha hızlıdır. Farklı senaryolarda en iyi performansı elde etmek için `torch.compile`, `"default"`, `"reduce-overhead"` (CUDA grafiklerini kullanarak ek yükü daha da azaltır) ve `"max-autotune"` (modeliniz için en iyi çekirdekleri bulmak için kapsamlı otomatik ayarlamalar yapar) gibi çeşitli modlar sunar.

## Accelerate ile `torch.compile` kullanımı

Accelerate, eğitim betiklerinize `torch.compile` entegrasyonunu kolay ve sorunsuz hale getirmek için `TorchDynamoPlugin` sağlar.

```python
from accelerate import Accelerator
from accelerate.utils import TorchDynamoPlugin

# Configure the compilation backend
dynamo_plugin = TorchDynamoPlugin(
    backend="inductor",  # Options: "inductor", "aot_eager", "aot_nvfuser", etc.
    mode="default",      # Options: "default", "reduce-overhead", "max-autotune"
    fullgraph=True,
    dynamic=False
)

# Initialize accelerator with the plugin
accelerator = Accelerator(dynamo_plugin=dynamo_plugin)
# This will apply torch.compile to your model
model = accelerator.prepare(model)
```

Accelerate'in karma hassasiyet, dağıtık eğitim (DDP, FSDP, Deepspeed) gibi diğer tüm özellikleri ve eklentileriyle uyumludur.

## Bölgesel Derleme

Optimizasyon için genellikle büyük bir problem alanına sahip olan tüm modeli derlemeye çalışmak yerine, bölgesel derleme, aynı sınıfa ait tekrarlanan blokları hedefler ve bunları sıralı olarak derleyerek derleyicinin önbelleğine erişir. Örneğin, `GPT2LMHeadModel` içinde tekrarlanan blok/sınıf `GPT2Block`'tür ve `model.transformer.h[0]` olarak erişilebilir. Modelin geri kalanı (ör. model.lm_head) ayrı olarak derlenir.

Bu, LLM'ler ve genel olarak Transformers gibi modellerin derleme maliyetini / soğuk başlatma süresini hızlandırmamızı sağlar. Daha fazla ayrıntı için  adresine bakın.

### Bölgesel Derlemeyi Nasıl Kullanılır

`TorchDynamoPlugin` yapılandırmasında `use_regional_compilation=True` olarak ayarlanarak etkinleştirilebilir:

```python
# Configure the compilation backend
dynamo_plugin = TorchDynamoPlugin(
    use_regional_compilation=True,
    ... # other parameters
)
# Initialize accelerator with the plugin
accelerator = Accelerator(dynamo_plugin=dynamo_plugin)
# This will apply compile_regions to your model
model = accelerator.prepare(model)
```

`accelerate.utils.compile_regions` yardımcı işlevini de `torch.compile` kullanırken olduğu gibi doğrudan kullanabilirsiniz.

### Bölgesel Derlemenin Avantajları

PyTorch'taki `torch.compile` özelliğini kullanarak tam derleme ve bölgesel derlemeyi karşılaştıran kapsamlı testler gerçekleştirdik. Tam sonuçlar [accelerate deposunda](https://github.com/huggingface/accelerate/tree/main/benchmarks/torch.compile) yer almaktadır. Testlerimizden elde edilen temel bulgular şunlardır:

1. **Benzer Performans**: Bölgesel derleme, özellikle daha büyük modeller için, tam derlemeye benzer performans hızlandırmaları sağlar.
2. **Daha Hızlı Derleme**: Bölgesel derleme, modellerin derlenmesi için gereken süreyi önemli ölçüde azaltarak dağıtım için daha verimli bir seçenek haline gelir.
3. **Toplam Boyut Etkisi**: Derleme stratejileri arasındaki performans farkı, toplam boyutu arttıkça azalır; bu da derlemenin getirdiği ek maliyetin bu senaryolarda daha az etkili olduğunu gösterir.
4. **Model Boyutu Dikkat Edilmesi Gerekenler**: Bölgesel derlemenin faydaları, derleme süresinden elde edilen tasarrufun önemli ölçüde olabildiği daha büyük modellerde daha belirgindir.
5. **Pratik Uygulama**: Gerçek dünya uygulamaları için, özellikle büyük modellerle çalışırken eğitim soğuk başlatma sürelerini optimize etmek için bölgesel derleme pratik bir seçimdir.

## Sonuç

Hem tam hem de bölgesel derleme, modellerinizi önemli ölçüde hızlandırabilir. Bölgesel derleme, özellikle büyük modelleri yüksek parti boyutlarıyla eğitirken, derleme süresi ile çalışma zamanı performansı arasında pratik bir denge sunar.

