基于 WSL2、Docker 的 CUDA 开发环境
This post was last updated 189 days ago and the information may have changed.

基于 WSL2、Docker 的 CUDA 开发环境

NVIDIA Container Toolkit

在 Windows 上部署的 Docker Linux 开发环境,支持调用 CUDA 与显示 GUI,且 Visual Studio Code 的 Remote 能自动识别 Container。

Requirements

  • Windows 10/11 ≥ Build 18362
  • WSL2 Kernel ≥ 5.10.43.3
  • Windows NVIDIA GPU Driver ≥ 495
  • Docker Desktop ≥ 3.1.0 / Docker ≥ 19.03
  • Visual Studio Code with Extension: Dev Containers

CUDA

Docs: CUDA on WSL User Guide

不需要任何配置,WSL2 内的发行版即可调用 CUDA。

性能损耗参见官方测试:Leveling up CUDA Performance on WSL2 with New Enhancements

Docker

Docs:

可以使用 Docker Desktop,也可以在 WSL2 内的 Linux 发行版上使用 Docker 标准的安装脚本,官方建议使用 Docker Desktop。

Docker Desktop 安装与脚本安装的架构有较大区别,会创建两个 WSL2 发行版 docker-desktop-datadocker-desktop 用来实际存储程序与数据。安装后的 Docker 是独立于其它 Linux 发行版的,能够被其它的发行版访问与调用,数据将不会存储在调用方的存储空间内。其它发行版对 Docker 的调用与安装在自身内时一致。

不需要依照 NVIDIA 的文档安装额外的 nvidia-docker2nvidia-container-toolkit 包,Docker 创建 Container 时支持参数 --gpus all,启用后 Container 能够访问 CUDA。

GUI

方案 1:WSLg

直接调用 WSLg 提供的 X Server (XWayland),将 Socket 挂载给 Container:

docker run -it -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY debian

方案 2:VcXsrv

在 Windows 端安装 VcXsrv 作为 X Server,使用环境变量指定 Container 使用 Host 的 X Server。

VcXsrv 启动后需要勾选 Disable access control,创建 Container 时的参数:

docker run -it -e DISPLAY=host.docker.internal:0.0 debian

*注:host.docker.internal 仅支持在 Docker Desktop 上使用

方案 3:Xvfb + x11vnc

在 Container 内安装 X Server (xvfb),通过 VNC 将画面传输到 Host 端。

Docs:

Xvfb 是一个 X Server,能够创建虚拟显示器。x11vnc 提供 VNC 服务器。两者均默认前台运行,可以使用多个 Terminal 保持运行,也可以使用 2>&1 &nohup 后台运行。

使用 Visual Studio Code 的 Remote 连接运行中的 Container,Visual Studio Code 会自动将 VNC 服务器端口映射至本地,一般为相同端口号。

运行 Xvfb 创建一个 ID 为 0 的 X Server,-screen 0 1280x720x24 创建 ID 为 0 的 960×540 虚拟显示器,色深 24bit。

*注意包 xvfb 的 CLI 为 Xvfb

Xvfb :0 -screen 0 960x540x24

运行 x11vnc 创建 VNC 服务器,显示 ID 为 0 的 X Server 内容,默认监听 0.0.0.0:5900[+ID],且第一个 VNC 连接断开后关闭服务器。-allow 127.0.0.1 限制本地连接,-nevershared 限制单一连接,-forever 使连接中断后不关闭服务器,-timeout 1000 超时 1000s 无连接则关闭服务器。

x11vnc -allow 127.0.0.1 -nevershared -forever -timeout 1000 -display :0

在运行 GUI 程序前,使用环境变量指定 X Server。

export DISPLAY=:0

仅在单一 Terminal 内运行,关闭 Terminal 后关闭所有服务器。

Xvfb :0 -screen 0 960x540x24 >/dev/null 2>&1 & x11vnc -allow 127.0.0.1 -nevershared -forever -timeout 100 -display :0 >/dev/null 2>&1 & export DISPLAY=:0

随后在 Windows 端用 TigerVNCTightVNC 等访问 localhost 上 Visual Studio Code 自动映射的端口即可。


Header picture:https://github.com/NVIDIA/nvidia-container-toolkit

No Comments

Send Comment Edit Comment


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
Previous