文档 |
Nightly Wheels |
|---|---|
第三届 Triton 开发者大会已于 2025 年 10 月 21 日在美国加利福尼亚州山景城的微软硅谷园区举行。
会议录像和资料现已在线提供:
往届会议资料请见:
- 2024 年会议资料
- 2023 年会议资料
这是 Triton 的开发仓库。Triton 是一种语言和编译器,用于编写高效的自定义深度学习原语。Triton 的目标是提供一个开源环境,以比 CUDA 更高的生产力和比现有其他领域特定语言(DSL)更高的灵活性来编写快速代码。
该项目的基础在以下 MAPL2019 出版物中有所描述:Triton: An Intermediate Language and Compiler for Tiled Neural Network Computations。如果您使用 Triton,请考虑引用此工作!
官方文档 包含安装说明和教程。另请参阅这些第三方 Triton 谜题,它们都可以使用 Triton 解释器运行——无需 GPU。
您可以通过 pip 安装最新的 Triton 稳定版本:
pip install triton
二进制 wheel 包适用于 CPython 3.10-3.14。
git clone https://github.com/triton-lang/triton.git
cd triton
pip install -r python/requirements.txt # 构建时依赖
pip install -e .
或使用虚拟环境:
git clone https://github.com/triton-lang/triton.git
cd triton
python -m venv .venv --prompt triton
source .venv/bin/activate
pip install -r python/requirements.txt # 构建时依赖
pip install -e .
Triton 使用 LLVM 为 GPU 和 CPU 生成代码。通常,Triton 构建会下载预构建的 LLVM,但您也可以从源码构建并使用 LLVM。
LLVM 没有稳定的 API,因此 Triton 构建无法在任意的 LLVM 版本上工作。
为方便起见,使用以下命令构建 LLVM 并使用自定义 LLVM 安装 Triton:
make dev-install-llvm
TRITON_BUILD_WITH_CLANG_LLD=true 以使用 clang 和 lld。特别是 lld 可以带来更快的构建速度。TRITON_BUILD_WITH_CCACHE=true 以使用 ccache 构建。TRITON_HOME=/some/path 来更改 .triton 目录的位置,该目录是 Triton 缓存和构建期间下载文件的存储位置。默认情况下,这是用户的主目录。可以随时更改。MAX_JOBS 环境变量(给 pip install -e . 命令)以限制作业数量。pip install 传递 --no-build-isolation 以使无操作构建更快。如果没有这个选项,每次调用 pip install 都会使用不同的 cmake 符号链接,这会强制 ninja 重新构建大多数 .a 文件。compile_commands.json 文件。该文件被 VSCode IntelliSense 和 clangd 用于为 C++ 代码提供代码补全和其他功能。pip install -e .。compile_commands.json 文件的完整路径:find ./build -name 'compile_commands.json' | xargs readlink -f。/Users/{username}/triton/build/cmake.macosx-11.1-arm64-cpython-3.12/compile_commands.json 的完整路径。Shift + Command + P,Windows/Linux 上按 Shift + Ctrl + P)并打开 C/C++: Edit Configurations (UI)。compile_commands.json 的完整路径粘贴到“编译命令”文本框中。目前还没有一种一键运行所有 Triton 测试的方法,但您可以按照以下步骤操作:
# 一次性设置。注意,这会重新安装本地 Triton,因为 torch 会用公共版本覆盖它。
$ make dev-install
# 运行所有测试(需要 GPU)
$ make test
# 或者,在没有 GPU 的情况下运行测试
$ make test-nogpu
有关如何调试 Triton 前端的详细说明,请参阅此 教程。以下包括针对 Triton 后端开发的额外技巧。
配置选项
完整配置选项列表请参见 python/triton/knobs.py。您可以直接在 Python 中设置这些选项,或使用环境变量来控制它们。以下是一些您可以指定的环境变量(完整列表见 knobs.py):
MLIR_ENABLE_DUMP=1 在 Triton 运行的每个 MLIR 通道之前,为所有内核转储 IR。使用 MLIR_ENABLE_DUMP=kernelName 仅转储特定内核。MLIR_ENABLE_DUMP=1 不起作用的情况下,尝试清理您的 triton 缓存:rm -r ~/.triton/cache/*。MLIR_DUMP_PATH 指定 MLIR_ENABLE_DUMP 的转储位置。如果未设置,将转储到 stderr。LLVM_IR_ENABLE_DUMP=1 在每次运行 LLVM IR 的通道之前转储 IR。TRITON_REPRODUCER_PATH=<reproducer_path> 将在每个 MLIR 编译器阶段之前生成一个 MLIR 重现文件到 <reproducer_path>。如果任何阶段失败,<reproducer_path> 将是在失败通道之前捕获的本地 MLIR 重现文件。TRITON_INTERPRET=1 使用 Triton 解释器而不是在 GPU 上运行。您可以在内核代码中插入 Python 断点!TRITON_ENABLE_LLVM_DEBUG=1 向 LLVM 传递 -debug,将大量调试信息打印到 stdout。如果这太嘈杂,可以只使用 TRITON_LLVM_DEBUG_ONLY 来限制输出。LLVM_IR_ENABLE_DUMP=1 运行,提取感兴趣 LLVM 通道之前的 IR,然后独立运行 LLVM 的 opt,或许在命令行上传递 -debug-only=foo。TRITON_LLVM_DEBUG_ONLY=<comma-separated> 相当于 LLVM 的 -debug-only 命令行选项。这限制了 LLVM 调试输出到特定的通道或组件名称(这些名称在 LLVM 和 Triton 中使用 #define DEBUG_TYPE 定义),以使调试输出不那么嘈杂。TRITON_LLVM_DEBUG_ONLY 允许指定一个或多个逗号分隔的值(例如 TRITON_LLVM_DEBUG_ONLY="tritongpu-remove-layout-conversions" 或 TRITON_LLVM_DEBUG_ONLY="tritongpu-remove-layout-conversions,regalloc")。TRITON_ENABLE_ASAN=1 调用 LLVM 地址消毒器以检测内存泄漏和越界访问。目前仅支持 AMD 后端。必须使用 此处 记录的 ASAN 库运行。USE_IR_LOC={ttir,ttgir} 重新解析 IR,使得位置信息将是具有特定扩展名的 IR 文件的行号,而不是 Python 文件的行号。这可以提供从 IR 到 llir/ptx 的直接映射。与性能工具一起使用时,可以提供 IR 指令的细分。TRITON_PRINT_AUTOTUNING=1 在自动调优完成后,打印出每个内核的最佳自动调优配置和总耗时。DISABLE_LLVM_OPT 如果其值在解析为 Bool 时为 true,将为 make_llir 和 make_ptx 禁用 llvm 优化。否则,它将被解析为要禁用的 llvm 优化标志列表。一个使用案例是 DISABLE_LLVM_OPT="disable-lsr"。已知循环强度约简会导致某些具有寄存器压力的内核性能变化高达 10%。TRITON_ALWAYS_COMPILE=1 强制编译内核,无论缓存是否命中。MLIR_ENABLE_TIMING 转储每个 MLIR 通道的计时信息。LLVM_ENABLE_TIMING 转储每个 LLVM 通道的计时信息。TRITON_DEFAULT_FP_FUSION 覆盖允许浮点融合(mul+add->fma)的默认行为。MLIR_ENABLE_DIAGNOSTICS=<comma-separated> 控制 MLIR 中的诊断信息输出。选项有:warnings、remarks、stacktraces、operations。使用逗号分隔的值来自定义输出。例如,MLIR_ENABLE_DIAGNOSTICS=remarks,operations 启用备注和 IR 操作,而 MLIR_ENABLE_DIAGNOSTICS=warnings,stacktraces 启用带堆栈跟踪的警告。默认情况下,只显示错误。设置 warnings 包括错误和警告;remarks 包括错误、警告和备注。MLIR_ENABLE_REMARK 已弃用。请使用 MLIR_ENABLE_DIAGNOSTICS=remarks。TRITON_KERNEL_DUMP 启用从每个编译阶段以及最终的 ptx/amdgcn 转储 IR。TRITON_DUMP_DIR 指定当 TRITON_KERNEL_DUMP 设置为 1 时,保存转储的 IR 和 ptx/amdgcn 的目录。TRITON_KERNEL_OVERRIDE 启用在每个编译阶段开始时,用用户指定的 IR/ptx/amdgcn 覆盖已编译的内核。TRITON_OVERRIDE_DIR 指定当 TRITON_KERNEL_OVERRIDE 设置为 1 时,从中加载 IR/ptx/amdgcn 文件的目录。TRITON_F32_DEFAULT 设置使用 32 位浮点数时 tl.dot 的默认输入精度,可以是 ieee、tf32 或 tf32x3。TRITON_FRONT_END_DEBUGGING=1 在编译器前端发生错误时禁用异常包装,允许查看完整的堆栈跟踪。TRITON_DISABLE_LINE_INFO=1 从模块中移除所有行信息。PTXAS_OPTIONS 向 PTX 汇编器 ptxas 传递额外的命令行选项(仅限 NVIDIA)。LLVM_EXTRACT_DI_LOCAL_VARIABLES 发出完整的调试信息,允许在 GPU 调试器(如 cuda-gdb、rocm-gdb 等)中评估值。TRITON_DEFAULT_BACKEND=<backend> 可选地设置 Triton 在构造活动驱动(即 triton.runtime.driver.active)时使用的默认后端。[!NOTE]
其中一些环境变量在knobs.py中没有对应的选项——这些仅与 C++ 层相关,因此它们不存在于 Python 层。
内核覆盖步骤
export TRITON_ALWAYS_COMPILE=1
export TRITON_KERNEL_DUMP=1
export TRITON_DUMP_DIR=<dump_dir>
export TRITON_KERNEL_OVERRIDE=1
export TRITON_OVERRIDE_DIR=<override_dir>
# 步骤 1:运行内核一次,将内核的 IR 和 ptx/amdgcn 转储到 $TRITON_DUMP_DIR
# 步骤 2:将 $TRITON_DUMP_DIR/<kernel_hash> 复制到 $TRITON_OVERRIDE_DIR
# 步骤 3:删除您不想覆盖的阶段,并修改您确实想要覆盖的阶段
# 步骤 4:再次运行内核以查看覆盖后的结果
编译器流水线检查步骤
要检查 add_stages 流水线,在运行内核之前,只需像这样设置 add_stages_inspection_hook:
def inspect_stages(_self, stages, options, language, capability):
# 在此处检查或修改 add_stages
triton.knobs.runtime.add_stages_inspection_hook = inspect_stages
关于如何使用此功能进行树外插件通道的示例在这里。
版本 2.0 已发布!新功能包括:
非常欢迎社区贡献,无论是修复错误还是添加新功能,请访问 github。更详细的说明,请访问我们的 贡献者指南。
支持的平台:
支持的硬件:
Triton 项目的 开发容器 可从 triton-dev-containers 仓库 获取。
有关如何使用开发容器的详细说明,请参阅 [开发容器用户指南](https://github