前段时间买了一台新的笔记本电脑,,全能本,CPU标压版8核心16线程AMD锐龙9-5900HS,显卡是NVIDIA-3050TI,重量和macbook差不多,都是1.4kg,便携,可以改变形状。
大概长这样:

可以改变三种形式(莫名其妙的兴奋),有人可能会问我为什么不买。macbook,不买有两个原因:
macbook不支持nvidia显卡,这个没解决办法本地跑。AI代码只能是远程服务器
macbook厌倦了使用,有点审美疲劳,新版本macbook pro太厚了,不方便携带,主要是贵的...
于是有了和macbook接近大小,重量相似全方位笔记本,日常简单开发,调试调试就够了。CPU是、显卡是3050TI-4G,CPU编译速度还可以,GPU除了显存有点小,都有,可以尽情尝试。
毕竟搞AI的,当然对GPU这个3050更敏感TI是基于GA107核心,有2560个CUDA Core,80个Tensor Core,基本够玩了。计算能力8.6.目前(这句话写的时候还是最新的,但是老黄3月份马上推出了H100)最新特点应该有:
FP32、FP16、BF16和INT8精度的支持
第三代Tensor Core等等
附一个GA102的白皮书[1],有兴趣的可以翻翻。
有了笔记本,下一步就是配置开发环境。
之前不想用Windows这主要是习惯Linux操作环境,而Mac和Linux操作相差不大,但使用方式不大windows各种不习惯。
所以最初的计划是双系统:
Ubuntu win10/win11 双系统方案
这也是大多数程序员的配置。当然,开发必须是了,windows娱乐,ubuntu工作。
我先在这里win10下安装了ubuntu,之后在win10 ubuntu在双系统的前提下,将win10升级成了win11.整个升级过程非常顺利,升级后没有变化(引导没有被破坏,ubuntu升级重启后,系统可正常使用ubuntu,此时,双系统升级为win11 ubuntu
。
而装Ubuntu也是一个老生常谈的话题,基本:
下载好Ubuntu用U盘制作U盘镜像
Win在10系统中划分部分磁盘Ubuntu使用
重启bios将启动模式设置为U盘,然后安装
我安装的是20.04版本的Ubuntu。
大概就是这样一个过程。网上有很多信息,随便搜一下就有了。有一点和之前安装的16一样。.04不一样,NVIDIA驱动安装比预期的要顺利得多。四年前,它还安装在笔记本上Ubuntu吃了很多苦头:ubuntu16.04下安装NVIDIA(cuda)-gtx965m相关步骤和问题[2],这次的NVIDIA驱动没有多少坑,只需安装正常的逻辑安装,不需要禁用任何东西。
进入新的Ubuntu系统,基本步骤大体也都一样:
先切换源,注意源的版本一定和你在一起ubuntu版本一致(不一致会导致各种软件不兼容,即unmet会有很多,这个我一开始没注意,折腾了很久),去找清华或者阿里源:
https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/
https://developer.aliyun.com/mirror/ubuntu?spm=a2c6h.13651102.0.0.3d151b117MRP65
然后把/etc/apt
中的source.list
取代国内源后:
sudoapt-getupdate sudoapt-getupgrade sudoapt-getinstallbuild-essential
安装Ubuntu在必要的组件之后,下一步是升级内核(Ubuntu-20.04默认是5.10核心)。至于为什么要升级核心,因为我是一个幻想13是一个相对较新的笔记本电脑,一些旧功能版本的核心不支持(如翻转屏幕,如键盘灯,指纹解锁),所以首先升级核心。
升级核心有一些坑,我参考ROG幻13安装ubuntu20.解决各种驱动问题[3]这篇文章确实帮了我很多,大概是,如果你从官方开始kernel[4]下载更新可能是官方的kernel中的libc6版本不兼容sudo apt-get update
有时候会出错,会报各种问题,需要下载合适版本的kernel才行。
如果你对内核有任何疑问,你可以看看这篇文章。简言之,升级内核有些,使用最新版本Ubuntu该系统将带来最新的核心。
接下来说说WSL2。
win11 wsl2 docker
WSL(Windows Subsystem for Linux)
是我在调研win11相关信息时看到的相关信息,我以前只听说过,但没有实际使用过。windows跑Ubuntu突然想到可以试试。
。可以让我这个习惯命令行的人windows发展也不难受。毕竟,如果是直接的话。ubuntu下一步发展,钓鱼聊天真的很折腾,我还是想实现类似macos上开发的效果,。
因为mac和nvidia水火不容,极度依赖我的深度学习nvidia使用显卡的人mac在网络不好的情况下,只能远程连接服务器开发。
貌似WSL2也比VMware虚拟机性能强一些(懂得小伙伴可以说下),也可以直接在windows中。
目前wsl的最新版是wsl2,wsl和wsl2的区别很大,男人的第六感让,所以选择使用wsl2.还有另一个原因wsl2下的linux可调用内核cuda。
首先升级win11,再装一个WSL专用驱动510.06_gameready_win11_win10-dch_64bit_international
,然后直接在win终端输入:
wsl--set-default-version2
此时默认使用WSl2了。
如果着急看WSL2可以直接使用吗?WIN跑下这个:
dockerrun--gpusallnvcr.io/nvidia/k8s/cuda-sample:nbodynbody-gpu-benchmark --- result: --- GPUDevice0:"Ampere"withcomputecapability8.6 >Compute8.6CUDAdevice:[NVIDIAGeForceRTX3050TiLaptopGPU] 20480bodies,totaltimefor10iterations:40.139ms =104.495billioninteractionspersecond =2089.903single-precisionGFLOP/sat20flopsperinteraction
如果输出正常,则证明WSL-NVIDIA驱动和你的显卡都能正确检测到。
安装Ubuntu
接下来安装Ubuntu一般建议在网上试试。中搜安装,但如果直接在WIN搜索11商店Ubuntu,
wsl --export docker-desktop-data D:\Docker\wsl\docker-desktop-data\docker-desktop-data.tar
wsl --unregister docker-desktop-data
wsl --import docker-desktop-data D:\Docker\wsl\docker-desktop-data\ D:\Docker\wsl\docker-desktop-data\docker-desktop-data.tar --version 2
docker镜像地址移到其他盘后,就可以放开手搞镜像了!
基于wsl2的docker镜像
既然都是镜像,为啥不直接找一个带有的镜像呢,直接在docker官网或者NVIDIA-docker[5]就可以搜到:nvidia/cuda:11.4.3-cudnn8-devel-ubuntu20.04
,然后docker拉一下就行
于是,我在wsl2中注销掉了之前的Ubuntu镜像,wsl --unregister Ubuntu
,并且删除之前的镜像。然后docker pull nvidia/cuda:11.4.3-cudnn8-devel-ubuntu20.04
拉取新的镜像。
运行一下试试,执行docker run -it --gpus all 42a32a65aa9d /usr/bin/bash
,注意要把--gpus all
加上,不然会检测不到显卡。
进入容器内部执行nvidia-smi
:
root@304af4811a38:/# nvidia-smi
Sun Jan 30 10:37:28 2022
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 510.39.01 Driver Version: 511.23 CUDA Version: 11.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 ... On | 00000000:01:00.0 Off | N/A |
| N/A 51C P8 8W / N/A | 0MiB / 4096MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
嗯,没毛病。
测试CUDA
编译https://github.com/NVIDIA/cuda-samples
中的代码,然后跑个deviceQuery
:
root@0b09ee5e9284:~/code/cuda-samples/bin/x86_64/linux/release# ./deviceQuery
./deviceQuery Starting...
CUDA Device Query (Runtime API) version (CUDART static linking)
Detected 1 CUDA Capable device(s)
Device 0: "NVIDIA GeForce RTX 3050 Ti Laptop GPU"
CUDA Driver Version / Runtime Version 11.6 / 11.4
CUDA Capability Major/Minor version number: 8.6
Total amount of global memory: 4096 MBytes (4294443008 bytes)
(020) Multiprocessors, (128) CUDA Cores/MP: 2560 CUDA Cores
GPU Max Clock rate: 1035 MHz (1.03 GHz)
Memory Clock rate: 5501 Mhz
Memory Bus Width: 128-bit
L2 Cache Size: 2097152 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: 102400 bytes
Total number of registers available per block: 65536
Warp size: 32
Maximum number of threads per multiprocessor: 1536
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 1 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.6, CUDA Runtime Version = 11.4, NumDevs = 1
Result = PASS
可以正常检测出卡,也可以正常运行。
再跑一个简单的矩阵乘法:
root@0b09ee5e9284:~/code/cuda-samples/bin/x86_64/linux/release# ./matrixMul
[Matrix Multiply Using CUDA] - Starting...
GPU Device 0: "Ampere" with compute capability 8.6
MatrixA(320,320), MatrixB(640,320)
Computing result using CUDA Kernel...
done
Performance= 294.72 GFlop/s, Time= 0.445 msec, Size= 131072000 Ops, WorkgroupSize= 1024 threads/block
Checking computed result for correctness: Result = PASS
NOTE: The CUDA Samples are not meant for performance measurements. Results may vary when GPU Boost is enabled.
嗯,也没毛病。
编译tvm测试
简单在WSL2下和在双系统Ubuntu下进行编译TVM测试,tvm版本用GITHUB上779dc51e1332f417fa4c304b595ce76891dfc33a
这个commit进行测试,win端调整到rog的性能模式,Ubuntu系统没有额外设置,cmake的设置相同,都使用ninja j8
命令进行编译。
WSL2和Ubuntu编译TVM差30s,将近2%吧,相差不是很大。其实这个对比不是很标准哈,两个系统的CPU最高频率没有统一,只是简单测测吧~
搭配VSCODE
使用VSCODE开发已经是很稀松平常的事儿了,VSCODE有个插件可以让我们很方便地连接远程服务器进行开发,就和本地服务一样。
同样的,VSCODE中也有一个插件直接可以连接WSL2下的docker,在windows下docekr run
之后,就可以在win下的vscode中找到这个docker容器:
执行Attach Vscode
之后就可以进入VSCODE的docker环境:
开发就和在Ubuntu下的VSCODE一模一样,有root权限,可以装插件,可以调试代码,想干啥就干啥。
到目前为止WSL2在WIN11上的开发一切顺利~
WIN11到底好不好用
刚拿到这个笔记本时是WIN10,也没有升级WIN11的想法,不过因为在win10中使用WSL2比较麻烦,而WIN11自带wsl2。于是乎就升级了一波WIN11。
整个升级过程比想象中顺滑,在设置里头就可以直接升级,下载更新、重启一气呵成,重启后就是新系统了,之前的所有软件都能用。
据说WIN11相比WIN10在CPU调度会差一点,打游戏会比较影响。不过我感觉不出来,使用上比WIN10界面好看些,其他核心操作和WIN10相差不大,对于触屏用户更友好些。
令我比较惊喜的是WIN11自带了类似MAC端付费应用Paste的核心功能,Win+V
可以直接展示最近的剪切板随便选择粘贴,图片也是可以的。
遇到的问题
有一个比较坑的问题,本来win11+Ubuntu20.04双系统用的好好的,突然有一天华硕让升级bios(从407->408),当时没有什么想法就直接升级了。升级完直接傻眼,发现进不去ubuntu系统了,而win11系统没啥问题。
以为是引导的问题,修改了半天grub引导,通过u盘ubuntu安装器fix-boot后也不行,试了种种方式都进不去,差点就要重装了。
最后偶然在reddit上查了下貌似是408版本不兼容ubuntu-20.04,直接降级bios就好了。
相关问题链接:
https://www.reddit.com/r/FlowX13/comments/sskb3q/updating_bios_seems_to_have_broken_my_ubuntu/
华硕bios下载官网:
https://www.asus.com/supportonly/ROG%20Flow%20X13%20GV301/HelpDesk_BIOS/!
使用lldb
用clang编译后的文件想要在VSCODE中debug,需要下一个codeLLDB,然后json中配置:
{
"type": "lldb",
"request": "launch",
"name": "lldb launch",
"program": "/path/to/a.out",
},
就可以了~
3080拓展坞
因为幻13可以通过专用的连接自己的拓展坞显卡,传输速率比雷电4要快不少,外接显卡几乎可以无损。于是在日亚上淘了个的显卡坞,7300+800的税,等了一个月终于到了。
首先这不是真正的桌面版RTX3080。这是rtx3070桌面版ga104核心的满血版。多了一些cuda核心而已。因为功耗限制,实际上比桌面版3070还要慢,也就是略弱于桌面端3070。不过我买这个主要是看重其16G的显存,真的很适合炼丹啊~
看大石头的评测,这个3080显卡坞在和幻13极限双烤开增强模式,GPU可以跑到150w温度82度,CPU可以跑到45W温度95度,说实话这温度有点高,如果自己平时使用的话还是建议调低点,毕竟这玩意儿比较娇贵。
有一点肯定要清楚,这显卡的性能和功耗是成正比的,不管是桌面级、笔记本还是嵌入式的显卡,都是功耗越强性能越强。
另外,在WIN11端切换3080显卡之后,重启成Ubuntu直接就识别为3080了,爽。
桌面配置
借着这次唠叨,顺便说下咱们不常见的,一开始想到用挂灯的场景是墨水屏,因为墨水屏不会发光,在白天还好,但是晚上就没法用了,虽然可以使用台灯照着,但是光不均匀或者说照不全,比如这样:
上面就是仅使用台灯的样子,上面的屏幕挂灯还没有开,这样办公太难受了。
如果开了屏幕挂灯的话:
可以看到墨水屏被照亮了很多...另外桌面也照亮了,台灯关了也无所谓,只有挂灯,看书没有任何问题。
这个灯是明基的,话说都配这么贵的墨水屏显示器了,不差一个挂灯了,之前用的小米的,感觉亮度有点不够,索性就配了个比较好的挂灯了。相比小米肯定高级很多哈,亮度提升了不少,最高亮度需要大电流的输出才行(1A有点勉强,1.5A-2A差不多),之前的小米就不用(因为没有那么亮),我挂了个充电宝就没任何问题了。
不过说实话貌似不是这么用的,人家是为了给你个环境光,照亮桌面,可以看书又不占地方,关键的是这个灯是非对称的(咱也不懂),就是不会照到普通的屏幕上给你反光(普通的屏幕是会发光的,和我这个墨水屏还不一样),但其实我是想让这个挂灯照到我的屏幕上的(因为墨水屏不发光嘛),但是我正常使用挂灯(明基这个)就照不到屏幕,这个确实不错,毕竟屏幕挂灯本应该不照屏幕以防反光。然后我只能强行调整一下挂灯的方向,让它尽量照我的屏幕,感觉有点为难人家。
我也拿普通屏幕试了试:
无论是上面的还是下面的屏幕,看的很清楚,简直太棒了~看代码打游戏啥的没有任何问题,感觉普通屏幕,使用挂灯,。
毕竟算是生产力了,屏幕挂灯用了就不会回去了。
这篇就讲这么多吧,下一篇就还是大家熟悉的技术文了~
参考资料
https://docs.nvidia.com/cuda/wsl-user-guide/index.html
https://zhuanlan.zhihu.com/p/455979556
https://www.codetd.com/fr/article/13628610
https://developer.nvidia.com/blog/leveling-up-cuda-performance-on-wsl2-with-new-enhancements/
https://l-zb.com/?id=49#
参考资料
[1]
白皮书: https://images.nvidia.cn/aem-dam/en-zz/Solutions/geforce/ampere/pdf/NVIDIA-ampere-GA102-GPU-Architecture-Whitepaper-V1.pdf
[2]ubuntu16.04下安装NVIDIA(cuda)-gtx965m相关步骤以及问题: https://oldpan.me/archives/ubuntu16-04-nvidia-cuda-gtx965m
[3]ROG幻13安装ubuntu20.04,解决各种驱动问题: https://zhuanlan.zhihu.com/p/455979556
[4]官方kernel: https://www.kernel.org/
[5]NVIDIA-docker: https://github.com/NVIDIA/nvidia-docker
整理不易,↓