前言

本博客的上一篇文章更新于2021年2月,距今已经有一年半了。这一年半我一切正常,没有经历任何糟糕的事情,一直没更新纯粹是因为太忙。一年半的高压下来,我的心态也变化了不少,这些不妨以后再写。

说正事。最近开始接触深度学习,跑了几个程序以后发现笔记本的 3050 Ti Laptop 的 4 GB 显存捉襟见肘,于是想配一台带有大显存的电脑。

8000 张图片,FCOS 训练,一轮近半小时,谁吃得消;batch size 也只能取到 4

方案

在选择显卡之前,首先应该考虑的是显卡插在哪里的问题。

我刚接触电脑硬件是在2015年,那时很流行E3,E5洋垃圾也很香,但是随着制程和架构的升级,这些型号无论是IPC还是主频都太过时了,况且配套的主板并不便宜。选一个现代的CPU吧又缺乏足够的理由,一是深度学习对CPU的要求并不高,二是我现在的主力笔记本搭载的5900HX也足够强大,我不想为好的CPU花两份钱。

其实说到底还是没有垃圾的产品只有垃圾的价格,我并不愿意付出很多金钱来购买一套不错的板U以应对我一般的需求,但是买洋垃圾又觉得钱花得不值。

有没有白嫖的方法呢?在我考虑这件事的时候,我的主力笔记本正压在前主力身上。

大约是2017年3月,我(准确地说是我家里人)买了一台华硕飞行堡垒FX63VD,i7 7700HQ + GTX 1050,陪伴我从高中进入带学,于21年11月光荣退役,此后又干过BT下载和爬虫。

两台电脑同时挂爬虫,这个项目我可能以后会专门介绍

这台机子已经经历过几次升级了。买的时候为了省钱选的是单条 8G 内存+1T 机械,同时买了 256 GB 的 NGFF 固态装上。显然内存不够,没用多久我就加了一条 16G 内存组成非对称双通道。因此它当前的状态是:内存 24 GB,SATA SSD 256 GB,HDD 1 TB。

从这台电脑上,我可以获得免费的基础平台,不止包含CPU。那么问题又来了——显卡插在哪里?

笔记本外接显卡的方案古已有之。在雷电接口普及之前,外接主要是走网卡或硬盘的 M.2 接口,前者是 PCIe 3.0 x1,后者是 x4。外接显卡算是成熟技术了,淘宝上很容易买到 M.2 转接 PCIe x16 的延长线。

M.2 转接 PCIe x16 延长线

但是这需要 M.2 支持 NVMe,即 PCIe 信号。说来奇怪,以我对当时的自己的认知,如果这台电脑的 M.2 接口支持 NVMe,我应该会选择一块 NVMe 固态而不是 NGFF,因此我一度怀疑它不支持。查了华硕官网的说明书,说是支持,但我仍然怀疑国行区别对待,毕竟这种事现在不在少数。直到我找出了原购买链接的交易快照,那里写着几个 128 GB NVMe 固态的选项,我才确定它支持 NVMe。

那么我可以把 NGFF 硬盘拆下来给显卡腾位置了。系统盘还得是SSD,所以我买了个 M.2 转 2.5 寸 SATA 的硬盘盒,很便宜,原 HDD 就扔到硬盘座上去了(下载机时期买的)。不知道我怎么想的,我还买了一条 16G 内存替换原装 8G,可能是为了弥补主力机没有 32 GB 内存的缺憾吧,事实证明没有必要,不过笔记本 DDR4 16G 2666 现在已经是白菜价了,不是很心疼。

本文主角之一,四年半下来积了很多灰了

总之装机方案为:退役笔记本 M.2 位置外接显卡,外接供电。

 

延长线选型

淘宝上有很多这类延长线,价格从20以内到200以上不等。之所以叫“延长线”而非“转换器”,是因为这类产品在 PCIe 信号通路上都是没有芯片的,直接导线连接。

下面这张图是售价不到20元的 M.2 A/E key 接口的延长线,M.2 端和 PCIe 端通过一根 USB 3.0 线连接:

下面这张图是售价超过200元的 M.2 M key 接口的延长线,M.2 端直接焊接排线,另一端通过两个 HDMI 接口连接:

经过仔细分析,这类产品只有两大类不同:

  • 带宽。上图第一个是 PCIe x1,第二个是 PCIe x4。

  • 电源接口。明显第二个比第一个提供了更多电源接口,甚至包括主板 24-pin,把电源启动也考虑进去了。

事实上,上面第二个正是专门为外接显卡设计的产品,也正因如此才敢卖那么贵。其实价格相比显卡只是很小一部分,但让我不爽的点在于我觉得它不值!

感谢群友提供表情包

话说回来,带宽还是要保证的,我不希望几千的显卡被 PCIe 3.0 x1 拴着跑;但是除了带宽以外的增值,我是一分钱都不会花的!

最终我选择了这款:

为避免广告嫌疑,此处不放链接

商品有很多选项,一个是正插反插(如图),笔记本 M.2 显然在反面所以选反插;长度我量了一下选最短的 0.15 m 即可,售价 63 元 + 运费 10 元。

但是它在电源方面是真的节俭,只带一个很小的电源接口,用来给 PCIe 插槽的 12 V 供电,3.3 V 是没有的。询问卖家得知 3.3 V 可以不接,12 V 当然是必须接的。

 

显卡选型

最初萌生攒机的想法其实是在半年前,那时我听说 Google Colab 还在用 NVIDIA Tesla K80 显卡,顺手淘宝一查,好家伙,2000 元即可拥有前双芯旗舰专业卡的性能!

后来我考虑了双芯需要模型拆分和功耗等各种因素,决定升级成 P40,价格也没差多少(其实我已经记不清了,这些卡最近波动比较大)。然后我又了解到定位数据中心的旗舰 P100,发现它的单精度竟然还不如 P40!这听起来很不合理,但是仔细调研以后我才明白,现在做深度学习已经不用 FP32 了,而是半精度 FP16 等格式,辅以混合精度、loss scaling等技术,甚至 H100 开始支持的 FP8。P40 在半精度方面没有优化,而 P100 能把单精度乘法器拆分成两个单元并行计算半精度(SIMD),使得 FP16 吞吐量达到 FP32 的两倍,这下就轻而易举地超过了 P40,稳住了老大地位。

事实上,Tensor Core 就是为这类应用而生,它的引入是从 Volta 架构开始的。此后的 Turing 即 RTX 2000 系列搭载第二代 Tensor Core,Ampere 即 RTX 3000 系列搭载第三代,每一代都有显著的升级,到了 Ampere 这一代,FP16 的 tensor 性能已经达到了传统 FP32 的 4 倍(数据来源)。因此,我开始把眼光转向更现代的架构。

*Tensor Core 带来巨大的吞吐量提升(来源

然而,因为众所周知的原因,近几年来普通消费者很难以合理的价格买到称心如意的显卡,甚至 P40、P100 这种卡都拿去挖矿了,那还有什么可选的呢?

当然,你可以选择矿卡,3060 的 12 GB 大显存对炼丹非常友好,闲鱼上矿卡价格也不错。其实我现在也有点后悔没有选3060,至少它便宜很多。

由于我的眼光是从 P40 这类 24 GB 显存的卡上转过来的,我一时间无法接受 12 GB 及以下的显存,再加上 Ampere 架构的限制和 3.0 x4 的发挥上限,可选的就不多了:

型号 核心 显存容量 显存类型 显存位宽 核心频率 显存频率 CUDA数量 淘宝价
RTX 3090 GA102 24 GB GDDR6X 384 bit 1395 MHz 1219 MHz 10496 4899
RTX 3090 Ti GA102 24 GB GDDR6X 384 bit 1560 MHz 1313 MHz 10752 7999
RTX A4000 GA104 16 GB GDDR6 256 bit 735 MHz 1750 MHz 6144 4699
RTX A5000 GA102 24 GB GDDR6 384 bit 1170 MHz 2000 MHz 8192 10800
A10 PCIe GA102 24 GB GDDR6 384 bit 885 MHz 1563 MHz 9216 15500

这里面 3090 默认矿不用想,几乎不存在例外,例外也不会让你捡到,4899买矿卡我是不愿意的。A4000 也是有很多挖矿的,再往上因为性能与价格不成正比了,应该就没有矿老板会那么疯狂了。

不过不成正比的我也不考虑,我最终选择了 A4000,在闲鱼上以 4300 的价格入手。对方是做电脑租赁生意的,卡是戴尔整机拆出来卖的,我愿意相信不是矿。

顺便,如果你能说服自己买 3090 Ti (应该没矿吧),那不妨考虑一下刚出的 RTX 4090。

 

电源选型

在那台笔记本还在做下载机的时候,我就已经改装过了它的供电,用一个 12V 200W 的开关电源接 19 V 升压模块供电,这个电源还给LED和硬盘盒供电,所以能节省几个插座位置,这是主要目的:

这下多出好多用电器,我不得不加一个排插,所以电脑供电可以改回原装的了,那么 200 W 正好可以分出 140 W 给显卡供电。

装上去以后我发现它在大负载下会响,可能是线圈在交变电流下碰撞产生的,让我非常害怕;而且它是被动散热,长时间工作怕是要烧坏。所以我后来还是买了一个服务器拆机电源,这个劲大:

 

组装

按照PCIe标准,这张的显卡能从插槽取电 66 W,从 6-pin 接口取电 75 W,并且加起来不超过 140 W。66 W 就是 5.5 A 电流,走一根 18AWG 的线虽然理论上可行但是我不大放心,所以把另一根原本走 5 V 电压的线也改成了 12 V。

注意右边中间

我担心过 3.3 V 不接会不会点不亮,因此还买了降压模块,不过事实证明并不需要。那些卖 200 多的模块上大多自带了 12 V 转 3.3 V 的 DC/DC 电路。

6-pin 这边,我买了一根延长线,然后把母口这一端剪了;板上 4-pin 配的线另一端是SATA供电,也剪了。正负各 5 根线全都被我焊在一起,负极接上了端子,正极接到保险丝然后再端子。

事实证明保险丝没什么必要,TVS二极管后来则直接去掉了

负极端子并非直接接到电源负极,而是再经过一个小电阻,用来测量电流。这个功能其实更没有必要,一是整套系统放在下面我看不见,二是功率在软件里也能看,只是现在显得高级。

由于接了分压器,显示的电流比真实电流小得多

显卡需要一个底座,我当然不会花钱买。我找出了为多年前的项目制作的多余的亚克力板,刚好 PCIe 板后面的槽中有一个位置能够装进螺丝,两者就这样固定起来。这时显卡装在上面会倾斜,有点危险,于是我用一个尼龙柱加尼龙螺丝顶住,它甚至还可以适配各种高度。

免费的底座

整套下来我一个人大半夜装了好几个小时,因为对这么贵的显卡用这么朴素的方案没什么信心,每一步都确认一下,所以比较慢。尤其是上电之前非常紧张。后来换电源重新上电就很淡定了。

最终系统;笔记本底座是免费的瓶盖散热法

测试

按照默认的风扇曲线,一跑深度学习很快就 90 度以上,很危险。我用 Afterburner 把风扇曲线拉高了很多,使得它能在 90% 转速下稳定在 80 度以下。淘宝上有卖改装风扇,我目前还没有必要买,明年夏天再考虑。

我把之前在 3050 Ti 上跑过的模型都重新跑了一遍,并记录了时间。有的模型还加大了 batch size 又跑了一遍,也能对训练速度有明显的提升。

模型 batch size 3050 Ti batch size A4000
resnet18 64 5m 38s 64 2m 47s
resnet50 16 18m 39s 16 8m 24s
64 6m 44s
regnet_y_400mf 64 6m 31s 64 3m 33s
regnet_y_1_6gf 16 28m 52s 16 15m 19s
64 7m 23s
FCOS 4 26m 25s 4 10m 27s
16 9m 20s

这两天 Stable Diffusion 和 NovelAI 很火,我也在玩。16 GB 的显存允许我把 batch size 拉满。我甚至用它生成的图来水报告。

原文地址:http://www.cnblogs.com/jerry-fuyi/p/16794895.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性