写点什么

毅硕 HPC | 在 HPC 集群上优雅地使用 conda

作者:INSVAST
  • 2025-12-03
    广东
  • 本文字数:4586 字

    阅读完需:约 15 分钟

毅硕HPC | 在HPC集群上优雅地使用conda

在高性能计算(HPC)的世界里,除了编写高效的代码,构建一个稳定、可复现的运行环境同样至关重要。作为 HPC 平台的技术人员,我们发现超过 50% 的用户工单都与环境配置有关。

本文将为你详细拆解 Conda 在 HPC 环境下的最佳实践,助你从“环境配置的苦海”中脱身,专注于科研本身。


一、Conda 与 HPC:为何它是你的必备技能?

1. 什么是 Conda?

简单来说,Conda 是一个开源的软件包管理系统和环境管理系统。它允许你在计算机上安装、运行和更新软件包及其依赖项,并且能够轻松地在不同的环境之间切换。

2. 为什么 HPC 用户离不开 Conda?

在个人电脑上,你可能有 Root 权限,可以随意使用 aptpip 安装全局软件。但在 HPC 集群上,环境完全不同,Conda 完美解决了以下三大痛点:

  • 用户级权限(No Root, No Problem):HPC 集群通常不向普通用户开放 Root 权限。这意味着你无法使用系统级的包管理器安装软件。Conda 允许你在自己的用户目录下安装任何软件,完全绕过系统权限限制。

  • 环境隔离(告别“依赖地狱”):你的项目 A 可能需要 Python 3.8 和 TensorFlow 1.x,而项目 B 需要 Python 3.11 和 PyTorch 2.x。如果将它们混装在一起,版本冲突在所难免。Conda 允许你为每个项目创建独立的“沙盒”环境,互不干扰。

  • 复现性保障(科研的基石):通过简单的 conda env export > environment.yml 命令,你可以导出当前环境的所有细节。无论你是换了一台超算,还是将代码分享给合作者,对方只需一行命令即可精确复现你的计算环境,确保“跑出的结果一致”。


二、HPC 实战:Conda 的安装与初始配置

1. 为什么选择 Miniconda?

很多初学者习惯下载 Anaconda,它预装了数百个科学计算包,体积庞大(几 GB)。在 HPC 环境下,这是极大的资源浪费。

推荐使用 Miniconda: 它只包含 Conda、Python 和极少量的基础包,体积小巧,按需安装,既节省了宝贵的存储空间,也减少了潜在的包冲突。

2. 关键步骤:选择合适路径进行安装

默认情况下,Conda 会安装在 $HOME 目录下。

  • 痛点: HPC 的 $HOME 目录通常有严格的配额限制(如 20GB),很快就会被撑爆。

  • 最佳实践: 请务必将 Conda 安装在你的大容量工作目录(如 /work/$USER 或 /lustre/project/$USER)。

安装演示:

下载安装脚本,使用清华源提升下载速度
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-py39_4.10.3-Linux-x86_64.sh
添加执行权限
chmod +x Miniconda3-py39_4.10.3-Linux-x86_64.sh
执行安装,使用 -p 参数指定大容量存储路径
bash Miniconda3-py39_4.10.3-Linux-x86_64.sh -p /work/zhangsan/miniconda3 -u
复制代码

3. 初始化与镜像加速

安装完成后,Conda 会提示你是否初始化。运行 conda init 后,你的 ~/.bashrc 会被修改,以便你登录时能使用 conda 命令。

提示是否运行 conda init ,选择 yes

可以看到安装成功,已经写入.bashrc 环境

核心技巧:配置国内镜像源 由于 HPC 集群通常对公网访问有限制,或者连接官方源速度极慢,配置国内镜像(如清华 TUNA)是必做的优化。

创建或修改 ~/.condarc 文件:

channels:  - defaults  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r/  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/show_channel_urls: truedefault_channels:  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r/  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/custom_channels:  conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud  msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud  bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud  menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud  pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
复制代码
  • 激活 miniconda 环境:

source ~/.bashrc
复制代码

可以看到 conda 命令已识别:

这一步能将你的下载速度从几十 KB/s 提升到满速,并解决大量的连接超时错误。


三、在 HPC 中高效管理 Conda 环境

1. 环境创建:位置决定格局

  • 基础用法: conda create -n my_env python=3.9 这会将环境创建在默认的 envs 目录下。

  • HPC 进阶用法(推荐): 使用 -p (prefix) 参数。

conda create -p /work/zhangsan/projects/test/env python=3.9
复制代码
  • 优势: 将环境直接放在项目文件夹内。这样不仅方便管理,更便于通过文件系统权限控制,与课题组其他成员共享这个环境。

2. 软件安装的“洁癖”

  • 原则: 优先使用 conda install ,当 Conda 仓库中没有时,再考虑 pip install

  • 警告: 尽量避免混合使用(即先 pip 后 conda),这极易导致库文件被覆盖或破坏。

  • HPC 特别提醒: 除非万不得已,不要在 Conda 里安装 GCC、MPI 等系统级编译工具。HPC 管理员通常已经配置好了针对硬件优化的编译器模块(Module),直接使用系统模块通常性能更好且兼容性更佳。

3. 环境激活的本质

当你运行 conda activate my_env 时,实际上是 Conda 修改了你当前的 $PATH 环境变量,将 my_env/bin 放在了最前面。理解这一点,对于后续写作业脚本至关重要。

4. 常用命令

以下是一些常用的 conda 命令,你可以尝试运行这些命令来熟悉 conda 的使用:

conda create -n py38 python=3.8:创建一个名为py38的新环境,并安装Python 3.8。conda activate py38:激活名为py38的环境。conda deactivate:退出当前激活的环境。conda install package_name:在当前环境中安装包名为package_name的包。conda remove package_name:在当前环境中卸载包名为package_name的包。conda env list:列出所有已创建的环境。conda env export > environment.yml:导出当前环境的配置信息到environment.yml文件中。conda env create -f environment.yml:根据environment.yml文件中的配置信息创建一个新的环境。
复制代码



四、从交互式到批处理:在 Slurm 作业中使用 Conda

以下场景是用户最容易出错的环节。

1. 交互式作业(调试用)

当你需要临时测试代码时,先申请一个计算节点,再激活环境:

1. 申请计算节点资源srun -p compute --pty bash
2. 像在登录节点一样激活环境conda activate my_env
3. 运行测试python test.py
复制代码

2. 批处理作业脚本(生产用)

在非交互式的 Slurm 脚本中,直接写 conda activate 往往会报错(因为 shell 初始化机制不同)。

标准 Slurm 作业脚本模板:

#!/bin/bash#SBATCH -J ai_training#SBATCH -p gpu#SBATCH -N 1#SBATCH --gres=gpu:1#SBATCH -o job_%j.out
# --- 关键部分开始 ---
# 1. 加载 HPC 系统模块(如 CUDA),利用系统优化库module load cuda/11.8
# 2. 激活 Conda 环境# 方法 A (推荐):使用 source 直接加载激活脚本# 假设你的 miniconda 安装在 /work/zhangsan/miniconda3source /work/zhangsan/miniconda3/bin/activate /work/zhangsan/projects/alphafold/env
# 或者 方法 B:先初始化 shell 再 activate (较繁琐,不推荐)# eval "$(/work/zhangsan/miniconda3/bin/conda shell.bash hook)"# conda activate my_env
# --- 关键部分结束 ---
# 3. 运行程序echo"Current Python: $(which python)"python train_model.py
复制代码

重点强调: 使用 source /path/to/activate <env_path> 是最稳健的方法,它确保了无论当前 Shell 是否初始化,环境变量都能被正确加载。


五、HPC 环境下的常见问题与调试 FAQ

1. 我的存储空间(Quota)又满了,怎么办?

Conda 会缓存所有下载的压缩包和解压后的包,长期使用会占用大量空间。

  • 检查命令: du -sh ~/.condadu -sh /work/zhangsan/miniconda3

  • 清理神器: 定期运行 conda clean -a 。它可以删除未使用的安装包和缓存,通常能瞬间释放数 GB 空间。

2. 作业脚本里提示 "conda: command not found"?

这是因为作业脚本运行在非交互式 Shell 中,默认不加载 .bashrc

  • 解决: 参照第四部分,使用绝对路径的 source /path/to/miniconda/bin/activate 方式来激活,不要依赖系统自带的 conda 命令别名。

3. 程序运行慢,或者 GPU 无法调用?

这通常是因为 Conda 安装的库(如 cudatoolkit)与 HPC 硬件驱动不匹配。

  • 解决: 采用 "Hybrid"(混合)模式。 利用 HPC 系统管理员维护的 Environment Modules 加载底层驱动(如 module load cuda/11.8 module load gcc/9.3),只用 Conda 安装上层 Python 库(如 PyTorch)。这样既能享受 Conda 的便捷,又能利用 HPC 的硬件性能。


六、卸载 Conda,回归纯净环境

1. 检查 Miniconda 是否已安装

在开始卸载之前,首先需要确认 Miniconda 是否已经在您的系统中安装。您可以通过以下命令检查:

conda info --all
复制代码

如果 Miniconda 已安装,您将看到它的安装路径和其他相关信息:

2. 退出 Miniconda 环境和终端

如果您正在使用 Miniconda 的环境,请使用以下命令退出:

conda deactivate
复制代码

可以看到(base)已不显示

同时,如果您正在使用 Miniconda 的终端,请关闭它。

3. 卸载 Miniconda

要卸载 Miniconda,请按照以下步骤操作:


a)删除 Miniconda 安装目录

找到 Miniconda 的安装目录,通常位于/home/用户名/miniconda3/usr/local/miniconda 。 使用以下命令删除该目录:

sudo rm -rf /path/to/miniconda
复制代码

请将 /path/to/miniconda 替换为您的实际安装路径。


b)删除 Miniconda 的配置文件

Miniconda 在安装过程中会创建一些配置文件,如 .bashrc .profile 中的别名。您需要编辑这些文件,删除 Miniconda 相关的配置。以下是编辑 .bashrc 文件的示例:

nano ~/.bashrc
复制代码

在打开的文件中,查找类似于以下内容的行,并将其删除:

# >>> conda initialize >>># !! Contents within this block are managed by 'conda init' !!__conda_setup="$('/opt/miniconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"if [ $? -eq 0 ]; then    eval "$__conda_setup"else    if [ -f "/opt/miniconda3/etc/profile.d/conda.sh" ]; then        . "/opt/miniconda3/etc/profile.d/conda.sh"    else        export PATH="/opt/miniconda3/bin:$PATH"    fifiunset __conda_setup# <<< conda initialize <<<
复制代码

保存并关闭文件。


c)删除 Miniconda 的环境

使用以下命令删除所有 Miniconda 环境:

conda env remove --name '*'
复制代码

这将删除所有以 * 结尾的环境。

4. 清理残留文件

在卸载 Miniconda 后,可能还会有一些残留文件。您可以使用以下命令查找并删除这些文件:

sudo find / -name "conda" -type f -delete
复制代码

请谨慎使用此命令,因为它可能会删除系统中其他与 Conda 相关的文件。


七、结语

掌握 Conda 在 HPC 上的正确打开方式,不仅是对公共计算资源的爱护,更是提升科研效率的关键。通过本教程,你已经掌握了在 HPC 集群中从零开始部署并高效利用 Conda 的核心技能。从因地制宜的安装策略、镜像源的加速配置,到最终与 Slurm 工作流的无缝集成,这一整套工作流将使你能够:

  • 自主掌控软件环境,不再受限于系统权限。

  • 大幅提升部署效率,快速复现他人的研究成果。

  • 可靠地投入生产,将自定义环境用于大规模并行计算任务。

现在,你可以自信地在你的 HPC 项目中使用 Conda 了。不妨就从为你的下一个课题创建一个干净的 environment.yml 文件开始,让你的科研计算之旅更加规范、高效和可复现。

用户头像

INSVAST

关注

还未添加个人签名 2023-07-04 加入

还未添加个人简介

评论

发布
暂无评论
毅硕HPC | 在HPC集群上优雅地使用conda_HPC_INSVAST_InfoQ写作社区