【docker的gpu加速相关问题解决记录】

我把Windows WSL 2+Docker GPU加速的操作拆成3步详细步骤,跟着做就行:

步骤1:配置WSL 2+带GPU的Linux发行版

  1. 打开Windows「设置」→「应用」→「可选功能」→「更多Windows功能」,勾选「适用于Linux的Windows子系统」「虚拟机平台」,重启电脑;
  2. 打开微软应用商店,搜索"Ubuntu"(选20.04/22.04版本)并安装;
  3. 打开终端,执行wsl --set-default-version 2,再执行wsl --set-version Ubuntu 2(把Ubuntu设为WSL 2后端)。

步骤2:安装支持WSL 2的NVIDIA驱动

  1. 打开NVIDIA官网,下载「适用于WSL的NVIDIA Windows驱动程序」(不是普通驱动):
    (官网地址:https://www.nvidia.com/zh-cn/geforce/drivers/wsl)
  2. 直接安装驱动(全程默认下一步),安装完成后重启电脑。

步骤3:配置Docker Engine开启GPU支持

  1. 打开Docker Desktop,点击右上角「设置」→「Docker Engine」;
  2. 在配置文件中添加"gpu": true(注意JSON格式,逗号分隔),示例:
yaml 复制代码
{
  "experimental": true,
  "features": {
    "buildkit": true,
    "gpu": true  # 新增这一行
  },
  "registry-mirrors": ["https://registry.docker-cn.com"]
}
  1. 点击「应用并重启」,等待Docker重启完成。

验证是否成功

打开WSL的Ubuntu终端,执行docker run --rm --gpus all nvidia/cuda:11.8.0-base-ubuntu22.04 nvidia-smi,如果能显示GPU信息,说明配置成功。

要不要我帮你整理一份验证GPU加速是否生效的常用命令清单

如果NVIDIA官网"适用于WSL的驱动"页面打不开,可以换这2种方式获取驱动:

方式1:通过NVIDIA GeForce Experience安装

  1. 安装/打开「GeForce Experience」(官网:https://www.nvidia.com/zh-cn/geforce/geforce-experience/);
  2. 点击「驱动程序」→「检查更新」,它会自动检测并推荐支持WSL 2的最新驱动(不需要手动选"WSL专用",新版驱动默认包含WSL支持)。

方式2:直接用系统自带的驱动更新

  1. 右键点击Windows开始菜单→「设备管理器」;
  2. 展开「显示适配器」,右键点击你的NVIDIA显卡→「更新驱动程序」;
  3. 选择「自动搜索驱动程序」,系统会下载并安装兼容的最新驱动(需确保系统是Win11 22H2及以上/Win10 21H2及以上,这些版本的驱动默认支持WSL 2)。

验证驱动是否支持WSL:安装后打开WSL终端,执行nvidia-smi(不需要装任何包),如果能显示GPU信息,说明驱动已透传成功。

要不要我帮你确认你的Windows版本是否支持WSL 2 GPU加速

对于自己电脑环境是cuda12.9, 可以在docker安装这个版本的pytorch:

bash 复制代码
# 基础镜像:CUDA 12.9 + Python 3.9(适配CUDA 12.9)
FROM nvidia/cuda:12.9.0-cudnn-devel-ubuntu22.04

# 核心环境变量:仅保留必要配置,放弃源替换避免冲突
ENV DEBIAN_FRONTEND=noninteractive
ENV PYTHONUNBUFFERED=1
ENV PATH="/root/.local/bin:${PATH}"
# pip 国内源(仅保留pip加速,apt用官方源)
ENV PIP_INDEX_URL=https://mirrors.aliyun.com/pypi/simple/
ENV PIP_TRUSTED_HOST=mirrors.aliyun.com
ENV PIP_EXTRA_INDEX_URL=https://download.pytorch.org/whl/cu121

# 不替换apt源,仅清理缓存+更新(用官方源,牺牲速度换稳定性)
RUN apt-get clean && apt-get update -y

# 1. 添加deadsnakes源(用于安装Python 3.9)
RUN apt-get clean && apt-get update -y && \
    apt-get install -y --no-install-recommends \
    software-properties-common \
    apt-transport-https \
    ca-certificates \
    && add-apt-repository -y ppa:deadsnakes/ppa && \
    apt-get update -y

# 2. 安装Python 3.9全套依赖(从deadsnakes源)
RUN apt-get install -y --no-install-recommends \
    git \
    wget \
    python3.9 \
    python3.9-dev \
    python3.9-distutils \
    python3.9-venv \
    libglib2.0-0 \
    libsm6 \
    libxext6 \
    libxrender-dev \
    && rm -rf /var/lib/apt/lists/*

# 设置Python 3.9为默认
RUN ln -sf /usr/bin/python3.9 /usr/bin/python && \
    ln -sf /usr/bin/python3.9 /usr/bin/python3

# 安装pip(用国内源)
RUN wget https://bootstrap.pypa.io/get-pip.py && \
    python get-pip.py --no-cache-dir && \
    rm get-pip.py && \
    pip install --upgrade pip

# 设置工作目录
WORKDIR /app

# 复制依赖文件并安装
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt && \
    pip install --no-cache-dir torch==2.3.1 torchvision==0.18.1

# 复制项目代码
COPY . /app

EXPOSE 8888
CMD ["bash"]
bash 复制代码
wsl --list --verbose

# 格式:wsl --set-default <发行版名称>
wsl --set-default Debian  # 示例:将默认改为 Debian
# 或
wsl --set-default Ubuntu-22.04  # 若想默认进入 Ubuntu-22.04

wsl --configure --disable-proxy-mirroring

# 1. 停止旧容器(替换为你的容器ID/名称)
docker stop [容器ID/名称]

# 2. 删除旧容器(可选,避免冲突)
docker rm [容器ID/名称]

# 3. 重新启动容器(带 GPU 映射 + 扩容 shm)
docker run --gpus all --shm-size=8g -v D:/code/python/异常检测/FastFlow:/app -it fastflow:cu129

pip install torch==2.4.0 torchvision==0.19.0 torchaudio==2.4.0 --index-url https://download.pytorch.org/whl/cu124


# 列出所有容器(包括运行中/已停止)
docker ps -a
# 格式:docker exec -it <容器ID/名称> /bin/bash
# 示例1:用容器ID进入
docker exec -it 1234567890ab /bin/bash

# 示例2:用容器名称进入(更易记)
docker exec -it fastflow_container /bin/bash

进入运行中容器:docker exec -it <容器ID/名称> /bin/bash(核心命令);
进入已停止容器:先 docker start 再 docker exec;
新建并进入容器:docker run -it <镜像名> /bin/bash;
核心是先通过 docker ps -a 找到容器 ID / 名称,再按需选择命令。

python main.py -cfg configs/resnet18.yaml --data /app/mvtec -cat bottle

参考链接:

1、Docker Desktop 设置显卡与调用显卡全攻略
https://cloud.baidu.com/article/3732885

相关推荐
人鱼传说7 小时前
docker desktop是一个好东西
运维·docker·容器
阿梦Anmory8 小时前
Ubuntu配置代理最详细教程
linux·运维·ubuntu
呉師傅8 小时前
【使用技巧】Adobe Photoshop 2024调整缩放与布局125%后出现点菜单项漂移问题的简单处理
运维·服务器·windows·adobe·电脑·photoshop
heartbeat..8 小时前
JVM 性能调优流程实战:从开发规范到生产应急排查
java·运维·jvm·性能优化·设计规范
小章UPUP8 小时前
Kubernetes (K8s) 与 Podman 的比较
容器·kubernetes·podman
忆~遂愿8 小时前
CANN metadef 核心解析:计算图原型定义、算子元数据抽象与异构系统互操作机制
docker·容器
小Tomkk8 小时前
数据库 变更和版本控制管理工具 --Bytebase 安装部署(linux 安装篇)
linux·运维·数据库·ci/cd·bytebase
赌博羊8 小时前
ImportError: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32‘ not found
linux·运维·gnu
消失的旧时光-19439 小时前
Linux 入门核心命令清单(工程版)
linux·运维·服务器
艾莉丝努力练剑9 小时前
【Linux:文件】Ext系列文件系统(初阶)
大数据·linux·运维·服务器·c++·人工智能·算法