Shu's Blog

物理学とフォルクローレと競技プログラミング

サマーインターン体験記 その 2

この夏は 3 週間のインターンにふたつ参加したのですが, ついに両方が終了したので感想を書いておこうと思います.

ひとつ目のインターンについてはこちらの記事をどうぞ. shu-ile12x.hateblo.jp

ふたつめのインターンは 9 月 9 日 〜 9 月 27 日の 3 週間で, フィックスターズさんにお邪魔させていただきました. 高速化で有名な企業ですが, 今回はすこし高速化とは違ったテーマで取り組みました.

応募

時系列に沿って見ていきます. フィックスターズさんを知ったのは AtCoderJobs がきっかけでした. 確か 6 月の末か 7 月の頭くらいにここを見ていて, 色の条件を満たしていたのと (青だったので基本的にどこでも大丈夫だった気がしますが), 要求スキルが低めでとっつきやすかったこともあって, 応募ボタンから応募しました.

すぐにエントリーシートの記入の案内が来て, 次の週くらいには面接, さらにそこから 1 週間くらいで合格の連絡, と割と早いペースで進みました.

そもそも高速化に興味があったわけではないので (ごめんなさい), 面接でもいろいろ適当なことを喋ってしまいましたが, なんで合格したのか謎です. まあ, メンターさんは情報系じゃない人にもインターンに来てほしいと言っていたので, そういうことかもしれません.

準備

決まったのは 7 月の頭だったのですが, 特に事前課題などはありませんでした. また直前まで別の企業にインターンに行っていたこともあって, 何か準備などをする時間はあまりありませんでした...

1 週目

初日 (9/9) の早朝に台風が来て, ほぼすべての電車が止まっているか動いていても混雑で乗れないという状況で, 出社するのが大変でした. 期間の途中だったら休んでいたと思うのですが, さすがに初日なので行った方がいいかなという気持ちでした.

結局午前中はインターンも社員も揃わず, 午後からガイダンス, 夕方に PC のセットアップなど, という感じで初日はほとんど何もできませんでした. 次の日からはテーマに沿って OpenCL のキャッチアップを進めました. 一応守秘義務があって, 一応この部分は公開されていないので詳しくは書かないことにしますが, そもそも OpenCL に触れるのが初めてだったこと, また競技プログラミングで適当なコードを書いていることもあって, コードレビューは結構いろいろな部分で突っ込まれました.

初日はだいたいキャッチアップに使ってしまいました.

2 週目

月曜日が祝日で, 火曜日からのスタートです. 初週は台風で月曜日が潰れていて, 実は 3 週目も月曜日が祝日 (秋分の日) なので, 3 週間のインターンですが実質 12 日しかありません...

などと言っていても始まらないので, キャッチアップの残りを終わらせて業務に入ります. 今回はオープンソースClPy というプロジェクトに参加させていただきました. Python から CUDA を使うフレームワークとして CuPy がありますが, ClPy は Python から OpenCL を使えるようにしたもので, CuPy と同じコードが OpenCL 環境で動くように設計されています.

もちろんまだ対応していない部分もあるので, すこしその部分のお手伝いをさせていただきました. CUDA 用のテストがひとつ書き換えられずスキップされていたところがあったので, この週はその部分を OpenCL 用に書き直すということをしました.

やったことは issue にどんどん書いていけ, ということだったので, 基本的に この issue を見るとやったことがわかります. いろいろと迷走していて, 結局 1 日か 2 日で終わるのでは, という程度の内容しかしていませんが...

3 週目

引き続き上の issue のタスクを進めていました. テスト自体は通るようになっていたのですが, それ以降のベンチマークの部分が ClPy で実装されていなかったので, 実装を考えました.

CuPy/CUDA で時間計測をするにはイベントオブジェクトというのを用います. ClPy/OpenCL でもイベントオブジェクトを用いるのですが, そもそも CUDA と OpenCL でイベントオブジェクトの考え方が違うので, その部分を解消するのが大変でした. OpenCL での時間計測の方法はいろいろ解説記事がありますが, CUDA との比較という点ではあまり見当たらなかったので今度 Qiita などにまとめようと思います.

この週も実質的な作業内容は少なかったのですが, いろいろバグを踏んだり迷走したりしていた結果, 4 日間使ってしまいました.

あとは一応成果発表会があったりしましたが, メンターさんのアドバイスとして, 発表準備に時間をかけるより開発を進めたほうがいいということだったので, 資料は半日くらいで適当に作って, 練習なしで発表ということをしてしまいました. 代わりに上長の評価は微妙だったようですが... まあ, 月曜日が平日だったらあと 2 日あったので, もうすこし発表準備に時間をかけられた可能性はありますが, それは仕方ないですね.

環境

オフィスは大崎にあるのですが, 山手線の反対側に住んでいるのもあって通勤にはすこし時間がかかりました. 地下鉄が通っていないので, JR が止まったときはすこし大変ですね.

基本的には技術の会社ということもあって, 面倒な紙の手続きや報告書を書くということもほとんどなく, Slack と GitLab/GitHub 上でコミュニケーションを取ることがほとんどでした. 最初の週を使ってしっかりキャッチアップができたのもよかったです.

個人的に印象的だったのは, やったことは基本的にすべて (Slack でなく) GitLab の issue に書くこと, という方針でした. これをすることで仕事をしていることが周りに伝わるだけでなく, 困っていたら助け舟を出してくれたり, あるいは将来誰かの参考になるかもしれないということが理由のようです (Slack だと流れてしまうとなかなか見られないので).

今回参加したプロジェクトがオープンソースGitHub だったということもあって, issue に独り言をひたすら書くことにすこし戸惑いはありましたが, ある程度守ることができたかなと思っています. また, CUDA や OpenCL に触れたこと以外に, Git でのチーム開発の流れを知ることができたのはよかったかなと思います (前のインターンではチーム開発という部分で適当にやってしまったので...).

あとはオフィスの環境ですが, 噂に聞いていた 10 円自販機をとても重宝したのと, おやつタイムや社内勉強会という交流の機会が多くあったのもいい印象でした. ビルの下にはいろいろ飲食店があってどのお店もとても美味しいのですが, 多少高いのがネックですね.

オフィスの入り口は静脈認証で, 入館証を忘れるということがなかったのは安心でした. たまに認証に失敗すると焦りますが...

反省点

前回のインターンの反省点だった質問をためらうという点についてはある程度解消されたかなと思っています. そもそも issue に逐一書いていくという方針もあって, 長時間一人で抱え込むということが起きないような仕組みになっていたのは助かりました.

ただ, それでも "3 分考えてわからなかったら質問しろ" という指示はなかなか守ることが難しく, いろいろ試しているうちに 1 時間, 2 時間経ってしまうことも多かったです. まあ, ときには一人でいろいろやってみることも大切だとは思いますが, トータルで見ると無駄なことをしている時間がほとんどなので, 適当に見切りをつけて質問することが大切だなあと感じました.

あとは, おやつタイムや社内勉強会といった交流の機会は多く設けられていたのですが, なかなか積極的に交流していくことができませんでした. これはコミュニケーション能力に依存するところが大きいので難しいですが, もうすこし他のプロジェクトの方々とも話をして, いろいろな知見を得られたらよかったなと思っています.

実際の開発の内容については, いろいろと細かいところで詰まってしまい, 思うように進まなかったというのが印象としてあります. 反省点とはすこし違うかもしれませんが, 当初はもう一つ別の機能も実装するという目的だったので, そこまで行けなかったのは残念ではあります. 一方で適当なコードを時間をかけて直していただいて, 大規模なチーム開発で気を付けるべき点がいろいろと学べたのはよかったと思います.

今後

アルバイトという話もありますが, 基本的にはそろそろ研究をしないといけないので, インターンはこれでいったん終わりで, 次は冬から春の実際に就活が始まる時期かなと思っています. 残り 1 年半でしっかり物理をやりたいという気持ちもありますし.

ただ, 今回参加したプロジェクトはオープンソースGitHub 上にあり, CuPy/CUDA と違って ClPy/OpenCL は普通の MacBook でも動く (GPU の性能は知りませんが) ので, 開発に参加することはいつでもできます. 残ったタスクもありますし, 機会があれば何かの形で関わっていきたいなとは思っています.

ちなみにお給料が結構いいのですが, 10 月末に振り込まれるのを見越していろいろカードでお買い物をしてしまいました. 何か手続きに不備があって振込が遅れるみたいなことになるとすこし大変かもしれません...