Linux 上非 root 用户 Conda 编译安装 ISCE2(含 RelaxIV 、GPU 加速等全部可选项,2023年4月8日更新)

本文介绍如何在Linux环境下以非root用户身份使用Conda编译安装ISCE2,涵盖RelaxIV和GPU加速等全部可选项。演示环境为Nvidia A100 GPU云服务器、Ubuntu 18.04 Linux。文章提供了详细的步骤和命令,并通过视频进行辅助说明。

(首发地址:学习日记 Linux 上非 root 用户 Conda 编译安装 ISCE2(含 RelaxIV 、GPU 加速等全部可选项) – 学习日记

今天演示一下 Linux 上非 root 用户 Conda 编译安装 ISCE2(含 RelaxIV、GPU 加速等全部可选项)。本文的演示环境是 Nvidia A100 GPU 云服务器、Ubuntu 18.04 Linux、Miniconda3 版本 conda 23.3.1、ISCE2 2.6.1。分为 ISCE2 编译安装和简单测试两部分。

重要提示:isce2 这款软件对各组件的版本特别敏感,conda 默认会安装有效的最新版本,导致 isce2 安装失败。本文已于 2023年4月8日更新了 isce2 编译运行所需要的 Conda 环境安装方法,所以视频中的Conda 环境安装部分已经过时。本文的首发网址为:学习日记 https://www.learndiary.com/2022/08/linux-conda-isce2/ 。若有更新会第一时间发布在首发网址中。

视频演示地址:https://www.bilibili.com/video/BV1La411o785?share_source=copy_web&vd_source=d1925b070926f23b2b6676137251e9ea

提示:本演示视频分为“编译安装”和“简单测试”如下两部分: 

编译安装

简单测试

一、安装方法概览

实际上,现在可以在 Conda 的 conda-forge 频道直接安装 isce2。用命令:conda create -n isce2 -c conda-forge isce2 即可。但是,仓库里的版本是没有 RelaxIV、GPU 加速等可选项的。因此,本文采用编译安装的方法,安装上 ISCE2 主页上列出的全部可选项,着重介绍 RelaxIV、GPU 加速编译安装的细节。

在当前(2022.08.06),在 ISCE2 的项目主页上( GitHub - isce-framework/isce2: InSAR Scientific Computing Environment version 2 ),有 SCons、CMake 两种编译安装方法。这里使用 SCons。

本文的方法可以无需 root 权限,理论上适用于各种 Linux 发行版本。当然,Nvidia 的显卡私有驱动必须事先安装好。本文给出每一步的具体命令,并配合视频演示。

二、安装步骤

1、Miniconda 安装

wget -c https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh # 每步都选“yes”
. ~/.bashrc
conda config --set auto_activate_base false
conda deactivate
conda update -n base -c defaults conda

2、创建 conda 环境并安装所有包

本文采用 conda 环境安装方法是直接从配置文件中导入安装,理论上固定了各软件包的版本。

首先从百度网盘下载 conda 环境配置文件 isce2261_gpu_env.yml : https://pan.baidu.com/s/1flWEWR8Ls8pOyl0ad5gQlw?pwd=me2s

然后,在下载的配置文件当前目录执行命令导入安装并激活环境,如需要创建的 conda 环境名称为 isce2 :

conda env create -n isce2 -f isce2261_gpu_env.yml
conda activate isce2

创建相关源码、安装、编译、配置文件夹:

mkdir ~/tools/{src,isce} -pv
mkdir ~/{build,.isce} -v

下载 RelaxIV 源码:

cd ~/tools/src
git clone https://github.com/frangio68/Min-Cost-Flow-Class

创建 cython3 符号链接:

cd $CONDA_PREFIX/bin
ln -sfv cython cython3

下载 isce2 2.6.1 源码:

cd ~/tools/src
wget https://github.com/isce-framework/isce2/archive/refs/tags/v2.6.1.tar.gz
tar -xf v2.6.1.tar.gz
mv isce2-2.6.1 isce2 -v

(后面的内容暂无需更新,于2023年4月8日未更新)

复制需要的 RelaxIV 源码到 isce2 源码文件夹中并修改编译配置文件:

cd isce2
cp ../Min-Cost-Flow-Class/RelaxIV contrib/UnwrapComp/src/ -rv
cp ../Min-Cost-Flow-Class/MCFClass/MCFClass.h contrib/UnwrapComp/src/RelaxIV/ -v
cp ../Min-Cost-Flow-Class/OPTUtils/OPTUtils.h contrib/UnwrapComp/src/RelaxIV/ -v

对比了相关的 CMakeList.txt ,修改了 src 下面的文件,去掉了 listFiles 中的 RelaxIV/Main.C,如下:

vim contrib/UnwrapComp/src/SConscript
listFiles = ['RelaxIV/RelaxIV.C', 'relaxIVdriver.cpp']

主要编译配置文件的内容:

vim ~/.isce/SConfigISCE

PRJ_SCONS_BUILD=$HOME/build/isce_build
PRJ_SCONS_INSTALL=$ISCE_HOME
LIBPATH=$CONDA_PREFIX/lib
CPPPATH=$CONDA_PREFIX/include $CONDA_PREFIX/include/python3.8 $CONDA_PREFIX/lib/python3.8/site-packages/numpy/core/include $CONDA_PREFIX/include/opencv4
FORTRAN=$CONDA_PREFIX/bin/gfortran
CC=$CONDA_PREFIX/bin/gcc
CXX=$CONDA_PREFIX/bin/g++
FORTRANPATH=$CONDA_PREFIX/include
MOTIFLIBPATH=$CONDA_PREFIX/lib
X11LIBPATH=$CONDA_PREFIX/lib
MOTIFINCPATH=$CONDA_PREFIX/include
X11INCPATH=$CONDA_PREFIX/include
RPATH=$CONDA_PREFIX/lib
ENABLE_CUDA=True
CUDA_TOOLKIT_PATH=$CONDA_PREFIX  # use 'which nvcc' to verify

从 “Your GPU Compute Capability”(https://developer.nvidia.com/cuda-gpus)处查出 NVIDIA A100 显卡的 “Compute Capability” 是 “8.0”,在 env['ENABLESHAREDNVCCFLAG'] 中添加 “-arch=sm_80”。这一步不是必要的,主要是优化 CUDA 代码编译。

vim scons_tools/cuda.py
env['ENABLESHAREDNVCCFLAG'] = '-std=c++11 -shared -Xcompiler -fPIC -arch=sm_80'

设置编译时环境变量:

export ISCE_HOME=${HOME}/tools/isce
export SCONS_CONFIG_DIR=${HOME}/.isce

开始编译:

scons install

激活环境即自动设置环境变量的脚本:

vim $CONDA_PREFIX/etc/conda/activate.d/env_var.sh

# isce2.rc   
export ISCE_HOME=$HOME/tools/isce
export PATH=$ISCE_HOME/bin:$ISCE_HOME/applications:$PATH
export LD_LIBRARY_PATH=$ISCE_HOME/lib:$LD_LIBRARY_PATH
export PYTHONPATH=$ISCE_HOME:$ISCE_HOME/applications:$ISCE_HOME/components:$ISCE_HOME/library:$HOME/tools:$PYTHONPATH

三、退出并重新进入环境并简单测试

conda deactivate
conda activate isce2
cd

主要程序测试:

stripmapApp.py --help

可选项 "unwrap 2 stage" 测试:

(isce2) learndiary@gpuserver:~$ ls /home/learndiary/tools/isce/components/contrib/UnwrapComp/
__init__.py  phaseUnwrap.py  unwcomp.so  unwrapComponents.py

与 Conda 仓库中的 isce2 相比,自己编译的多了 unwcomp.so 这个文件。

/home/learndiary/tools/isce/components/contrib/UnwrapComp/phaseUnwrap.py --help
/home/learndiary/tools/isce/components/contrib/UnwrapComp/phaseUnwrap.py # 在当前目录中正常产生一个 png 文件
/home/learndiary/tools/isce/components/contrib/UnwrapComp/phaseUnwrap.py -MCF # 报告 RelaxIV 相关错误,应该跟里面 “from . import unwcomp” 有关。用下面 python 交互界面测试就正常了。 
# 在 python 交互界面重新测试:
python
import sys
from contrib.UnwrapComp import phaseUnwrap
sys.argv = ['/home/learndiary/tools/isce/components/contrib/UnwrapComp/phaseUnwrap.py', '-MCF']
phaseUnwrap.main() # 在当前目录正常产生一个 png 和 network.dmx

cuda 相关检测:

(isce2) learndiary@gpuserver:~$ ls /home/learndiary/tools/isce/components/zerodop/
baseline  bistaticgeo2rdr  geo2rdr  geozero  GPUgeo2rdr  GPUresampslc  GPUtopozero  __init__.py  __pycache__  topozero

与 Conda 仓库中的 isce2 相比,自己编译的多了 GPUgeo2rdr、GPUresampslc、GPUtopozero 三个 GPU 相关的文件夹。

(isce2) learndiary@gpuserver:~/tools/isce/components/zerodop/GPUgeo2rdr$ ls
GPUgeo2rdr.abi3.so  __init__.py
(isce2) learndiary@gpuserver:~/tools/isce/components/zerodop/GPUgeo2rdr$ ldd GPUgeo2rdr.abi3.so
# 其中有包含 cuda 的动态链接库如下:
libcudart.so.11.0 => /home/learndiary/miniconda3/envs/isce2/lib/libcudart.so.11.0 (0x00007f13d71d6000)
# 另外两个 GPU 相关的文件夹中的动态链接库 *.so 文件也是同样的情况。

关于 ISCE2 的编译安装就此完成。因为本人并非使用这种软件的专业人士,各位在安装、使用的过程中有任何问题欢迎交流、批评与指正。

四、参考网址

1、ISCE2 GitHub - isce-framework/isce2: InSAR Scientific Computing Environment version 2
2、ISCE2 installation guide GitHub - lijun99/isce2-install
3、How to call a function from the interactive interpreter and pass arguments for argparse? python - How to call a function from the interactive interpreter and pass arguments for argparse? - Stack Overflow

### Root用户Linux服务器上安装Anaconda或Miniconda 对于Root用户,在实验室服务器上安装Anaconda或Miniconda可以通过以下方式实现。由于没有管理员权限,因此无法全局安装软件包,但可以将其安装用户的家目录下。 #### 下载Miniconda脚本 通过wget命令从官方源或其他可信镜像站点下载Miniconda安装脚本文件[^2]: ```bash wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh ``` 如果网络连接较慢或者不稳定,可以选择清华大学开源软件镜像站作为替代方案来加速下载过程: ```bash wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh ``` #### 安装Miniconda至个人目录 执行下载好的shell脚本来启动安装程序,并指定目标路径为当前用户的本地空间内,比如`~/miniconda3`位置[^1]: ```bash bash Miniconda3-latest-Linux-x86_64.sh -b -p ~/miniconda3 ``` 这里参数 `-b` 表示静默模式运行(无需交互),而 `-p` 参数用于定义具体的安装路径。 完成上述操作之后,还需要配置环境变量以便能够正常使用新安装的工具链。编辑`.bashrc` 或者 `.zshrc`(取决于所使用的Shell种类) 文件加入如下行[^3]: ```bash export PATH=~/miniconda3/bin:$PATH ``` 使更改立即生效可重新加载该配置文件: ```bash source ~/.bashrc ``` 至此,即使不具备超级用户权限也成功完成了针对单个账户的有效部署工作流程。 #### 创建并管理Conda虚拟环境 一旦基本系统被设置好以后就可以利用它去建立隔离的工作区即所谓的“虚拟环境”。这有助于保持不同项目之间依赖关系相互独立而不发生冲突。 例如新建名为myenv的新环境并且激活之: ```bash conda create --name myenv python=3.9 conda activate myenv ``` 最后提醒一点,尽管整个过程中不需要sudo提权但仍需确保拥有足够的磁盘配额以及遵循所在机构的安全策略规定。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值