计算化学公社

 找回密码 Forget password
 注册 Register
Views: 525|回复 Reply: 2
打印 Print 上一主题 Last thread 下一主题 Next thread

[集群维护] Lmod管理公用Anaconda的方法

[复制链接 Copy URL]

464

帖子

11

威望

3948

eV
积分
4632

Level 6 (一方通行)

跳转到指定楼层 Go to specific reply
楼主
本帖最后由 丁越 于 2024-12-28 16:19 编辑

Lmod管理公用Anaconda的方法



一、前言
  Anaconda是一个开源的python包管理器,里面集成了众多的科学计算所需要的包,比如numpy, scipy, Pandas等等, 并且具有非常方便的包管理功能,可以方便地安装、更新、卸载Python包及其依赖项。此外, 它的软件环境管理功能也非常强大,能够方便创建多个独立的Python环境,使得每个环境有自己特定的包版本,避免不同项目之间的冲突。对于个人用户来说,通过执行Anaconda的后缀为.sh的安装脚本后就能直接将其安装到家目录下,并且自动将初始化命令写入到个人账户的.bashrc中。然而对于集群用户来说,个人用户的安装方式无法实现软件的公用,因此为了实现Anaconda的多人公用就需要将其安装在公共目录当中,并且需要为模块管理软件如Lmod配置相应模块文件来方便集群用户调用该软件。Lmod的模块文件采用lua语言编写,但同时也持支TCL语言。由于Lmod的灵活性、模块文件简单加上其丰富的手册文档支持,使得其在高性能计算领域非常流行。下面介绍一下如何在集群上安装并配置公用的Anaconda,并使用Lmod进行方便调用,本文中所使用的Linux系统为Rocky linux-9.5。

二、安装流程
1. 对于Rocky-linux用户来说,直接通过dnf install Lmod就可以非常方便安装Lmod。其他Linux用户需要按照实际情况安装Lmod。
2. 将Anaconda安装到公共目录里,比如/opt。 可以进入/opt目录后输入下面命令下载安装脚本,然后chmod +x Anaconda3-2024.10-1-Linux-x86_64.sh添加可执行权限,之后运行./Anaconda3-2024.10-1-Linux-x86_64.sh进入安装,注意当前默认的安装目录为/root/anaconda3,需要切换为/opt/anaconda3。安装最后询问你需不需要执行初始化,这里选择no。

  1. curl -o Anaconda3-2024.10-1-Linux-x86_64.sh https://repo.anaconda.com/archive/Anaconda3-2024.10-1-Linux-x86_64.sh
复制代码
3. 在/ect/modulefiles里新建一个anaconda3的目录,里面根据conda的版本(如这里为24.9.2,可通过conda --version查看conda版本)新建一个名为24.9.2.lua的Anacond配置文件,因为配置这些文件时我们习惯上使用“程序名/版本”这样的方式来区分不同程序,以及相同程序但不同版本的模块文件。
  1. whatis("Anaconda3 24.9.2 & Python 3.9.21")

  2. local base = pathJoin("/opt", myModuleName())

  3. setenv("ANACONDA_ROOT",base)
  4. prepend_path("PATH",pathJoin(base,"bin"))

  5. -- this happens at load
  6. execute{cmd="source " .. base .. "/etc/profile.d/conda."..myShellType(),modeA={"load"}}
  7. execute{cmd="conda activate base",modeA={"load"}}

  8. -- this happens at unload
  9. if (myShellType() == "csh") then
  10.   -- csh sets these environment variables and an alias for conda
  11.   cmd = "unsetenv CONDA_EXE; unsetenv _CONDA_ROOT; unsetenv _CONDA_EXE; " ..
  12.         "unsetenv CONDA_SHLVL; unalias conda"
  13.   execute{cmd="conda deactivate",modeA={"unload"}}
  14.   execute{cmd=cmd, modeA={"unload"}}
  15. end
  16. if (myShellType() == "sh") then
  17.   -- bash sets environment variables, shell functions and path to condabin
  18.   if (mode() == "unload") then
  19.     remove_path("PATH", pathJoin(base,"condabin"))
  20.   end
  21.   cmd = "unset CONDA_EXE; unset _CE_CONDA; unset _CE_M; " ..
  22.         "unset -f __conda_activate; unset -f __conda_reactivate; " ..
  23.         "unset -f __conda_hashr; unset CONDA_SHLVL; unset _CONDA_EXE; " ..
  24.         "unset _CONDA_ROOT; unset -f conda"
  25.   execute{cmd="conda deactivate",modeA={"unload"}}
  26.   execute{cmd=cmd, modeA={"unload"}}
  27. end

  28. family("python")
复制代码
在该文件中,我们仅需要修改第三行“local base = pathJoin("/opt", myModuleName())”中的“/opt”为自己的Anaconda所安装的位置。另外,当前文件中使用了“execute{cmd="conda activate base",modeA={"load"}}”,这也就是说当我们用module load anaconda3调用Anaconda时,将会自动进入base环境。假如在调用anaconda3时想直接进入其他环境,那么只需要将这里的base替换为其他的环境即可。如果不想自动进入base则直接把该行删除就行。
    当运行module unload anaconda3命令时,这里还额外使用了“execute{cmd="conda deactivate",modeA={"unload"}}”,使得Anaconda先退出当前环境(如base)之后再取消其环境变量定义。注意的一点,当module unload anaconda3时假如当前的环境不是base,而是通过比如conda activate ase进入了名为ase的环境,那么首先需要自己手动执行conda deactivate来退回到base,然后再执行module unload anaconda3,这样才能完全退出anaconda3.



评分 Rate

参与人数
Participants 4
eV +16 收起 理由
Reason
snljty2 + 5 好物!
卡开发发 + 5 欢迎讨论
sobereva + 5
guoguoping199 + 1 好物!

查看全部评分 View all ratings

自由发挥,野蛮生长

158

帖子

2

威望

3543

eV
积分
3741

Level 5 (御坂)

2#
发表于 Post on 2024-12-28 18:07:35 | 只看该作者 Only view this author
Lmod 安装好后,可以用$LMOD_DIR/sh_to_modulefile[size=1.1em] 生成各类软件的 modulefile,且支持 lua 和 tcl。以 Anaconda3-2024.06.1为例,安装位置/lustre/opt/apps/anaconda/3/2024.06.1。编写一个脚本 1.sh
  1. eval "$(/lustre/opt/apps/anaconda/3/2024.06.1/bin/conda shell.bash hook)"
复制代码
这个具体的可以在安装 Anaconda完成后的界面中看到。

1. 生成 lua modulefile
  1. $LMOD_DIR/sh_to_modulefile ./1.sh > 1.lua
复制代码

2. 生成 tcl modulefile
  1. $LMOD_DIR/sh_to_modulefile  --to TCL --output 1.tcl ./1.sh
复制代码


生成的两类 modulefile 都支持 conda activate/deactivate。

习惯 environment module 的也可以由module sh-to-mod bash 1.sh生成 tcl modulefile 统一由Lmod 管理。

评分 Rate

参与人数
Participants 3
eV +6 收起 理由
Reason
snljty2 + 3
hebrewsnabla + 2
丁越 + 1 nice

查看全部评分 View all ratings

465

帖子

1

威望

2318

eV
积分
2803

Level 5 (御坂)

3#
发表于 Post on 2025-1-10 15:05:04 | 只看该作者 Only view this author
之前从 https://www.blopig.com/blog/2023/03/the-ultimate-modulefile-for-conda/ 看到过一个Environment Modules配置文件,给Anaconda写的。我之前用的集群是用的Lmod,现在用的集群是用的Environment Modules。如果是自己搭建集群的话,肯定是推荐用Lmod,我个人感觉Lmod的配置文件的语法学起来较容易。现在我一般在集群上尽量用PDM( https://pdm-project.org/en/latest/ )替代Anaconda,主要是因为Anaconda这家公司在2024年的一些变化( https://www.datacamp.com/blog/navigating-anaconda-licensing )。

我给PDM写的Environment Modules配置文件如下:
  1. #%Module1.0#####################################################################
  2. ##
  3. ## modules pdm/2.22.0
  4. ##
  5. ## /home/USERNAME/modulefiles/pdm/2.22.0. Sample pdm module.
  6. ##
  7. proc ModulesHelp { } {
  8.         global version topdir

  9.         puts stderr "PDM/$version - sets the environment for PDM $version"
  10.         puts stderr "\nThe software has been installed to the following directory $topdir\n"
  11. }

  12. module-whatis   "PDM"
  13. module-whatis   "Website: https://pdm-project.org/en/latest/"
  14. module-whatis   "Version: 2.22.0"

  15. # for Tcl script use only
  16. set     version         2.22.0
  17. set     topdir          /home/USERNAME/software/pdm-2.22.0

  18. conflict pdm
  19. module load python/3.12.8

  20. prepend-path    PATH                ${topdir}/bin

  21. unsetenv        PYTHONPATH
  22. setenv          PYTHONPATH          ${topdir}/venv/lib/python3.12/site-packages

  23. unsetenv        PYTHONUSERBASE
  24. setenv          PYTHONUSERBASE      ${topdir}/venv

  25. unsetenv        PDM_PYPI_URL
  26. setenv          PDM_PYPI_URL        https://pypi.org/simple
复制代码
这里面的PDM_PYPI_URL这个环境变量可以参考 https://pdm-project.org/latest/reference/configuration/ 。如果所在局域网内有pypi的镜像的话(如一些高校),就修改这个环境变量。安装PDM前得有个python,我用的是从 https://github.com/astral-sh/python-build-standalone 下载的,里面不同版本的区别可以看 https://gregoryszorc.com/docs/python-build-standalone/main/running.html#obtaining-distributions 。相应的python的Environment Modules配置文件如下:
  1. #%Module1.0#####################################################################
  2. ##
  3. ## modules python/3.12.8
  4. ##
  5. ## /home/USERNAME/modulefiles/python/3.12.8. Sample python module.
  6. ##
  7. proc ModulesHelp { } {
  8.         global version topdir

  9.         puts stderr "python/$version - sets the environment for python $version"
  10.         puts stderr "\nThe software has been installed to the following directory $topdir\n"
  11. }

  12. module-whatis   "Python"
  13. module-whatis   "Website: https://www.python.org/"
  14. module-whatis   "Version: 3.12.8"
  15. module-whatis   "Source: https://github.com/astral-sh/python-build-standalone/releases/download/20241206/cpython-3.12.8+20241206-x86_64_v3-unknown-linux-gnu-pgo+lto-full.tar.zst"

  16. # for Tcl script use only
  17. set     version         3.12.8
  18. set     topdir          /home/USERNAME/software/python-3.12.8

  19. conflict python

  20. prepend-path    PATH                ${topdir}/bin

  21. prepend-path    LD_LIBRARY_PATH     ${topdir}/lib

  22. prepend-path    MANPATH             ${topdir}/share/man
复制代码





评分 Rate

参与人数
Participants 1
eV +1 收起 理由
Reason
丁越 + 1 赞!

查看全部评分 View all ratings

本版积分规则 Credits rule

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2025-8-12 17:34 , Processed in 0.145610 second(s), 21 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list