在 WSL2 中使用 NVIDIA Docker 进行全栈开发和深度学习 TensorFlow pytorch GPU 加速

这篇具有很好参考价值的文章主要介绍了在 WSL2 中使用 NVIDIA Docker 进行全栈开发和深度学习 TensorFlow pytorch GPU 加速。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在 WSL2 中使用 NVIDIA Docker 进行全栈开发和深度学习 TensorFlow pytorch GPU 加速

0. 背景

0.1 起源

  • 生产环境都是在 k8d pod 中运行,直接在容器中开发不好嘛?
  • 每次换电脑,都要配配配,呸呸呸
  • 新电脑只安装日常用的软件不好嘛,环境变量配配配,各种日常软件和开发软件到处拉💩
  • 虚拟机呗,怎么调用 GPU 是个问题,hyper-v 好像是可以魔改配置实现,又得改改改。改好了本地能跑了,生产给你报错报错错错错
  • 到处拉💩,文件弄乱了怎么办,容器直接销毁重建就完事,分分钟解决。电脑重装再配环境也遭不住

0.2. 容器化开发之后

  • 宿主机电脑随便换,随便重装。重装之后我只要 上网 + wsl --install + get docker + docker compose up -d 就完事了
  • 换 macOS?没事,docker compsoe up -d
  • 换 Windows?没事,docker compose up -d
  • 没电脑?没事,搞台远程机子 ssh + docker compose up -d
  • 电脑炸了?没事,所有 git 修改都在远端有一份。开发环境换台机子 docker compose up -d 继续

0.3 不足

  • 如果是做 k8s 开发的,估计不行,起本地集群建议用 vagrant。本质上一个容器根本无法解决这个问题
  • 如果没有机器不支持 systemd 没法搞,比如公司只给提供开发容器环境(只能操作给你的容器),这个情况下目前正在解决,使用 ansible 重写 Dockerfile 里面的脚本,摆脱容器限制。主要区别就是环境安装过程在本地还是在远端

1. 前置条件

1.1. 安装系统

Windows 10 版本 2004 及更高版本(内部版本 19041 及更高版本)或 Windows 11

跳过

1.2. 处理好网络环境

安装过程中需要访问国际网络,自行处理好。建议开启 tun 模式

2. 准备 WSL

2.1. 安装 WSL

在管理员模式下打开 PowerShell 或 Windows 命令提示符

wsl --install

安装完成,重启电脑

2.2. 首次打开 WSL

重启完成后,打开 powershell,输入

wsl

此时应该会提示为 Linux 发行版创建“用户名”和“密码”

如果这里提示没有安装 Linux 发行版,那么这里可以再次执行 wsl --install,会自动安装 Ubuntu 22.04 LTS

2.3. 设置 root 密码

sudo passwd

2.4. 换源

切换到 root 用户,执行下面命令换源

cat <<'EOF' > /etc/apt/sources.list
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirror.nju.edu.cn/ubuntu/ jammy main restricted universe multiverse
# deb-src https://mirror.nju.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirror.nju.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
# deb-src https://mirror.nju.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirror.nju.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
# deb-src https://mirror.nju.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse

deb https://mirror.nju.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
# deb-src https://mirror.nju.edu.cn/ubuntu/ jammy-security main restricted universe multiverse

# deb http://security.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse
# # deb-src http://security.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirror.nju.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
# # deb-src https://mirror.nju.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
EOF

出处:南京大学镜像站 -> https://mirror.nju.edu.cn/mirrorz-help/ubuntu/?mirror=NJU

2.5.(可选)迁移 WSL 磁盘目录

这里以迁移到 D:\hyper-v\ubu1\ubu1.vhdx 为例

2.6. 设置默认用户

你的用户名 替换成你设置的用户名,然后在 WSL 中执行

sudo echo "[user]\ndefault=你的用户名" >> /etc/wsl.conf

比如我的用户名是 linux,那么我执行的命令就是 sudo echo "[user]\ndefault=linux" >> /etc/wsl.conf

2.7. 导出磁盘镜像

在 Windows poweshell 中执行

wsl --export Ubuntu d:\hyper-v\ubu1\ubu1.vhdx --vhd

2.8. 删除原系统

wsl --unregister Ubuntu

2.9. 导入新系统

wsl --import-in-place ubu1 d:\hyper-v\ubu1\ubu1.vhdx

3. 配置 NVIDIA Docker

3.1. 安装 Docker

参考:docker 官网 和 南京大学镜像 -> https://mirror.nju.edu.cn/mirrorz-help/docker-ce/?mirror=NJU

在 powershell 中输入 wsl,进入 WSL 中,执行

首先安装依赖:

sudo apt-get update
sudo apt-get install ca-certificates curl gnupg

信任 Docker 的 GPG 公钥并添加仓库:

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirror.nju.edu.cn/docker-ce/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

最后安装 Docker

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

3.2. 配置普通用户直接使用 Docker 命令

sudo gpasswd -a $USER docker
newgrp docker

3.3 安装 NVIDIA 支持

参考:微软 WSL 官方文档:https://learn.microsoft.com/zh-cn/windows/wsl/tutorials/gpu-compute

通过运行以下命令为 NVIDIA 容器工具包设置稳定存储库:

distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-docker-keyring.gpg
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-docker-keyring.gpg] https://#g' | sudo tee /etc/apt/sources.list.d/nvidia-docker.list

安装 NVIDIA 运行时包和依赖项

sudo apt-get update
sudo apt-get install -y nvidia-docker2

3.4 Docker 换源

参考:南京大学镜像

修改配置文件

sudo nano /etc/docker/daemon.json

正常走到这一步应该是这样的
在 WSL2 中使用 NVIDIA Docker 进行全栈开发和深度学习 TensorFlow pytorch GPU 加速,docker,深度学习,容器,gpu算力,运维,linux
添加一行

,"registry-mirrors": ["https://docker.nju.edu.cn/"]

在 WSL2 中使用 NVIDIA Docker 进行全栈开发和深度学习 TensorFlow pytorch GPU 加速,docker,深度学习,容器,gpu算力,运维,linux

按下 ctrl+o 再按下 回车 保存文件

再按下 ctrl+x 退出编辑器

检查一下结果,cat /etc/docker/daemon.json
在 WSL2 中使用 NVIDIA Docker 进行全栈开发和深度学习 TensorFlow pytorch GPU 加速,docker,深度学习,容器,gpu算力,运维,linux
重启 Docker

sudo systemctl restart docker

4. 拉取 & 运行 Docker 镜像

这个全栈开发镜像是我自己构建的
Dockfile 在 GitHub 仓库这里 https://github.com/james-curtis/code-os-debian
包含了

  • zsh
  • ohmyzsh
  • powerlevel10k
  • 中文语言包,gui 下微软雅黑字体支持
  • nodejs、nvm
  • openssh
  • c++
  • wslg 透传到 Windows 母机支持
  • Python、conda、pdm
    temurin 8、11、17 jdk,jenv
    docker cli
    TensorFlow
    pytorch
    cuda 11.8、cudatoolkit

4.1. 拉取镜像

由于镜像较大,建议单独拉取

  • GPU 支持镜像(9.94 GB):jamescurtisfoxmail/code-os:latest-gpu
  • 仅 CPU 支持镜像(2.77 GB):jamescurtisfoxmail/code-os:latest

这里以 GPU 支持镜像为例

docker pull jamescurtisfoxmail/code-os:latest-gpu

4.2. 下载 compose 配置

下载 Docker compose 配置

git clone https://github.com/james-curtis/code-os-debian.git

4.3. 启动 Docker compose

启动 docker compose

cd code-os-debian/docker/wsl/
bash run-gpu.sh

可以看到已经启动成功了
在 WSL2 中使用 NVIDIA Docker 进行全栈开发和深度学习 TensorFlow pytorch GPU 加速,docker,深度学习,容器,gpu算力,运维,linux

5. 检验成果

先进入 Docker 容器

source .gpu-envrc
docker compose exec os zsh

在 WSL2 中使用 NVIDIA Docker 进行全栈开发和深度学习 TensorFlow pytorch GPU 加速,docker,深度学习,容器,gpu算力,运维,linux

如果字体乱码,应该是没有配置 powerlevel10k 的 MesloLGS NF 字体支持。

我使用的终端是 tabby 全平台支持

在 WSL2 中使用 NVIDIA Docker 进行全栈开发和深度学习 TensorFlow pytorch GPU 加速,docker,深度学习,容器,gpu算力,运维,linux
在项目中有这几个字体,复制到 c:\windows\fonts 中即可
在 WSL2 中使用 NVIDIA Docker 进行全栈开发和深度学习 TensorFlow pytorch GPU 加速,docker,深度学习,容器,gpu算力,运维,linux

5.1. 检测 wslg 支持

xeyes 会显示一个跟随鼠标的小眼睛

xclock 是显示一个时钟
在 WSL2 中使用 NVIDIA Docker 进行全栈开发和深度学习 TensorFlow pytorch GPU 加速,docker,深度学习,容器,gpu算力,运维,linux

5.2. 检测 NVIDIA 支持

nvidia-smi

在 WSL2 中使用 NVIDIA Docker 进行全栈开发和深度学习 TensorFlow pytorch GPU 加速,docker,深度学习,容器,gpu算力,运维,linux
我这里显示出了母机的 3060,说明 Docker 已经检测到这张显卡

5.3. 检测 TensorFlow支持

5.3.1 TensorFlow CPU
python3 -c "import tensorflow as tf; print(tf.reduce_sum(tf.random.normal([1000, 1000])))"

在 WSL2 中使用 NVIDIA Docker 进行全栈开发和深度学习 TensorFlow pytorch GPU 加速,docker,深度学习,容器,gpu算力,运维,linux

打印出了张量

5.3.2 TensorFlow GPU
python3 -c "import tensorflow as tf; print(tf.config.list_physical_devices('GPU'))"

在 WSL2 中使用 NVIDIA Docker 进行全栈开发和深度学习 TensorFlow pytorch GPU 加速,docker,深度学习,容器,gpu算力,运维,linux

可以看到 TensorFlow 也检测到了显卡

5.3.3 安装 kaggle cli
pip install kaggle

登录 kaggle 下载登录凭据,下载到 ~/.kaggle/kaggle.json

官方教程 https://github.com/Kaggle/kaggle-api#api-credentials

设置权限

chmod 600 ~/.kaggle/kaggle.json

在 WSL2 中使用 NVIDIA Docker 进行全栈开发和深度学习 TensorFlow pytorch GPU 加速,docker,深度学习,容器,gpu算力,运维,linux

5.3.4 检测 TensorFlow GPU 负载支持

这里我们使用 kaggle cli 下载比赛中别人提交的代码进行测试,https://www.kaggle.com/code/hassanamin/tensorflow-mnist-gpu-tutorial

在 WSL2 中使用 NVIDIA Docker 进行全栈开发和深度学习 TensorFlow pytorch GPU 加速,docker,深度学习,容器,gpu算力,运维,linux
复制下载命令

在 WSL2 中使用 NVIDIA Docker 进行全栈开发和深度学习 TensorFlow pytorch GPU 加速,docker,深度学习,容器,gpu算力,运维,linux

启动 openssh-server

sudo service ssh start

输入密码 linux

默认用户和密码都是 linux

root 用户名也是 linux

在 WSL2 中使用 NVIDIA Docker 进行全栈开发和深度学习 TensorFlow pytorch GPU 加速,docker,深度学习,容器,gpu算力,运维,linux

打开 vscode 进行远程连接
需要先下载远程开发插件 ms-vscode-remote.vscode-remote-extensionpack
在 WSL2 中使用 NVIDIA Docker 进行全栈开发和深度学习 TensorFlow pytorch GPU 加速,docker,深度学习,容器,gpu算力,运维,linux
点击左下角的蓝标,会弹出命令列表,选择 Connect to host

在 WSL2 中使用 NVIDIA Docker 进行全栈开发和深度学习 TensorFlow pytorch GPU 加速,docker,深度学习,容器,gpu算力,运维,linux
直接连接 localhost 即可

为什么可以直接通过 localhost 连接有两个原因

  1. 微软支持宿主机直接访问 WSL 的监听端口
  2. docker compose 中设置的 network 类型是 host,也就是和 WSL 公用一个网络

在 WSL2 中使用 NVIDIA Docker 进行全栈开发和深度学习 TensorFlow pytorch GPU 加速,docker,深度学习,容器,gpu算力,运维,linux

点击右侧的 Connect

在 WSL2 中使用 NVIDIA Docker 进行全栈开发和深度学习 TensorFlow pytorch GPU 加速,docker,深度学习,容器,gpu算力,运维,linux
会提示选择平台和输入密码

完成之后即可进行远程开发

进入刚刚 kaggle 的项目

这里由于的刚刚我下载的目录是 /tmp/kaggle/tf 所以这里我需要打开这个目录

在 WSL2 中使用 NVIDIA Docker 进行全栈开发和深度学习 TensorFlow pytorch GPU 加速,docker,深度学习,容器,gpu算力,运维,linux
安装插件
需要安装的插件有

  • donjayamanne.python-extension-pack
  • donjayamanne.python-extension-pack

安装完成之后需要加载窗口

选择运行环境
选择 conda Python3.9 作为运行环境
在 WSL2 中使用 NVIDIA Docker 进行全栈开发和深度学习 TensorFlow pytorch GPU 加速,docker,深度学习,容器,gpu算力,运维,linux
逐个单元格运行试试效果

可以看到检测到 GPU 了
在 WSL2 中使用 NVIDIA Docker 进行全栈开发和深度学习 TensorFlow pytorch GPU 加速,docker,深度学习,容器,gpu算力,运维,linux
可以看到成功调用宿主机显卡
在 WSL2 中使用 NVIDIA Docker 进行全栈开发和深度学习 TensorFlow pytorch GPU 加速,docker,深度学习,容器,gpu算力,运维,linux
不过似乎没有使得显卡满载

5.4. 检测 pytorch cuda 支持

在 WSL 中执行

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

在 WSL2 中使用 NVIDIA Docker 进行全栈开发和深度学习 TensorFlow pytorch GPU 加速,docker,深度学习,容器,gpu算力,运维,linux

这里我还没有换 vscode 的终端字体,所以乱码了,忽略即可

5.4.1 检测 pytorch GPU 负载支持

对于 pytorch,这里使用 https://www.kaggle.com/code/lyhue1991/pytorch-gpu-examples,作为测试 demo

在 WSL2 中使用 NVIDIA Docker 进行全栈开发和深度学习 TensorFlow pytorch GPU 加速,docker,深度学习,容器,gpu算力,运维,linux

在 WSL2 中使用 NVIDIA Docker 进行全栈开发和深度学习 TensorFlow pytorch GPU 加速,docker,深度学习,容器,gpu算力,运维,linux

在 WSL2 中使用 NVIDIA Docker 进行全栈开发和深度学习 TensorFlow pytorch GPU 加速,docker,深度学习,容器,gpu算力,运维,linux

在 WSL2 中使用 NVIDIA Docker 进行全栈开发和深度学习 TensorFlow pytorch GPU 加速,docker,深度学习,容器,gpu算力,运维,linux
可以看到成功调度 GPU

6. 检查 nodejs

node -v
nvm list

在 WSL2 中使用 NVIDIA Docker 进行全栈开发和深度学习 TensorFlow pytorch GPU 加速,docker,深度学习,容器,gpu算力,运维,linux

7. 检查 java

java -version
javac -version
jenv versions

在 WSL2 中使用 NVIDIA Docker 进行全栈开发和深度学习 TensorFlow pytorch GPU 加速,docker,深度学习,容器,gpu算力,运维,linux

8. 检查 c++

g++ -v
gcc -v

在 WSL2 中使用 NVIDIA Docker 进行全栈开发和深度学习 TensorFlow pytorch GPU 加速,docker,深度学习,容器,gpu算力,运维,linux

9. 容器卷

在 Dockerfile 中有写到

# =========== 配置 容器卷 =============
VOLUME [ "/mnt/workspace", "/mnt/data" ]

这两个目录都是持久化的,也就是 docker 容器销毁之后,只有这两个目录下的文件不会清理(重启不影响)

其中 /mnt/workspace 是映射到 WSL 中的,IO 性能比较差

/mnt/data 是没有映射的容器卷,IO 性能较好,建议项目都放到该目录下

至于 /home/linux 用户目录下的文件可以自己创建并映射容器卷文章来源地址https://www.toymoban.com/news/detail-676941.html

6. 参考文档

  • https://learn.microsoft.com/zh-cn/windows/wsl/install
  • https://docs.docker.com/engine/install/ubuntu/

到了这里,关于在 WSL2 中使用 NVIDIA Docker 进行全栈开发和深度学习 TensorFlow pytorch GPU 加速的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • WIN11+WSL2+Docker 深度学习环境部署

    Windows系统开发偶尔会出现一些系统底层的bug导致程序无法运行,开发很难受。 Linux系统开发,娱乐软件少,不尽兴。 双系统切换太麻烦,不能同时使用,难受! 如何结合Windows和Linux,既能畅爽娱乐,又不会被底层BUG影响开发,来试试Windows的子系统WSL2吧!! 本次思路为:在

    2024年02月21日
    浏览(45)
  • windows下的wsl2如何进行docker数据卷挂载

     这是数据卷挂载命令 docker run -it -v /宿主机绝对路径目录: /容器内目录 镜像名  在Linux中我们可以直接使用该命令进行挂载,那在windows如何把我们c盘d盘下的目录挂载到容器呢,其实只要在路径前面加上/mnt就好了,下面来演示一下 首先拉取一个ubuntu镜像 docker pull ubuntu 这是

    2023年04月11日
    浏览(39)
  • WSL2 及 docker开发环境搭建

    控制面板-程序-程序和功能-启动或关闭Windows功能-勾选红框中选项-确认后重启电脑  下载地址如下, 附件已将下载的安装包作为附件形式上传,可直接下载 https://docs.microsoft.com/en-us/windows/wsl/install-manual 该软件安装需要在使能WSL后重启电脑后方可安装,安装界面如下: C:U

    2024年02月13日
    浏览(46)
  • Win11 安装 Docker Desktop 和 WSL2 并进行安装位置迁移

    点击链接下载 Docker Desktop:https://desktop.docker.com/win/main/amd64/Docker%20Desktop%20Installer.exe 下载后得到: 在 Docker Desktop Installer.exe 所在的目录下运行 Windows 命令提示符 在命令行中输入以下命令来进行 Docker Desktop 的安装: 注:Docker Desktop 默认安装位置为: C:Program FilesDockerDocker 这

    2024年02月07日
    浏览(58)
  • WSL2 + docker + cuda 报错nvidia-container-cli: mount error: file creation failed:libnvidia-ml.so.1: fi

    WSL2 + Ubuntu 22.04 显卡驱动: 528.89 CUDA: 11.7 在创建docker时使用 --gpus all 会报错: 参考 issue1551 解决方式是 先不使用gpu创建容器 删除相关文件(注意根据报错删除文件,不要删多) 创建不包含这些文件的新的镜像 使用新的镜像创建容器 实现如下: 此时可以正常创建容器。

    2024年02月15日
    浏览(67)
  • WSL2下的Docker配置和使用

    在Windows的Linux子系统(Windows Subsystem for Linux)WSL2中安装、配置和使用 Docker,可以参考官方教程:WSL上的Docker远程容器入门. 重要步骤总结如下: 确保你的计算机运行的是 Windows 10(更新到版本 2004,内部版本 18362 或更高版本)。 安装 WSL,并为在 WSL 2 中运行的 Linux 发行版设

    2024年02月07日
    浏览(45)
  • WSL2和Docker使用GPU

    安装Docker-Desktop Docker-Desktop下载地址 :https://www.docker.com/products/docker-desktop/ 接着就一路无脑安装即可。 下载完成之后,Docker Desktop会放在开机自动启动的文件目录下,因此每次开机都会自动开启。 可以观察到:左下角图标显示绿色就表示服务都正常运行。 这里简单设置一下镜

    2023年04月19日
    浏览(97)
  • 基于Docker的深度学习环境NVIDIA和CUDA部署以及WSL和linux镜像问题

    docker的介绍网上有很多,对于深度学习的认来讲,docker的好处就是直接把环境分享给他人,他人不需要再配置环境了。 比如我有一个目标检测的项目,我想分享给朋友,那么他首先需要在自己的电脑上配置好显卡驱动、CUDA、CuDNN,在拿到我的项目后,还需要安装各种依赖库,

    2024年02月05日
    浏览(43)
  • wsl2使用open3d等进行图像绘制

    在~/.bashrc文件中添加两个环境变量 第一行是让wsl将openGL命令(图形绘制命令)输出到哪里,也就是x-server的位置,这里指的就是我们本地的windows主机在wsl中的ip地址。 第二行禁止永远使用间接渲染,如果某些程序想要使用直接渲染那就让他使用直接渲染( 关键,open3d只能直

    2024年02月10日
    浏览(49)
  • 史上最全从0开始教你玩转wsl2+docker,构建自己的开发环境

    1、安装wsl 需要windows版本大于 搜索启用或关闭windows功能 把图片中红点标注的功能勾选,注意勾选hyper-v就不能使用虚拟机类软件,如vm,安卓模拟器一类,点击确定,重启电脑。 打开任务管理器 确保虚拟化已经启用,部分设备可能需要去bios设置,自行查阅下相关资料 下载

    2024年02月08日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包