seri::diary

日常

2020年の目標 a.k.a. じぶん Release Notes (ver 0.33.8)

これは何か

  • 2020年の目標を定めておき,年末に振り返ってどの程度達成できたかを確認して自分を褒めたりけなしたりするための所信表明である

2020年1月1日時点の課題

  1. 英語力が必要になるのにTOEIC L&Rのスコアが700点しかなく,英語による意思疎通がほとんどできない.特にリスニングが壊滅的で,ネイティブの英語はゆっくり喋ってもらっても9割以上何を言ってるかわからない.
  2. 深層学習の理論についての知識が皆無に等しく,自分で問題を深層学習タスクに定式化して解くことができない.機械学習全般についても同様.
  3. 競技プログラミング力を通じてわかったことだがアルゴリズムの実装力がクソ雑魚すぎる
  4. ここ数年新しい技術を何も勉強していない

各課題を克服した状態の定義

1. 英語力

  1. TOEIC L&R 900点達成(点数に深い理由はないが今が700点なので1年で200点ぐらい伸ばしたいということで)
  2. 頻繁に使う表現は,聞いて理解でき発言することができ読むことができる

2. 機械学習

  1. kaggleのコンペで自分で特徴量を決定してモデルを実装して結果をsubmitできる
  2. Deep Learning検定 E資格を取得する
  3. 何らかのモデルの推論最適化を手でできる.理想を言えば最適化コンパイラを書いて自動最適化できる.

3. 競プロ力

  1. AtCoder青コーダー達成(今は茶コーダー)
  2. ABCなら4完は余裕.調子がいいときならABCDEF6完も.AGCもビビらずに出られる(今はWA連発してレーティング下がるのが怖くて出られない)

4. 新しい技術の勉強

  1. 何が当たるか分からないが量子コンピュータで何らかの数理最適化問題量子コンピュータで解ける形式に落とし込んで解けるようになる

課題を克服するための具体的な行動

1.英語

  • 諸事情により短期間で英語力を伸ばす必要があるため,短期集中で英語を学ぶレッスンに通って札束で殴る
  • 英語を話す機会を増やすためにDMM英会話などのオンライン英会話をやる
  • TOEIC L&Rの勉強をする.まずは語彙力が足りてないのでそれを伸ばしつつリスニングをがんばる(でもリスニングだけはどうやって勉強すればいいか分かってない)

2. 機械学習

  • DeepLearning検定は指定されたコースの受講が必要なのでそれを受ける
  • とにかくkaggleに出る
  • 自分はDLだとConv, FC,Pooling,Dropout,Sofmaxといったメジャーな計算しか知らないので,機械学習全般でどのような計算が行われるかを調べて,それぞれに対する最適化手法を研究する.コンパイラはそのあと着手する.

3. 競プロ力

  • 地道にAtCoderに出続ける
  • 過去問を埋め続ける
  • 自分が使えるアルゴリズムを地道に増やしていく

4. 新しい技術の勉強

  • 量子コンピュータについては本を一冊読んだ程度の知識しかないのでゼロから勉強し始める

会社員辞めて入学した大学院修士課程がそろそろ終わろうとしているのでまとめておく

これは何か

2018年3月に仕事を辞めて,2018年4月に筑波大学大学院システム情報工学研究科コンピュータサイエンス専攻博士前期課程(修士課程)に入学したのだが,もうすぐ修了なので大学院生活を忘れないうちにまとめておくだけのエントリである.修了自体は2020年3月だが,あとは修論を仕上げて提出すれば終了なので研究自体はもう実質終わっている状態である*1

筆者について

2009年3月に岩手大学農学部を卒業.新卒で上流系SIerに就職して2年半ぐらい勤務した後に,コード書きたくてwebアプリエンジニアに転向.その後,6年半ぐらいweb受託,webサービス運営企業などでソフトウェアエンジニアとして勤務.2018年3月に仕事を辞めて,2018年4月に大学院に入学した.詳しい入学の経緯は以下のエントリを参照.

serihiro.hatenablog.com

なぜ大学院に入ったのか

上のエントリと重複するが,簡単に言えばCS (Computer Science)を勉強したいと思ったからである.学部は農学部で,プログラミングは会社員になってからほぼ独学で勉強して,上流系SIerからweb屋にキャリアチェンジしている.そのため,きちんと体系立てられたCSの勉強をした機会が一切無かった.

CSが具体的に何を指すのかすら入学時点では良くわかってなかったが,それとは別に具体的な問題意識として,業務で解決できないパフォーマンス問題に遭遇するケースがたまにあって,そういうものをHWのスペックに頼らずにソフトウェアで解決するための基礎力を身に付けたいという動機があった.そのための道筋として,優秀なエンジニアが大体みんな口を揃えて「重要である」と語る「CS」をちゃんと勉強して,自分のスキルの幅を増やしたいというのが動機である.最終的には,プロジェクトやキャリアの選択の幅を広げることが目標だった.初めからMaster取ったら再就職する予定で,Ph.D.まで取ってアカデミアにキャリアチェンジしようとは思っていなかったし,実際,修了後は都内で再びソフトウェアエンジニアとして勤務し始める予定である.

CSの基礎知識はパタヘネに書いてあると思い込み,前職で輪読会をやったりして同僚と読んだりしたが,どうにもどの知識がどう役立つのかが分からない問題があった.「知識」ではなく「具体的に使える知恵」として昇華させるには,CSの研究を実践している場に行って学んで来るのが早かろうと思った次第である.詳しくは上のエントリに譲るが,ちょうど資金的にも親から少し借金すれば何とかなるぐらいの目処がついていた時期だった.

日本の大学院という場所について

日本の大学院を修了した方ならすでにお気づきだろうが,自分は入学時点で大きな思い違いをしていた.

それは「日本の大学院は勉強する場所ではない」ということである.何をする場所かといえば「研究をする場所」であり,「大学院生は研究室に所属して研究する人」という扱いである*2.つまり,何かを学ぶためにゼロからやってくる場所ではなく,必要な知識や技術は所有している前提で,その上で研究をする場所である.
なので,その事実が正しければ「CSを勉強したことないから日本の大学院行って勉強する」というのは誤った行動である.もちろん,大学院生はプロの研究者ではないので,その前提で扱われる.しかし,自身の研究によって対外的な成果が明確に求められる存在でもある*3.実際,自分の所属研究室でも多くの学生が国内外で対外発表をしている.

そういう環境なので,「自分は研究はそこそこやって,後はやりたい勉強を優先する」とはいかないのである.そういう「修論以外の研究はやりたい学生だけが頑張ればいい」という研究室もあるのかも知れないが,自分の場合はそうではなかった.仕事のように毎週ミーティングで進捗を共有する義務があるし,国内外の対外発表のタイミングが近づいてくれば「誰が論文を投稿できそうか」という話題がミーティング上の議題となる.入学前の自分は,研究で対外発表ができるほどの成果が出せるとは思っていなかったし,ちゃんと修了できればそれでいいぐらいにしか思っていなかった.また,指導教員とも入学前にこの辺の認識合わせをしていなかったため,入学後にこの実情を知り,若干面食らったというのが本音であったりする.

さて,そういう環境下において「CSを勉強する」ことを目的として入学したマヌケな自分はどう過ごしたかといえば,平日の日中は研究をして,夜や土日に図書館や自宅でやりたい勉強をしていた.時間の使い方だけ見れば会社員時代の仕事が研究にそのまま置き換わったような感じではあった.だが,研究と自分の勉強したい内容はある程度オーバーラップしていたので「プライベートの勉強に加えて研究からも勉強する」という体制が確立できていた.この辺は研究テーマの選び方次第という感じがするが,完全に違うジャンルだったらプライベートでの勉強が「完全なただの独学」となってしまい,効率がかなり下がっていて厳しかったと思う.オーバーラップしていたお陰で,勉強していて分からないこととか本の選び方等を研究室の学生や指導教官に質問できるのでこれはありがたかった.

プライベートで勉強したことを直接研究に反映できたかというと若干怪しいのだが*4,その逆として研究での実装作業を通じて学んだことは多かった.Pythonでの並行・並列プログラミングの難しさとか*5,用途に合わせた性能計測の仕方とか,再利用可能なshell scriptの書き方とか*6,Rのggplot2を使った見やすくてアカデミアでも怒られないマナー*7を守ったグラフの書き方とか.当初勉強したいと思っていたことをすべて消化できたかというとそんなことはないのだが,それでも自分が知らない知識や知見を得られるのはなんでであれ重要なので,いい経験になったと思う.英語の論文を読むことに一切抵抗がなくなったのも良かった.

CSについては色々と勉強した結果,「解決したい問題に対して最適な既知のアルゴリズムを選ぶ,もしくは自分で考案することが,コンピュータを効率よく使うための基本的かつ一番重要なアプローチ」ということが分かってきた,というか自分が一番苦手なのその部分だと分かってきたので,最近は競技プログラミングで修行している.*8

f:id:serihiro:20190523084807j:plain
研究室における筆者の作業スペース.ディスプレイがやたら余っていたので2台借りていた.PCはMacBook Pro (Retina, 13-inch, Mid 2015).

大学院での研究内容について

筑波大学大学院ではHigh Performance Computing System研究室に所属した.文字通りHigh Performance Computing,つまりスパコン*9に関する技術研究をする研究室である.

なぜこの研究室を選んだのかといえば,自分はもともとwebエンジニアで,現場で遭遇するパフォーマンス問題は大体が大規模なデータ処理に関するものだった.そのため,大規模データの処理に関する研究をする指導教官がいる研究室を選んだ,というのが動機となる.あとスパコンは当時の自分の知識体系からは最も遠い場所にある存在で,かつ民間企業,特にベンチャー企業では触れる機会がほとんどないもの,というイメージが強かった*10.なのでせっかくだし触れてみようと思った.

研究テーマとしては深層学習の訓練処理の高速化について取り扱った.深層学習を選んだのは「HPC + 深層学習(の中でも訓練処理)」の研究が2018年春の当時でトレンドになり始めており需要がありそうだったのと,自分自身がもともと統計や機械学習に興味があり多少独学で勉強していたので取っつきやすかったためである.

最初の研究は「深層学習の訓練処理中のGPUをプロファイルしてGPUの負荷がサチるギリギリのミニバッチサイズを見つける研究」というものである.これは事前調査でChainerのCIFAR100+VGG16のサンプルスクリプトを回してGPUの負荷状況をプロファイルしたところ,一般的なローカルミニバッチサイズである16や32で回すとGPU(P100とV100で実験)が相当遊んでいた事実に起因するネタだが,研究テーマがなかなか決まらなくて苦しみ続けてM1秋の修論中間発表*11の2週間ぐらい前にギリギリで思いついた思い出深い研究である.この研究自体は一度HPC研究会で発表はしてみたものの,実用性の問題とその後の研究の発展性が思いつかなかったことからそれっきりで終わってしまった.しかし,ImageNet 1-K (ILSVRC 2012のtrainデータ)を訓練データとして使用すると,CPU側での処理時間がボトルネックとなり,ミニバッチサイズを上げてもGPU側の負荷は断続的にしかかからず,結果的に訓練処理中のGPUのアイドル時間はCIFAR100を使った時と比べて相当長くなっている事実を発見した.これが次の研究につながった.詳細は以下を参照.

serihiro-graduate-school.hatenadiary.jp

先の研究が終わってから,指導教官は分散ファイルシステムやI/O最適化が専門なのでアドバイスを受けやすいその路線で何かいいネタはないかと先行研究をサーベイした.そして見つけたのが「訓練データのreadの高速化」というテーマだった.例えばEntropy-Aware I/O Pipelining for Large-Scale Deep Learning on HPC Systemsのように,大規模な訓練データを訓練プロセスに高速にfeedさせるための手法が提案されていた.訓練データのread自体はワークロードやHW環境に性能が強く依存するタスクなので,特定のケースに限定すればまだ何とか自分が手を付ける余地がありそうだ,と思った.

そんなこんなであれこれ考えて手法を思いついて実装して評価して論文にした結果,最終的にshort paperながらも国際会議に通せた.詳細は以下を参照.

serihiro-graduate-school.hatenadiary.jp

serihiro-graduate-school.hatenadiary.jp

自分の発表実績

査読付き国際会議のProceedingsが1本(short paper),査読なし国内研究会のProceedingsが2本というのが自分の最終的な実績である.多分もう増えないと思う*12

客観的に見て多いのか少ないのかは分からないが,B4の卒業研究からではなく,M1の4月からノープランな状態から研究ネタを考え始めた事実を考慮すればまぁまぁではなかろうか.理想を言えば,M1の6月ぐらいにテーマを決定して,12月のHPC研究会に一本出してM2の6月ぐらいには国際会議に投稿できるぐらいのペースで進めたかったが,実力不足で思うようにはいかなかった.

  • 査読付き国際会議

    • Kazuhiro Serizawa and Osamu Tatebe. 2019. Accelerating Machine Learning I/O by Overlapping Data Staging and Mini-batch Generations. In Proceedings of the 6th IEEE/ACM International Conference on Big Data Computing, Applications and Technologies (BDCAT '19). ACM, New York, NY, USA, 31-34. DOI: https://doi.org/10.1145/3365109.3368768
  • 査読なし国内研究会

大学院生活について

上述したように平日は研究室に行ったり講義を受けたりして,土日は主に自宅にいる生活をしていたので生活リズムは会社員時代と大して変わらなかった.寧ろ夜遅くまで仕事をしなければいけないという制約が無くなったので,以前よりも規則正しい生活となった.大体23時には寝て6時半ぐらいに起きる生活であり,7.5時間睡眠が維持されている.

一方で会社員時代から変わったこともある.それは経済活動で,要するに収入がガッツリ減ったので趣味とかに使えるお金がかなり制限された.まぁ初めからそれを分かっていたのだが,会社員時代には金額を気にせずに買っていた本が買えなくなったのは結構厳しさがあった*13.あと旅行に行けなくなったとか,東京の勉強会・技術カンファレンスに気軽に参加できなくなったりとか,趣味にお金をかけられなくなったのも痛かった.本はなるべく図書館で借りるとか東京行ったときにまとめて立ち読みすることで対応していたが,息抜きがうまく出来なくなってストレスが溜まっていた一時期は結構しんどい思いをしたりもした.そのためお金をかけない息抜きとして大学構内を毎日30分近く散歩することが新たな趣味となった.程よい運動になって良いのだが,生活水準が一気に下がると結構なストレスになる事実を身を以て学んだ次第である.

f:id:serihiro:20191121132812j:plain
筑波大学の北側はこんな感じの道が敷地の周囲に存在するため散歩するには丁度良かった

あとは,仕事をしなくなったので,誰かと一緒になにかをするという機会が殆どなくなったという変化がある.そのため,誰かと何かの問題を議論したり,相談を受けたり,逆に相談したり,というインタラクティブなコミュニケーションの量がかなり減った.指導教官と1 on 1をすることはあるが,仕事のそれと比べるとその機会は圧倒的に少ない.自分は一人で黙々と作業するのは得意というか好きな方だとばかり思っていたし実際そうだと思うのだが,それと同じぐらい他人とコミュニケーションをしたり何かを一緒にやることが好きだったようなので,その片方が無くなったので寂しいと感じた.大学院での教育として研究をしている側面もあるので,他の学生と協力してやる訳にもいかない部分があるため仕方ないのだが,この辺は長期的に開発のバイトとかをしていればもしかしたらカバーできたかもしれない.M1の夏に参加したトレジャーデータでの2ヶ月間のインターンが終わった直後に特にこの寂しさを感じたので,長年仕事してきて,仕事における他人とのコミュニケーションがいつの間にか日々の心の支えにもなっていたのかも知れない.

serihiro.hatenablog.com

おわりに

本エントリは,社会人学生 Advent Calendar 2019 というアドベントカレンダーを今日(2019/12/7)偶然見つけて,まだ埋まっていない日があったので,せっかくだから自分も書いて埋めようと思って書き始めたところ,書いてる間に枠が埋まってしまったのでアドベントカレンダー関係なくただ公開しただけのポエムである.

自分の場合,働きながらではなく仕事を辞めてガチ無職になり入学しているので,一般的な社会人学生としての苦労はほとんどなかったように思う*14.なので働きながら大学院に進学することを考えてる人が読んでもあまり参考にはならないと思われる.参考になるかもしれないのはフルタイム大学院進学を検討しているB3, B4あたりの学生かも知れない.

*1:終了に必要な単位はM1の時にすべて取ったが,趣味でM2の秋学期にも1個だけ講義を取っていたりする

*2:ここで「日本の」と書いたのは,海外の大学院だとCSコースでも研究室への所属や修論の執筆が義務化されていない場合があるためである

*3:これは自分の研究室におけるケースでありすべての研究室がそうであるとは限らない.

*4:プライベートではC++だとか数値計算の最適化だとか並列化とかコンパイラだとかアセンブリだとかニューラルネットの推論の最適化とかを勉強したり実装したりしていた

*5:multiprocessing.Queueはデフォルトだと中身が空にならないと親プロセスが終了しなくてジョブが終了しないままスパコンのポイントを浪費するとかそういう落とし穴をたくさん踏み抜いた

*6:スパコンの場合,ジョブスケジューラから指定できるのは1ファイルのshell scriptだけみたいな事が多いので,用途に応じて複数のshell scriptをloadしてタスクを構成して再利用できるようにしたりした

*7:軸の数値は必ず原点は0にするとか軸の対数・実数は揃えるとか凡例はグラフの中に書くとかのマナーが多い

*8:余談だが競プロ参戦記録などを記録するためのブログを最近始めた https://serihiro-competitive-programming.hatenablog.jp/

*9:「2位じゃダメなんでしょうか」でお馴染み

*10:今はAWS, GCPなどでもメニーコアCPUやGPU付きのインスタンスが利用できるようになったのでそのハードルはかなり下がったように思う

*11:筑波大のCS専攻生向けに書いとくと「CSセミナー」である

*12:BDCAT '19ではshort paperでacceptされたので,最初に投稿したfull paperの供養をどうするかと考えている程度である

*13:会社員時代は技術書やビジネス書や漫画の購入に毎月1万円程度使っていた

*14:住民税と任意継続した社会保険の初年度の支払いで苦しんだぐらいである

じぶん Release Notes (ver 0.33.7)

  • 11月は本当に生産性が低かった..ほとんど何をしていたか覚えていない.
  • 就活関係で色々対応しつつ,BDCAT 2019用のスライドと読み稿をガチガチに作り込んで一人で練習したりしていた.しかし,英語とはいえ高々15分程度のスライドに2週間近く準備期間を要していて,これは完全にやる気が出なかったようである.
  • 結局,精神的に厳しい状態にあると何も手につかないという当たり前のことを再確認するだけの一ヶ月だった.
  • 12月は色々ありそうなので挽回したい所存.

個人開発

ついに進捗がゼロになった.就活,国際会議の準備でもう何もやる気が出なかった.色々終わったら停滞していた分を取り戻すべく時間を費やしたい.

研究

  • BDCAT 2019のスライド作成と発表準備をしていた
  • 英語の発音に全く自信がないのと,最近何故か吃音がひどくなってきていることから余裕を持って喋れる文量まで削りまくった.

読書

その他

  • 就活での痛い失敗経験をもとに競プロに本格的に取り組もうと思い,競プロに関する記録を残すブログを開設した.

serihiro-competitive-programming.hatenablog.jp

  • 11月24日にはYahoo! JAPANのLODGEで掲載されたGiga Code2019 に参加し,LT聞いたりコンペに出たり競プロガチ勢と交流したりした.
    • 参加してみてわかったのだが,青色以上の人たちは解いている問題量が圧倒的に違う.とある方のLTによると,正確な数値は覚えてないのだが黄色以上のレート帯アカウントはABCだとD問題の回答率が相当高い傾向にあるらしい.つまりD問題埋めを地道に続けて結果につなげているということである.
    • 一つの基準として,黄色コーダー以上の多く(正確な割合は忘れたが)は合計で1,500問解いているらしい.当面は数をこなして1,500問以上解くことを一つの目標とするのが良さそうだ.
    • もちろん自分はまだたまにC問題が解けないことがあるので,C埋めも継続しなればならない.
    • 自分の解答状況はこんな感じである. f:id:serihiro:20191201173724p:plain

じぶん Release Notes (ver 0.33.6)

f:id:serihiro:20191013091616j:plain
10月は台風が2回ぐらい来て大変だった

  • 国際会議にacceptしたのでcamera ready版の準備とか出張に伴う事務手続きで慌ただしくしていたら一ヶ月が終わっていた
  • 大人になってから海外行くの2回目なのだが,自分で国際線のチケット買って英語しか通じないホテルの予約をするのは初めてなので色々手間取った
  • その上就活もやっていたので日々コンテキストスイッチが大量に発生し完全にキャパオーバーになっていた
  • さらにボスから(国際会議と修論以外に)新たな指令が出されたが,今は考えられないのでと保留とした

個人開発

  • 先月作ったinference_engineをCMakeでビルドできるようにしたくらいか.ほとんど何もできていない.
    • CMake,今までは「なんとなく難しそうだし多機能でtoo muchでは」と思っていたが実際にやってみたらfind_packageがめちゃくちゃ便利で,今まで頑張ってシェルスクリプト書いて依存ライブラリのパス生成とかをしていたのはなんだったのかという気持ちになった.

github.com

読書

勉強

  • できてない
  • 今とってる講義でScilab使ってるので少し詳しくなった

研究

  • 国際会議に出す論文のcamera ready版の作成
  • 国際会議出席に伴う事務処理
  • 修論

その他

  • 就活をしていたが全敗
    • 目も当てられないくらいボロボロ
    • 自分のソフトウェアエンジニアとしての純粋な実力の低さと,対象のポジションの業務経験がなければこんなにもハードルが高くなるのかということを8年ぶりぐらいに思い出した

総括

  • メンタルも体力も限界でボロボロ
  • あらゆる方面にストレスが貯まりすぎて本当に厳しいなと思う
  • そういう自覚はあるのでまだ大丈夫だと思うが,本当に限界を感じたら手放せるタスクはすべて手放して時間を取りたいという気がする
  • 何も信頼できないというかあらゆる方面に不信感が湧いてしまい良くない
  • かろうじて,週末に快活CLUBに行って早朝からGTX1080Ti積みのマシンでFPSをやるのが唯一の楽しみの生活
  • 正直,早く色々終わってくれという気持ち

じぶん Release Notes (ver 0.33.5)

f:id:serihiro:20190927125352j:plain
写真だけ見せて「マウンテンビューのスーパーです」って言っても騙せそうだけど大学構内

  • 国際会議投稿も終わってようやくゆっくりできる時間が作れたので,しばらく好きに過ごしていた.
  • 途中,体調崩すなどして何もできない時間が結構あって,合計で1週間ほどは無駄に過ごしてしまった.

個人開発

  • 自作Cサブセットコンパイラは今月は全く進捗しなかった.他のことをやっていた.
  • この一ヶ月は前からやりたかったONNXモデルの推論エンジンを作っていた.わかりやすく言えばonnxruntimemenohの劣化版である.

github.com

  • 目的としてはバックエンドの最適化を自分なりに研究することだったが,せっかくなのでONNXをロードしてグラフとパラメータを再構築するところも含めて自分で作ってみたかったので,既存のプロダクトを使わずに全部スクラッチで書いてみた.
  • backendの実装は過去にやったことがあるのである程度想定がついていたが,ONNXの取り扱いが完全に未知の世界で結構戸惑った.Pythonで書けばかなり楽できたであろう部分をC++で頑張ってかいたらProtobufの仕様がむずすぎて泣いた.でも慣れてくるとどのパラメータがどのクラスで実装されてるか,というカンが身についてきてスピードが上がってきた.なんだろうなこれ.
  • とりあえず3 MLPとVGGが動くところまではできた
  • しかし,まずはちゃんと推論ができることを目標にゴリゴリ書いたのでコードがちらかっているのと,実際にデータを入力して推論を行う部分のコードがまだ再利用できるようになっていない.この辺,onnxruntimeでもmenohでもちゃんと「グラフとパラメータを持ち推論を実行するクラス」に該当するレイヤを導入しているので,いずれそのようにリファクタしていきたい.

読書

  • いまいち何読んでたか覚えてない.本を読んだ記憶がほとんどない.
  • 就活対策でLeetCodeとか解いてたのでアルゴリズムの本を読むなどもしていた

読んだ

勉強

  • LeetCode解いてて動的計画法を忘れている事に気づいたので復習
  • Convolutionの高速化について過去に調べたことを整理

研究

  • 修論を少しずつ書き始めているが,基本的に8月に投稿した論文の和訳なのであまり気が進まない
  • 和訳している途中に色々記述が足りてないと感じる部分を見つけるなどした

その他

  • その他も何も特に書くことがない.10月は修論書きつつ就活する.
  • そういえば自宅のネット回線が,突然アップロードが上限で2Mbps程度しか出なくなったので実質ネトゲができなくなった.かなしい.
  • 去年の夏はインターン行ってて夏休みらしいものが全くなかったので,これが初めての大学院入ってからの長期休み的なものになった.

じぶん Release Notes (ver 0.33.4)

f:id:serihiro:20190816212354j:plain
夏休みで人気のない研究室で夜まで論文を書いて帰宅.過去最高に忙しい8月だった.

先月のSWoPP2019で研究は一区切りかと思ったが,8月7日から8月26日まで国際会議に投稿する論文を書いていた.8/27にsubmitしたばかりである.

日本語で一度書いたベースはあるものの,英語で論文を書くというのはなかなかに大変なものであった.8/6に国際学会への投稿が決まり,8/7から作業を初めて2週間休みなしでぶっ通しで作業してやっと英文校正に出せるレベルになる,というぐらい時間がかかった.

個人開発

github.com

  • 関数定義までやろうとしたが,そこに論文執筆が入ってきたので中断せざるを得なかった

読書

読み終わった

開放感からか,今月はどう考えても漫画を買いすぎた.しばらくは自粛しなければならない.

読んでる

勉強

  • 論文執筆で何もできてない
  • 英文校正の納品待ちの間に,ONNXのフォーマットを調べて,MNISTで訓練済みの3レイヤのMLPをONNXフォーマットでエキスポートして,それをparseして推論を実行する簡易rutimeを書いたぐらい.
    • ONNXはpython用のAPIが提供されているので,grpahやパラメータの情報を取り出すだけならPythonで完結する
    • ただ,バックエンドをc++などのコンパイル言語で書く場合はONNXモデルを直接protobufとして読み込んで処理する必要があり,protobufについても調べる必要があることがわかった.
    • すでに同じようなことをしているPFNのmenohやLeapMindのBlueOilのコードを読んだらONNXの取り扱いで参考になりそうな箇所が多い

研究

  • 冒頭に書いたように英語で論文を執筆して国際会議に投稿した
  • 去年開催時のacceptance rateが23.7%であり,acceptされる確率は低い.初めて出すにしてはハードルが高すぎるような気もしたが,他に出せそうなタイミングのものがないので仕方がないし,他のカンファレンスも似たような難易度である.
  • 自分は研究者になるつもりはないので,仮にacceptされたとしてもキャリアにプラスになることは殆どないだろうと思っている.しかも,深層学習の分野でもかなりニッチな研究である.日本国内でこの研究成果が必要な会社がどれぐらいあるだろうか,と何度も自問しながら書いた*1
  • しかし,普段読んでいる論文の裏でどのような努力がなされているかを身を以て体験できたことは貴重な経験だったと思う.

その他

  • 英文校正の納期待ちの間に数日間休めたので*2大分調子が戻ってきた
  • 9月からは当初予定していた通り自分の為に時間を使い,好きな勉強をして好きなものを作る

Keep

  • 忙しくても睡眠時間は確保する

Problem

  • 体重

Try

  • 涼しくなってきたし走れ
  • 9月中にLeetCode 300問切り

*1:最近はHPC分野の論文であっても査読時は実用性がかなり問われるようになってきたと,最近の論文を読んでいて感じる

*2:引きこもってスプラトゥーン2ばかりやってた

じぶん Release Notes (ver 0.33.3)

f:id:serihiro:20190724084608j:plain
SWoPP2019が開催された北見市民会館

個人開発

  • 自作Cサブセットコンパイラは関数呼び出しの正式対応,if-else文サポート,while文サポート,全体のリファクタリングを行った
    • だいぶコンパイラらしくなってきた.来月は少なくとも関数定義,配列サポート,ポインタサポート,構造体サポートぐらいまでいきたい*1

github.com

github.com

github.com

読書

  • 全体的に進んでいない

読み終わった

読んでる

勉強

  • ArmのSIMD命令であるneonについて調べ始めた
    • Arm Developerのドキュメントぐらいしかまとまった情報がないのだがあまりメジャーではないのだろうか
    • まだパフォーマンスの比較はしてないので今後
  • CMIS-NNについてのホワイトペーパーを読んでいる

arxiv.org

研究

  • 7月24日〜26日の間に開催された第170回HPC研究会SWoPP2019にて開催)で口頭発表してきた
    • 内容は,NNの訓練時に訓練データをLustreなどの共有ストレージに格納している場合に,ローカルストレージにミニバッチ単位で並列かつ非同期にコピーしながら動作させることで,ローカルストレージへのファイルコピーの遅延を隠蔽化しつつ,ローカルストレージの高速なread I/O性能を活かすことでミニバッチのロード時間を高速化するというもの
      • ユースケースが完全にHPCクラスタに特化しているのでChainer詳しい人とかに説明してもちゃんと伝わらない事が多いのが悲しい
    • 実装はChainerのMultiprocessIteratorをベースに行ったが,共有ストレージからのファイルコピーを独立した非同期処理として実行するためにミニバッチに含まれるindexの組み合わせを決定するタイミングを独立させつつ,かつmodelから見たiteratorとしてのインターフェース互換性を維持するための魔改造を結構がんばってやっている
    • 予稿はこれ
    • あまり目立った質問もなかったが,内容がChainerのIteratorアーキテクチャに深く依存しすぎていてうまく伝わらなかった可能性が高い
    • もう少しIteratorの基礎的なところから説明すべきだったかと反省
    • Chainerならみんな知ってるでしょという油断があったのは事実(Chainerでモデル書いててもChainerから提供されてるIteratorの実装をすべて読んだ,って人はあまりいないと思われる)
    • 7月に入ってからもうまく性能が出ていない部分の修正をしてまるごと再評価してグラフを全部書き直すなどしていて,結局今月も忙しかった*2
  • この口頭発表を持って研究は一旦終了.あとは修論を書くことに集中する.

その他

  • 一区切りついたので良かった
  • あとは10月からの就活に備えてポートフォリオを揃える準備をする

Keep

  • 忙しくても睡眠時間は確保する

Problem

  • 研究に一区切りついたせいか,どうも大学での活動のやる気が出ない
    • やる気が出ない時の進捗の出し方は仕事でやっていたとおり「一定のペースで淡々と進める」に限る
    • 修論もそのように進めていく

Try

*1:仮にここまでやってもセルフホストはできないのでまだまだ道は遠い

*2:このブログ見返すとここ3ヶ月ずっと忙しいって言ってるな..