どのように対処するためのチャレンジ側推論エンジン、エンジニアアリ|オープンソースの背後にありますか?

画像

アリの姉妹REVIEW:MNN(モバイルニューラルネットワーク)は、5月7日、今年のGithubに正式にオープンしました。淘宝網の無線開発の専門家 - 皆のためのGMTCグローバルフロントエンド技術会議中(緑から)チェン劉は思考におけるオープンソースのMNNの開発を共有し、AIの淘宝網モバイル体験で要約するには、モバイルAIの開発を理解します条件とシナリオだけでなく、モバイル/のIoTの深さを理解するためのサイド推論エンジン最適化戦略によって。

オープンソースと背景

画像

第三の波を迎えた2006年以来、人工知能、。2016年、2017年AlphaGoと獅子では傑柯、完全に世間の目に人工知能を破りました。ホット人工知能の後ろに、ビッグデータは、深い学習の発展を蓄積するだけでなく、デバイス数の力を高めています。トーチ、カフェからTensorFlow、PyTorchに、というようにCoreMLモバイル側、NNAPI、NCNN、MACEとのための、より多くの - 同時に、深い学習の枠組みも進化しています。淘宝網深い学習推論エンジンMNNも、2019年5月にオープンソースを発表しました。

画像

MNNは、ニューラルネットワークモデル、変換および推論の深さの最適化をカバーし、その端部にコア推論操作上の問題を解決するために、ニューラルネットワークモデルの深さ、軽量深い学習推論エンジン側です。現在、MNNは、手洗い、手の猫、Youkuの、一緒に費用対効果の高い、20以上のApp UC、豚を飛んで、使用したいKN、生中継、短いビデオ、検索勧告、商品画像の検索、インタラクティブ・マーケティング、株式の発行、に既にありますリスク管理およびその他のセキュリティのシーン、回日の何百万、数百の安定動作。また、言及キャビネットや他のIoTデバイスからの新人にも適用されます。2018では、二から一一ショッピングセクション、MNNの日の猫のショーは赤い顔を笑顔、星のモーラの戦闘シーンなどの使用を掃引。

オープンソース・アドレス

このプロジェクトはGithubの中で開いてきました

↓↓を識別するFangerウェイコード

Githubのあなたはより多くの詳細については、ダウンロードリンクを取得することができます。

画像

MNNは、プロジェクトがより受け、開発の反復の年に比べ、2017年から開始し、二から一一淘宝網の試験に合格した後、オープンソースプロジェクトは、小さな半年間の最後のオープンソースの変換後、後半に2018年にスタートし、今年5月には公式のGithubで開きます。

开源首先还是因为经历过双十一之后,我们觉得自己做好了准备,开源有助于我们鞭策自己,把 MNN 做的更好;另一方面,业界的开源方案,不论是 TensorFlow Lite 、 NCNN 还是 Mace ,都给了我们很好的输入和借鉴,我们也希望借着开源,将我们的思考和创新回馈社区。

下文将主要围绕着 MNN ,来介绍淘宝在移动 AI 上的一些实践经验。

挑战与应对

画像

端侧推理引擎面临的挑战中,碎片化是最为显著的,这种碎片化是多层次、多维度的 。

  • 训练框架上, Caffe 、 TensorFlow 、 PyTorch 、 MXNet 在训练模型时都很常用;
  • 计算设备上, CPU 、 GPU 已是主流, NPU 、 TPU 渐渐成为标配, DSP 、 FPGA 在 IoT上也很常见;
  • 算子层面上,众多参数会形成不同的组合,从而对应出不同的优化方式,轻量化和通用化需要取舍;

画像

一款优秀的端侧推理引擎,就需要在这样碎片化的环境下,利用设备有限的资源,尽可能发挥出设备的性能。为此,也需要在转换、调度、执行上加入相应的优化策略。下文,会就其中的部分展开说明。

转换工具

模型优化

画像

在模型优化中,MNN 引入了前端的概念来统一训练框架。不同的前端负责加载不同训练框架的模型,统一转换为 MNN 的模型格式。对于最常用的训练框架 TensorFlow 和 Caffe ,我们提供了独立的前端;其他训练框架,比如 MXNet ,则需要先将模型转换为 ONNX ,再通过 ONNX 前端加载。这里,由于 TensorFlow 的算子颗粒度相比 Caffe 和 ONNX 要更小,我们引入了图优化的模块来对齐算子之间的颗粒度。模型转换之后,会经过优化器优化,包含算子融合、算子替换、布局调整等等。之后,可以选择对浮点模型执行量化压缩。目前模型压缩的模块还没有开源,我们会在完善之后,将相关代码开源。这些步骤都完成之后,会使用 flatbuffer 来保存部署模型。

图优化

画像

这里以 RNN-GRU cell 为例,说明一下图优化。

左图是 RNN-GRU cell 在 TensorBoard 中的可视化描述。它足足包含了 3584 个节点,而每一个节点都代表了一定的数据读写或运算,累积起来的总量非常大。然而,所有这些节点可以打包使用一个大颗粒的算子来替代。这不仅大幅降低了部署模型的大小,还可以在大颗粒算子的实现中聚合大量的计算,避免不必要的数据读写。

右图展示的是一个实际业务模型在图优化前后的性能对比。在华为 P10 、红米 3x 、小米 6 上都有 1 倍左右的性能提升。而如果是双向 GRU ,效果还会更明显。

算子融合

画像

再以 Convolution、Batchnorm、Scale、ReLU 为例说明优化器中的算子融合。

首先融合 Convolution 和 Batchnorm,Convolution 的 weight 等于 weight 乘 alpha ,而 bias 等于 bias 乘 alpha 再加 beta ;而后融合 Convolution 和 Scale ,融合过程和 Batchnorm 类似;最后融合 Convolution 和 ReLU ,在输出结果前,计算激活函数 ReLU 即可。

这样,四个算子就可以合并成一个算子。融合的过程避免了三次 tensor 读写、两次 tensor 乘加。优化效果:MobileNet V1 在小米 5 和华为 P10 上有 20 ~ 40% 的性能提升,效果还是比较明显的。

智能调度

整体设计

画像

在调度上, MNN 将每一类计算设备抽象为一个后端,将算子在特定后端上的实现抽象为执行器。后端负责特定设备上的资源分配和计算调度,执行器负责具体的实现。后端和算子的添加都通过注册表来实现,这是一个双层注册表结构,拓展起来就相对灵活。

调度时,可以为子图选择相应的后端,再由后端创建出相应的执行器,组成管线;也可以为子图选择后端组,实现混合调度。比如,在 GPU 上不宜实现排序算子时,可以回退到 CPU 来执行。

現在、CPU上のMNNは、それぞれ、76事業者、メタル、OpenGLベースのCNNネットワークカバー、OpenCLのとバルカン29の55と31を実現しています。

キャッシュ管理

画像


あなたはすでに適所にアクチュエータ、サブグラフやパイプラインを作成した後。ダウン、すべてがそれぞれの後端にメモリを割り当てるために、テンソルの形状を計算する必要があります。次に、アクチュエータ、アクチュエータの準備のために、その後のすべての良い事前適用バックエンドに必要なバッファのために。実行後、戻りテンソルをすることができます。

アプリケーションの製造におけるすべてのメモリは、メモリを解放、これ頻繁にアプリケーションを避け、同じの入力の形状ならば、あなたはテンソルを再利用し、バッファリングすることができ、その後の推論に必要な推論を完了しているので、変更のための入力時間の形状のみ唯一のメモリ割り当てを調整する、形状計算から開始する必要があります。同時に、バックエンドにおけるアクチュエータとの間のキャッシュのバックエンドの統合管理の使用は、キャッシュが十分大きくメモリ要件を低減する、再利用することができます。メモリMNNを割り当てるときに加えて、デフォルトに並ん32、Qiyouリチウムのメモリへのデータの読み書き。

最適化を実行します

レイアウトデータのコンボリューションスライディングウィンドウ

画像

パフォーマンス上のデータの配置多大な影響。

レイアウトNCHWでまず見て、どのように深さ方向3x3の畳み込みを使用してSIMD加速。

データを読み出す際に、まず、ワンタイムは4は、2つのライン同様の読み出しフロートように、第1行のデータを読み取り、この場合には、データの3本の線、すなわち、2つの出力を計算するのに十分に読み出し、 、データの一部が多重化されてもよい;そして、データ多重化を向上させるために、第4行が取得されますが、データを読み取る、計算を2行2列、すなわち、ループ展開を導入することができるが、残りの25 5および21〜25をSIMD演算を使用していない境界輝度目、リーダは、1サイクルの計算を完了することができ、このように、いくつかのチャネルが完了した後にそれに応じて計算することができます。

しかし、SIMDをフルに活用することができませんでしNCHWレイアウト、でフットプリントのパッケージの多くのサイズ、多くの支店を最適化するために、同時に、加速しました。

画像

NC / 4HW4レイアウトで別の表情は、SIMDアクセラレータを使用する場合は次のようです。

这里的 "C/4" 指的是按照 4 个通道对齐的方式重排数据。重排所有输入和权重数据后,每次 SIMD 读写都天然是 4 个通道的输入数据和 4 个通道的权重数据。这样,不论 kernel、stride、dilation 怎么变化,我们都可以简单地使用 for 循环和 SIMD 的一套通用优化完成卷积计算。既不会有边缘数据无法加速的问题,也不会对包大小造成影响。

Winograd

画像

对于对于 KxK 卷积,可以使用 Winograd 算法进一步加速。MNN 中支持 2x2 到 7x7 的 Winograd 实现。Winograd 计算时,需要把输出拆分成 NxN 的小块,把输入拆分成 (N+K-1)x(N+K-1) 的小块。这样,问题就可以简化为两个小矩阵的卷积。

画像

再套用 Winograd 的公式,将矩阵间的卷积运算转换为矩阵点乘运算。在这个过程中,除了矩阵点乘外,还引入三个矩阵转换,分别是输入矩阵 d 、权重矩阵 g 和结果矩阵 Y’ 的转换。其中,权重转换时, G 矩阵可以利用中国剩余数定理计算, GgGT 就可以在准备执行器时提前计算;输入转换和输出转换时用到的 A 和 B 矩阵需要根据 N 和 K 计算,我们在代码中内置了几种优化后的组合,所以实际计算时,这两个转换并不需要经过复杂的矩阵乘法。

这样,原来矩阵卷积所需要的 9x4 次乘法计算就可以用矩阵点乘的 4x4 次乘法计算代替。只考虑乘法耗时的话,加速了 2.25 倍。示例中, K=3,N=2 ,但实际使用时,可以选择更大的 N 值,获取高的加速倍数,但也要相应消耗更多的内存。

Strassen

画像

MNN 可能是端侧推理引擎中,第一个应用 Strassen 算法优化矩阵乘法的。

Strassen 在计算矩阵乘法时,首先需要将矩阵平均拆分成四个小矩阵。这里使用 a11 ~ a22、b11 ~ b22、c11 ~ c22 代表四个小矩阵,计算过程一共需要8次小矩阵乘法运算。

这里可以引入中间小矩阵, s1 ~ s4、t1 ~ t4、m1 ~ m7、u1 ~ u7 。其中,只有 m1 ~ m7 包含小矩阵乘法,一共 7 次小矩阵乘法运算。而其他的,只包含小矩阵的加减法。也就是说,通过 4 + 4 + 7 次小矩阵加减法,替代了一次小矩阵乘法。

与原来的矩阵乘法相比, Strassen 的时间复杂度从 n 的 3 次方,降低到 n 的 2.81 次方。在矩阵较大时,矩阵乘法远远慢于矩阵加减法,收益就更明显。

画像

在 MNN 中,我们会递归使用 Strassen 。也就是说,递归拆分矩阵。在矩阵足够大时,继续拆分;在矩阵不够大时,使用普通的矩阵算法。这里使用减免的矩阵乘法开销作为收益,使用小矩阵 s 、小矩阵 t 、小矩阵 u 矩阵的加减法开销之和作为代价,收益大于代价时,就可以考虑使用 Strassen 算法。

链路优化

画像

链路优化可以举一个 19 年春节淘宝扫年货的例子。在获得手机相机输入后,每一帧的图像首先需要经过一次预处理,将图片缩放到年货检测模型的输入大小上,然而再经过推理,判定图像有没有年货,如果有,就发放相关权益。这个过程中,图片预处理的耗时也不容忽视。降低这个耗时,就可以帮助我们提升帧率,从而改进用户体验。为此,我们引入了一个轻量级的 2D 图片处理库,可以高效地完成色值变化、色彩空间的转换或者仿射变换等。这样, MNN 的用户就不再需要为图片处理引入 libyuv 或者 opencv 了。

性能比较

画像

经过种种优化后,这是我们在性能上交出的答卷。

MobileNet V2 ,在 OPPO r17 和 iPhone 7Plus 上做了一系列的性能对比。

如图, MNN 的性能在 CPU 和 GPU 上都有一定的优势。

小结

画像

总的来说, MNN 吸纳了前人的经验,也结合自己对端侧推理引擎的认知,做了许多创新。综合考虑性能、模型和后端的拓展性、缓存、 CPU 和 GPU 的算子实现,以及 CV 库等方面的表现,在端侧推理引擎中, MNN 是值得移动 AI 用户尝试的选择。

后续规划

画像

後続のプログラム変換部上に、我々は定量的なツール、より多くの事業者は、図マッチングテンプレートを最適化する追加することもオープンプランモデルを計画、スケジューリング部、我々はステップ端縁学習および訓練を実施する予定の、コンピューティングデバイスは、自動的に選択しますまた、計画され、手術を、またはそれは、端末サブオペレータの既存の最適化を実現していきます、また、CVデータベースに直接量子化畳み込み、行列の乗算アルゴリズム、プログラムのサポートGPUを最適化する計画で、我々はまた、既存のNC / 4HW4を考えますこのアルゴリズムは、独立した高性能コンピューティングなどのライブラリを並べ替え、アルゴリズムが自動的に計画で同じことを選択し、他の部品の在庫状況、我々は建設プロジェクトを継続し、より多くのドキュメントとサンプルを追加し続けました。

淘宝網の基本的なプラットフォーム部 - エンドスマートチームは、AR技術の研究開発エンジニア、高性能コンピューティングの研究開発エンジニアを追加し、推論エンジンのR&Dエンジニアを歓迎します。新技術に興味を持って、技術革新の突破口に良いこと、新しい技術の学生と革新的なユーザー体験をもたらすことを熱望[email protected]に再開ご連絡ください。

オリジナル出版時間:2019年7月2日
著者:陳(緑から)金箔
Yunqiコミュニティパートナーからの記事、「アリ・テクノロジー」情報については、「関係もアリ技術を。」

おすすめ

転載: yq.aliyun.com/articles/707074