【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

相关推荐
微露清风15 分钟前
系统性学习Linux-第二讲-基础开发工具
linux·运维·学习
阳光九叶草LXGZXJ1 小时前
达梦数据库-学习-48-DmDrs控制台命令(同步之Manager、CPT模块)
linux·运维·数据库·sql·学习
小二李2 小时前
第11章 nestjs服务端开发:登录鉴权
运维·服务器
i建模3 小时前
如何在Arch Linux中重设忘记的root密码
linux·运维·服务器
chatexcel4 小时前
元空AI+Clawdbot:7×24 AI办公智能体新形态详解(长期上下文/自动化任务/工具粘合)
运维·人工智能·自动化
kida_yuan4 小时前
【Linux】运维实战笔记 — 我常用的方法与命令
linux·运维·笔记
小陈phd5 小时前
混合知识库搭建:本地Docker部署Neo4j图数据库与Milvus向量库
数据库·docker·neo4j
Wpa.wk6 小时前
容器编排 - 了解K8s(pod, deployment,service,lable等概念)
经验分享·测试工具·docker·云原生·容器·kubernetes
何中应6 小时前
vmware的linux虚拟机如何设置以命令行方式启动
linux·运维·服务器
江畔何人初6 小时前
kubernet与docker的关系
linux·运维·云原生