以下の内容はhttps://xuzijian629.hatenablog.com/entry/2024/11/01/114829より取得しました。


Metaに転職して感じたPFNとの違い

Metaに転職して1か月近くが経ちました。カナダのトロントオフィス勤務で、今月は渡航に始まり、社会保険番号取得、口座開設、家探し(インターネット等の契約も)、州の健康保険、会社の福利厚生に含まれる保険や積み立て口座の開設、など手続き関連でかなり疲れましたが、アメリカメンローパークでの本社のオンボーディングも終了していよいよ業務が開始した、といったところです。

Metaはオンボーディング中にチームと会うまで自分が何の仕事をするか詳細は全然把握していなかったのですが、Metaが開発し運用もされている社内用の深層学習アクセラレータのコンパイラを開発する職となっています。レイヤごとに細かなチームがあり、上の方のレイヤではPyTorchとの繋ぎこみを担当しているようですが、自分が所属しているところはレイヤの最下層のところに位置しており、カーネルのコードをLLVMを介してコンパイルアクセラレータに乗せる、というところをやっています。前職はグラフコンパイラ(つまり計算グラフからオペレータの列をスケジュールするレイヤ)を作っていましたが、新しい仕事とはまったくかぶっていなくて、むしろ各カーネルの実装をアクセラレータに乗せる、というレイヤになります。

なんせ前職とは仕事の内容も会社の人数的な規模も場所も違うところなので新しいことだらけなのですが、記憶に新しいうちにPFNとMetaで感じた違いを書いていこうかなと思います。

念のため初めに注意事項を述べておきます。

PFNでも、Metaでも、自分が所属するチーム目線での感想です。チームによってカルチャーも雰囲気も異なると思うので、これを見て「{PFN/Meta}は〇〇な会社なのか~」と早とちりするのはよくないです。本当に気になる方はぜひ会社公式の情報を調べたりほかの社員の意見も聞いてみてください。

Learn or Dieカルチャーについて

言わずと知れたPFN Valuesの一つです。和訳は「死ぬ気で学べ」になっているかと思います。これはなんならMetaのほうがLearn or "Die"という気がします。 PFNもLearnすることはたくさんあったのですが、自分の場合それは何か新しいものを実装するときにリファレンスを読んだり関連研究をサーベイしたりするというのがほとんどで、自分が主体で自分のペースでLearnができました*1。それに対してMetaは日々の一つ一つのプロジェクトが、自分があまりそれに詳しくない他チームとの共同作業で、自分が頑張ってコンテキストを把握していかないとそもそも業務が不可能、というある種の強制さを感じます。

もう少し具体的に話すと、「Metaの内製深層学習アクセラレータでMetaの重要なモデルを学習、推論する」ことにかかわっている人数は膨大で、この全体像を実装レベルで把握している人なんてたぶんいないです。この人たちは細かいレイヤごとに細分化されており、自分が所属するLLVMチームはそのわずか一部分です。カーネル関係にもいくつかチームがあるのですが、たとえばそのうちの一つとともにある問題を解決する、みたいな動きがたいていの業務の流れのようで、綿密にコミュニケーションを取って問題を把握して考える、ということが要求されているようです。 PFNの場合は、人数がもう少しコンパクトですし、NVIDIA GPUを使っていたりそもそもそのランタイムはオープンソースのATenを使っていたりと、スタートアップなりの戦略をとっているので、まだコンパイラの全体像を把握しやすく、実際あらゆるレイヤにコミットしている天才的なエンジニアもいるのですが、Metaだと都度足りないところをコミュニケーションを通してLearnする、という文化があると感じています。

PFNのLearn or Dieカルチャーのここがよかったと思うところは、Learnの幅が広いことです。たとえば、たぶんPFNに所属しているエンジニアは自分のタスクと直接関係なかったとしてもLLMのpretraining, alignment, finetuning, retrieval augmented generationなどの概念は会社のAll handsやfulltimeブログ、岡野原さんのランチ会などを通して簡単には知っていると思いますが、Metaのエンジニアの場合比較的知識が自分の所属プロジェクトのみに偏る傾向があると感じています。

社内コミュニケーションのスムーズさについて

これはPFNのほうがスムーズだったと思います。PFNだと基本なんでもかんでもSlackに気軽に書いていて、すぐに反応してくれる社員がたいていいるためしょうもないことで悩む時間がほとんどなかったです。自分が新入社員のときに「自分で調べるよりも先に聞いて」と言われてこの言葉がいまでも非常に気に入っています。聞いた後に自分で調べて数分後に「解決済み」のリアクションを自分でつけるとか非常にあるあるでした。

しかしMetaでは聞く前に自分で調べろということをかなり徹底されている印象を受けます。これは人数の規模感の問題で、チャンネルによっては数百、数千、数万人が入っていることがあり、投稿に気を取られる人の時間を考えるとできるだけ自分で解決できる範囲で解決した方がよいとされており、ドキュメントを整備することも非常に推奨されている印象です。普段働くチームの人たちのみが入っている少人数のチャットではもう少し気軽に聞けますが、それでも今のところPFNの方がここはスムーズだったなあと思います。まあ自分だけのスムーズさではなく会社全体でのスムーズさの合計に注目すると妥当なシステムだと思います。

あとはMetaだとリモートのミーティングが基本です。チームの人は北米中に散らばっています。PFNのときは出社も一応ありましたし、出社しているときは机が隣同士だったので、デバッグに困ったらそのまま机に呼んで隣で聞きながらデバッグをする、ということができましたが、当然これはできなくて、たまに「これ経験者に聞いたら絶対5秒で解決するのになんか30分もかけている・・・」みたいなことが起きてしまいます。

(追加)PFNのSlackには個人のレポートチャンネルという、実質業務用ツイッターのようなチャンネルがあり各々が自由に投稿しています。自分の場合、デバッグのメモ帳のように使うことが多く自分でログをとっておけるし、見かけた人がいつでもコメントを残すことができる(しかも驚くことにかなり見てくれる人がいて数分で返信がついて解決することも多いです)のでかなり気に入っていました。MetaはSlackを使っていなくて内製のツールがあるのですが、レポートチャンネルみたいにテキトーなことを投稿できる場所がいまのところ見つかってなくて投稿のハードルの高さを感じています。

必要とされる能力について

実は、これが結構違うように感じます。2つの目線について話したいです。

1つ目は競プロ的な能力についてで、これは自分が携わった分野については、PFNではかなり武器になるように思えます。というのもsegment treeをはじめとする特殊なデータ構造はそれなりに登場しますし、名前がついているようなアルゴリズムをそのまま使うだけはなくフローのアルゴリズムをベースに独自にアルゴリズムを設計しうまく問題を解いた、という競技顔負けの瞬間も目撃したことがあります。コンパイラまわりのタスクにこういうのが常にたくさんあるわけではもちろんないのですが、アルゴリズム関連の質問をするSlackチャンネルがあり、そこにはそれなりの頻度で複雑な問題が投下され、社にいる競技プログラミングのレジェンドたちが鮮やかに解決していく様を見れます。 Metaの場合、何人かの社員に聞いてみましたが、競技プログラミングの能力が必要とされるシーンは非常に限られそうです。というのもPFNでのこうした最適化は特定のモデルに特化して性能向上させようとした場合に登場するものが比較的多かったのですが、PyTorchやそのバックエンドはあらゆるモデルをサポートし、将来的にもメンテナンスしやすいものを開発するのが大前提で、問題が複雑になりすぎて特定のアルゴリズムが力を発揮するようなシンプルな問題に落とし込むのが難しいです。たとえばLLVMにもグラフや木に関する競プロでも見かけるアルゴリズムはそれなりに隠されていますが、自分で新しいアルゴリズムを実装する機会は非常に限られそうです。Metaの場合、そういうアルゴリズムを設計するといいう方向性よりかは、ものすごく規模が大きい開発を、他のメンバーたちをうまくコミュニケーションをとって長い目線で見たときに「良い」コードを書いていくという能力があまりにも重要です。

2つ目は、扱うレイヤについてです。このトピックについてはタイトルから逸脱するのですが、日本のIT企業との比較して感じたことして、とにかくMetaはレイヤが低い!!というのがあります。日本でエンジニアのアルバイト、インターンをしてきて、あまり大学で学んだコンピュータサイエンスの低レイヤの知識が生かされると感じた機会は少なかったのですが(別に低レイヤだから偉い、みたいなことはなく、自分はそれが単にかっこいいし、その普遍的な重要性や、年月をかけて洗練されたアルゴリズムや実装が好きなだけです)、Metaには非常にたくさんあります。自分のチームに前職が中国のByteDanceの人がいるのですが、ByteDanceも独自のアクセラレータを作っていてコンパイラチームがおり、似たような低レイヤの仕事をしていると言っていました。非常に規模の大きいソフトウェアを収益の基盤としている会社は基本的にあらゆるレイヤを自分たちで作っているので、何かしら好きな分野がある人はその仕事を見つけられる場所になると思います。ただByteDanceもコンパイラチームは中国本土のみとのことで、Metaの自分のチームも北米のみなので日本だとなかなかこういうレイヤに触れられる仕事が少ないのは残念に感じました。PFNはその点独自アクセラレータを作っていることもあり低レイヤなタスクもそれなりにあっておすすめです!

開発について

これは比較というよりかはMetaが特殊なので紹介です。MetaもGoogle等と同じくモノレポでの開発で、独自のソースコントロールツールがあり、独自の分散ビルドシステムを持っていて、独自のレビューツールを使っていて、前職だと当然のように使っていたGitHubを全然使いません。最初はあまりの世界の変わりようにびっくりしましたが、全部内製だと内製のいろんなツール(生成AI含む)との紐づけができて開発体験は実際かなり良いです。

様々なポリシーについて

これも大企業あるあるだと思うのでただの紹介ですが、入社時のオンボーディングであらゆる方面のポリシーについて勉強させられたのはびっくりしました(全部合わせると体感50時間以上あるかも?)。こういうことをやるとダメ、即アウトです、みたいな内容というよりかは、こういうことをやる方がみんながうれしいよね、という内容が多く、普通に勉強になります。個人的に気に入ってるものとして、英語ネイティブ同士がすごい勢いでディスカッションしてノンネイティブの人が置いて行かれるという状況はもちろんよくなくて、全員がアイデアを発言できるように事前にアジェンダを共有しておくとか話を振ってあげるとかの工夫ができるよね、というやつがあります。こういうとき、自分が話せない立場だと、「自分の英語が悪くて~」みたいに考えがちだと思うのですが、そういう雰囲気にもっていっている会議の進行自体に問題があると考えるのはわりと自分にとっては新しい気付きでした。

こういうポリシーがしっかりしているせいか、あまり英語が話せなかったり聞き取れなかったりして不穏な空気になる感じは一切なくてすごいです。僕もまだ慣れていなくてたまに単語がでなくて10秒ぐらいフリーズすることがあるんですが全員真剣に聞いてくれていてかなり話しやすいです。

福利厚生

Metaの福利厚生はかなり多岐にわたっていて、3食食事が出ることや一年に一か月までほかの国から働いてよいとか、健康に関する一部の支出(ジムにいくとか、スポーツの習い事をするとか、スキーに行くとか、Apple Watchを買うとか)は払い戻しを受けられるとかが特にいいなと思っています。Apple Watch払い戻しとはいかなくても、たとえば会社の有志でテニスやバスケをするときの費用は会社負担、のような仕組みがあればコミュニケーション促進にも役立ちますし健康増進にもいいですし、会社側にとっては給与に比べると全然大した支出ではないので世の中の会社もどんどん採用していってほしいなと思いました。ちなみに有給に関してはPFNの方がだいぶ多くて26日です(あと日本の方が祝日多い)。あと日本からトロントに引っ越すときの補助もすごかったです(この詳細に関してはConfidentialらしいので細かく書けないのですが、家族ごと引っ越しても金銭的に損をすることは少なくともないはずです)。

おわりに

最後Metaの紹介が多めになってしまいましたが、PFNもすごくいいところです。転職のきっかけは、これまで海外留学とか頭をよぎったことはあったのですが実行に移したことがなく、今海外に行かなかったら一生行かないかもと思って、後になって海外勢をうらやむようなことがあったら情けないのでとりあえず海外のエンジニア職に何か所か出してみたら偶然通った、というだけです。こちらのエンジニアも逆に日本に{行きたい/帰りたい}と言っている人を見かけますが、自分もいったん両方経験して好きな方を選択したいなと思っています。

最後に両方の会社の求人を貼って終わりにします。

open.talentio.com

www.metacareers.com

*1:おそらくお客さんに近いところで働いているエンジニアは顧客との会話や事業領域の勉強を通して後述する状況に近いLearnがあると思います




以上の内容はhttps://xuzijian629.hatenablog.com/entry/2024/11/01/114829より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14