尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

一键构建 pytorch cpp lib 前端和 wheel

一键构建 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 使用即可
返回列表