seri::diary

日常

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

これは何か

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

筆者について

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

serihiro.hatenablog.com

なぜ大学院に入ったのか

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最初の研究は「深層学習の訓練処理中のGPUをプロファイルしてGPUの負荷がサチるギリギリのミニバッチサイズを見つける研究」というものである.これは事前調査でChainerのCIFAR100+VGG16のサンプルスクリプトを回してGPUの負荷状況をプロファイルしたところ,一般的なローカルミニバッチサイズである16や32で回すとGPU(P100とV100で実験)が相当遊んでいた事実に起因するネタだが,研究テーマがなかなか決まらなくて苦しみ続けてM1秋の修論中間発表*10の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本というのが自分の最終的な実績である.多分もう増えないと思う*11

客観的に見て多いのか少ないのかは分からないが,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時間睡眠が維持されている.

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

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

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

serihiro.hatenablog.com

おわりに

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

じぶん 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ヶ月ずっと忙しいって言ってるな..

社会人に戻ったらやりたいこと

はじめに

一般に,無収入のフルタイム大学院生をしていると,時間的および経済的事由により,日常生活において様々な行動が制約されている [要出典]. そのため,フルタイム大学院生をしている筆者も,日常的に「やりたいけど出来ずに我慢している」ことがそれなりにある.しかし,これらを今すぐ実現するのは先に書いたような理由により困難である.

そこで,せめてもの対応として,このエントリに「社会人に戻って(お金が稼げるようになったら)やりたいこと」をメモしておく.この文書を書く目的は,定期的に読み返すことで自らが望む未来を再確認し,修了までのモチベーションを維持することである.

「やりたいこと」という言葉について

google検索で「やりたいこと」をキーワードに検索すると,「人生において成し遂げたいこと」 について指南する日本語のwebサイトが多くヒットした.その多くは個人の「いかがでしたかブログ」である.2019年7月現在の日本においては,「やりたいこと」とは人生の目標,もしくはそれに類する長期的な目標を意味することが一般的であると考えられる.しかし,ここに述べるのは,高々1年後から2年後の間に実現することを想定した短期的な目標である.

読書

2019年7月現在,amazonの購入履歴および筆者の脳内記憶によると,大学院生になってから1年3ヶ月の間に購入した書籍の合計額はざっくり約5万円ほどである.一方で,会社員時代は月に平均して1万円ぐらいのペースで技術書やビジネス書,漫画を購入していた.*1 それらはkindleで購入されたため物理的には視認できない.しかしkindleのクライアントを開くと,それぐらいのペースで買ったと推測された量の本がストックされている.

また,それらの本の中には読了していない本も多く存在することから,その購入ペースは筆者の読書スループット(冊/月)を上回っていると考えられる.そのため,本来月に1万円も本を買うべきではない.しかし,本というものは,全部読まなくても一部読みたいがために買うことでその価値を回収できるということもしばしばあり [要出典],本人としては別に悪いとは思っていない. そのため,現在も脳内における購入候補の本の増加ペースは,会社員時代となんら変化していないものとする.

そうすると,現在8万円分の購入候補の本が「購入予定キュー」に溜まっている計算になる.これらを順に購入し,読まねばならない.

旅行

筆者の数少ない趣味として,年に1-2回程度の国内旅行に行くというものがある.過去の事例を挙げると,2015年は仙台と金沢,2016年は京都,2017年は広島にそれぞれ行っている.後者の2つは厳密には仕事の出張*2ではあるが,筆者の認識としては,以下の条件を満たしていればそれは旅行なのである.

  • 新幹線,もしくはそれに類する特急を使用する
  • 一泊以上の宿泊を伴う
  • 最低一箇所以上観光地に行く

一方で,大学院生になってからはこれらの条件を満たす「旅行」はできていない.2019年3月にHPC研究会で発表するために石川県加賀温泉に行ったが,あれは3番目の条件である「最低一箇所以上観光地に行く」という条件を満たしていないため,旅行ではない.しかも研究会への緊張と,研究の不出来に対する自己嫌悪で,会期中は気が気でなかった.精神的苦痛を伴うものは趣味とは言えない.なお,2019年7月には北海道北見市に出張に行く予定であるが,これも同様の理由により旅行ではない.網走監獄に行きたかったがそんな時間はなく,発表会が終わったらその日当日の最後の便で女満別から羽田へ直行する予定である.

そのため,社会人に戻ったら上記の3条件を満たす旅行をしたいと考えている.過去の経験から言って,一泊二日の国内旅行に要する費用は,移動距離にも比例するが,概ね5-6万円あれば十分である.現在考えている行き先の候補は,長崎*3,松江*4,軽井沢*5熊野古道*6尾瀬*7,釧路*8,などである.海外に行っても良いのだが,別段海外に行きたいと思える場所がないので考えていない.また,費用面からも国内旅行の方が安いケースが多い.

PCゲーの再開

筆者は,中学校時代にプライベート・ライアンを観てにわか戦争映画ファンとなった*9.高校時代には,親を拝み倒してWOWOWを契約してもらい,バンド・オブ・ブラザースをリアルタイムで視聴した.そして,戦争映画好きが講じてゲームの世界でもWWⅡを体験したくなり,なけなしの小遣いでMedal of Honor: Allied Assaultを購入した.その結果,FPSの面白さ,奥深さ,単純にオンラインで人と対戦することの楽しさ,オンラインコミュニティで活動することの楽しさを覚えてしまった.

それ以来,短期的に離れていた時期はあるものの,概ね15年以上PCでFPSをプレイしてきた.大学時代は国内の某CS1.6のクランに所属し,講義の合間にbot撃ちをし,夜な夜な試合に明け暮れ,国内で開催されたCPL予選においてCS1.6の大会審判のバイトもしたことがある.社会人になってからは時間的都合によりクランには所属せす,空いた時間で細々とFPSに勤しんできた.

しかし,大学院への進学を決めたときから資金を貯めるために,長年アップグレードしてきた自作PCのパーツ購入を中止した.これは2016年の秋頃の話である.その結果,オーバーウォッチですら常時60FPSでプレイできないspecのPCとなってしまい,ここ何年も最新のFPSはプレイできていない状態である.結局,その自作PCは長年アップグレードしていなかった為に,マザボから電源から何まで古くなってしまったことから,すべて処分してしまった.しかし,未だにPCでプレイしたいFPSタイトル*10やその他のタイトル*11がいくつかあるため,予算が溜まり次第自作PCを再開し,再びPCでFPSをプレイできる環境を整えたいと考えている.大学院に入ってNVMe SSDの素晴らしさを知ったので,OS及びアプリケーションインストール用のストレージは無駄にすべてNVMe SSDで揃えてみたい.通常の用途ではNVMe SSDのバンド幅を完全に活かすことはできないだろうが,こういう趣味的なspecのマシンを作れることがPC自作一番の楽しみである.

クラシックギターの再開

筆者は地味に高校時代からクラシックギターを弾いていた.大学の頃はギターアンサンブルのサークルに所属し,社会人になってかはアマチュアマンドリンオーケストラのギターパートで弾いていた*12.数年前は,基礎から学び直したいと思い,都内でレッスンに通っていた.しかし,これも仕事と大学院進学の準備による時間的余裕の欠如から止めてしまっていた.これも社会人に戻ったら復帰したいと考えている.やはり何某かの趣味は必要である.筆者は卒業時点で34歳であり,そろそろ老後まで続けられる趣味を確立し,仕事以外で人脈を広げたいと考えている.

おわりに

本エントリでは,筆者が今やりたくてもできていないことをダラダラと書き綴った.こうして書き出してみると大したものはなく,要するに経済的な理由で実行に移せないだけのようである.

このように時折脳内をdumpしておくと,後ほど暇になったときにやることが明確になって時間の節約につながるのではないかと考えている.

*1:漫画に関しては,宇宙兄弟進撃の巨人アルキメデスの大戦,ゴールデンカムイゆるキャンに関しては,新刊が出ると欠かさず予約購入していたようである.(出展: 筆者のアマゾンの購入履歴)

*2:RubyKaigi

*3:長崎バイオパーク行きたい

*4:出雲神宮行きたい

*5:なんとなく

*6:母親が行ってよかったらしいので

*7:なんとなく行ったことないので

*8:湿原行きたい

*9:と言いつつもそこまで観てない気がする.WWⅡものだけだと「史上最大の作戦」「Uボート」「スターリングラード(ハリウッド版,ドイツ版)」「シン・レッド・ライン」「ウインドトーカーズ」「U-571」「トラ・トラ・トラ」「パールハーバー」「二百三高地」「父親たちの星条旗」「硫黄島からの手紙」「フューリー」「ヒトラー最期の12日間」「戦場のピアニスト」「戦場のメリークリスマス」「ダンケルク」「炎の戦線エル・アラメイン」ぐらいか

*10:OverWatch, PUBG, Apex Legends, CoD Modern Warfare, Rainbow Six Siege, METRO EXODUS,

*11:将来的にAge Of Empire 4, TES6, DOOM Eternal, OverWatch 2

*12:これとか https://youtu.be/0SYGaUoykPk