拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Triton 构建系统实战指南:从零开始到深度定制

Triton 构建系统实战指南从零开始到深度定制【免费下载链接】tritonDevelopment repository for the Triton language and compiler项目地址: https://gitcode.com/GitHub_Trending/tri/triton这是一份 Triton 构建系统 与 开发环境 的实操指南先搞清楚 setup.py、CMake、pyproject.toml 各自管什么再学会用环境变量把一次十几分钟的构建压到分钟级最后掌握 IR 转储和内核覆盖这两个调试利器。读完你可以独立完成首次构建、离线构建并能把改过的中间表示真正跑起来。第一次构建每个环节谁在干活在动手之前先弄清构建链上每个角色setup.py是总入口负责把后端收集起来、生成 CMake 参数pyproject.toml 声明构建时依赖setuptools、cmake、ninja、nanobind真正的 C 编译交给 CMake Ninja 完成。克隆下来直接装git clone https://gitcode.com/GitHub_Trending/tri/triton cd triton pip install -r python/requirements.txt pip install -e . # 首次构建会拉取预编译 LLVMsetup.py里的BackendInstaller会做两件事把third_party/下的内置后端nvidia、amd、proton逐个挂载进构建同时检查TRITON_PLUGIN_DIRS环境变量收集外部插件后端——这是 Triton 多后端架构的入口外部后端只要按约定目录组织就能被识别。为什么首次构建慢怎么让它变快慢的主因有两个要下载并按系统架构匹配 LLVM 预编译包以及从零编译整个 C 编译器。依赖获取是二选一的策略——在线时按平台下载预编译 LLVM缓存放在TRITON_HOME默认~/.triton离线时则要求你自己提供路径由LLVM_SYSPATH和JSON_SYSPATH指向本地 LLVM 和 nlohmann_json 安装位置配合TRITON_OFFLINE_BUILD1禁止一切下载export LLVM_SYSPATH$HOME/llvm-project/build export JSON_SYSPATH/usr export TRITON_OFFLINE_BUILD1 pip install -e .⚠️ 离线模式下依赖的兼容性不会被校验缺哪个组件就直接报错退出路径必须给全。改变构建行为最常用的就是这几个环境变量环境变量作用什么时候用TRITON_BUILD_WITH_CCACHE开启编译缓存反复改代码重编时二次构建提速明显TRITON_BUILD_WITH_CLANG_LLDclang 编译 lld 链接想缩短链接耗时MAX_JOBS并行任务数按内存给比如MAX_JOBS16DEBUG调试构建给编译器本身调 bug 时用TRITON_OFFLINE_BUILD禁止联网取依赖离线沙箱、发行版打包TRITON_HOME缓存根目录磁盘紧张或多项目隔离TRITON_PLUGIN_DIRS外部后端目录列表分号分隔指向多个插件根目录增量构建其实不需要重新走 pipMAX_JOBS16 TRITON_BUILD_WITH_CCACHE1 TRITON_BUILD_WITH_CLANG_LLD1 \ pip install -e . --no-build-isolation # 或者只增量编译 C 部分 make all编译卡在哪个阶段怎么查Triton 的编译管线是分层 IR 的Python AST 先降成 TTIR再分配布局得到 TTGIR随后转 LLVM IR最终生成 PTXNVIDIA或 AMDGCNAMD。每个阶段的产物都可以落盘扩展名直接对应层级阶段文件扩展名内容前端.ttir未分配布局的高层 IRGPU 布局.ttgir已绑定线程布局优化主战场LLVM.llir标准 LLVM IR机器码.ptx/.amdgcn汇编级产物转储命令直接可复制export MLIR_ENABLE_DUMP1 # 逐 pass 打印 MLIR export TRITON_KERNEL_DUMP1 # 落盘各阶段 IR export TRITON_DUMP_DIR./dumps # 指定输出目录 rm -rf ~/.triton/cache # 清缓存强制重编译knobs里还有更细的开关见 python/triton/knobs.pyNVPTX_ENABLE_DUMP、AMDGCN_ENABLE_DUMP分别转储 NVPTX 与 AMDGCNTRITON_DISABLE_LINE_INFO1可以去掉行号信息换更小的二进制。另一个高频场景是这个错在我机器上才出现。Triton 编译失败时会在报错信息中附上一个.mlir复现文件路径拿到它之后脱离 Python 环境直接用triton-opt就能单独重现make triton-opt # 先编译这个工具 $(make -s triton-opt | tail -1) reproducer.mlir # 独立复现Triton 还提供编译计时数据CompileTimes结构区分 IR 初始化、各 lowering 阶段、结果存储三段耗时想定位哪个 pass 吃掉了编译时间时配合MLIR_ENABLE_TIMING1观察即可。这类循环重排优化在 TTGIR 转储里都能直接看到——这正是逐阶段看 IR 的价值你看到的不是一串报错而是编译器在做什么决策。改过的 IR 怎么让编译真正生效这是调试里最有用的一招内核覆盖。正常流程中同一个内核第二次运行直接命中缓存你改 IR 文件毫无感觉。覆盖机制让你指定一个目录编译时跳过缓存、直接读你改过的 IR走一遍完整流程。目标验证某条 pass 的优化是否必要把它在 TTGIR 里的产物手动改回去再编译。第一步问题复现。开启转储跑一次目标脚本拿到.ttgir文件。第二步操作。修改 IR 后指向覆盖目录重新运行export TRITON_KERNEL_OVERRIDE1 export TRITON_OVERRIDE_DIR./dumps # 指向修改过的 IR 所在目录 python my_kernel.py第三步验证。对比运行结果或数值输出如果你期望的性能差异消失了说明那条优化确实在起作用如果毫无变化可能是布局约束在别处又把它改回来了——这时再开MLIR_ENABLE_DUMP1逐 pass 跟踪即可。这套 dump → 修改 → override 的闭环是改 Triton 编译器本身时验证 pass 正确性的标准姿势。 改完代码怎么确认没弄坏东西Triton 的测试是分层的每层盯住一个目标Makefile 里都有对应目标。最底层是 MLIR Lit 测试test/下几百个.mlir文件验证单条 pass 的输入输出用 FileCheck 断言改动某个 pass 后最先要跑的就是它其次是 C 单元测试unittest/覆盖布局计算、线性布局等纯逻辑组件再往上是 Python 单元测试python/test/unit/覆盖语言语义和运行时最外层是功能回归python/test/regression/端到端验证数值正确性。make test-lit # MLIR lit 测试定位 pass 级问题最快 make test-cpp # C 单元测试 make test-unit # Python 单元 运行时测试 make test-regression # 端到端功能回归一个实用的排查顺序改完 pass 先跑make test-lit对应目录比如test/TritonGPU/红了就说明 pass 行为变了绿了再跑make test-unit确认语言层没被波及最后回归兜底。速查参考构建与缓存TRITON_HOME~/.triton # 缓存根目录 MAX_JOBS16 # 并行度 TRITON_BUILD_WITH_CCACHE1 # 编译缓存 TRITON_BUILD_WITH_CLANG_LLD1 # clang lld TRITON_OFFLINE_BUILD1 # 离线构建 LLVM_SYSPATHpath JSON_SYSPATHpath # 离线时的本地依赖 TRITON_PLUGIN_DIRSdir1;dir2 # 外部后端插件调试与测试MLIR_ENABLE_DUMP1 # 逐 pass 转储 TRITON_KERNEL_DUMP1 TRITON_DUMP_DIR./dumps # IR 落盘 TRITON_KERNEL_OVERRIDE1 TRITON_OVERRIDE_DIR./dumps # 用改过的 IR 编译 make test-lit make test-cpp # pass 级 组件级测试【免费下载链接】tritonDevelopment repository for the Triton language and compiler项目地址: https://gitcode.com/GitHub_Trending/tri/triton创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门