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

Win10下配置WSL2后nvidia-smi不正常显示问题

环境准备

操作系统:Windows 10 专业版 22H2(保系统版本高于windows10 21H2或Windows11)

显卡:2080TI 22G

参考内容:CUDA on WSL (nvidia.com)、Install WSL | Microsoft Learn、Windows安装WSL2并配置nVidia GPU - 知乎 (zhihu.com)

现在已经是2024年,网上许多安装WSL2和WSL2中配置GPU的资料已经过时,因此在这里记录一下整个安装流程。

安装WSL2

在控制面版安装必要组件

分别为Hyper-V、适用于Linux的Windwos子系统、虚拟机平台,安装完成后重启计算机即可开启WSL功能。注:开启Hyper-V会与Vmware等虚拟化软件造成冲突,可使用基于Hyper-V版本的Vmware。

安装必要组件

安装必要组件

升级WSL版本

然后我们要把wsl程序的版本更新到最新版本,打开系统终端(cmd或者powershell都行),输入wsl --update,即可升级到最新版的wsl程序,我这里已经升级过了,所以显示已是最新版。

代码语言:txt

AI代码解释

正在检查更新。
已安装最新版本的适用于 Linux 的 Windows 子系统。

输入wsl --version如果有结果显示那就证明wsl程序版本达到要求了,没有对应结果那就是wsl程序还不是最新版。

代码语言:txt

AI代码解释

WSL 版本: 2.1.5.0
内核版本: 5.15.146.1-2
WSLg 版本: 1.0.60
MSRDC 版本: 1.2.5105
Direct3D 版本: 1.611.1-81528511
DXCore 版本: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows 版本: 10.0.19045.4474

安装 Linux 内核更新包

WSL使用CUDA要求Linux内核版本大于4.19.121+,输入wsl cat /proc/version即可查看wsl linux内核版本。

代码语言:txt

AI代码解释

Linux version 5.15.146.1-microsoft-standard-WSL2 (root@65c757a075e2) (gcc (GCC) 11.2.0, GNU ld (GNU Binutils) 2.37) #1 SMP Thu Jan 11 04:09:03 UTC 2024

如果你的内核版本不符合要求,请下载wsl的内核更新包,直接运行安装即可,这样WSL2的安装算是完成了。

安装wsl的ubuntu

首先设置WSL2为默认WSL版本,如果不是,可以通过下面命令切换默认为WSL2

代码语言:txt

AI代码解释

wsl --set-default-version 2

然后通过命令安装ubuntu,选择自己想要的版本,这里我选择20.04

代码语言:javascript

代码运行次数:0

运行

AI代码解释

wsl --install ubuntu20.04

启动ubuntu

直接在系统终端输入wsl,即可进入到unbuntu系统。

为了方便使用,我们顺便开启wsl系统的systemd支持,

输入nano /etc/wsl.conf,在wsl.conf文件中添加以下行,你现在已打开此文件来更改用于 systemd 的 init:

代码语言:txt

AI代码解释

[boot]
systemd=true

然后重启wsl就可以了,输入wsl --shutdown关闭系统,在输入wsl启动即可。

windows安装nvidia GPU驱动

网上有许多资料写道需要安装针对WSL特别驱动,但是新版驱动直接继承了WSL的驱动现在只需要到nVidia官网将驱动升级到最新版本即可。

驱动下载地址:NVIDIA GeForce 驱动程序 - N 卡驱动 | NVIDIA

根据自己的显卡型号以及操作系统选择对应驱动,我这里是RTX 2080TI,操作系统是Win 10 64位。

选择显卡驱动

选择显卡驱动

一般来说,会得到两种类型的驱动程序,一个是GeForce Game Ready 驱动程序,另外一个是NVIDIA Studio 驱动程序 ,我们要选择GeForce Game Ready 驱动程序,注意不要选错了。

选择GeForce Game Ready

选择GeForce Game Ready

确认 NVIDIA 驱动支持的 CUDA 版本

安装完驱动后,在终端输入nvidia-smi,可以看到驱动支持的最高CUDA版本(向下兼容),我这里是12.5

代码语言:txt

AI代码解释

PS C:\Users> nvidia-smi
Tue Jun  4 15:53:37 2024
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 555.85                 Driver Version: 555.85         CUDA Version: 12.5     |
|-----------------------------------------+------------------------+----------------------+
| GPU  Name                  Driver-Model | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA GeForce RTX 2080 Ti   WDDM  |   00000000:02:00.0  On |                  N/A |
| 27%   34C    P8             26W /  250W |    2092MiB /  22528MiB |      3%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------++-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI        PID   Type   Process name                              GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
+-----------------------------------------------------------------------------------------+

在WSL2中安装CUDA

进入英伟达官网,找到CUDA Tookit下载页面,按下图选择对应的版本:

根据提示,进入到WSL里面进行安装

我这里安装的是12.5版本,请根据自己要安装的版本操作,确保自己的网络可靠(科学上网什么的):

代码语言:javascript

代码运行次数:0

运行

AI代码解释

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/12.5.0/local_installers/cuda-repo-wsl-ubuntu-12-5-local_12.5.0-1_amd64.deb
sudo dpkg -i cuda-repo-wsl-ubuntu-12-5-local_12.5.0-1_amd64.deb
sudo cp /var/cuda-repo-wsl-ubuntu-12-5-local/cuda-*-keyring.gpg /usr/share/keyrings/sudo apt-get update
sudo apt-get -y install cuda-toolkit-12-5

安装完成后,配置对应的环境变量,默认是修改.bashrc文件,如果你使用的是其他shell,请修改对应shll的环境变量。我这里使用的是zsh,故在.zshrc中添加,注意:cuda-12.5中的12.5要根据你安装的CUDA版本确定。

代码语言:txt

AI代码解释

export CUDA_HOME=/usr/local/cuda-12.5
export LD_LIBRARY_PATH=$CUDA_HOME/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export PATH=$CUDA_HOME/bin:$PATH

编辑完.zshrc文件,输入source .zshrc来应用环境变量,之后输入nvcc -V得到类似下面的信息就证明CUDA安装成功了。

代码语言:txt

AI代码解释

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2024 NVIDIA Corporation
Built on Wed_Apr_17_19:19:55_PDT_2024
Cuda compilation tools, release 12.5, V12.5.40
Build cuda_12.5.r12.5/compiler.34177558_0

关联nvidia-smi

在上文我们在windwos下输入nvidia-smi是可以运行的,同样其实在WSL中也可以使用nvidia-smi命令,不过WSL的nvidia-smi /usr/lib/wsl/lib/目录,故我们只需要对/usr/lib/wsl/lib/nvidia-smi进行软链接到/usr/bin/

代码语言:txt

AI代码解释

ln -s /usr/lib/wsl/lib/nvidia-smi /usr/bin/nvidia-smi

回显

代码语言:txt

AI代码解释

Thu Oct 31 16:14:44 2024
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 560.35.02              Driver Version: 560.94         CUDA Version: 12.6     |
|-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA GeForce RTX 2080 Ti     On  |   00000000:02:00.0  On |                  N/A |
| 27%   38C    P8             28W /  250W |    1327MiB /  22528MiB |      9%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------++-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI        PID   Type   Process name                              GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|    0   N/A  N/A        26      G   /Xwayland                                   N/A      |
|    0   N/A  N/A     24237      C   /ollama                                     N/A      |
+-----------------------------------------------------------------------------------------+

配置Docker访问GPU

上一步中我们已经在裸机上安装了 GPU Driver,CUDA Toolkit 等工具,实现了在宿主机上使用 GPU。

现在希望在 Docker 容器中使用 GPU,需要怎么处理呢?

为了让 Docker 容器中也能使用 GPU,大致步骤如下:

  • 1)安装 nvidia-container-toolkit 组件
  • 2)docker 配置使用 nvidia-runtime
  • 3)启动容器时增加 --gpu 参数
安装 nvidia-container-toolkit

NVIDIA Container Toolkit 的主要作用是将 NVIDIA GPU 设备挂载到容器中。

兼容生态系统中的任意容器运行时,docker、containerd、cri-o 等。

NVIDIA 官方安装文档:nvidia-container-toolkit-install-guide

对于 Ubuntu 系统,安装命令如下:

首先设置依赖库:

代码语言:bash

AI代码解释

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \&& curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

可选,设置使用实验性包:

代码语言:bash

AI代码解释

sed -i -e '/experimental/ s/^#//g' /etc/apt/sources.list.d/nvidia-container-toolkit.list

然后更新apt列表

代码语言:bash

AI代码解释

sudo apt-get update

安装nvidia-container-toolkit

代码语言:bash

AI代码解释

sudo apt-get install -y nvidia-container-toolkit
配置使用该 runtime

支持 Docker, Containerd, CRI-O, Podman 等 CRI。

具体见官方文档 container-toolkit#install-guide

这里以 Docker 为例进行配置:

旧版本需要手动在 /etc/docker/daemon.json 中增加配置,指定使用 nvidia 的 runtime。

代码语言:json

AI代码解释

"runtimes": {"nvidia": {"args": [],"path": "nvidia-container-runtime"}
}

新版 toolkit 带了一个nvidia-ctk 工具,执行以下命令即可一键配置:

代码语言:bash

AI代码解释

sudo nvidia-ctk runtime configure --runtime=docker

然后重启 Docker 即可

代码语言:bash

AI代码解释

sudo systemctl restart docker

至此整个教程结束。

http://www.dtcms.com/a/338410.html

相关文章:

  • 第一阶段C#基础-15:面向对象梳理
  • python-----机器学习中常用的数据预处理
  • 【前端面试题】JavaScript 核心知识点解析(第二十二题到第六十一题)
  • 【数据分析】R语言在生态学数据分析中的应用:从数据处理到可视化
  • 美图披露半年报:AI应用取得突破,净利润同比大增71.3%
  • C++11列表初始化 {}
  • GitHub Actions 从核心思想到最佳实践
  • 宋红康 JVM 笔记 Day04|双亲委派机制、沙箱安全机制、类的自动使用与被动使用
  • 电子电气架构 --- 软件会给汽车带来哪些变化?
  • 鸿蒙生态7月技术月报 | HarmonyOS 5.1 开发特性详解
  • 蓝池参与雅江水电工程融资,助力国家基础设施建设与经济发展
  • 08.常见文本处理工具
  • 03.文件管理和操作命令
  • 解读60页全面认识大数据基础知识培训【附全文阅读】
  • 8.18 打卡 DAY 45 Tensorboard使用介绍
  • Mysql——前模糊索引失效原因及解决方式
  • 深度强化学习之前:强化学习如何记录策略与价值?
  • Java面试题储备14: 使用aop实现全局日志打印
  • Nodejs学习
  • 【SkyWalking】单节点安装
  • Linux命令大全-rmdir命令
  • Java中的 “128陷阱“
  • vue从入门到精通:轻松搭建第一个vue项目
  • go语言条件语if …else语句
  • rem 响应式布局( rem 详解)
  • 鼠标右键没有“通过VSCode打开文件夹”
  • FreeRTOS【3-1】创建第一个多任务程序复习笔记
  • STM32驱动SG90舵机全解析:从PWM原理到多舵机协同控制
  • Sring框架-IOC篇
  • ​​Java核心知识体系与集合扩容机制深度解析​