# 目录

作为一个炼丹科研狗,偶尔总是会有在移动设备上测试模型的需求。目前有不少的移动端推理框架,比如腾讯的NCNN,小米的MACE等等。但是训练模型时一般使用的都是PyTorch框架,利用NCNN这类框架在移动设备上进行推理往往需要将模型转换为对应的格式。这一步一般都是天坑,常常会出现转换之后的模型不能用的情况。如果PyTorch中使用了某些移动端框架没有的算子,那更是天坑中的天坑。 最近PyTorch在移动端也开始发力了,推出了PyTorch Mobile,在IOS和Android设备上都可以很方便将模型转换过去进行推理。因为是PyTorch的亲儿子,所以转换模型十分方便,而且一般也不会出现算子不支持的情况(小声哔哔,我猜的)。本文主要参考Pytorch官方教程 PYTORCH MOBILE PERFORMANCE RECIPES (opens new window), 在安卓设备上对图片分类、目标检测和语义分割的模型进行了延迟测试,其他模型理论上也可以按照本文的方法进行测试。

随着深度学习模型参数量越来越大,如何使用多卡并行训练模型加速训练是机器学习系统需要考虑和优化的重点。多卡并行训练涉及到多张卡上的模型参数和梯度汇聚和分发,而多卡之间的通信带宽往往是有限的,如何设计一个高效的汇聚和分发算法最大化地利用这些通信带宽以提升训练效率是一个值得研究的问题。本文将从最为简单的多卡训练模型出发并分析其缺点,然后再介绍一种名为 Ring Allreduce 的算法是如何解决这些缺点的。

在深度学习中,数值表示是一个常常被忽略的内容,可能从事模型量化领域的研究人员会有所了解,但是大部分的研究人员都对其了解甚少。但是一个设计合理的数值格式能够更好地加速模型训练和推理,在深度学习的工业化和实际落地中是非常重要的。近年来,为了加速深度学习,进一步挖掘硬件的性能,业界发明了一些新的数值格式,如本文中所介绍的TF32和BF16格式。其主要思想是利用深度学习对表示范围敏感而对精度不敏感这一特性,重新设计浮点数的表示,达到了一个更加好的平衡。