上野 裕一郎
計算機インフラ
※本記事は2023年10月に取材したものです。サービス名称や所属は取材当時の内容です。
自己紹介をお願いします
2021年に新卒で入社した上野裕一郎です。大学院では情報工学を専攻しており、とくに効率の良い分散深層学習の手法について、ハイパフォーマンスコンピューティングの観点から研究をしていました。PFN では、Cluster Services チームという、PFN の機械学習基盤を開発・運用するチームに配属されました。当時の研究テーマとは関連がなかった Kubernetes 周りのことを学習しつつ、GPU などのアクセラレータ、ネットワーク、I/O など性能に関わる領域を強みとして、業務に取り組んでいます。
現在担当している主な業務内容や具体的な流れについて教えてください
私が所属する Cluster Services チームは、PFN の研究開発を支える機械学習基盤を幅広く担当しているチームです。幅広くというのはは本当に幅広くみていて、低いレイヤーとしてはオペレーティングシステムのプロビジョニング自動化、ハードウェア故障の自動検知からはじまり、Kubernetes の導入とその継続的な更新、機械学習基盤として必要な各種アドオン・ソフトウェアの導入、さらには機械学習に必要なインフラ系のソフトウェア内製と運用、パブリッククラウドとのつなぎこみ、クラスタ利用に関する社内からのサポート対応など、業務は多岐にわたります。
Cluster Services チームは2023年10月時点で9名のエンジニアが在籍しています。全員がこの広い領域すべての専門家、というとそうではなく、各々のメンバーがこれまでの経験を活かした強みをもっていて、協力して仕事を進めています。例えば、前職でネットワークに関する仕事をされていた方がコンテナネットワーキングを担当していたり、パブリッククラウドに強みを持っている方がその周辺を担当していたり、PFN の別のチームで機械学習の実践経験がある方が利用者向けのツール開発を担当していたりします。
私はその中でも性能に関わるところを主に担当していて、より具体的には GPU や MN-Core を Kubernetes とつなぎこむところであったり、例えば Network Interface Card の Remote Direct Memory Access 機能やサーバ自体の様々な検証、日進月歩なアクセラレータの性能を使いこなすための分散キャッシュシステムの開発を担当しています。分散キャッシュシステムは、社内のユーザからのストレージ性能が足りないというリクエストに応える形で開発することになったソフトウェアです。Kubernetes の機能をたくさん使って認証認可機能や負荷分散機能を作ったり、高い性能を実現するためにシステムコールレベルで工夫を行ったり、色々と面白いところがたくさんあります。詳しくは会社のブログや外部登壇資料も参照いただけるとうれしいです。
入社してから現在まで PFN で成長したと感じることはありますか?
日々が成長の連続というか、経験したことがないことを経験させてもらいつつ、仕事を頑張っています。
まずチャレンジングだったのは、Cluster Services チームへの配属でした。もともとPFNに入社する前は、スーパーコンピュータの一利用者として、スパコンを使った研究をしており、開発・運用を行う側ではありませんでした。配属された後に、弊社で採用しているコンテナオーケストレータの Kubernetes の勉強を始め、計算ジョブに対応するところである「Pod」を作ったり削除したりするところから取り組み始めました。チームの方々が私の書いたコードやKubernetes マニフェストの丁寧なレビューをしてくださったり、紹介された資料を読んだり社内のコードを色々と読んでいく中で、少しずつ Kubernetes の理解を進めました。Cluster Services チームは、機械学習基盤の開発・運用のみならず社内ユーザからの利用相談も受けています。チームに配属された当初は、易しいものや私が得意としているものに限って少量の相談を受けるようにしていましたが、現在では他のメンバーと同じように得意分野関係なくランダムに仕事を割り当てられたり、私が適していそうな相談内容の場合は他のメンバーから引き取ったりもするようになりました。PFNの機械学習基盤はオンプレミスの部分とパブリッククラウドの部分があるハイブリッドクラウドなため、最近は私の経験が少ないパブリッククラウドに関する部分も少しずつ取り組み始め、業務の幅を広げられるように努力しています。
「チームでの働き方」も学ばせてもらいました。入社する前に取り組んでいた研究、インターンシップやアルバイトでは、大抵の場合1人プロジェクトだったり、それをサポートしてくださる方がもう1名いるような環境が多く、チームでの経験が少なかったです。Cluster Services チーム特有なことでいうと、ある人が行ったオペレーションがあれば、他の人が再度実施できるようにすることが求められるので、作業ログやドキュメントをどう残すか、というところから学びました。それによって、これまで自分がいかにログやドキュメントを残してこなかったか、ということを痛感しました。丁寧にログやドキュメントを書くことには手間がかかりますし、作業時間も長くなるデメリットもあるのですが、できるだけ丁寧に書くようにしています。
PFN に入社して良かったと特に感じる経験はありますか?
PFN には色々なチームがあり、そのチームに自分がこれまで想像もしていなかったような技術の専門家がいて、一緒に働ける、ということが一番入社してよかったことです。
具体的なエピソードでいうと、MN-Core の開発チームと連携して Kubernetes と MN-Core の境界となるコンポーネントを開発するプロジェクトを今進めています。そのコンポーネントは、 Kubernetes 上にデプロイされるもので、Kubernetes 流の設計思想に従うことで色々な運用コストが削減できることが期待できます。私は、Kubernetes の面からそのコンポーネントの設計に関するアドバイスを行ったり実装のレビューを任されています。実際の設計と開発の作業は MN-Core の開発チームの方にお願いしています。その作業を進めるためには、お互いがお互いの技術や思想・ベストプラクティスを共有する必要があるため、MN-Core のドライバを書いている方からドライバの書き方や使っている技術、MN-Core の仕組みを教えてもらったりすることがあります。他にも MN-Core の開発チームと連携して進めているプロジェクトがあり、そちらは学生時代にやっていた深層学習向けのハイパフォーマンスコンピューティングの経験が活かされるものです。どちらの連携プロジェクトも、とても楽しく刺激的で、PFN でしかできない経験かもしれないと思っています。
他にも、よりハードウェアよりの部分を担当しているチームと連携してサーバやネットワーク機器の検証を行ったりするときなども同様の体験がありますし、同じチームである Cluster Services のメンバーと協働するときも、チームメンバーがそれぞれ得意とすることが全然違うので、日々たくさんのことを勉強させてもらっています。とても楽しいです。
最後にメッセージをお願いします
PFN にはサーバやチップ、ネットワーク機器など面白いハードウェアがあることはもちろん、技術とソフトウェアがたくさんあり、それを作っている技術的にとがった面白い社員がたくさんいます。一緒に働いてみたいなと思った方、少しでも興味を持った方は、ぜひ一度 PFN を検討してもらえるとうれしいです。一緒に大規模な計算基盤・機械学習基盤をつくりましょう!
もっと知る