【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

相关推荐
石像鬼₧魂石2 小时前
80 端口(Web 服务)渗透测试完整总结(含踩坑 + 绕过 + 实战流程)
linux·运维·服务器·前端·网络·阿里云
韭菜钟2 小时前
制作自定义Docker镜像并部署使用
运维·docker·容器
米高梅狮子2 小时前
11. Linux 防火墙管理
linux·运维·服务器
椰汁菠萝2 小时前
docker部署gitlab
docker·容器·gitlab
知识分享小能手2 小时前
Ubuntu入门学习教程,从入门到精通,Ubuntu 22.04 中安装 Docker 容器 —— 知识点详解(26)
学习·ubuntu·docker
小五传输2 小时前
网闸怎么选?新型网闸凭安全高效,成企业优选方案
大数据·运维·安全
C_心欲无痕2 小时前
nginx - 核心概念
运维·前端·nginx
HABuo2 小时前
【Linux进程(五)】进程地址空间深入剖析-->虚拟地址、物理地址、逻辑地址的区分
linux·运维·服务器·c语言·c++·后端·centos
Gold Steps.2 小时前
K8s Gateway-API 标准化流量治理
容器·kubernetes·gateway