2025-01-08 - 通用人工智能技术 - RAG - 双系统 GPU直通 - 流雨声

摘要

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 开发的代码调试了。

posted @ 2025-01-08 22:01  流雨声  阅读(167)  评论(0)    收藏  举报