ailiaのCI環境
連載記事 ailia SDKの品質を支えるビルド&テスト環境の第1回目です。
ailia SDKはWindows Mac iOS Android Linuxといった様々な環境に対応する クロスプラットフォーム対応高速CNN推論エンジンです。
AVXやNEONといった各環境で利用可能なSIMD命令に対応したり、GPGPUの性能を最大限引き出すためcuDNNやMetalの他にVulkanなどにも対応することで各環境での高速推論を実現しております。
はじめに
本連載ではailiaの開発を支えるビルドとテスト環境に焦点を当て、いろいろな裏話をできればと思います。
今回は概要としてailiaのCI(継続的インテグレーション)環境とテスト環境についてのお話です。
ailiaの動作環境
ailiaはクロスプラットフォーム対応なライブラリです。そのため以下のように様々な環境でそれぞれに合うコンパイラー・ツールチェーンを利用してビルドをする必要があります。

ailiaの動作環境一覧
同じプログラムのコードでもコンパイラーによってはうまくコンパイルできない、環境によってはうまく動かないなどがあるため、ailiaではCIを活用し、全環境でコンパイルとテストを行っています。
CI環境
ailiaではCI環境としてJenkinsを採用しています。各環境向けのビルドサーバーと各環境向けのテスト端末をJenkinsサーバーへ接続しています。

CI環境
基本的には
- 開発者がGitHub上のリポジトリへコードをコミットする
- JenkinsサーバーはGitHubを定期的にポーリングし、変更があったブランチのソースコードを取得してビルドキューへ積む
- ビルドサーバーではJenkinsサーバーからソースコード一式を受け取り、ビルドを行う。ビルドが正常に終了した場合はJenkinsサーバーへ成果物を返す
- すべてのビルドサーバーでビルドが正常に終了した場合、Jenkinsサーバーはテスト用データを取得してテストキューへ積む
- テスト環境ではJenkinsサーバーからテスト用データとテスト環境向けの成果物を受け取り単体テストや推論テストを実行し、テスト結果をJenkinsサーバーへ返す
- すべてのテスト環境でテストが通過した場合、JenkinsサーバーはSlackへ通知する。
ビルドを行ったブランチがメインブランチの場合は成果物一式をGoogle Driveへ保存する
という流れになっており、開発者がコードをコミットするだけで、全環境でコンパイルができるか、用意されている単体テストを通過するかなどのテストを行い、問題がある場合はSlack経由で通知する仕組みになっています。

Slack通知イメージ
これにより、開発者が誤ってバグを埋め込んだ場合でもすぐに検知を行い修正ができるような体制を構築しています。
また、通常JenkinsではサポートされていないAndroid実機・Android Virtual Device・iOS実機でも自動テストを行うため、専用のシェルを開発したり、単体テストフレームワークを通常とは異なる方法で利用たりしています。(詳細は後日公開予定)
テスト環境
ailiaの単体検証にはBoost Test Libraryを採用しています。開発者が手動で作成した様々なケースを再現する単体テストの他、ailiaが対応している100種類以上のONNXレイヤーやCaffe Modelのレイヤーのテストを漏れなく行うため、テスト用モデルファイルの生成からテストコードの自動生成までを自動化しています。(詳細は後日公開予定)
テストモデルとテストコードの自動生成もJenkinsで行っており、テストの定義スクリプトをGitHubへコミットすると、Jenkins環境下でモデルの生成とテスコドードの生成処理を行い、GitHubのテストデータ用リポジトリへコミットします。
また、動作確認済みモデルに関してもBoost Test Libraryで推論が正しく行えるかなどの統合テストを行ったり、動作確認済みモデルを含む複数のモデルで負荷テストを行うテストツールでのテストなども行ったりしています。
アイリア株式会社はAIを実用化する会社として、クロスプラットフォームでGPUを使用した高速な推論を行うことができるailia SDKを開発しています。アイリア株式会社ではコンサルティングからモデル作成、SDKの提供、AIを利用したアプリ・システム開発、サポートまで、 AIに関するトータルソリューションを提供していますのでお気軽にお問い合わせください。
ailia Tech BLOG