为什么数字分析仍然是一个大问题? 提示:这是速度

2021-03-18 05:20:24

这是一个星期六在完善的季节开始(中间?);所以就像许多我正在拖延一样。我的经理和报告可能不会欣赏我花一个小时写作。尽管如此,关于NSAN的黑客新闻中有一个有趣的线程;运行单元测试时,您可以在LLVM中启用数值清理程序。我没有阅读它......这个想法似乎并不是新的,尽管它是快速而且可能最终在LLVM中的事实令人敬畏。

我对这个线程发表评论,希望能够扩展该评论​​。 GGM随访提到了NAG库维护者认为他们的惯例非常正确的优秀护理:

如果他们把它塞满了,桥梁在施工或火箭爆发期间跌倒了,他们知道它。

这绝对是真实的,并且人们正在使用机械工程,与EDA一起使用,解决PDE等,绝对需要确信他们使用的数值库是正确的机器精度。然后,它们是循环,数据结构等中的那些计算的循环,数据结构等的计算,使得精度不会降低到它们所需的公差之下(这是与数值计算的“业务逻辑”相互作用的方式)。

但深深的学习人们不在乎。至少直到它咬在屁股中。在我对软件工程行业的极限观点中,DL是最热门,最重要的地区。正确的?我的意思是,只看ML研究人员的议员!

好吧,显然一些深刻的学习人们关心。 TFP团队和他们的Pytorch对手1(几乎)总是关心数值精度的大声喊叫。一堆TFP人员甚至为特殊功能提交HLO实现2,以便其代码可以是XLA Jited以及TPU上运行。由于鲁伊开发人员这样的人,用于确保Twlite Matmuls在边缘设备上准确。在这里,您可以看到人们关心数值精度,性能和神经网络。一个人只能希望他们为临界ML Infra工作而获得报酬(我猜测)对于大多数CS专业是无聊的。我当然关心;我花了很多DEV循环将各种切割的循环移植到EIGEN 3,因此我们可以在CPU和GPU上揭开它,并在最终成为TFP的库中使用它。

“理论”NN研究人员,他们想要建立新的NN架构或描述和解决有趣的问题。它们通常在其输出中通常不需要超过几个精度。例如,来自百度+ nvidia(令人信服)的混合精度训练使您可以使用大多数Bfloat16 4.这些研究人员关心他们培训新模型并将其与基线进行比较的时间(以及使用相同的GPU训练更大的模型)。换一种说法;较低的精度是一个功能,而不是一个错误。如果模型不起作用,他们可以使用大量的创意修改,他们可以使用隐式正确的精度来使用。剩余网络,各种归一化层,专家混合,亚当,辍学,重量衰减,......所有这些技巧可能都有助于纠正一些数值精确问题。或者只是在他们身边工作。我们仍然处于毕业生梯度下降5的黄金时代,在那里整洁的架构想法可以在模型质量,发展领域和(最后但并非最不重要)的大区别,并帮助您发布您的下一篇论文。

“更多应用”研究人员主要专注于将NN模型带到真实产品6.速度也同样重要。通常,产品需要专注于分类,排名,回归和上下文匪徒足以改善当前的度量。您的分类器需要多少位精度?提示:正常量化更好,您通常可以在INT8中完成所有。也许在蒸馏大型模型后。你有很多数据。在下一个型号在6,12,24小时内推出之前,您可以了解能够在数据消防站上培训。和长尾嵌入分布。使用CPU,GPU,TPU和SCANN预算中的推理工作。

研究组织引导了关于两件事的关注7:他们的研究人员可以尝试想法的速度(并帮助客户组织将研究获得研究),“OMG我要为所有新GPU支付的费用是多少?” 8.

你有它。希望我确实相信你的速度优先于数值准确性,因为大多数人在新的热情工作,这可能只是很好。

也就是说,随着对数值计算,NNS等的沉重需求,向SIMD移动(以及其封存GPU和TPU上的兄弟姐妹),缺乏对计算机epsilon准确计算的全面的工作,从而产生了各种问题。让我们作为一个例子拍摄softplus和xla。多年来只有几个公关:

(有几个其他人;这是一个快速搜索)。您可以敢打赌,其中有几个内部和外部错误引导到每个修复程序中的每一个。从“这个模型没有舷外斜线”,为什么输出飙升到JAX / ENABLE JIT编译时,为什么输出旺盛(上帝只想它快速!)“来解决这个问题?

权衡是真实的。我最近从一个应用的上下文匪盗团队中听到了TFP人员,Lambertw实现爆发并减慢了他们的XLA CPU-JU-Jited代码。目前的实现使用广播的哈利的方法来迭代该值直到收敛。我的初始思想是刚刚为循环设置2或4的最大值。毕竟,哈尔利的方法可能会在2-4次迭代中为您提供机器epsilon。好吧,因为它甚至有1 onl_loop迭代xla hlo气球。也许这是因为STONPING标准以某种方式被编译不满?唯一的方法是调试HLO,这就在我的薪酬等级上方。

也许(可能)NSAN将成为解决方案的一部分。也许我们应该考虑其他有趣的方法,让NN研究人员兴奋?例如,如果我们可以编写更好的图形转换,或者mlir通过,可以在功能等同的同时更快地制作代码并保留数值稳定性?或者只是做得更好地修剪死亡数分支?或许我们可以使用ml?我们已经探索了重写ML编译器的自动图形,并且在不太遥远的未来,我们可能希望为LLVM调查这一点。

由于编辑审查这篇文章并指出混合精密培训纸。 3巨大的巨大感谢原始的厚裤作者,斯蒂芬L. MOSIER,他们让我们允许制作港口!