当前位置: 首页 > news >正文

Windows下基于Docker的机器学习环境准备

背景

最近新买了一台笔记本,心血来潮想要研究一下机器学习有关的代码,但是又怕环境污染了现有的系统导致杂乱不堪,于是乎便想到了使用 Docker 来创建一个代码环境。本文是基于文章 https://www.cnblogs.com/cmxcxd1314/p/19073044 的实践笔记。

前提条件

  • Windows 10 或 Windows 11(版本 21H2 或更高)
  • 已安装 Docker Desktop for Windows
  • 支持 CUDA 的 NVIDIA GPU
  • 已安装 NVIDIA 显卡驱动(版本 516.xx 或更高)
  • 已安装 WSL 2(Windows Subsystem for Linux 2)

你可以通过以下命令查看你的 GPU 支持的 CUDA 版本:

nvidia-smi

步骤

1. 安装 NVIDIA Container Toolkit

前往 NVIDIA 官网页面:

https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html

按照 Windows 安装指南进行操作。

2. 配置 Docker Desktop

打开 Docker Desktop,确保 Settings → Docker Engine 中包含如下内容:

{"runtimes": {"nvidia": {"path": "nvidia-container-runtime.exe","runtimeArgs": []}}
}

如果你不确定这一段代码放在哪里,可以参考我的完整配置:

{"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"experimental": false,"fixed-cidr-v6": "","ipv6": false,"runtimes": {"nvidia": {"path": "nvidia-container-runtime.exe","runtimeArgs": null}}
}

3. 创建项目文件

新建一个文件夹,在其中创建以下两个文件。

Dockerfile

官方 CUDA 镜像版本的选择可以前往 NVIDIA Docker Hub 页面查找:

https://hub.docker.com/r/nvidia/cuda/tags

# 使用官方 CUDA 镜像作为基础
FROM nvidia/cuda:13.0.3-cudnn-devel-ubuntu24.04# 避免安装过程中交互式提示
ENV DEBIAN_FRONTEND=noninteractive# 配置 Ubuntu 使用清华源
RUN sed -i 's/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list && \sed -i 's/security.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list# 安装系统依赖和开发工具,包括 SSH 服务器
RUN apt-get update && apt-get install -y \curl \wget \git \build-essential \openssh-server \python3 \python3-pip \python3-venv \sudo \iputils-ping \nano \htop \&& rm -rf /var/lib/apt/lists/*# 为 VS Code 创建用户并设置密码
RUN useradd -m -s /bin/bash vscode && \echo "vscode:vscode" | chpasswd && \usermod -aG sudo vscode && \echo "vscode ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers# 配置 SSH
RUN mkdir /var/run/sshd && \sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config && \sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_configUSER vscode
WORKDIR /home/vscode# 1. 创建 Python 虚拟环境
RUN python3 -m venv /home/vscode/venv# 2. 设置 PATH,使后续 pip 和 python 默认指向虚拟环境
ENV PATH="/home/vscode/venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"# 3. 现在可以安全安装包(将安装到虚拟环境)
RUN pip install --upgrade pipRUN pip install numpy pandasRUN pip install torch torchvision torchaudio \--index-url https://download.pytorch.org/whl/cu130RUN echo 'export PATH="/home/vscode/venv/bin:$PATH"' >> /home/vscode/.bashrc
RUN echo 'source /home/vscode/venv/bin/activate' >> /home/vscode/.bashrc# ----- 验证安装 -----
RUN python -c "import torch; print(torch.__version__); print(torch.cuda.is_available())"# 暴露 SSH 端口
EXPOSE 22# 启动 SSH 服务
USER root
CMD ["/usr/sbin/sshd", "-D"]

docker-compose.yml

services:cuda-dev:build:context: .dockerfile: Dockerfilecontainer_name: cuda-devports:- "2222:22"   # 将容器的SSH端口映射到宿主机的2222端口- "8888:8888"runtime: nvidia  # 使用NVIDIA容器运行时以支持GPUdeploy:resources:reservations:devices:- driver: nvidiacount: allcapabilities: [gpu]restart: unless-stoppedvolumes:- ./workspace:/home/vscode/workspace  # 可选:挂载工作目录以便持久化代码- D:\code\Model:/home/vscode/model- D:\code\Data:/home/vscode/dataenvironment:- NVIDIA_VISIBLE_DEVICES=all

说明:

  • 这里暴露 8888 端口是因为我后续安装了 Unsloth Web 进行模型训练,不需要的可以删去。
  • 挂载目录需要根据实际情况修改,我这里是方便容器访问下载好的模型和数据集。

构建与启动

打开 PowerShell,执行以下命令构建容器:

docker-compose build

如果遇到网络问题,你可以打开网络代理,先执行 docker pull nvidia/cuda:13.0.3-cudnn-devel-ubuntu24.04 拉取基础镜像,再构建容器。

启动容器:

docker-compose up -d

4. 测试和连接容器

查看已启动的容器:

docker ps

测试 SSH 连接:

ssh -p 2222 vscode@localhost

密码是 vscode

测试 CUDA 是否可用:

python3 -c "import torch; print(torch.cuda.is_available())"

使用建议

  • 可以使用 VS Code 的 Remote - SSH 扩展连接到容器
  • 将代码放在 workspace 目录中以便持久化存储
  • 如需其他 Python 包,可以修改 Dockerfile 中的 pip install 命令

Happy Coding! 🚀

http://www.jsqmd.com/news/1183014/

相关文章:

  • Java进阶必会:代码块、四种内部类、Lambda表达式与常用API(String+ArrayList)全梳理
  • NM4484NSPAXAE-3EE选型指南:南亚MCP产品线对比与宽温工业级存储选型建议
  • TMR-SOMA-RP-v1社区贡献指南:如何参与项目开发与改进
  • 手把手教你学pcie-写一个最简单的 PCIe 驱动(字符设备)
  • DDrawCompat终极指南:5分钟让老游戏在现代Windows上完美运行
  • 从报价卡到状态契约:REST 快照、WebSocket 更新与 stale watchdog 工程复盘
  • 公众号迁移到另外一个公众号,2026 年详细步骤教学 - 跑政通
  • 网安研途智能体:基于数据治理与Dify平台的垂直领域RAG智能体研发实践与优化 基于Dify的智能体开发 模糊检索
  • 华为OD机试真题 新系统 2026-07-01 C++ 实现【收集灵草】
  • 抖店批量铺货怎样降低违规风险-风险检查与实操 - 抖大侠
  • Copilot代码解释功能实测对比:VS Code、JetBrains、GitHub CLI三大平台准确率与响应速度全测评
  • 2026年7月最新杭州劳力士官方售后客服服务电话及地址网点大全 - 劳力士官方服务中心
  • Codex++用户脚本编写入门:自定义你的AI编程助手
  • Nemotron-3安全与隐私考量:企业部署中的伦理与合规要求终极指南
  • Kimi-K2-Thinking-W4A8与原始模型对比:量化带来的性能提升与精度损失分析
  • 如何为工业设备选择DDR2宽温内存?NT5TU32M16DG-ACI的-40°C~95°C与DDR2-800方案解析
  • DockerCompose
  • Unreal Engine 5 PCG程序化内容生成实战:从零构建程序化森林
  • 2026年07月成都苹果手机维修品牌深度观察:专业服务商综合评估与采购参考 - 甄选服务推荐
  • MCPFunctionCall
  • 【WorkBuddy专栏27】WorkBuddy 和 CodeBuddy 到底什么关系——一篇文章终结所有混淆
  • 论事先输入的价值观对齐对AGI演化的潜在害处
  • 欧米茄刻字鉴定的售后维修与保养指南权威公示(2026年7月最新) - 欧米茄服务中心
  • 【AI Office插件年度TOP10】:2024年经172家跨国企业实测验证的生产力倍增神器
  • 2026年7月最新郑州格拉苏蒂官方售后维修服务网点地址与客服电话 - 亨得利钟表维修中心
  • Unity NGO场景管理:服务器权威下的联机游戏场景同步实战
  • 文心怎么输出为 word?AI 导出鸭安卓版解决排版乱码完美导出文档
  • Day 1. DEA 和 JDK 的下载、安装配置
  • AMD OGA模型构建器:Qwen2.5-Coder-7B-Instruct_rai_1.7.1_npu_4K的完整工作流程指南
  • 公众号账号迁移是什么意思?2026 年一文讲透真相 - 跑政通