こんにちは、kirohi(@huslc2es)です。
2020年2月から1ヶ月間, CyberAgentのエンジニアインターンシップに参加してきました。
CyberAgentのインターンにはいくつか種類がありますが、今回参加したのはCATechJOBと呼ばれる実務に入る形式のものです。
読者対象は以下の通り。
- CyberAgentのインターン参加を考えているエンジニア学生
- CyberAgentの新卒採用を受けようとしているエンジニア学生
早速、中身に入っていきます。
参加までの経緯
大学2年の冬ごろから短期のインターンシップ(イベント?)に参加していました。具体的には、APIヒダッカソンやKubernetesハンズオンです。
Kubernetesハンズオンに関しては以下の記事にまとめています。
1ヶ月のインターンも行ってみたいなーと思っており、人事の方とやりとりして2月に行くことにしました。
CyberAgentの主となる事業は、ゲーム・メディア・広告です。その中でも広告に興味があったので、アドテクの事業部を希望しました。
現場の方(後のトレーナーさん)とオンライン面接をやったのは参加2週間前くらいでした。
面接とは言え、比較的カジュアルな雰囲気で、今までやってきたことや興味のあること、関わる予定のプロダクトなどについて話をしました。
ここで落ちたら2月どうしようかと思ってましたが、その面接が終わってすぐ、参加が確定して安堵した覚えがあります。
インターンでやったこと
プロダクト
今回僕がジョインしたチームは、機械学習x広告のプロダクトを開発しています。
まだ表に出ていないので、あまり詳しく書けません。
インフラとしてGCPをバリバリ使っており、APIサーバーとしてGo, Flask(Python)がいたり、フロントにはVueがいますが、メインの技術は機械学習です。
具体的にインターン期間中にやったこと
主にやったのはMLOps周りのことです。
具体的に触った技術を列挙すると、Python, Docker, Redis, Cloud Dataflow, Cloud Composer(for Apache Airflow), Cloud Buildなどです。
これらを用いてバッチ処理を実装しました。
詳細には、機械学習を行うDataflowのジョブがあり、それをApache Airflowから定期的に実行できる環境を整えるというタスクです。
発表で使ったアーキテクチャ図。
そのバッチ処理を構築するために、チケット単位に分けた以下のタスクなどを行いました。
- 環境変数の依存整理
- Cloud Composer環境整備
- Dataflowテンプレート化のためのDocker化
- 効果予測前に挟むRedisによるキャッシュ実装
- テンプレートジョブを実行するAirflow DAGの実装
- Airflowを自動デプロイするためのCloud Build構築
- FailedしたAirflowジョブをSlackに通知する実装
短期間で色々と触れて面白かったです。
実装はできたものの、一つ一つの技術を深く理解して使いこなせたとは言い難いので、今回触れたもの使って個人的に色々やりたいなと思ってます。Redisとかまだ使いこなせないので。
得た学び
- デバッグ
- 内部実装を早めに読もう
- 機械学習プロダクトのやり方
デバッグ
GCPのML系のプロダクトを本格的に触ったのは初めてでしたが、Dataflowにかなりハマり、デバッグに時間を使ってました。
1回の実行に時間がかかる、現場ならではの感じをあまり経験していなかったたのですが、やっぱり大切だなと。機械学習のモデルを回したりするチームの方々のことも横で見てましたが、ジョブの実行時間長いのでミスってた時かなり無駄が生まれます。
今回コード上に色々パスを書く必要があったのですが、こういう無駄な場面でTypoなどが生まれると、遅れの可能性が生まれます。Typo検知のツールなど、デバッグ時間は極力減らせる努力をしたいです。
内部実装を早めに読もう
これまでの開発でも行っていたことではありますが、エラーの根本原因の追求のためには、早めに使っているライブラリなどの内部実装を読んだ方が良いと学びました。Apache AirflowなどPythonで書かれているので良いものの、慣れ親しんだ言語以外のライブラリのコードはなかなか読みづらいです。ハードルが高い。
ただそれでも、言語間の差異が少ないものは結構あります。例えば、Javaが読めるならJavaScriptも読めるだとか。で、実際意外と読めたりします。
なので、英語でググって出ないレベルのエラーは、コード読んで解決した方が早い感じがしてます。
機械学習プロダクトのやり方
今回僕がお世話になったチームでは、GCPのMLプロダクトたちをバリバリ使ってました。
事業としての機械学習プロダクトに触れるのは初めてだったため、構成などを聞くのが新鮮でした。実際にモデルを実装するエンジニアとその基盤を作るエンジニアで、どう一緒に進めていくのか肌感覚で知れたのが良かったです。
感想
1ヶ月の間、学生一人一人にトレーナーさんが付きます。僕のトレーナーさんは開発責任者もされており、忙しい中で面倒を見ていただきました。
優しく接していただき、詰まった際も丁寧に教えいただけ、感謝しています。
チームの雰囲気もとても良いです。メンバーの方々はもちろん、僕と同じタイミングでインターンとしてジョインした@yciskw_さんもささっとタスクをこなしていて久しぶりに自分の未熟さを再確認しました(笑)
ランチでは(写真は割愛)、他のチームや事業部の方々とも多くセッティングしてもらえるので、ジョインしたチーム以外の雰囲気も知ることができます。広告配信のDynalyst, AirTrack, メディアのCATSのエンジニアの方々やシロクの飯塚社長などと美味しいランチが食べれたので、とてもありがたかったです。
色々美味しいものを食べたので、毎日松屋で全然OKという僕の舌も、少しは肥えてきたようです。
これまでいくつかインターンには参加してきましたが、実務でチームにジョインして開発を行うのはあまりやって来なかったため、良い経験になりました。
おそらく今年もインターン(CATechJOB)は通年募集だと思うので、考えている方はぜひ応募してみてください。