「这是我参与2022首次更文挑战的第14天,活动详情查看:2022首次更文挑战」。
Windows Subsystem for Linux (WSL)是适用于 Linux 的 Windows 子系统可让开发人员直接在 Windows 上按原样运行 GNU/Linux 环境(包括大多数命令行工具、实用工具和应用程序),且不会产生传统虚拟机或双启动设置开销。
相关资料
- 中文文档:docs.microsoft.com/zh-cn/windo…
- win10安装文档:docs.microsoft.com/en-us/windo…
- Nvidia WSL 支持文档:docs.nvidia.com/cuda/wsl-us…
- Nvidia WSL 开发文档:developer.nvidia.com/cuda/wsl
简介
Windows Linux子系统(WSL)是Windows 10的一项功能,使用户可以直接在Windows上运行本机Linux命令行工具。 WSL是一个容器化的环境,用户可以在其中从Windows 10 Shell的命令行运行Linux本机应用程序,而无需双启动环境的复杂性。在内部,WSL与Microsoft Windows操作系统紧密集成,从而使其可以与传统的Windows桌面和现代商店应用程序一起运行Linux应用程序。
- 借助WSL 2和GPU半虚拟化技术,Microsoft使开发人员能够在Windows上运行GPU加速的应用程序
安装步骤
以下文档描述了在WSL 2环境中开始运行CUDA应用程序或容器的工作流程
注意:从开普勒架构开始,在GPU上启用了WSL 2上的CUDA。但是,官方建议在Turing或更新的体系结构上的WSL 2上运行CUDA。
- 从Microsoft Windows Insider程序安装最新版本
- 为WSL2安装 NVIDIA 驱动
- 安装WSL2
- 安装Linux发行版
- 为WSL配置CUDA环境
- 为WSL安装 nvidia-docker
从Microsoft Windows Insider程序安装最新版本
注册加入微软Windows内部人员计划
- 登录微软账号
- 注册成功
安装 Win 10 的最新版本
查看Windows 10 版本
- Win + R 在运行中输入命令 winver
-
可以看到我的系统版本 1919 内部版本18363,这是不够的
-
需要版本2004以上 内部版本19041 或更高
加入Windows预览体验计划
Win+S
搜索预览体验计划
如果没有这个开始按钮,一片空白,请移步解决Windows 预览体验计划没有用户选择界面的问题
-
然后链接到自己的微软账户
-
CUDA建议使用Dev渠道,以获得最新的更新与最高的cuda性能,此处我们选择Dev渠道:
求稳的用户建议选择Beat渠道
- 重启计算机
- 成功加入预览成员
进行 Windows 更新
Win+S
搜索windows更新
- 开启高级选项中的
更新Windows时接收其他Microsoft产品的更新
以更新Linux内核
- 更新吧
这个更新可能需要分步 也就是一次重启更新一部分文件 需要不停更新,直到无新可更
更新后检查Windows 版本
- win + R 命令 winver
- Beta 渠道更新结果:
- Dev渠道更新结果
21364.1已经超过了CUDA建议的21332内部版本号
检查历史更新记录
- 在
Windows 更新
面板中查看更新历史记录
如果没有 Linux 内核更新请返回开启
更新Windows时接收其他Microsoft产品的更新
开关CUDA建议Linux内核版本 5.4.91+获得最好性能,当前没有达到,应该也是够用的
安装 NVIDIA 驱动
从WSL页面CUDA的下载部分下载NVIDIA驱动程序。根据您系统中的NVIDIA GPU的类型选择合适的驱动程序-GeForce和Quadro。
- 官网链接: CUDA on WSL
下载驱动
- 选择自己的驱动类型
-
登录英伟达账号
-
下载驱动
安装驱动
- 使用可执行文件安装驱动程序,这是我们需要安装的唯一驱动程序。
DirectX WSL驱动程序会与其他驱动程序组件一起自动安装,因此不需要其他操作。该驱动程序通过支持DX12 API在WSL2.0上启用图形。在WSL上具有DirectML支持的TensorFlow将获得用于训练和推理工作量的NV GPU硬件加速。
查看驱动版本
- cmd 运行
nvidia-smi
C:\Users\Admin>nvidia-smi
Thu Apr 22 17:27:03 2021
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 470.14 Driver Version: 470.14 CUDA Version: 11.3 |
|-------------------------------+----------------------+----------------------+
| GPU Name TCC/WDDM | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 NVIDIA GeForce ... WDDM | 00000000:01:00.0 On | N/A |
| 0% 48C P8 14W / 135W | 250MiB / 6144MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| 0 N/A N/A 1308 C+G Insufficient Permissions N/A |
| 0 N/A N/A 10776 C+G Insufficient Permissions N/A |
| 0 N/A N/A 14460 C+G ...s (x86)\YYNote\YYNote.exe N/A |
+-----------------------------------------------------------------------------+
复制代码
官方提醒:
- 不要在WSL中安装任何Linux显示驱动程序。 Windows显示驱动程序将同时安装用于本机Windows和WSL支持的常规驱动程序组件。
- NVIDIA了解到在移动平台上报告的特定安装问题,该问题在2020年11月16日发布了WIP驱动程序465.12。已知的解决方法是在系统启动时从设备管理器中禁用和重新启用GPU适配器。我们正在努力解决此问题,并将很快提供更新的驱动程序。
安装 WSL 2
安装 WSL 1
现在的我们有三种方法安装WSL 1
-
使用简化安装命令
此方法需要有三个前提:
- 加入 Windows 预览体验计划
- 安装 Windows 10 的预览版(OS 版本 20262 或更高版本)。
- 使用管理员特权打开命令行窗口
wsl --install 复制代码
-
控制面板
–>程序与功能
–>启动或关闭Windows功能
勾选适用于Linux的Windows子系统
-
或使用管理员权限打开powershell,输入命令:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart 复制代码
此时为了成功安装 WSL 事实上需要重启电脑,但是升级 WSL2 还需要重启一次,所以此处可以选择等会再重启
开启虚拟化功能
有两种方法完成开启
-
管理员权限开启 powershell,执行命令:
C:\WINDOWS\system32> dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart 部署映像服务和管理工具 版本: 10.0.21364.1 映像版本: 10.0.21364.1 启用一个或多个功能 [==========================100.0%==========================] 操作成功完成。 复制代码
-
控制面板
–>程序与功能
–>启动或关闭Windows功能
勾选虚拟机平台
- 执行上述之一的步骤后,重启计算机,完成 WSL 安装并更新到 WSL 2
开启Hyper-V
控制面板
–>程序与功能
–>启动或关闭Windows功能
勾选Hyper-V
选项。
在BIOS中开启虚拟化功能
下载Linux内核更新包
如果使用的是 ARM64 计算机,请下载 ARM64 包。 如果不确定自己计算机的类型,请打开命令提示符或 PowerShell,并输入:
systeminfo
系统类型可以看到本机基于 x64 需要下载x64包
-
运行上一步中下载的更新包。 (双击以运行 - 系统将提示你提供提升的权限,选择“是”以批准此安装。)
-
如果提示当前WSL版本更新就忽略这个包吧
将 WSL 2 设置为默认版本
- 打开 PowerShell,然后在安装新的 Linux 发行版时运行以下命令,将 WSL 2 设置为默认版本:
wsl --set-default-version 2
-->
有关与 WSL 2 的主要区别的信息,请访问 https://aka.ms/wsl2
操作成功完成。
复制代码
查看 wsl 版本
wsl --list --verbose
// 或
wsl -l -v
复制代码
- 输出:
C:\Windows\system32>wsl -l -v
NAME STATE VERSION
* Ubuntu-18.04 Running 1
复制代码
由于我之前安装了wsl1的ubuntu,列表中有一个Version为1的开发版
安装Linux发行版
安装Linux
- 选择自己需要的Linux发行版:
事实上我尝试了 16.04和18.04的ubuntu 均出现安装CUDA时闪退的问题,没有解决
换成了20.04 顺利安装CUDA
Linux 分发版链接
- 在分发版的页面中,选择“获取”
- 进入到Microsoft Store 获取发行版,我安装成功了的是20.04版
安装 Windows Terminal (可选)
Windows Terminal启用多个选项卡(在多个Linux命令行,Windows命令提示符,PowerShell,Azure CLI等之间快速切换),创建自定义键绑定(用于打开或关闭选项卡的快捷键,复制+粘贴等),使用搜索功能和自定义主题(配色方案,字体样式和大小,背景图像/模糊/透明度)
- 和 Xshell 差不多感觉
测试 Linux
- 在Microsoft Store 或开始菜单搜索 Ubuntu 启动 Ubuntu 终端
Installing, this may take a few minutes...
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username: zywvvd
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Installation successful!
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
复制代码
说明发行版正常运行
检查发行版WSL版本
- 在powershell中输入命令:
wsl -l -v
复制代码
-->
C:\Users\Admin> wsl -l -v
NAME STATE VERSION
* Ubuntu Running 2
复制代码
- 显示VERSION为2,表明WSL2发行版安装成功
为WSL配置CUDA环境
当前CUDA WSL仅对Ubuntu 做了支持
恰好我装的发行版是Ubuntu,需要安装 WSL-Ubuntu 的CUDA
- 当前支持WSL的CUDA最早版本为11.1
- 我安装CUDA成功的发行版是20.04(16.04和18.04均失败了,原因还没有找到)
Ubuntu 18.04
- 这个版本受到CUDA官方眷顾,官网直接给出了安装命令
$ apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
$ sh -c 'echo "deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64 /" > /etc/apt/sources.list.d/cuda.list'
$ apt-get update
复制代码
- 安装WSL2 的CUDA
$ apt-get install -y cuda-toolkit-11-0
复制代码
事实上,我并没有运行成功,所以个人建议用下面的安装方法
Ubuntu 16.04 或其他Ubuntu版本
-
Nvidia 下载官网 :
- 使用命令:
wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin
sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/11.1.0/local_installers/cuda-repo-wsl-ubuntu-11-1-local_11.1.0-1_amd64.deb
sudo dpkg -i cuda-repo-wsl-ubuntu-11-1-local_11.1.0-1_amd64.deb
sudo apt-key add /var/cuda-repo-wsl-ubuntu-11-1-local/7fa2af80.pub
sudo apt-get update
sudo apt-get -y install cuda
复制代码
- 或下载 runfile(local)
下载完成后
apt-get install -y gcc g++ make
./cuda_11.1.0_455.23.05_linux.run
复制代码
测试CUDA
注意此时是没有 nvidia-smi的,因为没有在WSL中安装驱动,驱动是在Win中装的
-
nvcc
$ /usr/local/cuda/bin/nvcc -V nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2020 NVIDIA Corporation Built on Tue_Sep_15_19:10:02_PDT_2020 Cuda compilation tools, release 11.1, V11.1.74 Build cuda_11.1.TC455_06.29069683_0 复制代码
-
cuda sample
- 使用cuda sample的
1_Utilities
cd /usr/local/cuda/samples/1_Utilities/deviceQuery sudo make ./deviceQuery 复制代码
- 输出
$ ./deviceQuery ./deviceQuery Starting... CUDA Device Query (Runtime API) version (CUDART static linking) Detected 1 CUDA Capable device(s) Device 0: "NVIDIA GeForce GTX 1660" CUDA Driver Version / Runtime Version 11.4 / 11.1 CUDA Capability Major/Minor version number: 7.5 Total amount of global memory: 6144 MBytes (6442450944 bytes) (22) Multiprocessors, ( 64) CUDA Cores/MP: 1408 CUDA Cores GPU Max Clock rate: 1860 MHz (1.86 GHz) Memory Clock rate: 4001 Mhz Memory Bus Width: 192-bit L2 Cache Size: 1572864 bytes Maximum Texture Dimension Size (x,y,z) 1D=(131072), 2D=(131072, 65536), 3D=(16384, 16384, 16384) Maximum Layered 1D Texture Size, (num) layers 1D=(32768), 2048 layers Maximum Layered 2D Texture Size, (num) layers 2D=(32768, 32768), 2048 layers Total amount of constant memory: 65536 bytes Total amount of shared memory per block: 49152 bytes Total shared memory per multiprocessor: 65536 bytes Total number of registers available per block: 65536 Warp size: 32 Maximum number of threads per multiprocessor: 1024 Maximum number of threads per block: 1024 Max dimension size of a thread block (x,y,z): (1024, 1024, 64) Max dimension size of a grid size (x,y,z): (2147483647, 65535, 65535) Maximum memory pitch: 2147483647 bytes Texture alignment: 512 bytes Concurrent copy and kernel execution: Yes with 2 copy engine(s) Run time limit on kernels: Yes Integrated GPU sharing Host Memory: No Support host page-locked memory mapping: Yes Alignment requirement for Surfaces: Yes Device has ECC support: Disabled Device supports Unified Addressing (UVA): Yes Device supports Managed Memory: Yes Device supports Compute Preemption: Yes Supports Cooperative Kernel Launch: Yes Supports MultiDevice Co-op Kernel Launch: No Device PCI Domain ID / Bus ID / location ID: 0 / 1 / 0 Compute Mode: < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) > deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 11.4, CUDA Runtime Version = 11.1, NumDevs = 1 Result = PASS 复制代码
- 使用cuda sample的
为WSL安装 nvidia-docker
安装docker
curl https://get.docker.com | sh
复制代码
- 检查docker是否安装成功
$ docker --version
Docker version 20.10.6, build 370c289
复制代码
安装nvidia-docker2
从nvidia-docker2 v2.3和基础运行库(libnvidia-container> = 1.2.0-rc.1)开始,为WSL 2提供支持。
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
curl -s -L https://nvidia.github.io/libnvidia-container/experimental/$distribution/libnvidia-container-experimental.list | sudo tee /etc/apt/sources.list.d/libnvidia-container-experimental.list
sudo apt-get update
sudo apt-get install -y nvidia-docker2
复制代码
- 检查nvidia-docker是否安装成功
$ nvidia-docker --version
Docker version 20.10.6, build 370c289
复制代码