This site covers four connected parts of Meta's work: the Triton compiler, the TLX low-level programming model, the TorchTLX path that brings TLX kernels into PyTorch 2, and the tools used to understand and improve generated GPU kernels.
News
[Aug'26] GPU MODE competition wins:
[Jul'26] TritonParse accepted to ASPLOS 2026
Explore the project
| Area | Focus |
|---|---|
| Triton | Compiler-managed performance portability, including automatic warp specialization and its roadmap |
| TLX | Explicit warp-group orchestration, asynchronous memory and tensor-core operations, barriers, and hardware-specific kernel development |
| uTLX | The same TLX programming model packaged as a standalone plugin for upstream Triton, for users who are not on this fork |
| TorchTLX | TLX-backed Inductor templates, epilogue fusion, and the PyTorch 2 integration path |
| CI | Workflows, runners, nightly failure handling, and per-project test coverage |
| Tooling | Compilation tracing, profiling, runtime diagnostics, sanitizers, and benchmarking |
Install
FBTriton installs as the triton package, so import triton resolves to this fork. Uninstall upstream Triton first: both distributions own the same triton/ directory, and installing one over the other leaves an inconsistent environment rather than a clean error.
pip uninstall -y triton
pip install fbtriton
Nightly .dev wheels are published to a self-managed index, not PyPI:
pip install --pre fbtriton \
--index-url https://facebookexperimental.github.io/triton/nightly/simple/
Each nightly is built from the newest main commit whose GPU and CI checks are all green, and reports a version of the form 3.9.0.dev<YYYYMMDD>+fb.git<hash>. Nightlies are retained for about 30 days. Binary wheels cover CPython 3.10 through 3.14.
FBTriton is intended as a drop-in replacement for upstream Triton on a best-effort basis: it tracks upstream closely, and existing Triton kernels are expected to work unchanged. That is not a formal guarantee — if something that works upstream breaks here, please file an issue.
Build from source
git clone https://github.com/facebookexperimental/triton.git
cd triton
pip install -r python/requirements.txt # build-time dependencies
pip install -e .
C++ changes require a rebuild to take effect; Python-only changes do not. Run pre-commit run --all before sending a pull request.
uTLX: standalone TLX for upstream Triton
TLX is also published on its own as triton-utlx, which ships the same tlx module as a Triton plugin rather than as a fork of Triton. Reach for it when replacing your triton install with FBTriton is not an option — the programming model is the one documented under TLX.
pip install torch
pip install triton-utlx
Plugins load only into a Triton built with TRITON_EXT_ENABLED, which exposes the libtriton symbols they link against. The triton that ships with a PyTorch release has it on by default, so torch is enough. To run against a Triton you build yourself instead, turn it on at build time from a checkout of triton-lang/triton:
TRITON_EXT_ENABLED=ON pip install -e . --no-build-isolation
Either way, point TRITON_PLUGIN_PATHS — a colon-separated list of shared libraries — at the libutlx.so inside the installed package:
export TRITON_PLUGIN_PATHS=$(python -c \
"import utlx_plugin, os; print(os.path.join(os.path.dirname(utlx_plugin.__file__), 'libutlx.so'))")
Nothing sets that variable for you, and a Triton built without TRITON_EXT_ENABLED warns and skips the plugin rather than failing outright, so an unset or ignored path shows up as unregistered TLX ops rather than a load error.
Hardware support
| Vendor | Targets |
|---|---|
| NVIDIA | Hopper (sm90), Blackwell (sm100) |
| AMD | MI300 / CDNA3 (gfx942), MI350 / CDNA4 (gfx950), RDNA4 (gfx1250) |
Support varies per feature. Every operation in the TLX reference carries a tag naming the targets it runs on, and AutoWS requires sm90 or newer.
Check the install
python -c "import triton; print(triton.__version__)"
pytest third_party/tlx/tutorials/testing/test_correctness.py
The tutorial suite is arch-gated, so cases that do not apply to your GPU skip rather than fail.