遇到的挑战:
-
如何找到最优的并行方案,不同并行方案的效率有很大差别?
-
新的平台一直出现,如何快速适应新的算子、平台?
如何自动生成对机器学习算法的优化?
-
计算图方面的优化;
-
并行的优化;
-
不同平台的优化;
团队在计算图上的优化:
什么是计算图优化?
- 这个图和指令流图类似;
- 定义一些运算规则对图进行优化,比如算子融合;(规则很复杂,目前有500+)
计算图优化存在的问题?
-
问题:鲁棒性问题,因为平台比较多,优化得可能不好;
-
问题:扩展性问题,不断地有新的硬件平台和算子出现;
-
问题:性能,采用程序优化很难有针对性,错失一些优化机会;
-
举例:先把简单算子复杂化,然后会出现合并的机会;
- 即使如此,对于有些平台,可能优化后的图性能会更差,因此很难将其添加到优化规则中;
- 即使如此,对于有些平台,可能优化后的图性能会更差,因此很难将其添加到优化规则中;
-
总结,图优化的复杂性;
解决办法?
-
不手工去定义规则,用程序优化;而是提供一种方法,自动地优化,并评估优化后的质量;
- 好处,减少代码量;
- 好处,可以带来最佳三倍的性能提升;
-
什么是图替换?
- 图的等价性,即优化前和优化后的图是等价的,执行的结果相同;
- 图的等价性,即优化前和优化后的图是等价的,执行的结果相同;
-
TASO 的工作流程:
-
先输入硬件平台的算子集合;
-
由图替换生成器,生成可能的替换规则;
-
由图替换验证器,验证图替换规则的正确性;
-
正确的图替换规则,会添加到图替换规则中;
-
-
如何生成可能的替换规则,如何验证替换规则的正确性?
-
利用图指纹技术生成可能的替换规则;
-
利用算子描述和定理证明器,验证替换规则的正确性;
-
-
图替换规则生成器;
-
根据硬件平台支持的算子,枚举所有可能出现的图;
-
由于枚举空间过大,只考虑有限规模的图,比如四个算子的图;
-
四个算子的图一共由66M个,考虑等价性,如果一一对比,则平方关系,复杂性高;利用图指纹技术产生随机化的输入,相同输入的输出一致,则图等价;(类似于FM的一致性验证)错了 是相同输入的输出不一致,则图必然不等价,只考虑输出结果一致的图;
-
下一步,要验证对任意输入的等价性,包括可以使用数学逻辑等;
-
可以利用自动的图定理证明器,证明图替换规则的等价性;
-
即便是新增加了算子,也只需要根据算子为图定理证明器定义一些规则,就可以自动的进行验证;
-
-
图优化器,考虑使用哪些替换规则;
-
主要基于每个算子的开销(硬件上测量),以评估图的开销;
-
根据算子,重新把过程跑一遍,大概只需要10分钟;
-
-
该方法的优化效果;
-
标准测试集能够达到近似的效果;
-
而对于新的结构,还没有被完全手工优化,因此效果比较好;
-
未来:
-
考虑是否可以将TASO基于图的优化,和TVM基于算子的优化结合起来;
-
TASO好像是开源的,可以体验一下;