用 Arch Linux for WSL2 来炼丹

用 Arch Linux for WSL2 来炼丹

Published date
Dec 16, 2021
Tags
Linux
WSL
Windows
CUDA
Description
Windows 已经变成 Linux 的形状了

测试环境

Host OS: Windows 11 Pro 21H2 (22000.376)
WSL2 OS: ArchWSL 21.8.28.0
GPU: GeForce RTX 3080 Ti
Nvidia Driver: Game Ready 510.06

启用 WSL2

具体可以参考微软官网的 旧版 WSL 的手动安装步骤,注意执行完后再 wsl --update 一下,否则图形驱动不是最新的。

安装 Nvidia 驱动

既然是 WSL2 中的 CUDA 开发,首先要先安装支持 WSL 上 CUDA 的 N 卡驱动,可以在 Nvidia 官网 进行下载安装,和普通的驱动一样,写作此文章时最新的版本是 510.06

安装 Arch Linux for WSL2 子系统

自从上手了下 Manjaro,觉得 AUR 什么的特别方便,这次直接在 WSL2 子系统中安装 Arch Linux 了。
如果你也想在 WSL 中使用 Arch 的话,可以参考一下下面的简单配置步骤 🎉

下载 ArchWSL

GitHub 上下载最新的第三方打包的 ArchWSL,有多种安装方式,这里我选的是 Arch.zip 这个包,并解压到一个拥有写权限的目录。

安装 ArchWSL

运行 .\Arch.exe 来安装 rootfs 和注册表配置。安装完成之后会生成一个 .vhdx 虚拟磁盘文件,并且 Windows Terminal 会监测到并自动添加配置。

Arch 的简单配置

以下以使用 USTC 镜像源作为例子

设置 root 账户密码

passwd

更换 Arch Linux 源

# 设置软件源 echo 'Server = https://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch' >> /etc/pacman.d/mirrorlist # 添加写保护,防止被修改 chattr +i /etc/pacman.d/mirrorlist # 初始化 keyring pacman-key --init pacman-key --populate pacman -Syu # 更新

(可选)添加 Arch Linux CN 源

在 /etc/pacman.conf 文件末尾添加两行:
[archlinuxcn] Server = https://mirrors.ustc.edu.cn/archlinuxcn/$arch
然后更新一下:
pacman -Syy pacman -S archlinuxcn-keyring

创建普通用户

一般不会直接使用 root 账户,这里我们新建一个普通账户 imbytecat
# 新建用户:-m 为用户创建家目录;-G wheel 将用户添加到 wheel 用户组 useradd -m -G wheel imbytecat # 设置密码 passwd imbytecat
# 因为 visudo 需要 vi ln -s /usr/bin/vim /usr/bin/vi # 编辑 /etc/sudoers visudo
将以下两行行首的 # 去掉:
# %wheel ALL=(ALL) ALL # %wheel ALL=(ALL) NOPASSWD: ALL

切换 WSL 默认以普通用户登陆

回到 PowerShell 中,进入到 Arch.exe 所在的目录,执行:
.\Arch.exe config --default-user imbytecat wsl -s Arch
再次重新打开 WSL 便已经切换默认账户了。

安装 Paru

Paru 是一个类似 Yay 的 AUR 助手,使用 Rust 编写,速度更快:
sudo pacman -S --needed base-devel sudo pacman -S git git clone https://aur.archlinux.org/paru.git cd paru makepkg -si
注意出现 fakeroot is in IgnorePkg/IgnoreGroup. Install anyway? 的话,输入 n 不安装 fakeroot,这是由于 ArchWSL 默认使用的是兼容 WSL 的 fakeroot-tcp

安装 Miniconda

可以选择安装 Anaconda 或 Miniconda 来管理各个 Python 环境,这里我就直接安装轻一些的 Miniconda 了:
# 安装 archlinuxcn/miniconda paru miniconda # 启用 conda sudo ln -s /opt/miniconda/etc/profile.d/conda.sh /etc/profile.d/conda.sh conda init zsh

测试 PyTorch

这里就用一个 PyTorch 测试一下是否正常调用 CUDA 吧:
conda create -n python39 python=3.9 conda activate python39 conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c pytorch
$ python Python 3.9.7 (default, Sep 16 2021, 13:09:58) [GCC 7.5.0] :: Anaconda, Inc. on linux Type "help", "copyright", "credits" or "license" for more information. >>> import torch >>> torch.cuda.is_available() True >>> torch.backends.cudnn.is_available() True