# AWS Trainium

[AWS Trainium](https://aws.amazon.com/ai/machine-learning/trainium/) örnekleri, `neuron` cihazını kaydeden `torch-neuronx` paketi aracılığıyla PyTorch'u yerel olarak çalıştırır. Neuron, gördüğü her giriş şekli için modelinizi bir veya daha fazla grafiğe derler; bu nedenle giriş şekillerini statik tutmak yeniden derlemeyi önler.

## Kurulum

[AWS Neuron kurulum kılavuzunu](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/setup/pytorch/index.html) izleyerek `torch-neuronx` paketini yükleyin. Ardından PyTorch'un Neuron cihazlarını gördüğünü kontrol edin.

```py
import torch

print(torch.neuron.is_available(), torch.neuron.device_count())
```

`True` ve Neuron cihazlarının sayısını, örneğin `True 4` olarak yazdırır.

## Çıkarım çalıştır

`device_map="auto"` Neuron'u algılamaz. Otomatik yerleştirme, kullanılabilir cihazları listelemek için [Accelerate](https://huggingface.co/docs/accelerate/index)'e dayanır; ancak Accelerate Neuron cihazlarını listelemediğinden model sessizce CPU'ya yüklenir. Bunun yerine [from_pretrained()](/docs/transformers/main/tr/main_classes/model#transformers.PreTrainedModel.from_pretrained) fonksiyonuna açıkça `device_map="neuron"` veya [Pipeline](/docs/transformers/main/tr/main_classes/pipelines#transformers.Pipeline) sınıfına `device="neuron"` parametresini iletin.

Girişleri `.to(model.device)` çağrısı yapmak yerine CPU üzerinde iletin. [generate()](/docs/transformers/main/tr/main_classes/text_generation#transformers.GenerationMixin.generate) yalnızca `forward` tarafından tüketilen tensörleri Neuron cihazına taşır. Her adımda büyüyen tensörler (çıktı dizisi, `attention_mask`) CPU üzerinde kalır, böylece derlenmiş grafik kararlılığını korur. `generate`, çıktıyı girdilerle aynı cihazda döndürür. Daha fazla ayrıntı için [Üretim tensörlerini CPU üzerinde tutma](./kv_cache#keep-generation-tensors-on-cpu) bölümüne bakın.

```py
from transformers import AutoModelForCausalLM, AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen3-0.6B")
model = AutoModelForCausalLM.from_pretrained(
    "Qwen/Qwen3-0.6B", dtype="bfloat16", device_map="neuron"
)

# leave the inputs on CPU
inputs = tokenizer("The French Bread Law states", return_tensors="pt")
output = model.generate(
    **inputs, do_sample=False, max_new_tokens=50, cache_implementation="static"
)
print(tokenizer.decode(output[0], skip_special_tokens=True))
```

```txt
The French Bread Law states that the French government must provide a certain amount of bread for the citizens of the country. The law is passed by the French parliament. The French parliament is a body of the French government. The French government is a body of the French state. The
```

Statik bir önbellekle, [generate()](/docs/transformers/main/tr/main_classes/text_generation#transformers.GenerationMixin.generate) Neuron üzerinde ileri geçişi otomatik olarak `torch.compile` ile derler. Bu davranıştan vazgeçmek için [generate()](/docs/transformers/main/tr/main_classes/text_generation#transformers.GenerationMixin.generate) fonksiyonuna `disable_compile=True` parametresini iletin.

## Trainer ile Eğitim

[TrainingArguments](/docs/transformers/main/tr/main_classes/trainer#transformers.TrainingArguments), Neuron'u algılar ve cihazı otomatik olarak `neuron` olarak ayarlar. Tüm Trainium nesilleri bf16'yi destekler.

```py
from transformers import TrainingArguments

training_args = TrainingArguments(
    output_dir="./outputs",
    bf16=True,
)
```

### Modeli derle

`torch_compile=True` değerini ayarlayarak modeli `torch.compile` ile sarmalayın. Bu işlem, modelin ileri geçişini derlerken optimizasyon adımının aceleci (eager) olarak çalışmasını sağlar. [TrainingArguments](/docs/transformers/main/tr/main_classes/trainer#transformers.TrainingArguments), Neuron algıladığında `torch_compile_backend` değerini otomatik olarak `"neuron"` olarak ayarlar.

```py
from transformers import TrainingArguments

training_args = TrainingArguments(
    output_dir="./outputs",
    bf16=True,
    torch_compile=True,
)
```

Her yeni giriş şekli yeni bir derlemeyi tetikler. Girdileri sabit bir uzunluğa doldurun (tokenizer'da `padding="max_length"`) ve son batch'in farklı bir boyuta sahip olmaması için `dataloader_drop_last=True` ayarlayın.

### Dağıtık eğitim

Neuron, Transformers dağıtık API'sini destekler. İstediğiniz paralellik boyutlarıyla bir [DistributedConfig](/docs/transformers/main/tr/expert_parallelism#transformers.DistributedConfig) oluşturun ve bunu [from_pretrained()](/docs/transformers/main/tr/main_classes/model#transformers.PreTrainedModel.from_pretrained) fonksiyonuna iletin. Transformers, modeli yükleme sırasında bölümlere ayırır ve [Trainer](/docs/transformers/main/tr/main_classes/trainer#transformers.Trainer) bunu olduğu gibi kullanır.

```py
import torch
from transformers import AutoModelForCausalLM, DistributedConfig

model = AutoModelForCausalLM.from_pretrained(
    "Qwen/Qwen3-1.7B",
    dtype=torch.bfloat16,
    distributed_config=DistributedConfig(tp_size=2, fsdp_size=2),
)
```

Betik dosyasını `torchrun` ile başlatın.

```bash
torchrun --nproc_per_node=4 train.py
```

Mevcut seçenekler için [Tensor parallelism](./tensor_parallelism), [Expert parallelism](./expert_parallelism) ve [FSDP](./fsdp) konularına bakın.

## Kısıtlamalar

- `device_map="auto"` modeli Neuron yerine CPU üzerinde yükler. `device_map="neuron"` parametresini açıkça belirtin.
- Dinamik şekiller yeniden derlemeyi tetikler. Girdi şekilleri adım adım değiştiğinde hem üretim hem de eğitim yavaşlar. Üretim için statik bir önbellek, eğitim için sabit uzunlukta dolgu kullanın.

