AIチップ、コンパイラ、LLM。PFNで「面白そうなもの」を領域の壁を越えてどんどん開発していく、飽くなき探求心のエンジニア
自己紹介をお願いします。
大学・大学院では五十嵐研究室というHuman Computer Interactionの研究室でプログラミング環境の研究をしていました。新卒でソニー株式会社に入って分散深層学習の研究開発に従事し、2019年からPFNに入社しました。
入社後は分散深層学習の高速化であったり、MN-Core向けのコンパイラの開発であったり、Playgramのpython parserを書いたりしていて、2023年からはLLMの事前学習がメインになりました。
上の通りやっている仕事も特にまとまりがなかったり、他にもいわゆる学校の科目でいうと理系科目より日本史のほうが好きだったり、はっきりとした軸を持って動くといよりはその場で必要そうなこと、面白そうなことをしてきています。
現在担当している業務内容や具体的な流れについて教えてください。
LLMの事前学習チームに所属して、事前学習についての研究開発をしています。
事前学習の開発は色々な技術の組み合わせからなります。例えば、DNNアーキテクチャの選定・改良のような機械学習に近いもの、データセットの改善・作成のような自然言語処理に近いもの、学習の高速化のような高性能計算 (High Performance Computing, HPC) に近いもの、などです。
また、長期間にわたって複数人で開発を続けていくためには開発環境の整備・改善のような作業も重要となります。例えばCIの整備・拡充などがあります。
これらのうちどれかに絞るということはなく、優先度に応じて自分の作業としています。時期によってどこに重点を置くはさまざまですが、ある月は
- 事前学習のアルゴリズムについての実験
- データセットの改善
- 評価ベンチマークの追加
- 学習時のメモリ使用量の削減や高速化
などをしていました。
多くの作業がデータの処理待ち、DNNの学習待ちなどTurn Around Timeが長い作業なので、
- 朝業務開始したら前日終業直前に実行した実験結果をまとめる
- 数時間で実装できるタスクをして午前中のうちに実験を投げる
- 午後は本腰を入れた実装タスクをする
- 終業近くになったら↑の実験を投げる
- 実験を投げ終えたら翌日やるタスクの目処をつける
という流れで1日中作業をしていることが多いです。
数ある企業の中で、なぜPFNをファーストキャリアor転職先として選ばれたのですか? 入社前の期待や不安、実際に入社してみて感じたギャップや感想があれば教えてください。
転職活動を考えていた時の企業の中で、一番参加できるプロジェクトが多そうだったためです。プロダクトにこだわりがある方ではないので、面白そうなものに首を突っ込めるほうが楽しそうということで選びました。
大きい企業だとどうしても複数のプロジェクトに携わるというのは (関連するプロジェクトでないと) 難しく、一方で多くのスタートアップはプロジェクトの種類が多くありません。色々なことをやっているが会社の規模がそこまで大きいわけでもないというのが自分に合っていそうと考えました。
PFNだと色々なプロジェクトに携われるのは事実かなと思います。そうしなければならないわけではないですが、個人の意思があれば色々なプロジェクトにふれることは可能です。ただ、兼務をするとスケジュールは自分でどうにかする必要があるので、このあたりはそこそこ大変でもあります。
学生時代に学んだことでPFNでの業務に活かされたエピソードがあれば教えてください。
大学にいる間、コンピュータ科学の基本的な事項を網羅して聞いたこと、大量にコーディングをしたことは一番の基礎として業務で役に立っていると感じています。
現状の自分の業務の仕方だと、業務で必要となる知識・技術は多岐にわたります。データセットの改善などをしているときは、機械学習そのものの知識・技術が必要になり、高速化をしている際にはHPCの知識が必要になります。また、効率よく作業するためには、AWSなどの各種クラウドサービスの使い方等も必要となることがあります。こういった多様な分野に素早くキャッチアップするための基礎として、大学でのコンピュータ科学の基礎は非常に役立っています。
また、色々なことをやるためには、まず優先度の高い業務を手早く終わらせることが必須です。そのためには、要件を満たすコードを短い時間で実装するのが重要で、この能力はコーディング量を積むことで鍛えられたと思っています。
現在担当されている業務の中で、ご自身のアイデアや行動が事業や組織に大きな影響を与えたと感じる具体的なエピソードはありますか?
PLaMo 2の事前学習において、weight reusing (小さいモデルの重みを使って大きいモデルの初期値を決める手法) とpruning (大きいモデルを用いて小さいモデルを構築する手法) を使い、それまでに学習した重みを使うことで効率の良い学習を実現する手法を採用しました。学習開始時点 (2024/12頃) ではこれらを使ってランダムな初期値から学習をするfrom scratchのLLMの事前学習をする試みは日本ではほぼなく、新しい試みだったと思います。
この2つ (weight reusingおよびpruning) の既存研究のチームへの紹介・提案と初期実験は私が行いました。
学習に用いる計算資源の量が決まっている中で事前学習モデルの性能を上げることを目指した時に、有望な手法なのではないかということで提案した手法でしたが、特にpruningして学習したPLaMo 2.1 8Bの性能は非常に高いものとなり、PLaMo 2シリーズの用途を広げられるものとなったのではないかと思っています。
.jpg)
PFNならではの社風やチームの雰囲気について、詳しく教えていただけますか?
研究開発寄りのチーム (具体的な製品・サービスがあるわけではないチーム) でありながら、自分たちの技術・専門性にこだわらずに動くことができるチームだと思います。
LLMの事前学習チームは、元々は各種ワークロードの高速化をするチームでしたが、必要があるという判断の結果としてデータセットの改善やLLMの評価ベンチマークについての作業など、高速化とはほぼ関係のない分野にまで活動範囲を広げています。また、事前学習のチームではありますが、必要があれば事後学習も行っています。
「やるべきだとは思うけどそれはこのチームの仕事ではなさそう」のようなジレンマはほとんどなく (「やるべきだと思うけど我々でできるのか?」という議論はあります)、「やるべき」かどうかについての議論に集中できています。
今後PFNで挑戦してみたい仕事、個人的な野望などがあれば教えてください。
現状、LLMの事前学習はスパコンを大規模に活用した実験のようなものとなっています。入念に事前準備をした上で、それでも想定外だった問題を学習中の状況をみて適宜対処する、職人芸のような対応を含めて事前学習を行っている状況です。
一方で、from scratchでLLMを学習し、そのLLMで何かのサービスをするという枠組みでは、LLMの事前学習はアプリケーションのメジャーリリースみたいなものであるべきだと考えています。
できることならLLMの事前学習に対して、人の介在が少ないリリースフローのような整備をしたいと思っています。
最後に一言お願いします。
PFNはソフトウェアサービスからハードウェアまで、本当に色々なことをやっている会社です。色々なことをやっているのは難しさ・大変さもありますが、他の会社ではできないような組み合わせの業務を色々できる面白い環境だと思います。
.jpg)




