带你读《2022技术人的百宝黑皮书》——淘宝逛逛ODL模型优化总结(4) https://developer.aliyun.com/article/1246918?groupCode=taobaotech
除此之外,Cuda Graph优化无法将其覆盖,最终导致在晚高峰期间,GPU的算力无法得到充分释放,模型的RT及P99上涨严重。服务的稳定性无法得到保障,无法为我们的推荐服务提供低延时的排序服务。
优化方案
我们在离线模型训练阶段,对tf框架中的keras.layers.Dense类的实现部分进行了简化,替换成了简单的Reshape-MatMul-Reshape结构(可参考keras.backend.dot实现),在算法同学使用优化后的tf框架进行训练后,我们重新部署了模型,结构变化符合预期,全连接网络的结构变得更加简洁,且避免了引入与Cuda Graph不兼容的算子,这也帮助我们在模型的GPU优化部分拿到了最大的收益。
后续的一些适配操作
我们打开了Cuda Graph优化后,发现集群出现了coredump,经过分析堆栈发现问题出现在了CallGraphOP节点的内部,原因应该是Cuda Graph不支持该算子。从CudaGraph原理上来看,它需要capture一个较为固定的指令集流程,所以它对一些算子可能存在着天然的排异(如带有逻辑分支的算子),意味着在capture子图的流程中,需要做一些兼容和适配的工作。
适配方式也很方便,直接将CallGraphOP加入CudaGraph组图脚本中的BLACKLIST中即可,这样在Cuda Graph子图切割的过程中,就会把CallGraphOP自然地排除在Cuda Graph子图外边了。
带你读《2022技术人的百宝黑皮书》——淘宝逛逛ODL模型优化总结(6) https://developer.aliyun.com/article/1246916?groupCode=taobaotech