在实验室服务器上的时候,一般是没有 root 权限的,而服务器可能只安装了特定版本的 CUDA 和 GCC,我们就需要自己安装自己需要版本的 CUDA/GCC 来满足安装包时的环境要求。
而 Conda 除了安装 Python 的包以外,其还提供了很多其他库——比如CUDA、GCC甚至还有 COLMAP ,那么我们就可以很方便的安装自己的环境的啦!
而官方的 Conda 比较慢,一般还得自己改 channel 到 conda-forge,所以推荐使用 Mamba 来替代,其比 Conda 更快,而且命令与 Conda 一致,只需把通常用的 conda
替换成 mamba
即可。Mamba 安装地址:https://github.com/conda-forge/miniforge
1 快速安装环境
这里先附上各个版本Pytorch和CUDA的安装命令合集:
- Pytorch:https://pytorch.org/get-started/previous-versions/
- CUDA:https://anaconda.org/nvidia/cuda-toolkit
但是注意,不要直接使用里面的命令,要想获得良好的体验,请参考下面的例子:
一个简单的例子安装 Pytorch 2.3.0、CUDA 12.1、GCC/G++ 11.4:
-
安装 mamba(比 conda 更快)
wget "https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-$(uname)-$(uname -m).sh" bash Miniforge3-$(uname)-$(uname -m).sh
-
创建环境(注意:我这里修改了官方的 CUDA 版本 Pytorch 的安装命令,改变了channel 为
-c nvidia/label/cuda-12.1.0
)mamba create -n h_gs python=3.12 -y mamba activate h_gs mamba install pytorch==2.3.0 torchvision==0.18.0 torchaudio==2.3.0 pytorch-cuda=12.1 -c pytorch -c nvidia/label/cuda-12.1.0
-
安装 GCC/G++
mamba install gcc=11.4 mamba install gxx=11.4
-
安装 CUDA(注意:我这里修改了官方的 CUDA 安装命令,多了一个
-c nvidia/label/cuda-12.1.0
)mamba install nvidia/label/cuda-12.1.0::cuda-toolkit -c nvidia/label/cuda-12.1.0
可以看到以上操作有两个地方特别注意的 channel 修改,是因为混乱的 Conda 环境管理会导致原版命令出现 bug
-
Pytorch 安装的 channel 修改是为了使 pytorch-cuda 与之后我们安装的 CUDA 兼容
-
CUDA 安装的 channel 添加是为了防止其安装与版本不一样的其他CUDA库
安装 cuda-toolkit 即是安装很多个 CUDA 相关的库,直接使用官方命令安装会导致其首先查看在默认频道并安装最新版本,而不是
nvidia/label/cuda-12.1.0
中的软件包,就会安装一些最新版本的 CUDA 库,有一定出 bug 的风险。
2 环境路径问题
注意:Conda 的 CUDA,经常出现找不到 CUDA 环境的问题,以下操作可以通过将环境变量设置为激活步骤的一部分:
-
进入Conda环境目录并创建以下子目录和文件
cd $CONDA_PREFIX mkdir -p ./etc/conda/activate.d mkdir -p ./etc/conda/deactivate.d touch ./etc/conda/activate.d/env_vars.sh touch ./etc/conda/deactivate.d/env_vars.sh
-
编辑
./etc/conda/activate.d/env_vars.sh
如下#!/bin/sh export CUDA_HOME=$CONDA_PREFIX export LD_LIBRARY_PATH=$CONDA_PREFIX/lib:$LD_LIBRARY_PATH
-
编辑
./etc/conda/deactivate.d/env_vars.sh
如下#!/bin/sh unset CUDA_HOME unset LD_LIBRARY_PATH
当运行 mamba activate analytics
时,环境变量 CUDA_HOME
和 LD_LIBRARY_PATH
将设置为写入文件的值。当运行 mamba deactivate
时,这些环境变量将被删除。
这样确保了 Conda 环境激活的时候,程序可以正确找到 Conda 安装的包/库的位置
参考
https://stackoverflow.com/questions/72684130/how-to-set-the-cuda-path-in-the-conda-environment
https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html#saving-environment-variables
https://stackoverflow.com/questions/78484090/conda-cuda12-incompatibility/78843983#78843983