[dev] OpenCL Image2D跑通并验证5个高优模型
Created by: ysh329
背景
目前OpenCL Image2D高优Kernel已经合如develop完成。需要对5个高优模型尝试以Image2D形式跑通,这5个模型分别是:
- MobileNetV1;
- MobileNetV2;
- MnasNet;
- yolonano;
- video-sr。
工作量
- 【已完成】对OpenCL NCHW形式的Kernel注册部分,进行注释,避免与ImageDefault在选Kernel时发生选择冲突或影响;
- 【已完成】以Float Image2D形式跑通并验证结果:该过程将在下面详细说明;
- 【已完成】该过程可能会修改Pass以适配转换目标为Image2D OpenCL的模型;
- 【进行中】错误模型定位与修复(lens_mnasnet、lens_yolonano):Fluid与lite每层输出结果比较,lite::Tensor * Predictor::GetTensor(string)的接口;
- 【已完成】Float到FP16的支持:Kernel层面、框架层面。详见FP16支持方案(见后文);
- 【TODO】所有高优Kernel负责人自查对应单测在FP16下是否正确;
- 【TODO】以Image2D FP16,跑通5个高优模型并检查精度是否符合;
- 【TODO】超分模型video-sr计算过程会有维度变化,需要实现Conv、Fc等Kernel的ReinitWhenNeeded方法,参考CPU conv: https://github.com/PaddlePaddle/Paddle-Lite/search?q=ReInitWhenNeeded&unscoped_q=ReInitWhenNeeded。
模型验证流程
- 模型转换:使用model_optimize_tool对模型转换,target选择opencl。查看该过程: a. Static pick kernel pass过程选择的kernel是否正确:是否是opencl/image2d的 b. 根据log打印出来的图,查看拓补图对于layout op加入是否正确。
- 模型单测:针对模型实现对应单测:需事先跑fluid拿到验证数据,再跑opencl结果,并做二者结果验证,流程仿./lite/api/mobilenetv1_test.cc,该过程使用优化过的naive_buffer格式的模型,因此需事先做模型转换(见步骤1)。
注:
- 步骤1-模型转换,需要所有高优OP合入(目前尚未合入的有scale、concat、sigmoid);
- conv3x3在5个模型(mobilenetv1/v2、超分、mnasnet、YOLONano)中都有用到,正在加,但并不影响模型转换。
后续工作
该过程会建立新看板issue页面,不在本看板跟进。
- 将Image2D Float Kernel全部改为Image FP16 Kernel;
- 验证kernel单测正确性;
- 跑通并验证5个模型正确性。