# torch.compile para inferencia

[torch.compile](https://pytorch.org/tutorials/intermediate/torch_compile_tutorial.html) compila el código de PyTorch en kernels optimizados que aceleran significativamente la inferencia. Esta función se basa en [TorchDynamo](https://pytorch.org/docs/stable/torch.compiler_dynamo_overview.html) para compilar el código en grafos y en [TorchInductor](https://dev-discuss.pytorch.org/t/torchinductor-a-pytorch-native-compiler-with-define-by-run-ir-and-symbolic-shapes/747) para compilar aún más los grafos en kernels optimizados. Es una herramienta de optimización potente y, en muchos casos, solo requiere añadir una línea de código.

Envuelve un modelo con torch.compile para compilarlo y devolver un modelo optimizado.

```py
from transformers import AutoModelForCausalLM

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

> [!TIP]
> La llamada inicial a torch.compile es lenta porque el modelo debe compilarse. Las llamadas posteriores al modelo compilado son mucho más rápidas porque no es necesario volver a compilarlo.

Hay varios parámetros para personalizar el proceso de compilación. A continuación se enumeran dos de los más importantes. Para obtener la lista completa de parámetros, consulte la [documentación](https://pytorch.org/docs/stable/generated/torch.compile.html) de torch.compile.

## Modos

El parámetro `mode` ofrece varias opciones de rendimiento para la compilación. Pruebe diferentes modos para ver cuál funciona mejor para su caso de uso.

- `default` es una opción equilibrada entre velocidad y memoria.
- `reduce-overhead` reduce la sobrecarga de Python a cambio de un poco más de memoria, pero puede ser más rápido.
- `max-autotune` ofrece la velocidad más rápida, pero la compilación tarda más.

```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 intenta compilar el modelo completo en un único grafo para maximizar el rendimiento. torch.compile genera un error si detecta una interrupción del grafo, lo que significa que no puede compilar el modelo en un único grafo.

```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

Consulte la tabla siguiente para ver los resultados de rendimiento que comparan el tiempo medio de inferencia en milisegundos con torch.compile activado y desactivado en varias GPU y tamaños de lote sobre la misma imagen para diferentes tareas de visión.

Seleccione **Subset** en la tabla siguiente para cambiar entre diferentes GPUs, así como para ver los benchmarks en [PyTorch nightly](https://download.pytorch.org/whl/nightly/cu118) 2.1.0dev y torch.compile con el modo `reduce-overhead` habilitado.

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

## Próximos pasos

- Consulte la guía [torch.compile for training](./torch_compile) para aprender a usar torch.compile para el entrenamiento.

