简洁镜像制作与使用
在算力平台中,会将环境(镜像),数据,算力(GPU结点)分离。我们通常将Cuda、Conda环境装在镜像中,这样能在多个算力结点中迁移,但即使只安装了基础的Cuda+Conda+PyTorch的镜像也要10GB左右,在迁移的时候会浪费时间和资源,也不便从一个平台迁移到另一个平台。因此尝试将环境从镜像中拆分出来,放在数据盘里。
1. 初始镜像
我使用了nvidia提供的带有nvidia-driver和cuda-toolkit的镜像。我们的平台上的一些基础镜像的nvidia-driver没有正确安装,所以直接下载官方的。
docker pull nvidia/cuda:12.6.3-cudnn-runtime-ubuntu20.04
docker save -o base_image.tar nvidia/cuda:12.6.3-cudnn-runtime-ubuntu20.04
2. 补充镜像
上传这个tar包到平台,移除/usr/local/cuda*
(省空间,可选,同时证明后续的Pytorch没有依赖系统级的Cuda ToolKit),然后补充ssh,vim等软件包。
# 按需补上sudo
apt-get update
apt-get install vim
apt install openssh-server
service ssh start
# 配置ssh允许root密码登录等
vim /etc/ssh/sshd_config
service ssh restart
3. 安装Conda到个人目录
在Conda官网下载Conda,然后bash直接运行,安装路径选到个人目录
wget https://repo.anaconda.com/archive/Anaconda3-2024.10-1-Linux-x86_64.sh
bash Anaconda3-2024.10-1-Linux-x86_64.sh
在个人目录写一个conda_init.sh,系统找不到conda就跑一下这个sh就行。
# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/224010093/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
eval "$__conda_setup"
else
if [ -f "/224010093/anaconda3/etc/profile.d/conda.sh" ]; then
. "/224010093/anaconda3/etc/profile.d/conda.sh"
else
export PATH="/224010093/anaconda3/bin:$PATH"
fi
fi
unset __conda_setup
# <<< conda initialize <<<
conda init
到这里可以把现在的镜像保存一份了,下次启动直接什么都能用。
4. 在虚拟环境安装cuda-toolkit和cuda-nvcc
pytorch运行需要cuda-toolkit。如果没有cuda开发需求,安装cuda-toolkit,有就安装cuda-toolkit-dev。
然后要安装cuda-nvcc,大部分博文没这步,这会导致pytorch使用系统级的cuda-toolkit,虽然改环境变量可以搞定,但叫不出nvcc -V
怪难受的。
# 其实装pytorch的时候会自动装cuda-toolkit,提前装也会被覆盖掉
# 从nvidia安装的大小比conda-forge要大,应该更全面一点?
conda install cuda-toolkit=11.8 -c nvidia
conda install cuda-nvcc=11.8 -c nvidia
nvcc -V
之后再装pytorch啥的,环境都在个人文件夹下,不会导致镜像越来越膨胀。我自己做的base-image大小只有2GB。