Start typing and press Enter to search

デバイスの“性格”を知り、ソフト高速化を自動的に

これまで受託開発で引き受けてきたソフトウェアの高速化を自動化する――。エッジAI開発のクラウドサービス「GENESIS DevEnv」が目指すアプローチを、最適化コンパイラの開発を担当する丸岡晃氏に聞きました。

丸岡 晃、株式会社フィックスターズ Genesis事業部 ディレクター
大学院で自動並列化コンパイラの研究開発に従事。2017年にフィックスターズへ入社し、大学時の経験を活かしてGENESISサービス内で利用されている、最適化コンパイラ開発をリードする。

――開発体制と担当しているポジションを教えて下さい。

丸岡:大きく分けて、サービスのフロントエンドやバックエンドを開発するサービス開発チームと、サービス内部のコア技術として利用されている自動最適化コンパイラを開発する研究開発チームの2チーム体制で開発を行っています。私は後者の研究開発チームをリードしています。

 現在は、新たにFPGA(field-programmable gate array)を搭載したデバイスをサービスで使えるように、FPGA向けの最適化コンパイラの開発を主に進めています。

――「GENESIS DevEnv」の特長である、アプリケーションを各エッジデバイスに対して自動で高速化する機能ですね。

丸岡:そうです。

 ハードウェアの性能が限られているエッジデバイスでは、ハードウェアの実行効率を最大限引き出すアプリケーションの高度な高速化が重要です。例えば、マルチコアやSIMD演算器などのハードウェア資源を活用するようにプログラムを並列化したり、キャッシュメモリや高速小容量な専用メモリを最大限活用出来るようにプログラム内部のデータ構造やアクセス順序を設定する、などといった工夫をします。

 これらの工夫をどのように適用するかといった戦略は、対象デバイスのハードウェア特性によって大きく変わります。そのため対象のアプリケーションはもちろん、対象デバイスのアーキテクチャにも詳しくないと上手に高速化することは出来ないので、プログラマに求められる知識やスキルがとても広範かつ高度なものになっていました。時には複数の高速化手法をそれぞれ試して性能を計測してみないと、どれが最適なのか分からないこともあったり……

 高速化の過程で、アプリケーションのソースコードを書き換えが必要になることも多くあります。高速化するため戦略は対象デバイスによって変わるので、高速化されたソースコードも対象デバイスの数だけ実装する必要があると考えると、とてつもない工数がかかってしまいますよね。ソースコードの書き換えの過程でバグを仕込んでしまう可能性もあるので、注意力も必要な作業です。

 GENESISでは、最適化コンパイラ技術を使って、この「ソフトウェアの高速化」の自動化を実現しています。アプリケーション内のタスクを「ビルディングブロック」と呼ばれる単位で提供し、デバイスに依存しないような抽象化をしているのです。ビルディングブロックは、「Halide」というDSL(ドメイン志向言語)による記述や、DNN(ディープニューラルネットワーク)のモデル表現を使って予め作られていて、サービス内部に組み込まれている最適化コンパイラがブロックで作られたアプリを対象デバイスに対して高速化されたプログラムに自動変換する、という仕組みです。各デバイスごとにアプリケーションが自動で高速化できるので、高速なアプリケーションを開発するための工数と、デバイス選定にかかる時間を抑えられる、というのがGENESISの強みになっています。

 「ソフトウェア高速化の自動化」は、私個人としての取り組みたい課題でもありました。フィックスターズが得意としているソフトウェア高速化は、エンジニアが頑張って実現していますが、それを頑張らなくてもいいようにしたいのです。

――最適化コンパイラの開発について、もう少し教えて下さい。

丸岡:最適化コンパイラの機能開発は、まさにプログラム高速化を抽象化していくこととも言えます。手作業での高速化であれば、対象としているアプリケーションやハードウェアに応じてどのように高速化するかを考えますが、自動最適化では「そもそも高速化とは何だろう」といった、まるで哲学のようなことを考えながら作っていきます。

 現代のハードウェアでは、プログラムの並列性を利用して処理を高速化するような機構がほぼ必ず搭載されています。例えばCPUではマルチコアやSIMD演算命令、GPGPU(GPUによる汎用計算)ではスレッドブロックやスレッド、FPGAではパイプラインなどといった具合です。ソフトウェアの高速化では、プログラムの変形を通して、このようなハードウェアが持つ並列性に対して、プログラムの持つ並列性を適切にマッピングする必要があります。この時、それぞれのハードウェアはどのような並列性を有効に活用できるのか、それはプログラム変換においてどのような変換手法になるのか、といったいわばメンタルモデルを考えるところから、最適化コンパイラの開発は始まります。

 現代のコンピュータでは、メモリアクセスのコストを減らすことによる実行時間の短縮への寄与度も大きくなっています。このときの「メモリアクセスのコスト」とは何なのかというのも、ハードウェアの特性に応じて定義する必要があります。連続でアクセスするとコストが減るのか、使うメモリ総量を少なくすればいいのか、最初にメモリを使ってから最後に使うまでの時間を短くすればいいのか――。

 そうやってデバイスに対するプログラム高速化手法のモデルを抽象化していくと、自分の中で「このハードウェアはどういう特性を持っているのか」という大別ができてきます。このデバイスとこのデバイスは似ていて、でもこの辺が違くて、といった特性がつかめてくると楽しいですね。

――デバイスの“性格”のようなものでしょうか。

丸岡:そうですね。パーソナリティ診断みたいに、スペック表や仕様の説明だけではでは捉えきれないデバイスの特性が理解できてくる感じでしょうか。アーキテクチャが、特性ごとにヒートマップのように並ぶようなイメージです。

 近年では、特にエッジデバイス向けの領域で異なるアーキテクチャのプロセッサを組み合わせたデバイスがいくつも登場しています。特性の組み合わせ方から、デバイスが目指す設計思想がうかがい知れます。

――印象深いアーキテクチャの採用はありますか。

丸岡:Googleが開発したプロセッサ「TPU(Tensor Processing Unit)」の登場は印象に残っています。驚いたというよりは、「やっぱりね」といった感想でした。

 TPUが採用する「シストリックアレイ」というアーキテクチャは決して新しい訳ではなく、1970年代から存在しています。近年AIで注目されているDNN(ディープニューラルネットワーク)の処理の特性を抽象化していった結果、高速処理するにあたってこのアーキテクチャの特性がよくあっていたのです。

 多くの場面で利用されるかつ高速な処理の要求されるような、いわゆるキラーアプリケーションは時代によって変わります。しかし、このような特性を抽象化していくと、過去にも同じような課題に取り組んでいたりするものなのでしょう。まるでファッションのブームが繰り返すように、コンピュータの技術も新しい要求のために昔の技術が復活するものかもしれません。

 TPUの登場で、過去の技術を知っておくことが重要だと再認識させられました。

――たくさんのアーキテクチャが復活すると、どれを選べばいいか迷いそうです。

丸岡:実際、近年では選択肢となり得るデバイスの数は増えてきています。汎用的なハードウェアの性能を向上させるのではなく、想定しているアプリケーションに特化したハードウェアを搭載することによって性能向上を狙う、というのがトレンドになっているからです。

 従来では、エンジニアがそれぞれのデバイス特性に合わせてアプリケーションを高速化し、性能を比べて最も適したものを選んでいました。しかし、アーキテクチャの数が増えるということは、それだけ性能比較にかかる工数が増えてしまいます。

 GENESISは、こうしたPoC(概念実証)やデバイス選定の受託案件でも使うことを想定して開発しています。サービスとして提供するだけでなく、受託案件の効率化にも寄与できるのではないかと考えています。

――GENESISで新しいアーキテクチャーに対応できるようにする開発は、大変そうです。

丸岡:実際、とても大変です(笑)

 コンパイラ開発というのは、ソフトウェア開発の中でも特に難しい部類と言えるでしょう。特にバグが許されない開発というのがとても難しいところです。

 我々ソフトウェアエンジニアは日常的にコンパイラを利用して、まるで「コンパイラは正しいコード生成をする」ことを前提にしてるといわんばかりに、ソフトウェアの開発やデバッグを行っています。そんなコンパイラが誤ったコードを生成していたとしたら、とても大変ですよね。どんなソフトウェアもバグは無いことが求められますが、コンパイラはその水準が特に厳しい。誤ったコードを出力することはないか徹底的に検討するし、テストにも手間をかけます。

 最適化するコンパイラでは、正しく動作するプログラムを出力した上で、さらに処理が高速になるように変換もしなければなりません。バグがなく動くプログラムが出力できるだけでなく、最適化戦略が適切かどうかも慎重な検討とテストが必要です。

 開発にはとても苦労しますが、きれいなアルゴリズムで正しくかつ高速なプログラムが出力できた時の興奮は鳥肌ものです。

――開発中のFPGA用コンパイラがサービス実装される日が楽しみです。

丸岡:事業部に人が増え、サービス提供も始まり、FPGA向けのコンパイル機能の搭載も目前に迫ってきました。当初、飯塚さん(飯塚拓郎、Fixstars Solutions CTO)と二人っきりで開発していたことを思い出すと、感慨深いものがあります。

 できれば、もっと人を増やして開発を加速させていきたいですね。このようなプログラム高速化の自動化を進めていく思想に賛同し、GENESISをもっと便利にしていく仲間が増えていくと嬉しい限りです。


・採用ページ―自社製品コンパイラエンジニア
https://www.fixstars.com/ja/recruit/professions/compiler/

・丸岡氏が講師を務めるオンラインセミナー
ソフト高速化の専門家が教える!AI・IoTエッジデバイスの選び方
2021年1月18日開催予定

アバター

nozomuhirota