windows11使用wsl安装ubuntu20.04并安装1050ti驱动

参考:

NVIDIA Container Toolkit(NVIDIA Docker)安装教程 - 知乎 (zhihu.com)

nvidia官网操作教程

本博客教程

本教程环境:

windows11上使用wsl安装的ubunto20.04LTS 显卡 Goforce 1050ti

安装NVIDIA Container Toolkit(NVIDIA Docker)

平台要求

  • 内核版本 > 3.10 的 GNU/Linux x86_64
  • Docker >= 19.03(推荐,但某些发行版可能包含旧版本的 Docker。支持的最低版本为 1.12)
  • GPU架构 >= Kepler(或计算能力 3.0)的 NVIDIA GPU
  • NVIDIA Linux 驱动程序>= 520.56.06 (请注意,不支持较旧的驱动程序版本或分支。)

安装NVIDIA-DRIVE(Base apt)

1.添加 PPA 源:

1
sudo add-apt-repository ppa:graphics-drivers/ppa

2.为系统安装依赖项以构建内核模块:

1
sudo apt-get install dkms build-essential

3.打开终端,输入如下命令,显示当前设备支持驱动的版本:

1
ubuntu-drivers devices
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
(base) xuehao@xuehao-Z370-HD3:~$ ubuntu-drivers devices
== /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0 ==
modalias : pci:v000010DEd00001C82sv00007377sd00000000bc03sc00i00
vendor : NVIDIA Corporation
model : GP107 [GeForce GTX 1050 Ti]
driver : nvidia-driver-525 - distro non-free recommended
driver : nvidia-driver-470 - distro non-free
driver : nvidia-driver-515-server - distro non-free
driver : nvidia-driver-470-server - distro non-free
driver : nvidia-driver-510 - distro non-free
driver : nvidia-driver-418-server - distro non-free
driver : nvidia-driver-525-server - distro non-free
driver : nvidia-driver-515 - distro non-free
driver : nvidia-driver-450-server - distro non-free
driver : nvidia-driver-390 - distro non-free
driver : xserver-xorg-video-nouveau - distro free builtin

4.安装指定版本驱动:

1
sudo apt install nvidia-driver-525

5.重启设备:

1
sudo reboot

6.执行以下命令验证驱动是否安装成功:

1
nvidia-smi

打印以下信息则安装成功:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
(base) xuehao@xuehao-Z370-HD3:~$ nvidia-smi
Mon Feb 6 09:55:22 2023
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.78.01 Driver Version: 525.78.01 CUDA Version: 12.0 |
|-------------------------------+----------------------+----------------------+
| 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 ... Off | 00000000:01:00.0 On | N/A |
| 45% 36C P0 N/A / 75W | 555MiB / 4096MiB | 8% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| 0 N/A N/A 1084 G /usr/lib/xorg/Xorg 59MiB |
| 0 N/A N/A 1800 G /usr/lib/xorg/Xorg 220MiB |
| 0 N/A N/A 1926 G /usr/bin/gnome-shell 39MiB |
| 0 N/A N/A 49745 G ...RendererForSitePerProcess 83MiB |
| 0 N/A N/A 60087 G ...079604264900979074,131072 141MiB |
+-----------------------------------------------------------------------------+

安装 NVIDIA 容器工具包(NVIDIA Container Toolkit)

1.设置包存储库和 GPG 密钥:

1
2
3
4
5
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
&& 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/$distribution/libnvidia-container.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

2.更新包列表后安装nvidia-docker2包(和依赖项):

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

3.设置默认运行时后重启 Docker 守护进程完成安装:

1
sudo systemctl restart docker

4.此时,可以通过运行基本 CUDA 容器来测试工作设置:

1
sudo docker run --rm --gpus all nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi

这应该会产生如下所示的控制台输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 450.51.06 Driver Version: 450.51.06 CUDA Version: 11.0 |
|-------------------------------+----------------------+----------------------+
| 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 Tesla T4 On | 00000000:00:1E.0 Off | 0 |
| N/A 34C P8 9W / 70W | 0MiB / 15109MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+

扩展wsl命令简单使用及wsl安装的ubuntu的备份与还原

参考:wsl2子系统的备份和还原 - CharyGao - 博客园 (cnblogs.com)

wsl2子系统的备份和还原

查看当前WSL版本

查看有哪些可以安装的系统

wsl --list --online

wsl -l

1
2
3
4
PS C:\windows\system32> wsl -l

适用于 Linux 的 Windows 子系统分发:
Ubuntu-22.04 (默认)

wsl --version

1
2
3
4
5
6
7
8
9
PS C:\windows\system32> wsl --version

WSL 版本: 1.2.5.0
内核版本: 5.15.90.1
WSLg 版本: 1.0.51
MSRDC 版本: 1.2.3770
Direct3D 版本: 1.608.2-61064218
DXCore 版本: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows 版本: 10.0.19045.2965

查看运行中的子系统

wsl -l --running

1
2
PS C:\windows\system32> wsl -l --running
没有正在运行的分发。

运行子系统

wsl --distribution Ubuntu-22.04

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
PS C:\windows\system32> wsl --distribution Ubuntu-22.04

Welcome to Ubuntu 22.04.2 LTS (GNU/Linux 5.15.90.1-microsoft-standard-WSL2 x86_64)

* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage

* Strictly confined Kubernetes makes edge and IoT secure. Learn how MicroK8s
just raised the bar for easy, resilient and secure K8s cluster deployment.

https://ubuntu.com/engage/secure-kubernetes-at-the-edge

This message is shown once a day. To disable it please create the
/home/yang/.hushlogin file.

停止子系统

wsl --terminate Ubuntu-22.04wsl --shutdown (停止当前子系统)

1
2
3
PS C:\windows\system32> wsl --terminate Ubuntu-22.04

操作成功完成。

备份子系统(需要先停止才能备份)

wsl --export Ubuntu-22.04 D:\temp\Ubuntu-22.04.tar

1
2
3
4
PS C:\windows\system32> wsl --export Ubuntu-22.04 D:\temp\Ubuntu-22.04.tar

正在导出,这可能需要几分钟时间。
操作成功完成。

卸载子系统

wsl --unregister Ubuntu-22.04

还原子系统

wsl --import <Distro> <InstallLocation> <FileName> [Options]

wsl --import Ubuntu-22.04 C:\WSL D:\temp\Ubuntu-22.04.tar

Note: 当还原后的子系统变为root权限了

改为默认用户权限

  1. 查看当前用户 ls /home/
  2. 尝试切换至用户权限 su 用户名
  3. 切换至root权限sudo su
  4. 修改默认配置文件
    1. 备份 cp /etc/wsl.conf /etc/wsl.conf.bk
    2. 修改 vim /etc/wsl.conf 在最前面增加以下内容
      1
      2
      [user]
      default=用户名
    3. 重启wsl,在power shell中重启
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      # 查看当前运行的wsl
      wsl --list --running

      # 停止特定的wsl
      wsl -t Ubuntu-22.04
      # 启动特定版本wsl
      wsl -d Ubuntu-22.04

      #或者
      # 停止当前所有运行wsl
      wsl --shutdowm
      # 启动默认wsl
      wsl

wsl2迁移与恢复

此处记录一下wsl2的迁移,以及当在系统C盘重置系统如何恢复旧版wsl2

wsl2迁移

这个是建立在已经安装wsl2的基础之上

1.查看当前wsl下的Linux是否为关闭状态,当state为Stopped才能进行下一步。

1
wsl -l -v  

在这里插入图片描述

若state为Running时,利用下面的命令结束

1
wsl --shutdown

在这里插入图片描述
2.以.tar的形式导出到其他盘

1
wsl --export Ubuntu-20.04 e:\Ubuntu-20.04.tar

【注】此处导出的==Ubuntu-20.04.tar==文件可以作为备份文件,下次恢复时直接执行第4步的导入系统就行

3.注销原有的linux系统

1
wsl --unregister Ubuntu-20.04

4.导入系统

1
wsl --import Ubuntu-20.04 E:\ubuntu2004 E:\Ubuntu-20.04.tar

5.修改默认用户(因为不修改用户名,打开wsl ubuntu之后,默认以root身份登录。)

1
ubuntu.exe config --default-user <--用户名-->

用户名是原有wsl ubuntu的用户名称。

重装系统恢复旧版wsl2

此处是针对重置系统盘,同时旧版wsl2已经迁移到其他盘,如何恢复旧版wsl2

1.先重新安装一个新的wsl2,这个可以参照网上的wsl2安装教程,注意安装的Ubuntu的版本要和旧版的Ubuntu版本(即你想恢复的Ubuntu)一致
2.当安装wsl2成功后,此时wsl2默认安装在系统C盘,然后按照上面的==wsl2迁移==步骤把wsl2迁移到其他盘
3.迁移成功后,把新版的==ext4.vhdx==删除,拷贝成旧版的ext4.vhdx
4.启动wsl2,即可恢复旧版wsl2
【注】一定要把新版的==ext4.vhdx==删除,不能用旧版的去替换新版的==ext4.vhdx==(即如下图操作是不能恢复到旧版),否则替换成功后,当你启动wsl2会发现还是新版的Ubuntu。
在这里插入图片描述

Docker 是指容器化技术,用于支持创建和使用 Linux® 容器(LXC技术) 。
我们在 Window 上安装 Docker Desktop ,需要基于 Linux 环境。
在 Windows上,Docker Desktop 为我们提供通过了两个选项:WSL 与 Hyper-V 。

一、WSL2 以及 hyper-v区别,二者安装docker desktop

1.WSL2和hyper-v区别

简单来说:

  • wsl是一个运行在我下面的解释linux命令的程序,可以直接操作win的资源,又集成了如putty类的集合,不过人家是自己做的。WSL 使用 Hyper-V 架构来实现其虚拟化。。
  • WSL 官方文档(Windows Subsystem for Linux,适用于windows的linux子系统)则是Windows 操作系统的一项特性,可让您直接在 Windows 上运行 Linux 文件系统以及 Linux 命令行工具和 GUI 应用程序,以及传统的 Windows 桌面和应用程序。
  • 运行WSL的开销比运行一个虚拟机低很多。WSL 2实际上用的是运行在Hyper-v上的linux内核,相较于虚拟机你不需要很多的性能开销。
  • hyper-v是虚拟机程序,可以提供一个完整的计算机环模拟,与host需要通过网络访问 。Hyper-V 微软官方文档 :让你可以在 Windows 上以虚拟机形式运行多个操作系统,提供硬件虚拟化。

在大多数情况下:
如果你只使用 Docker : WSL
如果你需要Linux,其他的虚拟机或想访问Docker的高级选项卡来分配资源: Hyper-V

2.安装Docker Desktop

参考:docker win10专业版下 WSL 2 或 hyper-v 安装Docker Desktop

二、docker desktop限额配置,资源配置方法

使用WSL2和hyper-v安装的docker,配置是有区别的。

1.使用WSL2运行docker:

这里会是选择状态:
在这里插入图片描述

它的配置方法如图所示,需要在用户目录(比如:C:\Users\lc)下建立一个新文件,叫做.wslconfig,
在这里插入图片描述

修改文件内容为:

1
2
3
4
5
[wsl2]
processors=4
memory=8GB
swap=8GB
localhostForwarding=true

memory: 表示最大使用 2GB 内存
swap: 表示不设置 swap
localhostForwarding: 默认值为 true。如果 WSL 2 VM 中绑定到通配符或 localhost 的端口应该可以通过 localhost:port 从主机连接。
processors: 使用的核心数量,默认和你的 Windows 系统使用的核心数一样

重启wsl2:

1
wsl --shutdown

2.使用hyper-v运行docker:

首先不勾选Use the WSL 2 based engine,

在这里插入图片描述

然后进入Resources Advanced:
在这里插入图片描述

修改即可!

【Docker】Docker Desktop配置资源:cpu、内存等(windows环境下)_wsl 2 对比 hyper-v-CSDN博客