# torch.compile untuk inferensi

[torch.compile](https://pytorch.org/tutorials/intermediate/torch_compile_tutorial.html) mengompilasi kode PyTorch menjadi kernel yang dioptimalkan untuk mempercepat inferensi secara signifikan. Fitur ini bergantung pada [TorchDynamo](https://pytorch.org/docs/stable/torch.compiler_dynamo_overview.html) untuk mengompilasi kode menjadi graf dan [TorchInductor](https://dev-discuss.pytorch.org/t/torchinductor-a-pytorch-native-compiler-with-define-by-run-ir-and-symbolic-shapes/747) untuk selanjutnya mengompilasi graf tersebut menjadi kernel yang dioptimalkan. Ini adalah alat optimasi yang sangat ampuh, dan dalam banyak kasus, hanya membutuhkan penambahan satu baris kode.

Bungkus model dengan torch.compile untuk mengompilasi dan mengembalikan model yang dioptimalkan.

```py
from transformers import AutoModelForCausalLM

model = AutoModelForCausalLM.from_pretrained("google/gemma-2b", device_map="auto")
compiled_model = torch.compile(model)
```

> [!TIP]
> Pemanggilan awal ke torch.compile lambat karena model perlu dikompilasi. Pemanggilan berikutnya ke model yang sudah dikompilasi jauh lebih cepat karena tidak perlu dikompilasi lagi.

Terdapat beberapa parameter untuk menyesuaikan proses kompilasi. Dua di antaranya yang lebih penting tercantum di bawah ini. Untuk daftar lengkap parameter, silakan merujuk ke [dokumentasi](https://pytorch.org/docs/stable/generated/torch.compile.html) torch.compile.

## Mode

Parameter `mode` menyediakan beberapa opsi performa untuk kompilasi. Coba berbagai mode untuk melihat mana yang paling sesuai dengan kasus penggunaan Anda.

- `default` adalah opsi yang seimbang antara kecepatan dan memori.
- `reduce-overhead` mengurangi overhead Python dengan mengorbankan sedikit lebih banyak memori, tetapi bisa lebih cepat.
- `max-autotune` menawarkan kecepatan tercepat, tetapi kompilasi memakan waktu lebih lama.

```py
from transformers import AutoModelForCausalLM

model = AutoModelForCausalLM.from_pretrained("google/gemma-2b", device_map="auto")
compiled_model = torch.compile(model, mode="reduce-overhead")
```

## Fullgraph

Fullgraph mencoba mengompilasi seluruh model menjadi satu graf untuk memaksimalkan kinerja. torch.compile akan memicu error jika menemukan graph break, yang berarti model tidak dapat dikompilasi menjadi satu graf.

```py
from transformers import AutoModelForCausalLM

model = AutoModelForCausalLM.from_pretrained("google/gemma-2b", device_map="auto")
compiled_model = torch.compile(model, mode="reduce-overhead", fullgraph=True)
```

## Benchmarks

Lihat tabel di bawah ini untuk benchmark kinerja yang membandingkan waktu inferensi rata-rata dalam milidetik dengan torch.compile diaktifkan dan dinonaktifkan di berbagai GPU dan ukuran batch pada gambar yang sama untuk berbagai tugas visi.

Pilih **Subset** pada tabel di bawah untuk beralih antara GPU yang berbeda, serta benchmark pada [PyTorch nightly](https://download.pytorch.org/whl/nightly/cu118) 2.1.0dev dan torch.compile dengan mode `reduce-overhead` diaktifkan.

<iframe src="https://huggingface.co/datasets/docs-benchmarks/compile-benchmarks/embed/viewer/A100/train" frameborder="0" width="100%" height="560px"
>

## Langkah selanjutnya

- Lihat panduan [torch.compile untuk pelatihan](./torch_compile) untuk mempelajari cara menggunakan torch.compile untuk pelatihan.

