seri::diary

プログラミングのこととかポエムとか

じぶん 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を契約してもらい,バンド・オブ・ブラザースをリアルタイムで視聴した.そして,なけなしの小遣いでMedal of Honor: Allied Assaultを購入して以来15年以上,FPSはPCでプレイしてきた.大学時代は,国内の某CS1.6のクランに所属し,講義の合間にbot撃ちをし,夜な夜な試合に明け暮れ,国内で開催されたCPL予選においてCS1.6の大会審判のバイトもしたことがある.社会人になってからは時間的都合によりクランには所属せす,空いた時間で細々とFPSに勤しんできた.

しかし,大学院への進学を決めたときから資金を貯めるために,長年アップグレードしてきた自作PCのパーツ購入を中止した.その結果,オーバーウォッチですら常時60FPSでプレイできないspecのPCとなってしまい,ここ何年も最新のFPSはプレイできていない状態である.結局その自作PCも,アップグレードしていなかった為にマザボから電源から何まで古くなってしまったことからすべて処分してしまった.しかし,未だにPCでプレイしたいFPSタイトルがいくつかあるため,予算が溜まり次第自作PCを再開し,再びPCでFPSをプレイできる環境を整えたいと考えている.

クラシックギターの再開

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

おわりに

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

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

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

*2:RubyKaigi

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

*4:出雲神宮行きたい

*5:なんとなく

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

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

*8:湿原行きたい

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

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

じぶん Release Notes (ver 0.33.2)

f:id:serihiro:20190604134845j:plain
一応大学の敷地内

個人開発

  • 実力不足(若しくは高望み)により,SWEに戻れなくなるかもしれないという危機感があって色々と気が散りがちなせいか,9ccほっぽり出してよくわからないものをやっている

github.com

github.com

読書

読み終わった

読んでる

研究

  • 実装は先月でほとんど終わったのでヤマは超えたかと思ったが先月以上の修羅場であった
    • どれぐらい修羅場かというと,完全なオフを取れたのは6月21日になってからだった
    • SWoPP投稿者は自分だけではなかったので,研究室はいつもより人がいる時間が長くて多少は気を紛らわせたのが幸い
  • もう研究室に住んでるんじゃないかという気持ちになったが,研究室では寝られないので必ず家に帰って寝た
  • どうしてこうなったのかを自分なりに分析すると
    • 評価環境にトラブルが起きることを一切想定していなかった
    • PythonのGILによる影響を過小評価していた.ThreadにCPUを使わせるとすぐに全然関係なさそうな箇所のパフォーマンスが落ちて原因特定に苦労した.
      • 今回は5〜10%程度の性能差を追うための評価実験だったのでかなりシビアだったのことも影響した
    • 実行したことがないアプリケーションを用いた評価実験で,自分が取りたい数値以外にボトルネックになっている箇所を事前に調査しなかった
    • そもそも予稿提出までの時間的余裕がなかった
      • 安全に進めることを考えるなら,本来は確実にコントロールできる評価実験の範囲で研究を完結させるべきだったのかもしれない
      • しかし,それだと研究としては中途半端になってしまうので,本当はどうすべきだったのか自分でもわからない
      • これはあとで教授と議論してみるか

勉強

  • できるわけがない

その他

  • 今月こそは状況を改善しようと思っていたが本当に何も改善できなかった.反省
  • 先月書いた「某社インターン」は落ちた
    • 就職に関する不安だけが募る
    • これまた社会復帰したときのポジションが「webアプリケーションエンジニア」になってしまったら,自分は一体何のために金と時間を投資しているのだろうか

Keep

  • 自分は他人と比べて体力も精神力も劣っていることを忘れずに,どんなに忙しくても睡眠時間は確保する
    • 20代の若者とばかりつるんでいると手前まで若くなった気になるが,現実は残酷である

Problem

  • 以下が全くできていない
    • ジョギング再開
    • 9ccの作業時間を毎週少しでも割くようにする
    • 就職に向けたSWEリハビリ

Try

  • 以下の優先度で再開する
    • 就職に向けたSWEリハビリ
    • 9cc作業再開
    • ジョギング

まとめ

  • 大学院入学依頼,最も厳しい一ヶ月だった
  • しかし,そのまま修論につながるレベルのoutputは出せた(多分).無駄足を踏んでばかりいた訳ではない(と信じたい).

じぶん Release Notes (ver 0.33.1)

個人開発

f:id:serihiro:20190427112205j:plain
DE10-Lite

  • FPGAを勉強したくてDE10-Lite買った

    • ソリトンウェーブで購入したが,学生なのでアカデミア価格で買えた*1
    • 最終的にはFPGA上で簡単なマルチパーセプトロン,ゆくゆくはcNNもFPGA上で実装して,ホントに量子化したNNの推論が高速に動作するのか確かめたい
    • まずFPGAボードで学ぶ 組込みシステム開発入門[Intel FPGA編]の第1章を読んで,FPGAの概要,歴史,FPGAの構造について学んだあとにQuartus PrimeのLite EditionをVirtualBox上のUbuntuにセットアップした
    • 現在の進捗として,この本の第2章の課題である60秒計を実装して動作させるところまではできた
    • しかし,後述するように5月中はあまり時間が取れなくてほとんど触れなかった
    • 簡単な時計を作るにしても,動作クロックを考慮して内部カウンタを用いて「1秒を測る」というアプローチを通じて,動作時のタイミングを考慮して実装しなければならない,という電子回路独自の概念を学んだ
    • あと,verilog HDLのif文はifブロック内部に2行以上処理を書けないということを学んだ*2
  • my9cc

    • 研究が忙しく,今月は作業できていない
    • 大変よくない状態だが,SWoPP2019の予稿を書き終えるまでは再開できそうもない

読書

読み終わった

読んでる

研究

  • 連休中は作業がかなり捗るという発見をした
    • 普段の研究室も静かで良い環境なのだが,MTG等のイベントが一切ないことが保証されているというだけで心理的なストレスはかなり減る
    • おそらくは,そのイベントのための準備とか,イベントに遅刻しないようにするために時間を気にすることに無意識のうちに相当なパワーを使っているためだと考えられる
  • 一方で,連休中にガーっと実装したやつを評価したら思ったようなパフォーマンスが出ずに窮地に追いやられた
  • しかし,5月いっぱいかけて地味にホットスポットを探してパフォーマンスチューニングし,なんとかベースラインの実装よりは良い性能が出せそうな見込みが出てきた
    • Pythonでの並列プログラミングは色々罠があって大変である
  • 5月31日現在,何とか諸々の問題は解決できて,6月からは評価と論文執筆に集中できそうである

    • いろいろ詰みそうになったが,その度に原因を調査して問題解決する胆力は大学院に入ってから少しは伸びたのではないかと思う
  • 研究の副産物として,動作検証用のPythonコードをいくつか書いてgistに放流した

chainer iterator_statemachine examination · GitHub

python mulitprocessing.Queue test for each Context · GitHub

python mulitprocessing.Queue test for each Context. See also https://gist.github.com/serihiro/bb9614b816b9c35e95ec4b53d3382f72 · GitHub

勉強

  • 研究が忙しくてほとんど何もできていない
  • ただでさえ就活が近づいてるというのにソフトウェアエンジニアとしてのリハビリが何もできてなくてやばい
  • AtCoderも今月は1回ABCに出ただけかな.よろしくない.
  • 単純な幅優先探索が実装できなくて痛い目を見たので,グラフアルゴリズムは少し復習した

Keep

  • 適度な息抜き

Problem

  • いつも走ったり歩いたりしているコースに羽がある系の虫が増えてつらい
  • 忙しいのでついサボってしまい,結局ジョギング再開できておらず,体重が減らない

Try

  • ジョギング再開
  • 9ccの作業時間を毎週少しでも割くようにする

まとめ

  • かなり厳しい一ヶ月だったが,その分進捗もあった
  • 来月は,6月末にSWoPP2019の予稿の締切があるのでそれに向けてがんばる

*1:買ったあとに気づいたが,OpenCLのBSPに対応してないFPGAなのでDE10-Nanoの方が良かったかなと思ったが,値段が5,000円ぐらい違うのでまずは安いFPGAverilog HDLで実装する修行をするのだ

*2:論理ブロックで条件分岐を実装してるためと考えられるが,普通にプログラミングしてると意識しないところなのでコンパイルエラーになって結構悩んだ

じぶん Release Notes (ver 0.33.0)

じぶん Release Notes という月報のような取り組みを知ったので自分もやってみる.

blog.a-know.me

個人開発

github.com 低レイヤを知りたい人のためのCコンパイラ作成入門を見ながら少しずつ作っているCコンパイラ.平日は日中は研究で疲れてほとんど進んでいないが,余裕があるときや土日に少しずつ進めている.

現在サポートできている機能は以下の通り

  • intの四則演算
  • カッコ対応
  • 変数定義,変数代入,変数を使った四則演算
  • 関数呼び出し

まだソースファイルの読み込みに対応してないので,コードを直接標準入力で受け取ってx86_64アセンブリを標準出力に出力する.

❯ ./9cc '(1+2) *3;'
.intel_syntax noprefix
.global main
main:
  push rbp
  mov rbp, rsp
  sub rsp, 208
  push 1
  push 2
  pop rdi
  pop rax
  add rax, rdi
  push rax
  push 3
  pop rdi
  pop rax
  mul rdi
  push rax
  pop rax
  mov rsp, rbp
  pop rbp
  ret

最終的にはセルフホストまで達成したい.今後も研究と平行して地道に進めていきたい所存.

github.com LSTMの訓練用データセットとして,Moving-MNISTのような20フレームで1セットのシンプルな動画のフレームを生成するCLI

f:id:serihiro:20190429211041g:plain

壁にあたって跳ね返るところの移動方向の更新がちと面倒だったが良い経験になった. 画像の描画にはPillowを使用しnpy形式で出力される.

読書

読み終わった

読んでる

研究

  • Entropy-Aware I/O Pipelining for Large-Scale Deep Learning on HPC Systems
    • 分散訓練を行うときに訓練データセットを各計算ノード上で実行するキャッシュサーバにフェッチしておき,オンメモリで訓練データをワーカに読み込む Deep IOの提案と評価
    • 全訓練データセットのリストを生成し,計算ノードごとに領域を分割してメモリに載せてノード上のメモリにある訓練データのみを使って訓練する
    • 1 epochが終わったら訓練データセットのリストをシャッフルし直すが,その時にディスクから読み直すのではなくノード間のメモリ上のデータをRDMAで交換することで高速にシャッフルできる点がポイント
  • Characterizing Deep-Learning I/O Workloads in TensorFlow
    • TensorFlowのFileSystem APIの解説とI/Oの評価用にベンチマークとミニアプリケーションを実装して評価した話
    • 訓練データの読み込みとcheckpointingの時の書き込みの2種類をストレージ別に評価している
  • ChainerのMultiProcessIteratorのn_processを変えた時の100 iterationの訓練に要する時間への変化を評価したりしてた(データセットの格納先はノードローカルのNVMe SSD

f:id:serihiro:20190429213907p:plain

f:id:serihiro:20190429221101p:plain
解像度別のImageNetの画像セット作るのが地味に面倒だった
f:id:serihiro:20190429221121p:plain f:id:serihiro:20190429221131p:plain

  • 論文にできそうなネタが見つかったのでその評価実験をずっとやっていた

  • 研究室のcompactionとかいろいろあって雑用が大変だった

勉強

  • 今月は次の研究テーマを決めるために集中してサーベイしたり予備実験をしていて自分の勉強はほとんどできていなかった
  • 来月はコンパイラの実装とFPGAでロジックを実装するための勉強を進める

その他

  • 箱根本箱というホテルを知った
    • めっちゃ良さそう
    • 1日引きこもってコード書いたり論文読んだりするリフレッシュに良さそう
  • SEKIRO買って一周目クリアした
    • 一周目は竜の帰郷ルート.お米は大事.
    • 完成度が非常に高い
    • 操作性が非常に良くてチャンバラが楽しい
    • 久々にシングルモードしかないゲームで楽しいと思えた
  • 花粉症がようやく落ち着いてきたのでそろそろジョギング再開したい
  • 講義がなくなって自由な時間が増えたので,昼食後に2kmほど学内を散歩するようにしたら体調が良くなってきた
  • 某社インターンへの応募

Keep

Problem

  • 疲労で勉強が全く手についていないので毎日少しずつでも進めるようにする
  • 疲労が溜まりやすくなってきたので夜は23時までに寝て睡眠時間を7.5時間以上確保する

Try

  • ジョギングの再開

まとめ

4月は研究室の雑用やら次の研究テーマ決めのためのサーベイや実験で慌ただしく過ごしていたらあっという間に終わってしまった感がある.かけた時間の割には思った以上に進捗は少なく,勉強については全然できていないことに気づいた.土日もどちらかは研究室にいて作業をしており,少し研究に時間をかけすぎていたように思うが,おかげで次の研究テーマになりそうなものが決まったので,5月はその研究を進めつつ,自分の勉強にも毎日少しずつ時間を割くようにしたい.

f:id:serihiro:20190411125417j:plain
散歩コースの途中にある桜

2018年をふりかえって

今年は仕事を辞めて大学院生になったりして変化の大きい年だったと思う。 例年のように振り返ってみる。

1月-3月

今年で一番忙しかった時期だと思う。引っ越しと入学手続きと退職の3つが重なり、まさに「公私共に忙しい」というやつだった。今考えると、大学卒業以来初めて仕事を辞めるという大きな変化のタイミングではあったのだが、感慨に浸る余裕もなく、ただ大量のタスクをこなすだけの毎日だった。

仕事の方は3月頭ぐらいまで結構デカい機能の開発をしたりしていたが、並行して引き継ぎ資料を大量に作っていた。在籍中は普段から知識がブラックボックスにならないようにドキュメントはこまめに書く方だったが、それでも引き継ぎ資料を書いていたら、結構自分しか知らなそうなことが残っていたのを発見したりして、完全なオープン化は難しいとつくづく感じた。もっとも、前職ではほぼ一人でクレカ決済用のマイクロサービスの設計と実装をしたり、社外システム連携の調整と設計と実装を複数案件やっていたりしたので、多少ブラックボックス化してしまうのも無理もない仕事内容だった気がするが。

f:id:serihiro:20180324155150j:plain
東京を離れる数日前に家の近くで撮った桜

4月-6月

筑波大学院での生活がスタートした。最初は朝から夕方まで講義出てたらめっさ疲れるかなと思ったが、会社員時代よりは楽だったようでそこまで肉体的にはキツくはない、というのが最初の数週間の印象だった。
講義はとりあえず難易度を気にせず、シラバスを読んで面白そうなやつを片っ端から取ったら、どうも取りすぎてしまったようで6月末ぐらいにレポートラッシュがやってきて軽くヤバかった。秋学期も講義取りすぎてヒーヒー言ってるのでこの頃と比べても何も進歩していない。それでも受講した講義は全部単位が取れたのでまぁよかった。

serihiro-graduate-school.hatenadiary.jp

研究の方は「HPCで深層学習を何となくやる」以外の何もテーマが決まっていなかったので、事前調査のためにTensorflowやChainerMNのホワイトペーパーを読んだり深層学習関係の本を読んだりしてデータ並列とモデル並列とは何かみたいなことを調べていた。結果的に、この辺の並列深層学習ネタは現在研究のスコープから外れているのだが、計算ノード並べて同期データ並列でスケールさせるのが現在の世界的なトレンドではあるようなので、そのベースとなるアイデアと実装方法をじっくり調査できたのは良かったと思う。

あと筑波大学内の計算科学センターにNVIDIAのV100とP100が刺さってる計算ノードで構成されたPre-PACS-Xという実験用HPCクラスタがあったので、そこでChainerMNのサンプルを動かしたりもしていた。ただ、研究テーマは全く決まらずに徐々に焦りを感じ始めた。同じ研究室のM1の学生は、学部時代から研究成果を出しており、その延長で研究を続けているため大学院でも研究の方向性は入学時点で決まっているようだった。一方で、自分は新参者なのでゼロからすべて考えなくてはならない。特に何も考えずにホイホイ大学院に来たはいいが、どこにでもいるウェッブエンジニアに過ぎなかった自分の場合、研究に関しては圧倒的なビハインドを抱えてのスタートだった。

また、研究室内ではB4,M1を対象とした輪講を週2でやっていて、「High Performance Computing: Modern Systems and Practices」というHPC関連の技術を網羅した本を読んだ。HPCというかコンピュータの歴史から始まって、HPCでよく採用されるNUMAなどのアーキテクチャの説明、B/Fの概念、Linpackなどのベンチマークの紹介、アムダールの法則を中心とした分散処理システムのパフォーマンスの話、OpenMPやMPIの使い方まで多岐に渡る内容だったが、マトモに計算機アーキテクチャを勉強したことがなかった自分にとっては本来学部4年間で勉強してくるはずの計算機アーキテクチャの基礎を一通り学ぶことができて大変為になったと思う。この本自体は結構表現が回りくどかったりして読むのが大変だったのが正直な感想ではあるが、これからHPC上で何か動かしたい人が必要な基礎知識を学ぶには良いと思う。

High Performance Computing: Modern Systems and Practices

High Performance Computing: Modern Systems and Practices

学業以外の活動としては、大学院生らしくインターンに応募したりしていた。おっさんだし、まだ全然研究で成果を出してないのでまさか書類選考を突破できるまい、と思っていた企業の書類選考+コーディングテストを何故か通過して面接まで行ったりしまいビビり、面接では前職時代からよく読んでいたブログを書いていた人が出てきてさらにビビったが、紆余曲折あってこの企業のインターンには参加せずに、先にブログに書いたようにTreasure Dataのインターンに参加することになった。今年はインターンどうするかはまだ考え中だが、修論の進捗が良くて時間的に可能であれば、今年行かなかった企業のインターンに再挑戦してみたいものである。

f:id:serihiro:20180601070148j:plain
森でしょうか

7月-9月

7月もまだ春学期の講義期間ではあったのだが、ほとんどの講義が6月で終わってしまうため時間ができた。
時間ができたからと7月から始まる神経科学の講義をうっかり取ってみたらかなり前提知識が要求される講義で全然ついていかなかったため、慌てて神経科学の本を一冊買って知識を補強することでなんとか単位をゲットした。

Fundamentals of Computational Neuroscience

Fundamentals of Computational Neuroscience

結果的にはcNNのConvolutional層,Pooling層の処理と視覚野の処理の類似点や相違点などを学べたので面白かった。ニューラルネットワークの字の如く、本当に脳でやっている計算処理がベースなのだなということを改めて実感した。脳から模倣したのはパーセプトロンだけだと勝手に思っていたので新しい発見だった。

8月からはTreasure Dataのインターンに参加した。詳細は以前書いたエントリに詳しい。

serihiro.hatenablog.com

感想としては、久々に仕事をして純粋に楽しかった。大学に入って以来全く余裕がない日々だったので、このタイミングで学業から少し離れて、長年の馴染みのあるソフトウェア開発に没頭できたのはかなり精神的に良かったと思う。自分のキャリアとしてはBtoBのサービス開発(転職サイトの企業向けシステム、飲食店向け予約システム etc)に長く関わってきたという背景もあり、同じくBtoBであるTreasure Dataでの仕事はカルチャー面でやりやすかったと感じる。

10月-12月

1月から3月が一番忙しかった時期なのに対し、この時期は一番つらい時期だった。

何がつらかったかといえば、この時期にM1の学生は修論中間発表のようなものがあり、何人かのグループに分かれてそれぞれの研究進捗を毎週交代で発表せねばならない。*1別段、研究がちゃんと進んでいればビビる必要はない。しかしだ、自分の場合は自分の発表の番が回ってくる2週間ぐらい前まで、人に話せるような内容の研究ネタがなかった。先に書いたように、先行研究のサーベイをしてChainerで遊んでいましたという話ならできるのだが、それは研究ではない。他の学生がどんな発表をしているかというと、一番進んでいるものではすでに学会で発表済み、そうでないものでも、最低限何らかのアイデアはあって、そのアイデアを実現するための何らかの実験を行ってその結果を報告している、というものだった。つまり自分のようにサーベイだけしてました、という進捗は自分のグループ内では報告されていない。それを見て実にヤバいということに気づいてしまった。

自分でアイデアを出して研究ができないのなら仕事辞めてまで大学院に来た意味はあるのか?そもそも入学できてしまったことが間違いなのではないか?みたいなことも考えてしまい、この時期は随分とどんどん悪い方悪い方に考えが向かってしまっていた。

しかし、そうは言ってもアイデアがないものは仕方がないので、ホントに春学期に読んだ論文の紹介でもするしかない。。と思っていた矢先、Chainerで遊んでいた時に偶然にもプロファイルしていたGPUのプロセッサ利用率とChainerのログから算出した1 iteration辺りの処理時間の相関性から、とあるアイデアをギリギリで思いつき、そのアイデアをChainer本体で実装することを最終ゴールとした内容でどうにかこうにか自分の発表をまとめることができた。やれやれである。
この発表の前の週はロクに眠れずにかなり肉体的にも精神的にもキツい思いをした。春学期の講義ではまぁ良い成績が取れていたので完全に油断していたが、大学院の修士課程というのは研究を行い、あわよくば対外発表もして、最終的に修士論文としてまとめることが目的の場所である。なのでこういったチェックポイントが必ず存在する(次回は来年7月の中間発表)。それを忘れてはならぬと肝に銘じさせる出来事であった。

しかしまぁ、上記の出来事から1ヶ月ぐらい経った今時点でも、これが研究になるのかどうか全く自信がない。自分の指導教官も深層学習が専門ではないので具体的な助言ができないようなので、全て自分で考えて進めていくしかない。自分に何か強みがあるとしたら、馴染みが薄い言語やプラットフォームでもキャッチアップするのが多少人より早いぐらいのものなので、とにかく今は自分のアイデアを実装して、動くものを使って客観的な評価を行い判断するしかない。

講義の方は相変わらず取りすぎてしまい、春学期同様に期末のレポートラッシュを先週、今週と乗り切ったばかりである。ただ、秋学期は実装の課題が多く、その辺は論文要約や論述ばかりだった春学期よりも楽ではあった。まぁ論文要約の講義もあったのだけど、最近は流石になれてきたのか英語の論文も大分早く読めるようになった気がする。英語に慣れたというよりは論文そのもののフォーマットに慣れて、どこをどう読めば抑えるべきポイントが分かるかが分かった、という感じである。春学期の頃はとりあえず全部精読していたが、今はもう少し効率の良い読み方ができるようになった気がする。多少は進歩したのかもしれない。

総括

  • 学業については計算機アーキテクチャ周り、並列処理、分散処理に関して新しい知識が多く得られて良かった
  • 研究については先に述べたようにまだまだこれからという感じで、今年は何も成果を出していない
  • 私生活については会社員時代と変わりはない

*1:筑波大生向けに説明しとくとCSセミナーの話である

『1日ひとつだけ、強くなる。』を読んだ

プロゲーマーという立場で書かれてはいるが、内容は格ゲーに特化したものではなく、割とどんな分野でも応用の効く内容だと感じた。

特に、ソフトウェアエンジニア(以下SWE)として働いていた身としては、SWEとしての仕事と「eスポーツとしてのゲーム」との共通点を感じる部分が多かった。SWEもウェブ上のメディアで成長に関するトピックが頻繁に話題に上がる。実際自分も自分の成長について悩む事がこれまでに少なくなかった。SWEをやっていると、知らなければならないこと、身につけなければならないことが延々と増え続けるので、その中でどのような道を決定して自分を成長させていくのか、ということは実際難しいことだと思う。

そういった『成長』とどう向き合っていくか、ということがこの本の主題のように思った。
強くなるには成長が必要だが、どのように成長するか。成長するために新しいことを試すにはリスクがある。しかし、一方で変化を恐れたり、怠慢して何もしないといずれ時代遅れになって通用しなくなり、結果的に自分の価値を失う。SWEとして働く世界においても全く同じだと思う。

本書ではウメハラさんが彼の後輩から「どうして成長しないといけないんですか」と聞かれたことがあるというエピソードが紹介されている。*1それに対してどう答えたかは書いてないが、代わりに成長に関してどう考えているかが述べられている。

成長しながら力をつけることができれば、自分が楽しいし、いい結果も生まれやすい。 だから、成長は義務などではなく、楽しく生きて、この時代にコースアウトしないためのツールとて考えればいいのではないか。

(中略)

コースアウトする可能性があったとしても、より良い走りをしようと前に出て戦う。そのときは駄目だとしても、成長(変化)を続けて、次のレース、次の次のレースで良い成績を出すようにする。 このような姿勢でいることが、最終的に自分の身を守る。僕は、そう考えている。

自分としては同意出来る考え方である。新しい言語、アルゴリズム、設計手法なんかを使えるようになったりして手数が増えたり、前よりも早く書けるようになったりすると単純に楽しいし、それが結果的に自分の強みにつながる。最終的に報われないこともあるが、それでもまずは楽しむためにやる、という考え方で取り組む姿勢はSWEにとってもマッチするのではないだろうかと思った。

もちろん「それでも成長するだけの価値は感じられないのでやはり疑問が拭えない」という人もいると思うが、どこかで無茶振りをされたりして急に勉強したりしなければならないケースは仕事していると大体どっかである。そういう時に役に立ちそうな考え方が本書には多く記載されている。今後も自分は自分の成長について悩んだら読み返したい一冊である。

*1:「リスクを負わない姿勢が一番のリスクになる」の章より