最近想求解超大稀疏矩阵的特征值,直接用pytorch自带的很容易爆显存,看到网上说slpec是求解特征值神器,依赖petsc,且petsc是支持gpu加速的,所以就尝试了一下,但网上的文档都比较少,自己也踩了不少坑,因此记录一下。
首先,要先安装petsc cuda版的
先来盘一下依赖:
make/python3/gcc/gfortran/cuda
1.根据自己的显卡选择合适的cuda,gcc等
我的对应的cuda版本是12.2 所以接下来我选择安装12.1的cuda(之前尝试了11.7的cuda,编译不成功),所以还是要选择合适的
2.安装上述各种依赖
配置环境本身也挺麻烦的,所以我选择了直接用pytorch的docker镜像:pytorch/pytorch:2.3.1-cuda12.1-cudnn8-devel
docker pull pytorch/pytorch:2.3.1-cuda12.1-cudnn8-devel
pytorch的镜像会根据cuda版本配置对应的依赖,如我下载的这个版本有:
make/python3(3.10)/gcc,g__:gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04)/cuda 12.1
但还没有gfortran 但用apt install也很方便
3.根据docker镜像生成容器,且让容器启用GPU
4.petsc编译安装
拉取源码:wget https://web.cels.anl.gov/projects/petsc/download/release-snapshots/petsc-3.21.3.tar.gz
解压:tar -zxvf petsc-3.21.3.tar.gz
配置环境变量:
vi ~/.bashrc
export PETSC_DIR=解压的位置
export PETSC_ARCH=test
source ~/.bashrc
设置configure并编译:
./configure --with-cc=gcc --with-cxx=g++ --with-fc=gfortran --with-cuda=1(启用cuda) --download-petsc4py --download-mpich --download-fblaslapack --with-cudac=/usr/local/cuda/bin/nvcc(cuda地址)
cuda gcc版本要是有问题
成功了会提示下一步进行make
执行上述的make命令,成功后会出现第二个make:
执行第二个make
至此安装成功
5.测试
![](https://i-blog.csdnimg.cn/direct/f6a310c6e0ff4a50af231c6828c45475.png)
![](https://i-blog.csdnimg.cn/direct/9b5739b103064430bb35e78287c5f005.png)
![](https://i-blog.csdnimg.cn/direct/4bb15301df8e4235bf3987788731f3db.png)
![](https://i-blog.csdnimg.cn/direct/89a2e1fb2e384feea5ad9e1d65d59313.png)
![](https://i-blog.csdnimg.cn/direct/156e321c88d04cbfb1321848dde2146e.png)
![](https://i-blog.csdnimg.cn/direct/c332422e0bed459883a8c7ade6ec4147.png)