数据、算法和计算力是推动人工智能发展的三大要素。随着高性能 GPU、TPU 的出现,人们似乎正在将算力的利用推向极致。
去年 10 月,「最强 NLP 预训练模型」Bert 问世,横扫 11 项 NLP 任务记录。但仅仅过了 8 个月,这一「最强」模型就遭到 XLNet 的碾压,后者在 20 项任务上超越前者,又一次刷新 NLP 预训练模型的各项记录。
但除了「最强」之外,这些模型似乎也是「最贵」的。
早在 Bert 问世之时,深度好奇 CTO 吕正东就曾表示:「BERT 是一个 google 风格的暴力模型,暴力模型的好处是验证概念上简单模型的有效性,从而粉碎大家对于奇技淫巧的迷恋; 但暴力模型通常出现的一个坏处是'there is no new physics',我相信不少人对 BERT 都有那种『我也曾经多多少少想过类似的事情』的感觉,虽然也仅仅是想过而已。」
无一例外,碾压 Bert 的 XLNet 也没有走出「暴力美学」的范畴,普通研究者看了其训练成本之后,只能说声「打扰了……」
那么,令普通研究者望而却步的计算力到底有多贵?机器之心从原论文出发统计了大模型的训练成本,下面让我们仔细算一算这笔账。
1. 语言模型
BERT:1.2 万美元
GPT-2:4.3 万美元
XLNet:6.1 万美元
2. 高分辨率 GAN
BigGAN:2.5 万美元
StyleGAN:0.3 万美元
这几种都是比较有代表性的大模型,如果读者也算过大模型训练成本,欢迎留言对比呀。
计算力到底有多贵?
目前训练神经网络主要还是使用 GPU 或 TPU,先不说英伟达的各种高端 GPU 有多贵,云计算上的高性能计算也不便宜。我们以谷歌云为例,Tesla V100 每小时 2.48 美元、Tesla P100 每小时 1.46 美元,谷歌 Colab 免费提供的 Tesla T4 GPU 每小时也要 0.95 美元。
对于大模型来说,最合理的计算资源还是 TPU,因为它能大大降低训练时间,且成本换算下来还比较有优势。TPU 的费用如下图所示:
注意这里还有一些换算关系,TPU 数量并不能简单地通过一块两块的方式统计。从大到小可以分为 Pod、Cloud TPU device、TPU Chips 和 Cores。上面的价格是一个 Cloud TPU device 的费用,它包含 4 块 TPU Chip,且每块 TPU Chip 有两个核心(Core)。
TPU v2 和 TPU v3 的计数方式差异主要体现在 Pod 上,一个 Cloud TPU v2 Pod 有 64 个 Cloud TPU,即 512 个 TPU 核心。而一个 Cloud TPU v3 Pod 有 256 个 Cloud TPU,即 2048 个 TPU 核心。一个 Pod 中的所有 TPU 设备都是连在一起的,所以它们天然可以联合做模型训练或推断。
因为论文中描述的 TPU 单位是不同的,我们会最终转化为 Cloud TPU,并统计训练大模型所花费的成本。
为什么说 TPU 性价比高于 GPU
很多读者知道 TPU 性价比高,但不太了解到底高多少。在下图中我们可以看到各种设备训练相同 ResNet-50 所需要的时间,其中红色数字表示芯片数量。
如上图所示,一个 Cloud TPU v3 训练 ResNet 需要 183 分钟,它的价格为 8$/h;8 块 Tesla V100 训练 ResNet 需要 137 分钟,它的价格为 19.84$/h。这样算起来,TPU v3 总共费用需要 24.4 美元,Tesla V100 需要 45.57 美元。不过这样计算也有一丢丢不公平,因为 TPU v3 慢了 47 分钟,时间也是一种成本。
大模型到底有多贵?
自然语言到视觉,大模型的训练费用越来越高,但具体高到什么程度很少有量化对比。如下在计算不同模型的单次训练费用时,因为调参之类的费用没办法统计,所以我们就忽略了。此外,因为 GPT-2 原论文中没有描述训练配置,论文作者只在 Reddit 中简要描述一段,所以我们以 Reddit 中的数据为准。
BERT
原论文中描述,大型 BERT 模型在 16 个 Cloud TPU 上需要训练 4 天:
Training of BERT_BASE was performed on 4 Cloud TPUs in Pod configuration (16 TPU chips total).13 Training of BERT_LARGE was performed on 16 Cloud TPUs (64 TPU chips total). Each pretraining took 4 days to complete.
现在我们来算一下成本,16 个 Cloud TPU v3 总训练成本为 16×8×24×4=12288 美元。有研究者在 Reddit 中回复作者,他们可以使用更便宜的抢占式(Preemptible)TPU 训练模型,那样成本约为 16×2.4×24×4=3686.4 美元。不过一般的 TPU 优先于抢占式 TPU,如果它们需要计算资源,可以暂停抢占式对资源的调用。
BERT 的作者在 Reddit 上也表示预训练的计算量非常大,Jacob 说:「OpenAI 的 Transformer 有 12 层、768 个隐藏单元,他们使用 8 块 P100 在 8 亿词量的数据集上训练 40 个 Epoch 需要一个月,而 BERT-Large 模型有 24 层、2014 个隐藏单元,它们在有 33 亿词量的数据集上需要训练 40 个 Epoch,因此在 8 块 P100 上可能需要 1 年?16 个 Cloud TPU 已经是非常大的计算力了。」
为了做对比,这里统一用一般的 TPU 价格计算成本,因此 BERT 训练一次大概需要 1.23 万美元。
GPT-2
今年另一个非常受关注的语言模型就是 GPT-2 了,它充分展示了什么才算大模型。我们可以理解为,GPT-2 就是在 GPT 的基础上放大十多倍,它需要的算力应该比 BERT 还大。堆了这么多算力与数据,GPT-2 的效果确实惊人,它根据一个前提就能从容地把故事编下去。
但是在 GPT-2 原论文中,我们没找到关于算力的描述,只找到了疑似论文作者的描述。他表明 GPT-2 用了 64 个 Cloud TPU v3,训练了一周多一点。
如果按这个数据,那么训练成本为 32×8×24×7=43008 美元,这个成本已经是训练 BERT 的 3 到 4 倍了。
XLNet
2018 年,谷歌发布大规模预训练语言模型 BERT ,为 NLP 领域带来了极大的惊喜。但最近,Quoc V. Le 等研究者提出的 XLNet 在 20 个任务上超过了 BERT 的表现,并在 18 个任务上取得了当前最佳效果。既然效果这么好,那么它的成本会不会也超过 BERT?
在原论文中,作者表示 XLNet 大模型在 128 个 Cloud TPU v3 下需要训练 2 天半:
We train XLNet-Large on 512 TPU v3 chips for 500K steps with an Adam optimizer, linear learning rate decay and a batch size of 2048, which takes about 2.5 days.
这样算起来,128×8×24×2.5=61440 美元,没想到 XLNet 训练一次的费用比 GPT-2 还高,达到了 BERT 的 5 倍。既然成本这么高,以后可以考虑用预训练的 XLNet 代替 BERT 了。
在看了 XLNet 的算力成本之后,有开发者感叹:「谢天谢地我不在 NLP 领域工作,要是让我去说服老板训练一个模型花 6 万多美元,而且还不能保证这个模型一定好用,我觉得我会哭……」
那么问题来了,NLP 算力烧钱,视觉模型就省钱吗?
我们拿视觉领域比较有代表性的大模型 BigGAN 和 StyleGAN 来算一笔账。
BigGAN
视觉模型中,常见高成本任务就是训练高分辨率的 GAN 了。在去年 BigGAN 中,研究者表示他们训练 512×512 像素的图像需要 64 个 Cloud TPU v3,训练 24 到 48 个小时:
We train on a Google TPU v3 Pod, with the number of cores proportional to the resolution: 128 for 128×128, 256 for 256×256, and 512 for 512×512. Training takes between 24 and 48 hours for most models.
如果我们用最大训练时间 48 小时为基准,那么训练成本为 64×8×48=24576 美元。是的,BigGAN 的训练成本也比 BERT 高,大约是它的两倍左右。
StyleGAN
最后,我们统计一下 StyleGAN 的训练成本,因为这篇论文是英伟达提出来的,所以用的是 Tesla V100。该论文使用的 FFHQ 数据集由 1024×1024 的人脸图像组成,模型使用 8 张 Tesla V100 需要训练一星期:
Our training time is approximately one week on an NVIDIA DGX-1 with 8 Tesla V100 GPUs.
这里我们按照谷歌云的价格计算总成本,从而更好地做对比。总体而言,训练成本为 8×2.48×24×7=3333.12 美元。可能因为数据集仅限于人脸,StyleGAN 的成本要比 BigGAN 低很多。
没有谷歌级别的算力,要怎么取得研究突破?
在算完算力这笔账之后,我们可以得出一个结论:以谷歌、Facebook 等巨头为首的大型公司似乎才玩得起这种大模型,这种算力上的碾压是普通研究者无法抗衡的。那么,无法获得这种大规模算力支持的普通研究者路在何方?他们要怎样才能取得研究突破?
在这一问题上,致力于 AI 和游戏研究的纽约大学副教授 Julian Togelius 给出的答案是:不走寻常路(By being weird)。
他解释说,「那些公司虽然规模庞大,但它们也痴迷于保持自己的灵活性。其中一些公司在一定程度上取得了成功,但它们不敢像一个疯疯癫癫的教授一样特立独行。一个只有几个学生和几台电脑的教授永远无法在直接竞争中抗衡 DeepMind 和 FAIR。但我们可以去尝试那些看起来完全讲不通的方法,或者去破解那些没有人想要去尝试解决的问题(因为那些问题看起来不像问题)。」
Julian Togelius 教授还以自己为例,证明了这种做法的有效性。他表示,自己在研究生涯中做的那些有用、有价值的事情往往都是去解决一些别人没有想到要去解决的问题,或者尝试一些原本看起来行不通的方法,最后的结果都出乎自己的预料。
对于 Togelius 教授的观点,有人表示支持,并指出很多创业公司就是靠「不走寻常路」才建立了竞争优势。
但也有人提出了质疑,认为 Julian Togelius 教授提出的观点可能存在很大的「幸存者偏差」。这位质疑者认为,我们不应该不顾别人阻拦就一头扎进某个问题。他认为,我们正在推行一种文化,即鼓励人们去做自己认为对的事情,哪怕所有人都告诉他不要去做。虽然有时候一意孤行会取得成果,但鼓励大家都这么做并不合适,因为只有一小部分人最后会取得成功。ta 还引用了 Yoshua Bengio 在采访时说过的一句话:「光有自信还不够,你可能会因为自信而犯错。」
当然,对于 Togelius 教授的建议,我们要理性看待。无论该建议是否可行,他都为我们做了一个很好的榜样,说明算力不等于一切。
正如有些 reddit 评论者所指出的,那些获得最佳论文奖项的研究多数是用中小级别计算机就能完成的,不需要谷歌级别的算力。因此,普通研究者要取得突破,算力可能从来都不是真正的限制。
https://www.reddit.com/r/MachineLearning/comments/c59ikz/r_it_costs_245000_to_train_the_xlnet_model512_tpu/
https://www.reddit.com/r/MachineLearning/comments/9nfqxz/r_bert_pretraining_of_deep_bidirectional/