一键构建 pytorch cpp lib 前端和 wheel

📅 2026/8/11 1:34:38
一键构建 pytorch cpp lib 前端和 wheel
系统环境ubuntu 22.04V100 GPUcuda 12.8.2cudnn 9.10.2.21TensorRT 10.9.0.341. 使用构建脚本构建 develop或者 wheel。第一次构建BUILD_MODEwheel ./meme_build.sh如果构建过一次之后依赖包可以跳过使用 SKIP_APT1BUILD_MODEwheelSKIP_APT1./meme_build.sh验证 tritoncd~ python3-cimport triton; print(triton.__version__)# 期望输出: 3.4.0python3-cimport torch; f torch.compile(lambda x: x * 2); print(f(torch.randn(8, devicecuda)))cd~ python3-cimport torch; print(torch.__file__)# 期望: /home/ruler/.local/lib/python3.10/site-packages/torch/__init__.py# 或者 /usr/lib/python3/dist-packages/... 之类, 总之不能是 pytorch 源码目录其中BUILD_TRITON1 忽略triton 已经从 torch 2.4.0时移出了 torch 源码库。v2.8.0 的 make triton 实际执行的是 scripts/install_triton_wheel.sh它做的事就是pipinstallpytorch-triton3.4.0git11ec6354\--index-url https://download.pytorch.org/whl/nightly/也就是下载 PyTorch 官方 CI 预先构建好的 wheel本地一行 Triton 代码都没有编译。这背后的原因前面说过Triton 早已不是 PyTorch 的子模块PyTorch 把它改成了外部版本化依赖——由 PyTorch 的 CI 从 triton-lang/triton 的某个钉死 commit这里就是 git11ec6354构建 wheel发布到自己的 nightly 源make triton 只是帮你把钉死的那个版本装上。2. 构建脚本#!/usr/bin/env bash# # PyTorch v2.8.0 源码构建脚本# 目标环境: V100 (sm_70) / CUDA 12.8.2 / cuDNN 9.10.2.21 (与CUDA同目录)# Ubuntu 22.04 / Python 3.10 (系统Python, 无需conda)# 依据: pytorch/pytorch v2.8.0 tag README.md From Source 流程## 用法:# chmod x build_pytorch_2.8.0_v100.sh# ./build_pytorch_2.8.0_v100.sh # 默认构建 wheel 并 pip 安装# BUILD_MODEdevelop ./build_pytorch_2.8.0_v100.sh # README 原版 develop 模式# SKIP_APT1 ./build_pytorch_2.8.0_v100.sh # 跳过系统依赖安装# set-euopipefail# ----------------------------- 可配置参数 ------------------------------------PYTORCH_VERSIONv2.8.0BUILD_MODE${BUILD_MODE:-wheel}# wheel | developSKIP_APT${SKIP_APT:-0}# 1 跳过 apt 安装BUILD_TRITON${BUILD_TRITON:-0}# 1 构建 triton (torch.compile 用)MAX_JOBS${MAX_JOBS:-$(nproc)}CUDA_HOME${CUDA_HOME:-/usr/local/cuda}WORK_DIR${WORK_DIR:-$HOME/ex_holoscan/pytorch_src}# -----------------------------------------------------------------------------log(){echo-e\n\033[1;32m$*\033[0m;}die(){echo-e\033[1;31m[ERROR]$*\033[0m2;exit1;}# 1/7 系统依赖 if[[${SKIP_APT}!1]];thenlog1/7 安装系统依赖 (内部使用 sudo)sudoaptupdatesudoaptinstall-ybuild-essential cmake ninja-buildgitpython3-dev\python3-pip libopenblas-dev libnuma-develselog1/7 跳过系统依赖安装 (SKIP_APT1)fi# gcc 版本检查: README 要求 Linux 上 gcc 9.4.0GCC_VER$(gcc-dumpversion)loggcc 版本:${GCC_VER}(README 要求 9.4.0)# 2/7 CUDA 环境 log2/7 配置 CUDA 环境[[-x${CUDA_HOME}/bin/nvcc]]||die未找到 nvcc:${CUDA_HOME}/bin/nvcc请检查 CUDA_HOMEexportPATH${CUDA_HOME}/bin:${PATH}# 用 :- 兜底, 避免 set -u 下 LD_LIBRARY_PATH 未定义时报 unbound variableexportLD_LIBRARY_PATH${CUDA_HOME}/lib64:${LD_LIBRARY_PATH:-}# V100 Volta sm_70; 只编译目标架构, 大幅缩短构建时间exportTORCH_CUDA_ARCH_LIST7.0nvcc--version|greprelease||trueechoTORCH_CUDA_ARCH_LIST${TORCH_CUDA_ARCH_LIST}# 3/7 获取源码 log3/7 获取 PyTorch 源码 (${PYTORCH_VERSION})mkdir-p${WORK_DIR}cd${WORK_DIR}if[[-dpytorch/.git]];thenecho复用已有源码目录:${WORK_DIR}/pytorchcdpytorchgitfetch--tagsorigin||trueelsegitclone https://github.com/pytorch/pytorchcdpytorchfi# 关键: 必须先 checkout tag, 再更新 submodule, 保证子模块版本与 tag 匹配gitcheckout${PYTORCH_VERSION}gitsubmodulesyncgitsubmodule update--init--recursive# 4/7 Python 构建依赖 log4/7 安装 Python 构建依赖python3-mpipinstall--upgradepip python3-mpipinstall-rrequirements.txt python3-mpipinstallmkl-static mkl-include# 5/7 Triton (可选) if[[${BUILD_TRITON}1]];thenlog5/7 构建 Triton (torch.compile/inductor 用)maketritonelselog5/7 跳过 Triton (BUILD_TRITON${BUILD_TRITON})fi# 6/7 构建并安装 log6/7 构建 PyTorch (BUILD_MODE${BUILD_MODE}, MAX_JOBS${MAX_JOBS})exportMAX_JOBScase${BUILD_MODE}indevelop)# README 官方命令: 开发模式原地安装python3 setup.py develop;;wheel)# 构建 wheel: wheel 内 torch/lib torch/include 即为 libtorch,# 可供 holoscan-sdk 链接 (Torch_DIRsite-packages/torch/share/cmake/Torch)python3 setup.py bdist_wheelWHEEL$(ls-tdist/torch-2.8.0*.whl|head-n1)[[-n${WHEEL}]]||die未找到构建产物 dist/torch-2.8.0*.whlpython3-mpipinstall--force-reinstall${WHEEL};;*)die未知 BUILD_MODE${BUILD_MODE}(可选: wheel | develop);;esac# 7/7 验证 log7/7 验证安装# 切出源码目录再 import, 避免从源码目录误导入cd/ python3 -EOF import torch print(torch version :, torch.__version__) print(built with CUDA:, torch.version.cuda) print(cuDNN version :, torch.backends.cudnn.version()) print(cuda available:, torch.cuda.is_available()) if torch.cuda.is_available(): print(device 0 :, torch.cuda.get_device_name(0)) print(capability :, torch.cuda.get_device_capability(0)) # 期望 (7, 0) x torch.randn(1024, 1024, devicecuda) print(matmul check :, (x x).sum().item() ! 0) EOFlog构建完成 ✅echo源码目录 :${WORK_DIR}/pytorch[[${BUILD_MODE}wheel]]echowheel 产物:${WORK_DIR}/pytorch/dist/echo提示: TensorRT (/usr/local/TensorRT-10.9.0.34/) 不参与 PyTorch 本体构建, 留给 holoscan 使用即可