Created by: wanghuancoder
PR types
Performance optimization
PR changes
Others
Describe
背景: Paddle的Fetch性能不好。经分析Fetch过程中涉及多次深拷贝。
深拷贝分析: Executor&CPU: 1)原始数据->FetchVar; 2)TensorToPyArray错误使用pybind带来一次深拷贝;3)as_numpy中使用np.array()带来一次深拷贝; Executor&GPU: 与Executor&CPU相同; PE&CPU: 1)多Place TensorMerge;2)TensorToPyArray错误使用pybind带来一次深拷贝;3)as_numpy中使用np.array()带来一次深拷贝; PE&GPU: 1)原始数据->FetchTensors;2)多Place TensorMerge;3)TensorToPyArray错误使用pybind带来一次深拷贝;4)as_numpy中使用np.array()带来一次深拷贝; 动态图: 只有一次深拷贝,是合理的。
期望目标: 原始数据到用户使用的numpy变量只有1次深拷贝,可分两个修改完成: 第一步:去掉两个深拷贝:1)TensorToPyArray错误使用pybind带来一次深拷贝;2)as_numpy中使用np.array()带来一次深拷贝。同时,将PE&CPU模式,增加一次原始数据->FetchTensors的深拷贝。 第二步:优化多Place TensorMerge中的深拷贝。
本PR,完成第一步。
测试: Fetch数据正确性测试通过。 内存泄露测试,通过检测内存,未发现内存使用量上涨。 性能: ERNIE DOC模型,fp32性能提升4.7%。amp性能提升7.7%。