Preferred Networks

「性能と使いやすさ」の究極難題。深層学習アクセラレータMN-Coreで、コンパイラエンジニアが挑む最適化の限界

エンジニアMN-Core開発
浜地 慎一郎
DSC01814 (1)

自己紹介をお願いします。

浜地慎一郎といいます。2018年にPFNにエンジニアとして入社し、深層学習向けコンパイラの開発に従事しています。学生時代は物理を専攻していましたが挫折し、2007年に新卒でGoogleに入社し、2018年まで在籍しました。

プログラムを書くことが好きで、趣味としても長く続けてきました。PFNに入ってからは、仕事で「自分にとって楽しい種類のプログラミング」ができるので、趣味でコードを書く機会は以前より減りましたが、それまではOSSへのパッチ投稿、プログラミングコンテストへの参加、自作ツールやゲームの制作など、さまざまな形でコードを書くことを楽しんでいました。

現在担当している主な業務内容や具体的な流れについて教えてください。

「深層学習モデルを入力として、PFNの都合にあわせてあらゆる処理を行うソフトウェアスタックを開発する」──これが、私のPFNでのミッションだと考えています。

その一環として、PFN が自社開発している深層学習アクセラレータである MN-Core を念頭に置きつつも、かなり汎用的な計算グラフをコンパイルできる基盤を構築してきました。入社からの約2年間は、デバイス非依存かつGPUなどの他社ハードウェアも活用可能なグラフコンパイラの開発に取り組みました。

 その後、MN-Coreの事業規模の拡大に伴い、段階的にMN-Core専用の開発へと軸足を移し、現在ではほぼMN-Core向けのコンパイラ開発に集中しています。

 MN-Coreのようなアクセラレータは、汎用性ではCPUに劣るぶん、「高効率」「高速」が求められます。「高効率」「高速」を実現するための手段は多岐にわたります。たとえば、計算カーネルを効率よく駆動するランタイム、高効率なカーネル実装、SIMDアーキテクチャを活かすメモリレイアウト設計、そして深層学習モデルに依存した最適化など、ソフトウェアスタックの上から下までに関与しています。

 これらを実装するうえで常に課題となるのが、性能と使いやすさのトレードオフです。

たとえば、メモリレイアウトや計算スケジューリングといった低レベルの情報をユーザにすべて開示すれば、より高い性能を引き出すことはできます。しかしそれでは、アクセラレータの扱いが非常に煩雑になり、GPUとは大きく異なる運用が必要になってしまいます。

そのため、可能な限りユーザからハードウェアの詳細を隠蔽しつつも、効率は犠牲にしないよう、抽象化と最適化のバランスをとる設計が求められます。これは技術的にも難易度が高く、私自身が日々格闘しているテーマの一つです。

数ある企業の中で、なぜPFNをファーストキャリアor転職先として選ばれたのですか? 入社前の期待や不安、実際に入社してみて感じたギャップや感想があれば教えてください。

 [個人ブログに書いた通り](https://shinh.hatenablog.com/entry/2018/06/17/203604)、転職にあたってはかなり悩みましたが、最終的にPFNが最も難易度の高い課題に取り組んでいると感じ、入社を決めました。

前職と比べて従業員数が大幅に少ないため、自分の担当範囲が広がること、結果として大変になること、そしてその分だけ裁量や自由度が増して楽しくなることは想定しており、その点に関しては特にギャップはありませんでした。

 私はある程度シニアなエンジニアということもあり、マネージャ的な役割を期待される可能性も覚悟していましたが、実際には個人として手を動かすIndividual Contributorの立場を尊重してもらえており、これは良い意味でのギャップでした。

前職でのご経験でPFNでの業務に活かされたエピソードがあれば教えてください。

好んでさまざまな分野に手を出してきたこともあり、転職前後で扱っている領域も大きく異なります。そのため、「この経験が今に活きている」という明確なエピソードは、正直あまり思い当たりません。

とはいえ、前職でも、それ以前のアルバイトでも、あるいは趣味でコードを書いていた時間でも、特別な逸話こそなくとも、少しずつ身につけた感覚や癖のようなものが、いまの業務に自然に活きていると感じています。

 また、「活きた」とまでは言えないかもしれませんが、物理の素養があるおかげで、計算化学チームのやっていることが少し理解できたときには、素直に嬉しさを感じました。たとえば、エネルギーを座標で微分して力を求めるという話を聞いたときに、「深層学習フレームワークの自動微分って、勾配法以外にも使えるんだ!」と驚いたりしました。

PFNだからこそ経験できる、他社では得られないことを経験したエピソードがあれば教えてください。

 PFNは、規模に対して事業領域が非常に広く、エンジニア一人ひとりが領域横断的に関われる点が魅力です。

私自身は現在、MN-Core向けのコンパイラ開発を主なミッションとしていますが、過去にはGPU向けコンパイラの開発にも携わってきました。また、計算カーネルを高効率で駆動するためのランタイム実装や、ワークロードの他アーキテクチャへの移植なども担当しています。

 さらに、異分野のチームと実際に協力してプロダクト開発を進められるのも、PFNならではの面白さです。たとえば、計算化学チームが開発しているMatlantisには、MN-Core版だけでなく、GPU版にも貢献できました。自分の専門以外のプロダクトにも手を動かして貢献できる環境は、他社ではなかなか得られない経験だと感じています。

 

PFNならではの社風やチームの雰囲気について、詳しく教えていただけますか?

[代表のブログ](https://tech.preferred.jp/ja/blog/27nishikawa/)でも語られている「コンピューターサイエンスのすべての分野に精通していること」という目標は、個人的にもかなり好きです。もちろん達成は容易ではありませんが、あまり経験のない分野にも臆せず手を出していく姿勢は、ずっと持ち続けたいと考えています。

 実際、社内を見渡すと、自分の専門に閉じこもらず幅広い分野に関心を持つ人が多く、とても刺激的です。

今後PFNで挑戦してみたい仕事、個人的な野望などがあれば教えてください。

ソフトウェアエンジニアでありながら、ハードウェアの設計や実装にも深く関わっている同僚たちの姿を見ると、羨ましく感じます。 私も、ソフトウェア側からだけでなく、よりハードウェア寄りの領域にも踏み込んでいきたいと思っています。

最後に一言お願いします。

 昨今のAIの発展は、人類史の中でも特に大きな変化のひとつだと感じています。

歴史に名を残したいというような野心はありませんが、この大きな「祭り」をなるべく近くで眺め、理解し、そして手を動かして関わっていたいと思っています。

PFNは、その祭りをいい距離感で眺められる「ちょうどよい会場」の一つだと感じています。

SHARE
XFacebookLinkedIn

採用に関する不明点はこちらをご確認ください