2025-01-08 - 通用人工智能技术 - RAG - 双系统 GPU直通 - 流雨声
问卷不采集个人信息,仅用于科研学习的统计,多谢各位
调查问卷: https://www.wjx.cn/vm/exIBFDM.aspx#
摘要
2025-01-08 周三 杭州 阴风阵阵
小记: 2024年的考试完结后,一下子整个人都松弛了些,但是2025年了,要给自己安排些活动了。
基础信息
1. 环境准备
操作系统:Windows 11 (保系统版本高于windows10 21H2或Windows11)
显卡:GeForce RTX 3070 8G
2. WSL2 简介
内核升级(必要): https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
# wsl 版本更新
wsl --update
# wsl 版本信息
wsl --version
# wsl 进入系统(安装默认系统后)
wsl
wsl cat /proc/version
# 系统重启
wsl --shutdown
# 查看可用子系统版本(需要动点脑筋)
wsl --list --online
# 设置 wsl 版本
wsl --set-default-version 2
# 安装指定版本的子操作系统
wsl --install -d Ubuntu-24.04
# 子系统导出
wsl --export Ubuntu-24.04 D:/linux.tar
# 子系统卸载
wsl --unregister Ubuntu-24.04
# 子系统重新导入(指定磁盘空间)
wsl --import Ubuntu-24.04 D:/Ubuntu D:/linux.tar --version 2
操作实践
1. 安装子系统
管理员打开 PowerShell ,进行如下操作:
# 安装 wsl 子系统
wsl --install -d Ubuntu-24.04
# 在WSL2中安装CUDA
官网 url: https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&Distribution=WSL-Ubuntu&target_version=2.0&target_type=deb_network
2. 安装英伟达驱动
# 驱动安装如下
wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt-get update
sudo apt-get -y install cuda-toolkit-12-6
安装完成后,配置对应的环境变量,默认是修改/root/.bashrc文件,如果你使用的是其他shell,请修改对应shll的环境变量。
export CUDA_HOME=/usr/local/cuda-12.6
export LD_LIBRARY_PATH=$CUDA_HOME/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export PATH=$CUDA_HOME/bin:$PATH
# 关联nvidia-smi
ln -s /usr/lib/wsl/lib/nvidia-smi /usr/bin/nvidia-smi
# nvidia 信息查看
nvidia-smi
3. 安装docker
# 添加 Docker 库
sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release
# 添加 Docker 的官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 添加 Docker 官方库
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" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 更新 Ubuntu 源列表
sudo apt update
# 安装 Docker
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo apt-cache madison docker-ce
sudo apt install docker-ce=5:27.4.1-1~ubuntu.24.04~noble docker-ce-cli=5:27.4.1-1~ubuntu.24.04~noble containerd.io
# 验证 Docker 服务是否在运行
sudo systemctl status docker
sudo systemctl enable docker
sudo systemctl start docker
sudo docker version
4. 安装 Docker Compose
# 安装最新版本的 docker compose
sudo curl -L "https://github.com/docker/compose/releases/download/v2.6.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 执行文件赋权
sudo chmod +x /usr/local/bin/docker-compose
# 版本查看
sudo docker-compose version
5. 配置 Docker 访问 GPU
为了让 Docker 容器中也能使用 GPU,大致步骤如下:
1)安装 nvidia-container-toolkit 组件
2)docker 配置使用 nvidia-runtime
3)启动容器时增加 --gpu 参数
- 安装 nvidia-container-toolkit
NVIDIA Container Toolkit 的主要作用是将 NVIDIA GPU 设备挂载到容器中。
# 设置依赖库
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
# 设置使用实验性包
sudo sed -i -e '/experimental/ s/^#//g' /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
# 配置使用该 runtime(仅支持新版)
sudo nvidia-ctk runtime configure --runtime=docker
# 重启 docker 生效
sudo systemctl restart docker
6. 容器 GPU 测试
# 容器 GPU 输出测试
docker run --rm --gpus all nvidia/cuda:12.4.1-cudnn-devel-ubuntu22.04 nvidia-smi
# Docker 容器来充分利用 GPU 资源
docker run -it --gpus all \
-v /mnt:/mnt \
-v /media:/media \
--name dev_cuda124 \
--ulimit memlock=-1 \
--ulimit stack=67108864 \
--ipc=host \
nvidia/cuda:12.4.1-cudnn-devel-ubuntu22.04
命令参数解析:
-it:以交互模式运行容器,方便进行操作。
--gpus all:允许容器使用主机上的所有 GPU。
-v /mnt:/mnt 和 -v /media:/media:将主机的 /mnt 和 /media 目录挂载到容器中,以便在容器中访问主机数据。
--name dev_cuda124:为容器指定名称 dev_cuda124,方便管理和识别。
--ulimit memlock=-1:取消内存锁定限制,确保程序可以锁定尽可能多的内存,适用于深度学习任务。
--ulimit stack=67108864:设置线程的最大栈大小为 64MB,避免深度学习任务中出现栈溢出问题。
--ipc=host:共享主机的 IPC 命名空间,允许容器使用主机的共享内存。
总结
至此,双系统下的 GPU 直通方案并且支持 docker 使用 GPU 能力已经完成了配置,此后就可以使用 Docker 进行 GPU 开发的代码调试了。