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,分别处理"计算"和"画图"依赖,不要混淆。
相关推荐
Felven3 天前
Intel Core Ultra X9 388H全面性能对比分析报告
cpu·gpu·intel·性能对比·amd
sickworm陈浩5 天前
日常修改,3秒生效:腾讯音乐 Android 秒编方案 Jugg 开源
android·编译原理·编译器
SDWAN_Cheap6 天前
CPU与GPU的区别及应用场景详解
cpu·gpu
AImatters7 天前
国产算力底座,支撑油气储运数字化迈过关键分水岭
安全·cpu·算力·海光·油气储运
DLite9 天前
开源一个静态类型语言——NLang
c++·编译器·nlang
xcLeigh14 天前
把CPU、内存、网络流量同时丢给TimechoAI,做交叉分析
数据库·内存·时序数据库·cpu·网络流量·timechoai·交叉分析
spencer_tseng16 天前
[OceanBase-Desktop-Setup-1.0.0.exe] CPU virtualization is not enabled
oceanbase·cpu·virtualization
Patrick_Wilson24 天前
sccache 用在 Rust 上为什么常「不省编译」:原理、限制与 Windows 接入
ci/cd·rust·编译器
ZZH_AI项目交付1 个月前
Apple Silicon 模拟器遇到旧版 MLKit:一次完整的依赖排查
ios·app·编译器
UWA1 个月前
隐藏视频变“常驻刺客”,VideoPlayer与“N/A”纹理该怎么查
人工智能·性能优化·音视频·memory·cpu·游戏开发