PythonとOSS開発とフレームワーク解析の日々は
やがて世界5位の研究成果につながる

技術・デザイン

サイバーエージェントには、特定の分野に抜きん出た知識とスキルを持ち、その領域の第一人者として実績を上げているエンジニアに、新たな活躍の場を提供するとともに、各専門領域において、その分野の発展のための貢献・サイバーエージェントグループへ還元することを目指すための「Developer Experts制度」が存在します。今回はPythonのDeveloper Expertsとして活動する芝田将を紹介します。

Profile

  • AI事業本部 AI Lab 
芝田 将

    2017年新卒でサイバーエージェントへ入社後、ABEMA配信チームにて動画配信サーバーや動画トランスコーダーの開発に従事。2019年より研究組織AI Labにて、機械学習の自動ハイパーパラメータ最適化ソフトウェアの研究開発を担当。go-prompt、kube-prompt開発者。Optunaコミッター。Kubeflow/Katibレビュアー。共訳書「エキスパートPythonプログラミング 改訂2版」。

学生時代から「PyCon JP」の登壇や技術書の翻訳を手掛ける

― Pythonはいつから始めたのですか?

プログラミングを始めたのは高専1年生の頃からです。Webサービス開発と機械学習の両方に興味があったため、どちらも対応できそうなPythonを選んだところ、すぐにのめり込みました。

「Django」や「Flask」を使ったアプリケーションを開発するうちに、Webフレームワーク自体の仕組みや実装に興味を持つようになり、自作のWebフレームワークの開発を始めました。そういった活動が「PyCon JP」での登壇や、「エキスパートPythonプログラミング(改訂2版)」の翻訳につながりました。

ー どんなきっかけで大学生の頃から「PyCon JP」に登壇したり、技術書の翻訳に関われたりするのでしょうか?

アルバイト先のベンチャー企業が、主にPythonを開発言語に用いる環境でした。社内にはPythonに詳しい先輩が多く、OSSを開発したり「PyCon JP」に登壇したり、技術書の執筆に関わったりするのが盛んでした。私が開発していたOSSも皆が見てくれていたので、「芝田くんもやってみる?」と声をかけてくれたのがきっかけです。

振り返ってみると、なにげなく始めたOSS活動が周りの先輩達の目に止まり、チャンスにつながった気がします。

― サイバーエージェントではどんな事をやりたくて入社したのですか?

自分では作れないようなプロダクト開発に関わってみたくてサイバーエージェントを選びました。Webメディアに関しては開発経験があったので、それを活かせる環境が良いと考えていて、サイバーエージェントが手がける動画や音楽の配信は未知の分野なので、チャレンジできたら面白そうだなと。

特に「ABEMA」は、大学卒業した2017年には開局2年目を迎え、利用者も急増していました。これだけの動画配信プラットフォームを、Goで開発している環境は当時は少なく、大規模かつ新しいサービスの開発に携わってみたくて、サイバーエージェントを選びました。

― サイバーエージェントに入社後は、Pythonから一転してGoのエンジニアとして活躍をしています。言語をシフトした際の、成果を出す工夫は何ですか?

Pythonの時と同じように、GoでもOSS開発を続けました。特に「go-prompt」や「kube-prompt」といったGoのライブラリが注目されました。

Goは「ABEMA」の開発に関わってから始めましたが、その設計思想に好感がもてました。その一方、開発する中で「PythonのあのライブラリがGoにあったらなぁ」と思う事が度々あり、それらを移植してGitHubで公開したところ多く方に利用してもらえました。

大事にしていたのは「何の言語で開発するか」ではなく「プロダクトの課題解決のためにどんな技術が必要か」という視点です。PythonライブラリのGoへの移植も「これが解決できたらいいのにな」という素朴な課題からでした。チームを見渡してみると、プロダクトの課題は意外とたくさんある事に気づくので、その課題解決にフォーカスすると言語に左右されずに成果が出せるかもです。

また、他の人の書いたコードをたくさん読むことも大切だと思います。学生の頃、私は他の人のコードをとにかく読んで、そこから学びを得る事を習慣にしていました。この習慣のおかげで、仕事で計り知れないほどの恩恵を得られました。
 

他者のコードを大量に読む事で、言語に左右されない対応力が身についた

― 他者のコードを読む事でどんな学びが得られて、仕事にどう役立ちましたか?

学生時代にPythonを学び始めた頃「Django」の設計の素晴らしさに惹かれました。それから5年以上経っていますが「Django」の設計や実装面での完成度の高さは、今でも開発をする上で参考にしています。

アプリケーション開発で求められる一般的な機能要件に対して、その実装方法は普遍的であったりします。よくあるシンプルな機能であるほど、その実装方法を読み解く事で、設計上の重要なポイントを理解できます。フレームワークで抽象化されがちな事ですが、自分の目でコードを読み解いて、中のロジックを知る事で得られる知見は多く、続けていくと次第に言語に左右されない対応力が身につきます。

例えば、私は業務の一環で株式会社Preferred Networksが開発している「Optuna」というハイパーパラメータ自動最適化フレームワークのコミッターとして活動しています。

「Optuna」もそうですが、コードリーディングをしていると、一見不思議な実装にぶつかることがあります。しかし全体の設計を意識しながら読み進めてみると、まるで点と点が線でつながるように「こういう経緯があってこの実装になったのか」と感じることが多々あります。

プルリクエストを送る際も「全体の設計や歴史的経緯を踏まえたうえで、このように改善しましょう」といった提案ができるようになります。コードを読む力をつけるとOSSの開発にも参加しやすくなるのでおすすめです。

自分はOptunaのドキュメントには目を通さず、ソースコードや過去のプルリクエストで行われていた議論をさかのぼることで、全体の設計やOptunaが提供する機能を把握し開発に参加していたのですが、あとからそのことを話したら「Optuna」の開発者にも結構驚かれました(笑)
 

リサーチエンジニアとして技術でAI事業に貢献する

― 最近の業務内容を教えて下さい。

2019年に「ABEMA」からAI事業本部に異動しました。現在は、AI技術の研究開発組織である「AI Lab」に所属しています。メインの業務では、リサーチサイエンティストがハイパーパラメータ最適化の研究を担い、私がリサーチエンジニアとしてOSSの開発とプロダクト導入を進めるという役割を担っています。

AI事業本部は機械学習の活用が盛んなため、再びPythonがメインの開発言語になりました。

Pythonは、並行処理やパフォーマンスチューニングにある程度の工夫が必要とされる、やりこみ要素のある言語です。普段の業務以外にも、高速化やバグの修正、あるいはWebSocketサーバーが特定の環境下で動かないから原因を調べて欲しいといった依頼を受け、スポットでサポートに入ったりしています。

例えば、Pythonの機械学習プログラムをC言語を使った拡張モジュールで高速にしないといけないシーンがあったりします。C言語による高速化に苦手意識を持っているエンジニアも多いのですが、そんな時、自分のようなエンジニアが横断的に、必要に応じてサポートに入れば良いと思っています。

機会があって低レイヤーの勉強もしてきたので、ゴリゴリに最適化されたコードもそれなりに読み書きできます。
Intel SSE命令セットによるSIMD演算を使って最適化されたC++の機械学習ライブラリに手を入れる必要があり、その実装の難しさに困っていたチームがあったのですが、そこに自分が入り機械学習ライブラリの論文を読んで勉強しながらC++のコードを修正するといったこともしました。

― 素朴な疑問なのですが、なぜそんなに色々なことができるのでしょうか。

学生時代、暇だったんです(笑)。時間があり余っていたので「Django」のコードを読み込んだり、WSGIフレームワークやWSGIサーバーをイチから作ったりしました。あの当時、ライブラリや使っているフレームワークの実装を掘り下げていた事が、今では財産になっています。

仕事でエンジニアリングをする中で学べることはもちろんたくさんありますが、プロダクトの機能開発などでは必ずしも深く技術を掘り下げて理解する必要のあるタスクばかりではないと思います。自分が好きなフレームワークのコードを読み、関連するプロトコルの理解を深めていくと、そこで得た普遍的な知識は財産となります。特に低レイヤーに関しては言語が変わったとしてもすぐに対応可能だったりします。低レイヤーを抑えている事で、上位のアプリケーションレイヤーもある程度想像できるようになるのでおすすめです。
 

OSS開発が研究成果に繋がった「BBO Challenge」での世界5位入賞

― 機械学習のコンペティションで世界5位になりましたね。

「Black-Box Optimization Challenge(以下、BBO Challenge)」という、機械学習におけるハイパーパラメータ最適化アルゴリズムの性能を競うコンペティションです。機械学習分野のトップカンファレンスであるNeurIPS 2020に併設する形で開催されました。

ハイパーパラメータ最適化というのは、現在私がチームで取り組んでいるテーマです。前述した「Optuna」の開発に参加したのも「Optuna」がOSSのハイパーパラメータ最適化フレームワークだからです。

この分野の著名な研究者も参加するコンペで上位入賞することで、自分たちが研究としてだけではなく実践的に強力な手法を開発できることを示したいとおもう一方で、私のチームは2人だけなのでリソースが足りません。そこでOSS開発で繋がりがあったPreferred Networks社のチームに連絡を取って一緒に参加した結果、トップカンファレンスの併設コンペで世界5位に入賞し、ソリューションを発表することができました。

OSS開発でのつながりを研究成果に繋げることができたので、本当に嬉しかったです。

― 今後やりたいことや目標があればお聞かせください。

OSS開発に業務として取り組むというポジションは社内でも珍しい立場です。OSS開発を社内の価値に繋げる。それが難しいからこそだとは思いますが、今回のBBO Challengeのような成果を上げることで社内外に貢献し、その価値を示していければと思います。

またPython関連の相談を受けてスポットで対応するというミッションに関しても、今後は全社に広げていければと思っています。ハイパーパラメータ最適化のライブラリ開発やPythonの高速化に関しては事業に関わらず手伝えるはずです。AI事業本部の中では今でも頼ってもらえていますが、他の事業部とも連携していければと思います。

あとは自分だからこそ解けるというような難しい課題にどんどん挑戦していきたいですね。カリカリにチューニングしたものが必要で、それがないと提供できない機能があるとか。根が深すぎて誰にも特定できないような問題があるとか。そういうところにスッと入って対応できる。

それがDeveloper Expertsに求められる役割だと思うので、自信をもって「解決できます」と言えるよう、低レイヤーの知識も含めて自分のスキルを磨いていきたいと思います。
 

2022年度新卒採用エンジニアコースエントリー

2022年度 エンジニア新卒採用エントリーはまだまだ受付中です。

この記事をシェア

オフィシャルブログを見る

あわせて読みたい

記事ランキング

なぜ、瀧澤 慎一のCMは愛されるコンテンツになるのか

技術・デザイン

THE CONFIDENTIAL #2 瀧澤 慎一

次世代クリエイティブ専門チャンネル「THE CONFIDENTIAL」は、広告をはじめ・PR・映像・デザインなどクリエイティブの世界の最前線で活躍するプロフェッショナルたちの 「秘伝技術(=confidential)」を学べるYouTubeチャンネルです。

サイバーエージェントとThe Breakthrough Company GOが共同で企画制作。MCは、クリエイティブディレクターの木本梨絵さんが務め、毎回、多彩なゲストをお招きし、コアアイデアの開発、企画設計、思考法の変遷やその体系など、プロフェッショナルな方々が持つ「秘伝技術(=confidential)」を掘り下げていきます。

Page Top