ControlNet

个人博客 << 分享一些有用的东西

最近在帮忙给一台单卡3090的工作站装Linux系统,结果踩了不少坑,折腾了一天多才成功装上。这篇文章就来分享一下,有哪些坑,然后自己是如何解决的。

当然其中最大的原因都是因为这台电脑是组织管理的,自己没有权限设置BIOS,并且强制启动Secure Boot,就算是有win10管理员账号也解决不了任何问题。

安装Linux系统

首先拿到手看看配置,是10900X和3090。有两块硬盘,一个500G左右的NVME SSD,一个2T的HDD。每个硬盘一个分区,一个受组织管理的Win10安装在SSD上。所以为了在SSD上安装Linux,先将SSD分成了两个分区,准备制作Ubuntu20.04的U盘启动盘。

ubuntu
Fig. 1. Ubuntu. Adapted from [13]

因为之前在家里台式机的win10上用过一个叫做Universal-USB-Installer-2.0.0.0.exe的软件挺好用,直接就复制到了自己Macbook的Win10虚拟机里,并且制作了Ubuntu启动盘。结果U盘插上启动的时候引导失败了,被Secure Boot阻止了,因为没有合格的签名,提示/casper/vmlinuz has invalid signature。后来向同学借用了win10电脑才解决问题。

所以使用虚拟机做U盘启动盘可能无法通过Secure Boot,看来虚拟机也并不是万能的。

不过最终也在Google和一些参考资料[1, 2, 3]的帮助下成功装上了Win10和Ubuntu双系统。

尝试安装GPU驱动

依然在很多搜索到的资料[4, 5]的帮助下,装上Ubuntu的时候第一件事就是安装N卡驱动。在N卡官网上,自动下载了.run后缀的文件。因为自己基本没怎么用过Linux,直接就双击打开了,安装速度极慢。放弃,进终端用sh运行.run文件才终于解决了。

nvidia-driver
Fig. 2. Nvidia driver download page. Adapted from [14]

然而安装的时候有很多选项并不是很能理解,虽然凭借着自己的直觉进行选择,但是不管试了几次,使用nvidia-smi依然看不到显卡,在Ubuntu的信息界面也只是显示了GPU是LLVM设备。这个时候就开始怀疑自己是不是安装的方法错误了。

这时候上网听说Linux Mint系统非常适合Linux小白[6],并且对各种第三方驱动都非常友好。Linux Mint的官网上可以选择三种GUI,Xfce, MATE, Cinnamon,根据官方的介绍[7],最终考虑到实用性和美观性选择了Cinnamon。在这个信息的驱使下,重新制作了Mint的启动盘,并且完全删除了Ubuntu安装了Mint。

mint
Fig. 3. Linux Mint. Adapted from [15]

一进系统,就开始进入Driver Manager去检查能否直接使用推荐的N卡驱动,的确有,并且安装上了,但是依然没有看到显卡。

然后尝试按照之前同样的方法,手动安装N卡驱动。这时留意到了”UEFI Secure Boot”的字样,感觉这其中有点关系。网上一查[8, 9, 12],居然是Secure Boot的锅,而绝大多数人的解决方案都是关闭Secure Boot。

在Secure Boot下安装GPU驱动

还好找到了这几篇文章[10, 11],上面详细的介绍了如何自己生成签名,并且添加至Linux MOK,让第三方驱动在UEFI Secure Boot启动的情况下依然可以工作。

主要的安装过程是这样的。

1.禁用图形界面,并且安装一些前置库

按Ctrl+Alt+F2进入终端。

1
2
3
sudo su
service lightdm stop # stop X server
apt-get install gcc kernel-devel # some dependencies

2. 安装驱动并签名

1
sudo sh "NVIDIA-xxx.run"  # run the NVIDIA driver installer

在安装过程中根据自己的需要进行选择,不过需要在dkms安装的对话框中选择否。

在询问道是否需要签名时,选择生成密钥。程序将会生成一个私钥和公钥,保存在/usr/share/nvidia中,公钥是.key文件,私钥是.der。记录一下这两个文件的路径。这时候安装程序会提示是否删除私钥,选否。然后安装程序会提示运行失败,不过这个没有问题,等下一步将密钥添加到信任列表中就可以工作了。

3. 添加密钥到信任列表中

首先要将这个密钥添加到MOK,输入

1
sudo mokutil --import /usr/share/nvidia/xxx.der

然后输入一个密码两次。再直接重启电脑,这时候会进入Linux MOK Management界面,选择Enroll MOK, Continue boot再输入上一步设置的密码即可将密钥添加到信任列表中。

再启动系统输入nvidia-smi,发现显卡已经可以使用了。

nvidia-smi
Fig. 4. nvidia-smi screenshot.

安装Anaconda,一键装上PyTorch,测试能否使用CUDA。

pytorch
Fig. 5. Checking pytorch cuda availability screenshot.

终于大功告成了。

参考文献

评论