# PyTorch hızlandırıcıları

LeRobot, eğitim ve çıkarım için birden fazla donanım hızlandırma seçeneğini destekler.

Bu seçenekler şunları içerir:

- **CPU**: CPU tüm hesaplamaları yürütür, özel bir hızlandırıcı kullanılmaz
- **CUDA**: NVIDIA GPU'larla hızlandırma ve ROCm aracılığıyla AMD GPU'larla hızlandırma (bkz. [AMD GPU'lar](#amd-gpus-rocm))
- **MPS**: Apple Silicon GPU'ları ile hızlandırma
- **XPU**: Intel entegre ve ayrık GPU'larla hızlandırma

## Başlangıç

Belirli bir hızlandırıcıyı kullanmak için uygun bir PyTorch sürümünün yüklü olması gerekir.

CPU, CUDA ve MPS arka uçları için [PyTorch kurulum sayfasında](https://pytorch.org/get-started/locally) verilen talimatları izleyin. XPU arka ucu için [PyTorch belgelerindeki](https://docs.pytorch.org/docs/stable/notes/get_start_xpu.html) talimatları izleyin.

### AMD GPU'lar (ROCm)

PyTorch'un ROCm derlemeleri, HIP çalışma zamanını `torch.cuda` ad alanı üzerinden açığa çıkarır; bu nedenle `--policy.device=cuda` bir AMD GPU seçer ve LeRobot tarafında herhangi bir değişiklik gerekmez. Belirli kartları seçerken `HIP_VISIBLE_DEVICES`, `CUDA_VISIBLE_DEVICES` yerine tercih edilir.

Mevcut bir ROCm PyTorch üzerine LeRobot kurulumu dikkat gerektirir: LeRobot'un `torch`, `torchvision` ve `numpy` sınırları, bir ROCm görüntüsünün sunduğu sürümlerden farklı olabilir ve normal bir kurulum, PyPI'den `torch` alır; PyPI'deki Linux tekerlekleri CUDA derlemeleridir, bu nedenle kısıtsız bir kurulum ROCm derlemesinin yerini alır ve GPU'ları kullanılamaz hale getirir. Ağacın geri kalanının normal şekilde çözümlenmesini sağlamak için bu paketleri `uv pip install --override` ile sabitleyin. [`docker/Dockerfile.rocm`](https://github.com/huggingface/lerobot/blob/main/docker/Dockerfile.rocm) bunu yapar ve çalışan bir ortama en hızlı yoldur; ROCm'in gerektirdiği çalıştırma bayrakları için [docker/README.md](https://github.com/huggingface/lerobot/blob/main/docker/README.md) dosyasına bakın.

### Kurulumu doğrulama

Kurulumdan sonra, hızlandırıcı kullanılabilirliği çalıştırılarak doğrulanabilir

```python
import torch
print(torch.<backend_name>.is_available())  # <backend_name> is cuda, mps, or xpu
```

## Eğitim veya değerlendirme nasıl çalıştırılır

İstenen hızlandırıcıyı seçmek için `lerobot-train` veya `lerobot-eval` çalıştırılırken `--policy.device` bayrağını kullanın. Örneğin, Apple Silicon üzerinde MPS kullanmak için şunu çalıştırın:

```bash
lerobot-train \
    --policy.device=mps ...
```

```bash
lerobot-eval \
    --policy.device=mps ...
```

Ancak çoğu durumda, bir hızlandırıcının varlığı otomatik olarak algılanır ve `policy.device` parametresi komut satırı komutlarından çıkarılabilir.

## Karışık hassasiyet

Eğitim hassasiyeti, `no` (varsayılan), `bf16` ve `fp16` değerlerini kabul eden `--accelerator.mixed_precision` tarafından yönetilir:

```bash
lerobot-train \
    --policy.type=act \
    --accelerator.mixed_precision=bf16 ...
```

`fp16` bir hızlandırıcı gerektirir: `--policy.device=cpu` durumunda reddedilir, çünkü accelerate bu durumda bir kayıp ölçekleyici (loss scaler) oluşturmaz ve çalışma sessizce tam hassasiyete (full precision) geri düşer. `bf16` ise CPU üzerinde de otomatik döküm (autocast) yapabildiği için kısıtlanmaz.

`bf16`, donanım desteği gerektirir (NVIDIA GPU'larda Ampere veya daha yeni). V100 veya T4 gibi eski hızlandırıcılarda `fp16` kullanın.

### fp16 ve kayıp ölçekleyici

`fp16`, `bf16`'den çok daha küçük bir üstel aralığa sahiptir; bu nedenle gradyanlar geriye yayılım adımından önce ölçeklenir ve optimizör adımından önce tekrar ölçeklenir. LeRobot bunu accelerate'in `GradScaler`'ına devreder; bu bileşen taşan gradyanları da algılar ve ilgili optimizör güncellemelerini atlar. Bölünmüş eğitimde gradyanlar `DTensor`'lerdir ve PyTorch taşma bayrağını cihaz ağı üzerinden indirger; böylece bir sıradaki taşma, güncellemeyi tüm sıralarda atlatır.

Atlanan güncellemeler normaldir, özellikle ölçeğin başlangıç değerinden aşağı doğru kalibre edildiği ilk birkaç adımda. Günlüklerde `scale` metrikinin düşmesi olarak görülürler. Ölçek, her kontrol noktasıyla birlikte (`training_state/scaler_state.json`) kaydedilir ve devam ettirme sırasında geri yüklenir; bu nedenle devam ettirilen bir çalıştırmanın yeniden kalibrasyon yapmasına gerek yoktur.

Varsayılanlar bir politika için uygun değilse ölçekleyici ayarlanabilir:

```bash
lerobot-train \
    --policy.type=act \
    --accelerator.mixed_precision=fp16 \
    --accelerator.grad_scaler.init_scale=1024 \
    --accelerator.grad_scaler.growth_interval=2000 ...
```

### TF32

Ampere ve daha yeni NVIDIA GPU'larında LeRobot, varsayılan olarak float32 matmulların ve cuDNN konvolüsyonlarının TF32 kullanmasını sağlar (`--tf32=true`). Tam float32 hassasiyetini korumak için `--tf32=false` kullanın; `--tf32=null` ise PyTorch varsayılan ayarlarını korur.

