模型介绍
HiPIMS(High-Performance Integrated hydrodynamic Modelling System)使用最先进的数值方案(Godunov型有限体积法)来求解二维浅水方程以进行洪水模拟。为了支持高分辨率洪水模拟,使用CUDA/C ++语言在多个GPU上实现了HiPIMS,以实现高性能计算。由于HiPIMS具有模块化和灵活的结构,因此只要问题可以在均匀的矩形网格上解决,就可以进一步开发用于水文科学的其他应用。
HiPIMS由水力环境建模实验室开发和维护,HiPIMS的开发由梁秋华(Qiuhua Liang)教授领导,凝聚了将近二十年的心血和众多研究人员的努力。
Pypims 是HiPIMS的Python API,该API提供了一个用户友好的集成工具链,用于准备输入,运行HiPIMS和可视化输出。完整的文档在https://pypims.readthedocs.io/en/latest/上。
第一种安装方式:编译安装
Pypims 是一个Python第三方库,源代码已经在Github开源,按照说明书 在Win 11电脑上安装成功。步骤记录如下。
计算机环境
我的计算机操作系统为Windows 11 专业工作站版,版本号23H2。
系统类型是64 位操作系统, 基于 x64 的处理器。
处理器为12th Gen Intel® Core™ i7-12700 2.10 GHz,内存为 96 GB。
GPU为NVIDIA RTX A4000,显存为 16 GB,驱动版本为576.02,CUDA版本为12.9。
安装Miniconda
Miniconda是Anaconda的轻量级版本,由Continuum Analytics(现Anaconda Inc.)开发。通过Miniconda,用户可高效管理项目依赖,平衡灵活性与资源消耗。
安装Git
从Git官方网站下载安装程序:
Git官网下载页面
运行下载的.exe文件,按照安装向导默认选项完成安装。安装完成后,在命令提示符或PowerShell中输入 git --version
验证是否安装成功。
安装完成后需设置用户名和邮箱:
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
使用 git config --list
可查看当前配置。
安装Visual Studio
Visual Studio 是由微软开发的集成开发环境(IDE),支持多种编程语言(如 C#, C++, Python, JavaScript 等)和平台(Windows, Web, 移动端等)。
安装免费的Visual Studio Community版本,并安装C++负载。
安装NVIDIA CUDA Toolkit
CUDA Toolkit可以从NVIDIA网站下载。
安装完成后,设置环境变量。
克隆Pypims项目
进入欲安装的文件夹,在命令提示符工具中,输入以下命令
git clone https://github.com/pypims/pypims.git
cd pypims
如果连接不上Github,可以设置网络代理。
修改CmakeLists
当前 CUDA 版本或显卡驱动 不再支持 sm_35
。因此需要在Pypims项目文件./pypims/pypims/CMakeLists.txt中,去掉对sm_35
的支持,并替换为本机显卡支持的Compute Capability(sm_86
)。
CUDA GPU Compute Capability查询网址:https://developer.nvidia.com/cuda-gpus
RTX A4000 → Compute Capability = 8.6 → sm_86
IF(WIN32)set(PLATFORM_CXX_FLAGS /Zi)set(CUDA_SEPARABLE_COMPILATION ON)set(CUDA_NVCC_FLAGS -arch=sm_86;--expt-extended-lambda)
ENDIF(WIN32)
修改cuda_data_bank.cu
在./pypims/pypims/lib/src/multi_threading/cuda_data_bank.cu代码中,使用了 HEMI_DEV_CALLABLE_INLINE_MEMBER 宏,它的作用是用来兼容 GPU 和 CPU 编译环境。而 HEMI 本身不再与新版本 CUDA(>= 11)和 Thrust 完美兼容。再加上我使用的是 CUDA 12.9,在编译时会触发如下错误:
error : static assertion failed with "unimplemented for this system"
这主要是 Thrust 在执行 thrust::device_vector<GC::Vector3>
的 .resize()
操作时,无法推导出如何用你提供的构造器在 device 上初始化对象。
解决方案是手动定义 thrust::device_vector<GC::Vector3>
时不要使用 .resize(n)
。
// 不推荐
thrust::device_vector<GC::Vector3> v;
v.resize(n); // ❌ 这会默认构造 device 端 Vector3,如果 Thrust 不支持就会崩溃// 推荐
std::vector<GC::Vector3> host_vec(n, GC::Vector3(0, 0, 0));
thrust::device_vector<GC::Vector3> v = host_vec;
因此对cuda_data_bank.cu文件的cuDataBankBranch函数修改为
cuDataBankBranch::cuDataBankBranch(unsigned int _size_lower2receive, unsigned int _size_lower2send, unsigned int _size_upper2receive, unsigned int _size_upper2send):size_lower2receive(_size_lower2receive), size_lower2send(_size_lower2send), size_upper2receive(_size_upper2receive), size_upper2send(_size_upper2send){lower_status = 0;std::vector<GC::Vector3> host_vec1(size_lower2receive, GC::Vector3(0, 0, 0));data_lower = host_vec1;indices_lower2receive = host_vec1;std::vector<GC::Vector3> host_vec2(size_lower2send, GC::Vector3(0, 0, 0));indices_lower2send = host_vec2;upper_status = 0;std::vector<GC::Vector3> host_vec3(size_upper2receive, GC::Vector3(0, 0, 0));data_upper = host_vec3;indices_upper2receive = host_vec3;std::vector<GC::Vector3> host_vec4(size_upper2send, GC::Vector3(0, 0, 0));indices_upper2send = host_vec4;}
创建虚拟环境
虚拟环境:允许创建隔离的Python环境,避免依赖冲突。
用管理员方式打开Anaconda Prompt,创建 Conda 虚拟环境
conda create -n pypims python=3.7 -y
安装依赖
激活环境
conda activate pypims
安装Cmake
conda install cmake -y
安装GDAL
conda install gdal -y
用相同的方式安装./pypims/docs/requirements.txt
中列出的所有库
conda install rasterio -y
conda install fiona -y
conda install numpy -y
conda install scipy -y
conda install matplotlib -y
conda install imageio -y
conda install pandas -y
conda install pyshp -y
conda install “sphinx>=4.1” -y
conda install “sphinx-rtd-theme>=1.0.0” -y
conda install nbsphinx -y
安装ipykernel,用于在Visual Studio Code中运行Jupyter Notebook的demo。
conda install ipykernel -y
安装Pypims
在Pypims文件夹中,打开Anaconda Prompt,进入pypims环境,输入命令
python setup.py install
安装完成。
第二种安装方式:Conda直接安装
在安装完Miniconda、Git、Visual Studio、NVIDIA CUDA Toolkit后,创建虚拟环境,并安装所有依赖。
然后在虚拟环境中,输入以下命令,直接安装Pypims。
注意:此方式未经测试,可能会遇到错误。
conda install pypims
或者
pip install pypims
运行洪水淹没模拟案例
根据Pypims官方提供的教程,使用Visual Studio Code打开./pypims/docs/source/Tutorials/flood.ipynb
,选择Python环境pypims
,运行flood.ipynb
,学习Pypims的使用。