最近想求解超大稀疏矩阵的特征值,直接用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
生成docker:docker run --gpus all -itd --name=petsc_new pytorch/pytorch:2.3.1-cuda12.1-cudnn8-devel
进入docker:docker exec -it**petsc_new/bin/bash
查看上述各种依赖是否满足
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.测试
安装过程中会提醒你,如果要用petsc4py(petsc的python接口)需要添加环境变量
添加环境变量
vi ~/.bashrc
export PYTHONPATH=$PYTHONPATH:/workspace/zhugejun/petsc-3.21.3/test/lib
source ~/.bashrc
打开python测试是否能使用
from petsc4py import PETSc
A = PETSc.Mat()
comm =
PETSc.COMM_WORLD
A=A.createDense((10,10))
A=A.createDenseCUDA((10,10))
如果不是cuda版本的话 创建densecuda的时候会报错 说没有这个类型
6.安装slepc
有点类似安装petsc,且依赖petsc
获取安装包 wget https://slepc.upv.es/download/distrib/slepc-3.21.1.tar.gz
*tar -zxvf *slepc-3.21.1.tar.gz
./configure --with-slepc4py=1 --have-petsc4py=1 【安装slepc4py 且petsc已安装】
configure成功
执行make
make成功,执行test
test成功,添加环境变量
vi ~/.bashrc
export PYTHONPATH=$PYTHONPATH:/workspace/zhugejun/slepc-3.21.1/test/lib
source ~/.bashrc
安装成功
版权归原作者 weixin_42037886 所有, 如有侵权,请联系我们删除。