Triton-CPU 部署实录(Ubuntu + Conda + 自编译 LLVM)

这份文档是一次真实可复现的成功部署流程,重点解决了 triton-cpu 在较旧系统库环境下常见的 ABI 问题(GLIBC/libstdc++ 不匹配)。

结论先说: triton-cpu 安装比 triton 更复杂,核心难点通常不在 Python 包,而在 LLVM 工具链版本与本机系统库兼容性。


1. 环境准备

先创建并进入一个独立的 Conda 环境(示例名称:triton-cpu):

ini 复制代码
conda create -n triton-cpu python=3.10 -y
conda activate triton-cpu

建议升级 pip:

css 复制代码
python -m pip install --upgrade pip

2. 获取 triton-cpu 仓库

bash 复制代码
cd ~
git clone https://github.com/triton-lang/triton-cpu.git
cd triton-cpu

如果你已有仓库,这步可跳过。


3. 安装 Python 依赖(requirements)

按仓库中的依赖文件安装:

bash 复制代码
cd ~/triton-cpu
python -m pip install -r python/requirements.txt

不同版本仓库中 requirements 路径可能略有差异,若文件不存在,请以当前仓库实际路径为准。


4. 为什么不能直接 pip install -e .

一开始直接安装时,出现过类似错误:

  • GLIBC_2.33 not found
  • 大量 undefined reference to std::...

根因是:triton-cpu 默认下载或使用的某些预编译 LLVM 组件,和本机系统 glibc/libstdc++ ABI 不兼容。 在这类环境里,最稳定方案是:triton-cpu/README.md 自己编译 LLVM,再让 Triton 指向这套 LLVM


5. 按 README 构建兼容 LLVM(关键步骤)

5.1 拉取 LLVM 源码

bash 复制代码
cd ~
git clone https://github.com/llvm/llvm-project.git
cd llvm-project

5.2 切换到 triton-cpu 指定 LLVM 提交

triton-cpu 会在 cmake/llvm-hash.txt 指定对应 LLVM commit。先读取该哈希,再 checkout。

bash 复制代码
cd ~/triton-cpu
cat cmake/llvm-hash.txt

然后在 LLVM 仓库切过去(以下 <LLVM_HASH> 替换成上一步看到的值):

bash 复制代码
cd ~/llvm-project
git fetch --all --tags
git checkout <LLVM_HASH>

处于 detached HEAD 是正常的,这里我们就是按固定提交构建。

5.3 配置并编译 LLVM

ini 复制代码
cd ~/llvm-project
mkdir -p build
cd build
​
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release \
  -DLLVM_ENABLE_ASSERTIONS=ON \
  -DLLVM_ENABLE_PROJECTS="mlir;llvm;lld" \
  -DLLVM_TARGETS_TO_BUILD="host;NVPTX;AMDGPU" \
  ../llvm
​
ninja -j"$(nproc)"

编译时间较长(常见 30~120 分钟,取决于机器)。


6. 用本地 LLVM 安装 triton-cpu

回到 triton-cpu 仓库,清理旧 build,然后显式指定 LLVM 路径:

ini 复制代码
cd ~/triton-cpu
rm -rf build
​
export LLVM_BUILD_DIR=~/llvm-project/build
​
MAX_JOBS=16 \
LLVM_INCLUDE_DIRS=$LLVM_BUILD_DIR/include \
LLVM_LIBRARY_DIR=$LLVM_BUILD_DIR/lib \
LLVM_SYSPATH=$LLVM_BUILD_DIR \
pip install --no-build-isolation -e .

成功标志示例:

  • Successfully built triton
  • Successfully installed triton-...

7. 基础验证

先验证 Python 能导入:

scss 复制代码
python -c "import triton; print(triton.__version__)"

如果输出版本号(如 3.6.0),说明安装层面成功。


8. 运行 CPU 教程示例与两个常见问题

8.1 正确的示例路径

示例在 python/tutorials/ 下,不是根目录 tutorials/

bash 复制代码
cd ~/triton-cpu
TRITON_CPU_BACKEND=1 python3 python/tutorials/01-vector-add.py

8.2 可能遇到的问题 A:No module named 'torch'

教程依赖 PyTorch,安装 CPU 版:

perl 复制代码
python3 -m pip install torch --index-url https://download.pytorch.org/whl/cpu

8.3 可能遇到的问题 B:汇编报错(junk at end of line, first unrecognized character is '"'

在较旧 binutils(例如 as 2.34)环境下,可能因行信息相关汇编指令解析失败。 可通过禁用 line info 绕过:

ini 复制代码
TRITON_CPU_BACKEND=1 TRITON_DISABLE_LINE_INFO=1 python3 python/tutorials/01-vector-add.py

我们这次就是通过这条命令跑通的。


9. 如何判断"真的跑通了"

示例输出中出现以下信息即可认为 CPU backend 已正常工作:

  • 打印出两个 tensor
  • The maximum difference ... is 0.0

如果最后只报:

  • ModuleNotFoundError: No module named 'matplotlib'

那只是 benchmark 画图依赖缺失,不影响核心 Triton-CPU 计算正确性。 可选安装:

复制代码
python3 -m pip install matplotlib pandas

10. 推荐的最终可复用命令顺序(精简版)

bash 复制代码
conda create -n triton-cpu python=3.10 -y
conda activate triton-cpu
​
cd ~
git clone https://github.com/triton-lang/triton-cpu.git
git clone https://github.com/llvm/llvm-project.git
​
cd ~/triton-cpu
python -m pip install --upgrade pip
python -m pip install -r python/requirements.txt
​
# 读取 LLVM 对应版本
LLVM_HASH=$(cat cmake/llvm-hash.txt)
​
cd ~/llvm-project
git fetch --all --tags
git checkout "$LLVM_HASH"
mkdir -p build && cd build
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release \
  -DLLVM_ENABLE_ASSERTIONS=ON \
  -DLLVM_ENABLE_PROJECTS="mlir;llvm;lld" \
  -DLLVM_TARGETS_TO_BUILD="host;NVPTX;AMDGPU" \
  ../llvm
ninja -j"$(nproc)"
​
cd ~/triton-cpu
rm -rf build
export LLVM_BUILD_DIR=~/llvm-project/build
MAX_JOBS=16 \
LLVM_INCLUDE_DIRS=$LLVM_BUILD_DIR/include \
LLVM_LIBRARY_DIR=$LLVM_BUILD_DIR/lib \
LLVM_SYSPATH=$LLVM_BUILD_DIR \
pip install --no-build-isolation -e .
​
python -c "import triton; print(triton.__version__)"
python3 -m pip install torch --index-url https://download.pytorch.org/whl/cpu
TRITON_CPU_BACKEND=1 TRITON_DISABLE_LINE_INFO=1 python3 python/tutorials/01-vector-add.py

11. 给分享对象的经验建议

  1. triton-cpu 失败时,先怀疑 LLVM/ABI,不要只盯 Python 包。
  2. 用仓库指定 commit 的 LLVM 自编译,是最稳方案。
  3. 旧系统常见 line-info + assembler 兼容性问题,可先用 TRITON_DISABLE_LINE_INFO=1 保证功能验证通过。
  4. 示例脚本依赖 torch 和可能的 matplotlib,分别处理"计算"和"画图"依赖,不要混淆。
相关推荐
itman30112 小时前
Windows环境下编译运行C语言程序的方法及工具选择
c语言·visualstudio·mingw·编译器·windows环境
zsqw12312 小时前
以 Rust 为例,聊聊线性类型,以及整个类型系统
rust·编译器
坏孩子的诺亚方舟3 天前
RTL设计师攻略0_架构与微架构
架构·cpu·面试攻略
米丘3 天前
ESTree 规范 (acorn@8.15.0示例)
前端·javascript·编译器
CappuccinoRose7 天前
计算机系统体系结构及其组成 - 汇总篇
cpu·计算机体系结构·总线·计算机组成·指令系统·并行处理机·码制
avi91118 天前
万事课程:AMD CPU 结构 和虚拟化---入门讲解
cpu·amd·系统工程师
无巧不成书021811 天前
编辑器、编译器与解释器全解析
编辑器·编译原理·编译器·编程入门·解释器·开发工具链
会飞的不留神13 天前
【手搓编译器】局部变量存储
rust·编译器·解释器·lox
2301_8227828214 天前
初识C语言:简介、环境搭建、第一个HelloWorld
开发工具·环境搭建·编译器·helloworld·初识c语言
谷公子的藏经阁17 天前
聊点老古董: Arm Cortex-M v6/v7架构及其CPU
arm·cpu·armv7·cortex-m·armv6