PyTorch编译提示LAPACK库未找到,运行torch.inverse报RuntimeError如何解决?
问题原因
- 报错是因为自行编译的PyTorch没有开启LAPACK线性代数库支持,
torch.inverse等矩阵运算依赖该库提供的底层接口,编译时检测不到对应依赖就会跳过该功能模块,运行调用时触发报错。
解决方案
按如下步骤修改Dockerfile即可:
步骤1:补充安装系统层面线性代数依赖
在现有pip安装依赖的指令前,新增系统包安装指令(基于Debian/Ubuntu系镜像,其他发行版替换为对应包管理命令即可):
RUN apt update && apt install -y --no-install-recommends libopenblas-dev liblapack-dev gfortran && rm -rf /var/lib/apt/lists/*
步骤2:新增PyTorch编译时的LAPACK/BLAS指定环境变量
在编译PyTorch的脚本中新增对应环境变量,显式开启MKL的BLAS/LAPACK支持(已提前安装了mkl、mkl-include依赖,直接指定即可):
修改后的PyTorch编译片段如下:
# PyTorch RUN apt update && apt install -y --no-install-recommends libopenblas-dev liblapack-dev gfortran && rm -rf /var/lib/apt/lists/* RUN pip3 install astunparse numpy ninja pyyaml mkl mkl-include setuptools cmake cffi typing_extensions future six requests dataclasses ENV PYTORCH_INST_VERSION="v1.8.1" RUN git clone --recursive --branch ${PYTORCH_INST_VERSION} https://github.com/pytorch/pytorch pytorch-src && \ cd pytorch-src && \ export MAX_JOBS=$((`nproc` - 2)) && \ export TORCH_CUDA_ARCH_LIST=${CUDA_ARCH} && \ # 新增以下3行环境变量,显式指定使用MKL提供的BLAS和LAPACK实现 export USE_MKL=1 && \ export BLAS=MKL && \ export LAPACK=MKL && \ python3 setup.py install --prefix=/opt/pytorch && \ cp -r /opt/pytorch/lib/python3.8/site-packages/* /usr/lib/python3/dist-packages/ && \ cd /opt && \ rm -rf /opt/pytorch-src
备选方案(MKL不可用时)
如果上述修改后编译仍检测不到LAPACK,可将新增的3行环境变量替换为以下内容,改用OpenBLAS实现:
export USE_MKL=0 && \ export BLAS=OpenBLAS && \ export LAPACK=OpenBLAS && \
验证方法
编译完成后运行你提供的复现代码,无报错输出矩阵逆即表示修复成功。
内容的提问来源于stack exchange,提问作者Manveru
相关产品推荐
相关产品推荐

