通过LXD搭建实验室共享GPU服务器
进行深度学习实验时,经常需要使用 GPU
服务器。在不同的实验中,对 CUDA
版本等要求各不相同。为了解决这一问题,可以通过 Docker
技术从而实现多套环境随意使用。但让所有用户都能够深入理解 Docker
可能较为困难,因此需要寻求其他方案。直觉的解决方法便是利用虚拟化技术给每位同学提供一个虚拟机。但鉴于虚拟化技术的性能损耗和 GPU
共用方面的困难,因此不太现实。
而 LXD
这一系统容器方案恰好可以实现这一目标。它基于容器技术,开销小,支持 GPU
共享,因此极为适合这一场景。通过这一技术还带来了一些额外的优势,如:用户所有操作均在容器中进行,避免了对宿主机系统的破坏;提供快照功能,可以在误操作导致容器损坏时恢复。
下面对搭建过程整理后汇总如下,作为记录。宿主系统为从 Ubuntu 14.04 LTS
持续升级达到的 Ubuntu 20.04 LTS
,中间经过大量安装软件等操作。若在全新安装的系统上出现无法定位包等情况,需要逐个解决。搭建过程中的踩坑过程略过,其中的操作可能有前后相关性,不能单独查看某一部分而直接进行复现。
LXD安装与初始化
通过
snap
安装LXD
,需要注意的是Ubuntu Server
版本系统自带LXD
软件包,无需再次安装1
sudo snap install lxd
初始化
LXD
服务1
2
3
4
5sudo lxd init
# 根据需要调整选项(大多数选项使用默认值即可)
# Name of the storage backend to use (dir, lvm, zfs, ceph, btrfs) [default=zfs]: dir
# What IPv4 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]: 192.168.10.66/24
# What IPv6 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]: none将当前用户添加到
lxd
用户组1
2sudo adduser $(whoami) lxd
newgrp lxd添加腾讯云镜像源,也可以使用清华等其他镜像源
1
lxc remote add qcloud-images https://mirrors.cloud.tencent.com/lxc-images/ --protocol=simplestreams --public
宿主机显卡驱动和CUDA工具包安装
卸载驱动并重启宿主机系统
1
2
3sudo apt remove --purge *nvidia* *cublas* *cuda*
lsmod | grep nouveau
# sudo reboot若上述命令输出中包含
nouveau
,则将需要将下列内容添加到/etc/modprobe.d/blacklist.conf
中再重启1
2
3
4
5
6blacklist amd76x_edac #this might not be required for x86 32 bit users.
blacklist vga16fb
blacklist nouveau
blacklist rivafb
blacklist nvidiafb
blacklist rivatv安装驱动后重启系统,并通过
nvidia-smi
检查安装结果。若安装正常,nvidia-smi
命令会输出系统中的显卡信息1
2
3
4# 若安装过程发现dmks相关的错误,在/var/lib/dkms/中删除nvida相关的文件夹,并重新执行"卸载-安装"的流程即可
sudo ubuntu-drivers install
sudo reboot
# nvidia-smi若所有用户都通过
LXD
容器或Docker
容器使用系统,宿主机配置到这一步就完成了。下面的步骤一是为了让部分直接使用宿主机的用户能够直接使用,二是对容器中的安装过程进行测试,形成配置方案。安装
CUDA
工具包。为了简化容器中安装CUDA
的工作,这里在宿主机安装大部分版本的CUDA
,完成后将文件汇总后作为公共资源挂载到容器中。容器中需要安装时只需复制文件并配置相关的环境变量即可使用,无需重新安装。若使用ZFS
等Copy-On-Write
存储后端,所有用户的CUDA
文件只占用一份空间。这里传入--silent
--toolkit
参数保证安装过程中只安装cuda-toolkit
而不安装驱动和示例文件,传入--override
参数则忽略对gcc
版本等的检查,保证文件能正常生成。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19# 安装依赖
sudo apt install -y perl
# 下载cuda安装包文件并执行安装(注意不要安装其中的驱动)
# Note: 若空间不足可将目录移动至其他分区中,在原来的位置放置软链接
sudo sh cuda_11.4.2_470.57.02_linux.run --silent --toolkit --override
sudo sh cuda_11.3.1_465.19.01_linux.run --silent --toolkit --override
sudo sh cuda_11.2.2_460.32.03_linux.run --silent --toolkit --override
sudo sh cuda_11.1.1_455.32.00_linux.run --silent --toolkit --override
sudo sh cuda_11.0.3_450.51.06_linux.run --silent --toolkit --override
sudo sh cuda_10.2.89_440.33.01_linux.run --silent --toolkit --override
sudo sh cuda_10.1.105_418.39_linux.run --silent --toolkit --override
sudo sh cuda_10.0.130_410.48_linux --silent --toolkit --override
sudo sh cuda_9.2.148_396.37_linux --silent --toolkit --override
sudo sh cuda_9.1.85_387.26_linux --silent --toolkit --override
sudo sh cuda_9.0.176_384.81_linux-run --silent --toolkit --override
sudo sh cuda_8.0.61_375.26_linux-run --silent --toolkit --override
# 配置一个默认的CUDA版本
sudo rm /usr/local/cuda
sudo ln -s /usr/local/cuda-10.0 /usr/local/cuda配置环境变量,使用不带参数的方式执行安装时可以发现输出中有这样的内容:
1
2
3# Please make sure that
# - PATH includes /usr/local/cuda-11.4/bin
# - LD_LIBRARY_PATH includes /usr/local/cuda-11.4/lib64, or, add /usr/local/cuda-11.4/lib64 to /etc/ld.so.conf and run ldconfig as root我们在
/etc/profile
文件中追加内容来添加环境变量1
2export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH添加完成后重新登录即可看到对应的环境变量已生效
安装各版本
gcc
供编译CUDA
程序时使用,下面的方法中将各版本优先级设为版本号,因此默认使用版本号的gcc-9
和g++-9
1
2
3
4
5
6
7
8
9
10
11
12
13
14# 通过update-alternatives可以快速切换gcc版本
sudo apt install -y gcc-5 g++-5 gcc-6 g++-6 gcc-7 g++-7 gcc-8 g++-8 gcc-9 g++-9
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 5
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 6
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 7
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 8
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 9
sudo update-alternatives --display gcc
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 5
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-6 6
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 7
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-8 8
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-9 9
sudo update-alternatives --display g++将
CUDA
版本对应的gcc
和g++
链接到CUDA
目录中,完成后宿主机切换CUDA
版本无需更新gcc
和g++
默认版本1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27# 下文的容器使用 Ubuntu 18.04 作为基础,其软件仓库中有5到8版本的 gcc 和 g++
# 因此需要使用 gcc-4 的 cuda-8.0 内容已注释
# CUDA 11.4 等可以使用更高版本 gcc 的也只链接到 gcc-8
sudo ln -s /usr/bin/gcc-8 /usr/local/cuda-11.4/bin/gcc
sudo ln -s /usr/bin/gcc-8 /usr/local/cuda-11.3/bin/gcc
sudo ln -s /usr/bin/gcc-8 /usr/local/cuda-11.2/bin/gcc
sudo ln -s /usr/bin/gcc-8 /usr/local/cuda-11.1/bin/gcc
sudo ln -s /usr/bin/gcc-8 /usr/local/cuda-11.0/bin/gcc
sudo ln -s /usr/bin/gcc-8 /usr/local/cuda-10.2/bin/gcc
sudo ln -s /usr/bin/gcc-8 /usr/local/cuda-10.1/bin/gcc
sudo ln -s /usr/bin/gcc-7 /usr/local/cuda-10.0/bin/gcc
sudo ln -s /usr/bin/gcc-7 /usr/local/cuda-9.2/bin/gcc
sudo ln -s /usr/bin/gcc-6 /usr/local/cuda-9.1/bin/gcc
sudo ln -s /usr/bin/gcc-6 /usr/local/cuda-9.0/bin/gcc
#sudo ln -s /usr/bin/gcc-4 /usr/local/cuda-8.0/bin/gcc
sudo ln -s /usr/bin/g++-8 /usr/local/cuda-11.4/bin/g++
sudo ln -s /usr/bin/g++-8 /usr/local/cuda-11.3/bin/g++
sudo ln -s /usr/bin/g++-8 /usr/local/cuda-11.2/bin/g++
sudo ln -s /usr/bin/g++-8 /usr/local/cuda-11.1/bin/g++
sudo ln -s /usr/bin/g++-8 /usr/local/cuda-11.0/bin/g++
sudo ln -s /usr/bin/g++-8 /usr/local/cuda-10.2/bin/g++
sudo ln -s /usr/bin/g++-8 /usr/local/cuda-10.1/bin/g++
sudo ln -s /usr/bin/g++-7 /usr/local/cuda-10.0/bin/g++
sudo ln -s /usr/bin/g++-7 /usr/local/cuda-9.2/bin/g++
sudo ln -s /usr/bin/g++-6 /usr/local/cuda-9.1/bin/g++
sudo ln -s /usr/bin/g++-6 /usr/local/cuda-9.0/bin/g++
#sudo ln -s /usr/bin/g++-4 /usr/local/cuda-8.0/bin/g++安装
cuDNN
。由于CUDA
与cuDNN
版本并不一一对应,宿主机不进行安装,此处只作为原始安装方法的记录。可以看到其安装方式可以简单理解为”解压-复制-添加可运行标志”的步骤。因此,同样可以下载常用版本并作为资源挂载到用户容器中供用户快速安装。1
2
3
4tar -xzvf cudnn-x.x-linux-x64-v8.x.x.x.tgz
sudo cp cuda/include/cudnn*.h /usr/local/cuda/include
sudo cp -P cuda/lib64/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*
LXD容器模板配置(Ubuntu/18.04)
创建容器的公共
profile
。 将添加GPU
设备、挂载共享文件夹等内容放在profile
中以便快速配置用户容器。注意添加共享文件夹时可以传入readonly=true
来防止容器中对公共内容进行修改。1
2
3
4
5
6
7
8
9
10
11
12
13
14lxc profile create profile-template
# 添加显卡设备
lxc profile device add profile-template gpu gpu
# 添加nvidia运行时(与security.privileged冲突,不要使用)
#lxc profile set profile-template nvidia.runtime=true
# 设置为特权容器
lxc profile set profile-template security.privileged=true
# 允许容器嵌套(运行docker容器等)
lxc profile set profile-template security.nesting=true
# 添加公共目录
lxc profile device add profile-template common-resource disk source=<common-resource> path=/common-resource readonly=true
lxc profile device add profile-template common-path disk source=<common-share> path=/common-share
# 添加banner文件以实现用户登录时输出引导信息
lxc profile device add profile-template lxd-banner disk source=<banner-file> path=/etc/motd readonly=true启动一个容器作为模板。后面将在这一容器上进行软件包安装等修改,用户容器将以容器模板的一个快照作为基础进行创建。容器启动后将公共
profile
附加到容器上。1
lxc launch qcloud-images:ubuntu/18.04 -p default -p profile-template vm-template
对容器进行一些简单的配置。需要注意的是
lxc exec
命令下方的命令不能继续执行。因此如果以复制的方式执行,复制的内容中若有lxc exec
命令,就需要将lxc exec
作为单次复制的最后一行。后面的内容需要下一次再复制后贴进终端中执行。从下面的内容中可以看出LXD
容器中是可以安装图形界面的,但存在一些问题需要修复。(文章 shenuiuin/LXD_GPU_SERVER: 实验室GPU服务器的LXD虚拟化 中提供了安装图形界面的可行方案,可由用户自行完成。)本文中不进行图形界面的安装。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28# 配置腾讯云镜像源
wget https://mirrors.cloud.tencent.com/repo/ubuntu18_sources.list -O sources.list.tmp
lxc file push sources.list.tmp vm-template/etc/apt/sources.list
lxc exec vm-template -- chown root:root /etc/apt/sources.list
rm -f sources.list.tmp
# 设置时区
lxc exec vm-template -- timedatectl set-timezone Asia/Shanghai
# 更新仓库缓存
lxc exec vm-template -- apt update
# 安装SSH服务
lxc exec vm-template -- apt install -y ssh
# 安装远程桌面(存在一定的问题,如:Dock不能正常展示。不安装)
#lxc exec vm-template -- apt install -y --no-install-recommends ubuntu-desktop xrdp
#lxc exec vm-template -- adduser xrdp ssl-cert
# 安装常用的软件包(libjpeg8-dev,zliblg-dev为python的matplotlib包的依赖)
lxc exec vm-template -- apt install -y python3 python3-dev python3-pip python3-venv python3-wheel libjpeg8-dev zlib1g-dev
# 配置PyPI镜像
cat > pip.conf.tmp << "EOF"
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
EOF
lxc exec vm-template -- mkdir /home/ubuntu/.pip
lxc file push pip.conf.tmp vm-template/home/ubuntu/.pip/pip.conf
lxc exec vm-template -- chown -R ubuntu:ubuntu /home/ubuntu/.pip
rm pip.conf.tmp为容器安装与宿主机相同版本的显卡驱动。需要注意的是,宿主机更新显卡驱动时需要将所有容器的驱动版本一同更新。若不需要在
Docker
容器中使用GPU
,也可以将容器配置为security.privileged = false nvidia.runtime=true
从而直接使用宿主机驱动而不需要在容器中再进行驱动的安装。1
2
3
4
5
6
7# 获取显卡驱动版本
apt list --installed | grep nvidia-driver
# nvidia-driver-470/focal-security,now 470.63.01-0ubuntu0.20.04.2 amd64 [installed]
# 根据上面得到的驱动版本从NVidia官网下载相同版本的驱动安装文件。如上面的输出表示当前版本为 470.63.01 .则从Nvidia官网得到如下下载链接
# https://cn.download.nvidia.com/XFree86/Linux-x86_64/470.63.01/NVIDIA-Linux-x86_64-470.63.01.run
# 下面已经将驱动安装文件放到 common-resource 中
lxc exec vm-template -- bash /common-resource/packages/NVIDIA-Linux-x86_64-470.63.01.run --silent --no-kernel-module配置
CUDA
相关内容。可以看到其中主要有软件安装和坏境变量配置两部分。部分版本的CUDA
安装文件需要perl
才能运行,这里为用户进行安装以方便部分自行安装CUDA
的用户。而gcc
和g++
则为安装时会进行检查的软件包,且上面的CUDA
目录中已添加了链接,因此在容器中也进行安装,以免出现损坏的软链接。环境变量与上面宿主机安装一致,为添加PATH
变量和LD_LIBRARY_PATH
变量。需要注意的是,部分版本的CUDA
中附带了CUPTI
等额外包,也需要配置到LD_LIBRARY_PATH
变量中,这里不进行配置,由用户自行配置。1
2
3
4
5
6
7
8
9
10
11# 安装相关软件包
lxc exec vm-template -- apt install -y perl gcc-6 g++-6 gcc-7 g++-7 gcc-8 g++-8
# 配置CUDA相关的环境变量
lxc file pull vm-template/etc/profile profile.tmp
cat >> profile.tmp << "EOF"
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
EOF
lxc file push profile.tmp vm-template/etc/profile
rm profile.tmp
lxc exec vm-template -- chown root:root /etc/profile安装
Docker
及Nvidia-Docker
。利用Docker
可以快速启动一些应用,省去了复杂的配置过程。1
2
3
4
5
6lxc exec vm-template -- apt install -y ca-certificates curl gnupg lsb-release
lxc exec vm-template -- bash -c 'curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg'
lxc exec vm-template -- bash -c 'echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null'
lxc exec vm-template -- bash -c 'distribution=$(. /etc/os-release;echo $ID$VERSION_ID) && curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | apt-key add - && curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | tee /etc/apt/sources.list.d/nvidia-docker.list'
lxc exec vm-template -- apt update
lxc exec vm-template -- apt install -y docker-ce docker-ce-cli containerd.io nvidia-docker2进入容器环境执行一些简单的配置。这里主要是对用户密码进行了配置。这里应该也是可以在直接在容器外进行操作的,但个人尝试时未成功,因此采用进入容器进行修改的方式。
1
2
3
4
5
6lxc exec vm-template bash
# 配置密码
(echo ubuntu; echo ubuntu) | passwd ubuntu
# 密码过期(下次登录强制修改密码)
passwd -e ubuntu
exit创建快照。快照创建后可以关闭容器以节省系统资源,这里不写入相关内容。
1
lxc snapshot vm-template snap-initial
将上一步生成的模板容器快照发布为容器模板,后续可以以此为模板创建用户容器。
1
lxc publish vm-template/snap-initial --alias vm-template
用户容器创建
创建用户私有目录用于挂载到容器中。用户在使用容器时应当将文件放入挂载的目录中,避免快照时保存不必要的文件占用过多空间。
1
mkdir ~/lxd-workplace
创建用户私有
profile
。其中进行了用户私有目录的挂载,并将容器中的ubuntu
用户映射为宿主机中的用户,因此在容器内部和外部均可进行读写,没有权限问题。另外,将容器中的部分端口映射到了宿主机上。若宿主机拥有公网IP
,用户即可直接登录容器。若宿主机在内网中,通过SSH
隧道方式访问,则省去了一层SSH
隧道。配置中端口均以PORT_BASE + x
的形式形成,可以给用户分配一个端口范围,避免用户间端口冲突。1
2
3
4
5
6
7
8
9
10
11
12
13lxc profile create profile-$(whoami)
# 挂载私有目录
lxc profile device add profile-$(whoami) workplace disk source=$HOME/lxd-workplace path=/home/ubuntu/workplace
# 设置用户id映射实现目录互通(特权容器不需要,也不会生效)
lxc profile set profile-$(whoami) raw.idmap="both $(id -u) $(id -u)"
# 设置端口起点环境变量用于配置端口映射
export PORT_BASE=31000
# 映射SSH端口
lxc profile device add profile-$(whoami) proxy-ssh proxy listen=tcp:0.0.0.0:`expr $PORT_BASE + 22` connect=tcp:127.0.0.1:22
# 映射RDP端口
lxc profile device add profile-$(whoami) proxy-xrdp proxy listen=tcp:0.0.0.0:`expr $PORT_BASE + 89` connect=tcp:127.0.0.1:3389
# 映射JupyterLab
lxc profile device add profile-$(whoami) proxy-jupyter proxy listen=tcp:0.0.0.0:`expr $PORT_BASE + 88` connect=tcp:127.0.0.1:8888从模板创建用户容器,并将公共
profile
添加到容器。并将容器中的ubuntu用户uid
gid
修改至与宿主机用户一致。1
2
3lxc launch vm-template -p default -p profile-template vm-$(whoami)
lxc exec vm-$(whoami) -- usermod -u $(id -u) ubuntu
lxc exec vm-$(whoami) -- groupmod -g $(id -g) ubuntu将用户私有profile添加到容器
1
lxc profile add vm-$(whoami) profile-$(whoami)
重启容器使配置生效
1
lxc restart vm-$(whoami)
用户使用教程
用户登录系统时,通过自己的 SSH
端口号,以 ubuntu
用户登录到容器系统中。
第一次登录成功后,按系统提示输入当前密码(ubuntu
)和新密码对密码进行修改(输入时无提示,输入完回车即可)。修改完成后自动断开连接,使用新密码重新登录即可正常使用。
使用系统时,可以简单地理解为使用虚拟机。可以自由地进行软件安装、删除等操作。可以感知的区别主要有下面几点:1. 网络。容器中可以正常上网,但经过了多层 NAT
,外部不能直接连接。2. 内核。无法对 Linux Kernel
进行修改,因此虚拟机等软件可能无法使用。
容器中目录的说明:1. /common-resource
. 此目录为只读的共享资源目录,其中提供了 CUDA
、cuDNN
和一些数据集等。2. /common-share
. 此目录为可读写的共享资源目录,可用于与其它用户共享资源,注意及时清理。3. ~/workplace
. 此目录为用户的主要工作目录,进行实验时应将数据、环境等放在此目录中。
下面对一些软件配置进行举例:
安装 CUDA
和 cuDNN
共享资源目录中提供了一些常见的 CUDA
和 cuDNN
版本。若所需版本列在下面的表格中,只需按表格中的命令依次安装 CUDA
和 cuDNN
即可。容器中已在 /etc/profile
中配置了 PATH
和 LD_LIBRARY_PATH
环境变量。如果安装 tensorflow
等软件时对环境变量的要求与 cuda-toolkit
不一致,修改后重新登录即可。
Note: tensorflow 2.6.0 要求将 CUPTI 也添加到 LD_LIBRARY_PATH 环境变量中
CUDA版本 | CUDA安装命令 |
---|---|
11.4 | sudo rm -rf /usr/local/cuda && sudo cp -r /common-resource/cuda-local/cuda-11.4 /usr/local/cuda |
11.3 | sudo rm -rf /usr/local/cuda && sudo cp -r /common-resource/cuda-local/cuda-11.3 /usr/local/cuda |
11.2 | sudo rm -rf /usr/local/cuda && sudo cp -r /common-resource/cuda-local/cuda-11.2 /usr/local/cuda |
11.1 | sudo rm -rf /usr/local/cuda && sudo cp -r /common-resource/cuda-local/cuda-11.1 /usr/local/cuda |
11.0 | sudo rm -rf /usr/local/cuda && sudo cp -r /common-resource/cuda-local/cuda-11.0 /usr/local/cuda |
10.2 | sudo rm -rf /usr/local/cuda && sudo cp -r /common-resource/cuda-local/cuda-10.2 /usr/local/cuda |
10.1 | sudo rm -rf /usr/local/cuda && sudo cp -r /common-resource/cuda-local/cuda-10.1 /usr/local/cuda |
10.0 | sudo rm -rf /usr/local/cuda && sudo cp -r /common-resource/cuda-local/cuda-10.0 /usr/local/cuda |
9.2 | sudo rm -rf /usr/local/cuda && sudo cp -r /common-resource/cuda-local/cuda-9.2 /usr/local/cuda |
9.1 | sudo rm -rf /usr/local/cuda && sudo cp -r /common-resource/cuda-local/cuda-9.1 /usr/local/cuda |
9.0 | sudo rm -rf /usr/local/cuda && sudo cp -r /common-resource/cuda-local/cuda-9.0 /usr/local/cuda |
CUDA版本 | cuDNN版本 | cuDNN安装命令 |
---|---|---|
11.4 | 8.2.2.26 | export cudnn_path=/common-resource/cudnn-local/cudnn-11.4-v8.2.2.26 sudo cp $cudnn_path/include/cudnn*.h /usr/local/cuda/include && sudo cp -P $cudnn_path/lib64/libcudnn* /usr/local/cuda/lib64 && sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn* |
11.2 | 8.1.1.33 | export cudnn_path=/common-resource/cudnn-local/cudnn-11.2-v8.1.1.33 sudo cp $cudnn_path/include/cudnn*.h /usr/local/cuda/include && sudo cp -P $cudnn_path/lib64/libcudnn* /usr/local/cuda/lib64 && sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn* |
11.0 | 8.0.5.39 | export cudnn_path=/common-resource/cudnn-local/cudnn-11.0-v8.0.5.39 sudo cp $cudnn_path/include/cudnn*.h /usr/local/cuda/include && sudo cp -P $cudnn_path/lib64/libcudnn* /usr/local/cuda/lib64 && sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn* |
10.2 | 8.2.2.26 | export cudnn_path=/common-resource/cudnn-local/cudnn-10.2-v8.2.2.26 sudo cp $cudnn_path/include/cudnn*.h /usr/local/cuda/include && sudo cp -P $cudnn_path/lib64/libcudnn* /usr/local/cuda/lib64 && sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn* |
10.1 | 7.6.5.32 | export cudnn_path=/common-resource/cudnn-local/cudnn-10.1-v7.6.5.32 sudo cp $cudnn_path/include/cudnn*.h /usr/local/cuda/include && sudo cp -P $cudnn_path/lib64/libcudnn* /usr/local/cuda/lib64 && sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn* |
10.0 | 7.4.1.5 | export cudnn_path=/common-resource/cudnn-local/cudnn-10.0-v7.4.1.5 sudo cp $cudnn_path/include/cudnn*.h /usr/local/cuda/include && sudo cp -P $cudnn_path/lib64/libcudnn* /usr/local/cuda/lib64 && sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn* |
9.1 | 7 | export cudnn_path=/common-resource/cudnn-local/cudnn-9.1-v7 sudo cp $cudnn_path/include/cudnn*.h /usr/local/cuda/include && sudo cp -P $cudnn_path/lib64/libcudnn* /usr/local/cuda/lib64 && sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn* |
Python 虚拟环境创建与使用
通过虚拟环境,可以在系统中维护多套 Python
运行环境,对于需要运行多套代码等场景非常有用。
1 | python3 -m venv <venv-path> |
Jupyterlab 安装与使用
由于已经添加了端口映射,用户只需连接到宿主机的对应端口即可使用设定的密码登录 Jupyterlab
进行使用。若宿主机本身就不能直接连通,则仍需配置 SSH
隧道。
1 | python3 -m venv ~/workplace/system-venv |
参考资料
LXC/LXD端口映射到主机_tcliuwenwen的博客-程序员宅基地_lxc 端口映射 - 程序员宅基地
lxc - How to remove default LXD storage? - Stack Overflow
How to Install Remote Desktop (Xrdp) on Ubuntu 18.04 | E2E Networks Knowledgebase
GPU data processing inside LXD | Ubuntu
CUDA Toolkit 11.4 Update 2 Downloads | NVIDIA Developer
Broken Nvidia driver or: clean up old DKMS modules
CUDA incompatible with my gcc version - Stack Overflow
Fail during installation of Pillow (Python module) in Linux - Stack Overflow
容器与云|LXD 2.0 系列(十一):LXD 和 OpenStack
AdaptiveScale/lxdui: LXDUI is a web UI for the native Linux container technology LXD/LXC
NVIDIA Container Runtime | NVIDIA Developer
Enabling GPUs in the Container Runtime Ecosystem | NVIDIA Developer Blog
Install LXD on Ubuntu 20.04 LTS using apt - nixCraft