HPC上与其他用户共享conda环境

本文以 CMA 新一代超算平台国家级子系统 (以下简称 HPC2023) 为例说明如何在 HPC 上与其他用户共享 conda 环境。

HPC2023 安装了 conda 软件包 conda/2023.03.01。 下面以 op_post 账户使用 wangdp 账户创建的 py311-data 环境为例说明如何在不同账户之间共享 conda 环境。

1. 在 wangdp 账户中查看已经创建的 conda 环境

以下代码在 BShell 中加载并激活 conda 环境:

module load conda/2023.03.01
eval "$(/g1/app/apps/anaconda/2023.03.01/condabin/conda shell.bash hook)"

查看已经创建的 conda 环境:

conda env list
# conda environments:
#
base                  *  /g1/app/apps/anaconda/2023.03.01
py311-cylc               /g1/u/wangdp/.conda/envs/py311-cylc
py311-data               /g1/u/wangdp/.conda/envs/py311-data
py311-data-oper          /g1/u/wangdp/.conda/envs/py311-data-oper
py311-takler             /g1/u/wangdp/.conda/envs/py311-takler
py312-ansible            /g1/u/wangdp/.conda/envs/py312-ansible
py312-data               /g1/u/wangdp/.conda/envs/py312-data
py39-cylc                /g1/u/wangdp/.conda/envs/py39-cylc

默认环境安装在系统目录,用户 (wangdp) 创建的环境放在 /g1/u/wangdp/.conda/envs 目录中。

2. 在 op_post 账户中使用 wangdp 创建的 conda 环境

切换到 op_post 账户,激活 conda 环境,并查看已经创建的 conda 环境:

# conda environments:
#
base                  *  /g1/app/apps/anaconda/2023.03.01
py311-oper               /g1/u/op_post/.conda/envs/py311-oper
py311-oper-graph         /g1/u/op_post/.conda/envs/py311-oper-graph

可以看到,op_post 创建的环境放在 /g1/u/op_post/.conda/envs 目录中。

op_post 不能直接找到 wangdp 账户创建的 conda 环境。 可以通过将 wangdp 账户的 envs 目录添加到配置项 envs_dirs 中实现环境共享。

执行如下命令,将在配置文件 ~/.condarc 中更新配置项 envs_dirs

conda config --add envs_dirs /g1/u/wangdp/.conda/envs

查看 ~/.condarc 文件,可以看到 envs_dirs 的配置项。 也可以直接修改文件而不执行上述命令。

# ...skip...

envs_dirs:
  - /g1/u/wangdp/.conda/envs

再次查看 op_post 账户的 conda 环境:

# conda environments:
#
base                  *  /g1/app/apps/anaconda/2023.03.01
py311-oper               /g1/u/op_post/.conda/envs/py311-oper
py311-oper-graph         /g1/u/op_post/.conda/envs/py311-oper-graph
py311-cylc               /g1/u/wangdp/.conda/envs/py311-cylc
py311-data               /g1/u/wangdp/.conda/envs/py311-data
py311-data-oper          /g1/u/wangdp/.conda/envs/py311-data-oper
py311-takler             /g1/u/wangdp/.conda/envs/py311-takler
py312-ansible            /g1/u/wangdp/.conda/envs/py312-ansible
py312-data               /g1/u/wangdp/.conda/envs/py312-data
py39-cylc                /g1/u/wangdp/.conda/envs/py39-cylc
sokort-test              /g1/u/wangdp/.conda/envs/sokort-test

可以看到,配置后的 op_post 账户能够识别 wangdp 账户创建的 conda 环境。

激活环境,并查看 python 程序的目录,可以看到能够正确调用 py311-data 环境下的 python 命令。

conda activate py311-data
which python
/g1/u/wangdp/.conda/envs/py311-data/bin/python

注意:需要开放相关目录的访问和执行权限才能向其他用户共享 conda 环境。

上述方法需要修改 .condarc 配置文件,修改永久生效,可以作为临时方案。 笔者将继续寻找更合适的 conda 环境共享方案。