AITune
One API that finds the fastest validated backend for every module of your PyTorch model.
Every model has dozens of paths to a fast engine, and they keep moving
Result: teams fall back to vanilla PyTorch or the simplest path, and leave GPU performance on the table.
From a manual loop to one call
✗ Manual · per module, per tool torch.onnx.export(unet, ...) # trace or dynamo? modelopt.quantize(...) # pin ORT version trtexec --onnx=unet.onnx --stronglyTyped \ --minShapes=... --optShapes=... torch_tensorrt.compile(vae, ...) # 1 of 3 APIs torch.compile(text_enc, mode="max-autotune") # benchmark · compare outputs · repeat
✓ JIT · automatic# no code changes: one env var AUTOWRAPT_BOOTSTRAP=aitune_enable_jit_tuning \ python your_script.py
✓ AOT · tune once, save for deploymentimport aitune.torch as ait modules = ait.inspect(pipe, inputs) pipe = ait.wrap(pipe, modules.get_modules()) ait.tune(pipe, inputs) ait.save(pipe, "tuned_pipe.ait")
One frontend over every NVIDIA and PyTorch inference path
Click a framework to see the paths and precisions AITune can try.
Inspect, wrap, tune, validate, select, deploy
Press → to walk through the pipeline.
No backend wins everywhere, so AITune picks per module
Click a module to see the candidates it raced.
Internal dashboard, ~300 TRT-priority models on H100. AITune is 100% by construction: it picks the winner.
Tell it the objective; it picks a different winner
max_latency_ms18Strategy classes: MaxThroughputStrategy (default) · MinLatencyStrategy · LatencyBudgetStrategy · FirstWinsStrategy · OneBackendStrategy
JIT to try it in seconds, AOT to ship it anywhere
# unchanged application pipe = FluxPipeline.from_pretrained(...) pipe("A cat holding a sign") # one env var turns tuning on AUTOWRAPT_BOOTSTRAP=aitune_enable_jit_tuning \ python your_script.py
Records the first calls, tunes top-down while the app runs, and falls back to child modules on a graph break. Deferred mode suits denoising loops.
# tune once, save, reload anywhere import aitune.torch as ait modules = ait.inspect(pipe, inputs) pipe = ait.wrap(pipe, modules.get_modules()) ait.tune(pipe, inputs) ait.save(pipe, "tuned_pipe.ait") pipe = ait.load(pipe, "tuned_pipe.ait")
You choose the modules and per-module strategies; AITune benchmarks across batch sizes and writes a portable, checksummed artifact.
| JIT | AOT | |
|---|---|---|
| Code changes | None | 4 lines |
| Module selection | Automatic | You choose |
| Tune time | Quick | Slower |
| Strategies | Global | Global or per module |
| Benchmarking | No | Yes |
| Batch extrapolation | No | Yes |
| Saved artifact | No | .ait |
| Next start | Re-tunes | Loads, zero warmup |
ait.load(model, "model.ait")Faster than torch.compile, without touching the model
Shipping every 1–2 months. Try it today.
pip install --extra-index-url \ https://pypi.nvidia.com aitune # zero code changes AUTOWRAPT_BOOTSTRAP=aitune_enable_jit_tuning \ python your_script.py
Each recipe tunes, validates, benchmarks and deploys to Dynamo or Triton.