seri::diary::graduate_school

大学院修士課程での研究生活について書いています

研究室訪問(1年ぶり)

2018年3月8日

余っているUQ*1のを使って研究室訪問した。前回研究室に来てから実に1年ぶりである。

serihiro-graduate-school.hatenadiary.jp

午前中は担当教授*2と研究の進め方について話し、午後は研究室の先輩に研究室用のメアドを作ってもらったりslackに招待してもらったりssh用の公開鍵を登録してもらったりした。

とりあえず、今年のスケジュールとしては10月に論文を一本どっかに出せることを目標とすることで進めることになった。逆算すると4月~7月でテーマを絞り込まなくてはならない。 思ったより短い感はあるものの、1日の間に使える時間は今よりも長くなるはずなので、スケジュール感覚も少しずつ学生のそれに合わせていかなくてはなるまい。今だと「何かを勉強する」というのは、仕事以外の時間でやるので1日2時間やれたらいい方かなという感覚だが、学生だと講義が1コマしかない日だと最低6時間程度は自由に使うことができるだろう。この辺のスケジュール感覚やペース感覚をまず覚えることが今年前半の課題にはなりそうである。
テーマについては、MapReduceの何らかのレイヤーでの処理の高速化手法について考えるということで大枠は決まったが、具体的なユースケースとして何のアプリを動かすか、というのが決まってなかった。他の論文だとよくWordCountを使っているのだが、それだとどうもパンチが効かないというか印象が弱いのであまり誰もやってないのがいいらしい。かつ、HPC上での実装が前提になるので、計算料が多いアプリケーションの方がよい。ということで、ボスの提案もあり、ディープラーニングMapReduce、もしくはクラスタで分散環境で実行するケースにおける高速化を仮のテーマとすることにした。ニューラルネットワークは過去にゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装を読んで実装したことはあるが、ホントに基礎的なものだったし、そのあと丸1年以上触ってない関係でだいぶ忘れてしまった。*3

serihiro.hatenablog.com

そのため、ディープラーニングを実装するとして、ディープラーニングの最近の研究トピックや、主流の実装方法については殆ど無知に近い状態である。そのため、まずはここからやらねばならない。入学式を経て、本格的に講義と研究が始まる前までにできるだけ事前に調査を行って、最低限研究室の鯖をいじれるようになったらすぐに着手できるようにしたい。

で、色々調べたところ、自分の研究主旨である「クラスタ上で分散実行」や「GPUを使って高速化」して実行するのに良さそうな、Deeplearning4jという、java実装のディープラーニングの実装フレームワークを使おうと考えている。*4

deeplearning4j.org

分散ディープラーニングと言えばChainerMNがあるが、DL4JはSpark, Hadoopとの連携(どのレベルの連携なのかまだドキュメント読み切ってないが)が可能であり、分散処理レイヤーとは切り離してディープラーニングの学習モデルを実装できる。これにより、分散処理レイヤーの差がどれぐらい実際に動作するアプリケーションのパフォーマンスに影響を与えるかを評価することができるような気がしている。

昨日、筑波から東京に戻ってから夜試してみたが、サンプルコードが豊富で、毎度おなじみMNISTもあるし、ドキュメントもそれなりに充実しているので、しばらくこれをいじってみようと思う。

あと、ディープラーニングについては日本語が出たばかりのこの書籍を買った。ちなみに原著はweb上で全文が公開されているという太っ腹っぷりなので、訳が怪しそうと思ったら原著を当たればよい。便利。

*1:なおUQは10営業日休んでも余るぐらいはあった

*2:以下ボス

*3:今思えば勿体ないことをした…当時はこの勢いで機械学習エンジニアマンになるで!とか思ってたが、色々あってjsonおじさん業を続けてしまった

*4:以下DL4J