gprmax 3.0 安装、GPU配置与cmd、pycharm(或jupyter)运行gprmax详细教程
0、引言
本人最近也正学习gprmax仿真,在安装和使用过程中也遇到了许多问题,例如系统问题,cmd操作不便等等,希望我的一些经验能对你有一定的帮助,相关问题请随时关注gpramx官网。
在安装或使用过程中有什么问题可通过邮箱1593458764@qq.com联系我,希望能多相互交流学习,共同进步。
特别说明:由于本人最近闲暇时间太少,不再提供免费安装等服务,望理解!
新版本win10安装大同小异,可看新发教程
2021-11-7 更新了结果画图闪退问题的解决方法
关于GPU加速,不成功大概率是软件版本不兼容!!!!!!!!!!!!
显卡gtx1660ti win10对应软件版本: pycuda2024.1.1 gprMax3.1.7 vs2019 cuda11.6 python==3.12.4
1. 下载gprmax包
2. 安装
2.1 安装anaconda(添加至环境变量)
2.2.1 anaconda安装最后一步可选添加至环境变量和默认python解释器
2.2.2 若安装anaconda时没选择添加至环境变量,可选择右键“我的电脑”>选择“属性”>高级系统设置>环境变量
在系统变量中找到path,点击编辑,将光标移到最后面,输入一个分号 ( ; ),将anaconda安装目录下scips文件夹的路径复制到分号后(注意使用英文输入法),确定,保存关闭,重启anaconda
2.2 更新conda
conda update conda
2.3 安装git
git 用来clone gprmax的安装包,直接从github下载安装包的跳过此步
conda install git
git clone https://github.com/gprmax/gprMax
2.3 安装gprmax所需包
#导航至gprmax顶级目录,这里我是直接将gprmax文件夹放在桌面了,其他盘使用cmd命令导航至其所在目录即可
cd desktop
cd gprmax
conda env create -f conda_env.yml
2.5 安装microsoft visual c++2015
利用microsoft visual c++2015 tool进行安装,自定义安装,只选择安装与你Windows版本一致的SDK(Windows版本一般有两个SDK可选择,选与windows版本相符的即可,当然怕选错也可以直接安装完全版)
- 官网现在给的是microsoft visual c++2019 tool,需要自定义安装:‘MSVC v142’和 ‘Windows 10 SDK’ 。
2.6 安装gprmax
#激活目录
conda activate gprMax
#安装
python setup.py build
python setup.py install
2.7 安装完成验证
python -m gprMax user_models/cylinder_Ascan_2D.in
python -m tools.plot_Ascan user_models/cylinder_Ascan_2D.out
3. 注意
3.1 注意
以上安装步骤均在cmd命令窗口进行
安装完成后后续仿真过程中需激活gprmax目录
3.2 说明
- conda 有base环境,我们的gprMax安装在新创建的虚拟环境gprMax环境中,针对gprmax的安装卸载包都得在gprMax环境下进行
- 最近的版本创建gprMax环境时conda安装的matplotlib包版本有问题,可能出现得到能仿真但是结果图出现闪退的现象,解决方法是先用conda卸载,再用pip重装就行
conda activate gprMax
conda uninstall matplotlib
pip install matplotlib
关于快照功能参考:https://tieba.baidu.com/p/6129017590
4. GPU配置
gprMax的计算量主要集中在FDTD循环求解,可使用GPU加速,gprmax只支持NVIDIA CUDA的GPU。
4.1 安装NVIDIA CUDA。
通过NVIDIA CUDA Toolkit进行安装,安装教程参考NVIDIA CUDA Toolkit文档。必须确保所安装的CUDA版本与所使用的编译器版本兼容。可以在CUDA安装指南中“系统要求”下找到不同系统对应的cuda版本。
4.2 添加用户环境变量
- 将 CUDA编译器(nvcc)的位置添加到用户路径环境变量中,对于Windows 系统nvcc位置为:
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\bin
4.3 安装pycuda包。
打开命令提示符(Windows),导航到顶级gprMax目录,运行
conda activate gprMax
pip install pycuda
4.4 可能出现的错误
PyCUDA ERROR: the context stack was not empty upon module cleanup
解决方法:将VC下bin文件夹添加到环境变量(非常感谢罗大哥的帮助),对于Windows 系统
- 若还是不行可能是CUDA版本、VS版本、pycuda版本的问题、gprmax没安装完整。
- 用户环境变量添加完成后需要确保点了确定(有两次)
- 设置好后需要关掉之前的cmd或pycharm重新打开。
- 有可能出现gprmax在cmd能运行gpu版本,但通过python代码方式却报错,感谢网友炎黄给出的解决方法是:安装特定版本号的spyder-kernels,版本不能太新。
C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\bin
4.5 GPU运行
#cmd
python -m gprMax user_models/cylinder_Ascan_2D.in -gpu
# pycharm (具体见第6节)
api(filename, n=1, geometry_only=False,gpu={0}) #geometry_only:仅几何图形,花括号为GPU ID
5. cmd命令运行gprmax
#cmd命令窗口运行gprmax
cd desktop\gprmax #导航至gprmax顶级目录
conda activate gprmax #激活gprmax目录
python -m gprMax user_models/inputfilename.in #A扫描模拟生成.out文件
python -m gprMax user_models/inputfilename.in -n 50 #B扫描模拟生成n个.out文件
python -m tools.plot_Ascan/outputfilename.out #A扫描绘图
python -m tools.plot_Ascan/my_outputfilename.out --outputs Ez -fft #绘制Ez分量及其fft图
python -m tools.plot_Bscan/outputfile_merged.out rx-component #B扫描绘图
#多个A扫描.out文件合并成一个.out文件
python -m tools.outputfiles_merge user_models/outputfilebase
#多个A扫描.out文件合并成一个.out文件并删除单独A扫描的文件
python -m tools.outputfiles_merge user_models/outputfilebase --remove-files
6、pycharm运行gprmax
6.1 模型仿真
新建项目,解释器选择为gprmax对应的python解释器即可通过pycharm运行gprmax,项目下新建名为“iofiles”的文件夹
# python运行gprmax
# 读取.in文件
# 运行api函数模拟
import os
from gprMax.gprMax import api
#文件路径+文件名
dmax=r".\" # pycharm项目当前目录
filename = os.path.join(dmax, 'concrete.in')
#正演 n:仿真次数(A扫描次数)->B扫描
api(filename, n=1, geometry_only=False) #geometry_only:仅几何图形
merge_files(r".\iofiles\concrete", removefiles=True)
6.2、 A扫描绘图
"""A扫描"""
import os
from gprMax.receivers import Rx
from tools.plot_Ascan import mpl_plot
dmax=r".\" # pycharm项目当前目录
filename = os.path.join(dmax,'iofiles', 'concrete.out')
outputs = Rx.defaultoutputs
outputs = ['Ez'] # Ez分量
plt = mpl_plot(filename,outputs, fft=True) #波形图,fft:频谱图
6.3、 B扫描及保存回波数据
"""B扫描绘图"""
import os
import numpy
from tools.plot_Bscan import get_output_data, mpl_plot
dmax=r".\" # pycharm项目当前目录
filename = os.path.join(dmax, 'iofiles', 'concrete_merged.out')
rxnumber = 1
rxcomponent = 'Ez'
#获取回波数据
outputdata, dt = get_output_data(filename, rxnumber, rxcomponent)
#保存回波数据
numpy.savetxt('wavedata.txt',outputdata,delimiter=' ')
#绘图
plt = mpl_plot(filename,outputdata, dt, rxnumber, rxcomponent)
7、jupyter运行gprmax
jupyter运行gprmax代码与pycharm一样,安装gprmax时会自带安装jupyter