ENECHANGE Developer Blog

ENECHANGE開発者ブログ

RubyKaigi 2018 1日目

cuzic (a.k.a Tomoya Kawanishi )です。 いまは RubyKaigi に来ています。 速報的に 1日目の内容のまとめの記事を公開します。

Matz: Keynote

  • 箴言を引用しつつ、Ruby の実装についてとか考え方を説明する話。
  • 名前重要
    • Object#yield_self の代わりに Object#then という名前にするというのはちょっと驚いた。
    • Matz 5年ぶりの意味のあるコミット -Time is Money
    • 今回のいろんなセッションの宣伝をしていく
    • いい頭出し。RubyKaigi への期待感が高まる
  • 人間万事塞翁が馬
    • Ruby is Dead とか言われても一喜一憂しないというくだりが印象に残った

Aaron Patterson: Analyzing and Reducing Ruby memory Usage

  • 毎年どんどん日本語もボケもうまくなっているのがすごい
  • 主に Ruby でのメモリの利用について調査して、Ruby 2.6 ではこういう改善をするよ、という話
  • Ruby のメモリ利用に関してかなり深い部分の内部実装について勉強できて面白かった。

Kenta Murata 、Yusaku Hatanaka :Deep Learning Programming on Ruby

https://speakerdeck.com/mrkn/deep-learning-programming-on-ruby

  • MXNet : 深層学習フレームワークの1つ
  • Apache MXNet を推す理由が腑に落ちる説明だった。
    • 多言語対応であること
    • オープンソースで複数社、大学が積極的に関与していること
    • 使いやすいインタフェースであること(TensorFlow の C API は扱いたくない)
    • マルチGPU、マルチノード対応
      • Symbolic Style    計算グラフをまず組み立てて、組み立て終われば一気に実行する   Imperative Style はプログラミング言語の文法が使え、書きやすい  * Symbolic Style はより効率的になる
      • a * b + 1 というのを、積と和を順にする2つの処理から一度の積和演算に変換できる
      • この手法は初耳だったが、とても使えるものだと思った
      • パラメータ更新は Imperative に行い、勾配計算のところは Symbolic Style を使うのがベストプラクティスらしい。 * ONNX
        • 学習済みモデルをほかのフレームワーク間で相互運用できる
        • Python と Keras を実験に使ってから、Ruby と MXNet を本番に使うというような使い分けができる
      • Red Chainer
      • Define by Run
      • 計算グラフの構築をデータを流しながら行うこと。
        • データがのような計算をされたかを記憶していて、その記憶により計算グラフを構築するということのよう
          • 初めて聞いた
      • CRuby が更新され、(1..10)%2 と書けるようになるらしい
        • 全体にとても興味深く、 Ruby でのデータサイエンスの未来が明るいと感じさせる内容だった

Piotr Murach : TTY - Ruby alchemist’s secret potion

  • tty という Rails way でターミナルを使うコマンドラインアプリケーションを作る話
  • Rails 的に boilerplate を生成する機能はふつうに便利だと思った
  • git 的な subcommand を使うコマンドも簡単に作れる
  • ttyにはたくさんプラグイン(コンポーネント)があり、これが超すごい!!
  • tty-progressbar https://github.com/piotrmurach/tty-progressbar 普通のテキストのプログレスバーとか、複数のプログレスバーを同時に表示するとか
  • tty-markdown https://github.com/piotrmurach/tty-markdown markdown をターミナルで簡単に表示できる
  • tty-spinner https://github.com/piotrmurach/tty-spinner  まだ実行中とかを示す spinner の画面部品
  • ぜひ、使いたいと思うとても良さそうなプロダクトだった。
  • この機能充実ぶりはほんとうにすごい。

Naotoshi Seo : Fast Numerical Computing and Deep Learning in Ruby with Cumo

https://speakerdeck.com/sonots/fast-numerical-computing-and-deep-learning-in-ruby-with-cumo

  • Python の CuPy に相当するものが Ruby になかったので、それを作ろうという話
  • cudaMalloc 、 cudaMemcpy、 cudaFree は同期的に動くがカーネル実行は非同期
  • GPU はジョブキューみたいなものという説明は分かりやすかった
  • Numo::NArray と後方互換性がある数値計算ライブラリを作る話
  • Memory Pool を利用して高速化。coalescing という手法も利用
  • 要素ごとの演算は 40倍高速化
  • ドット積は 158倍高速化
  • GPU は GC と相性が悪い話
  • inplace math operations と temporary variable があるといいという話

Emma Haruka Iwao : Exploring Internal Ruby Through C Extensions

  • CRuby の拡張を作る例として、Hash を取り上げて、C拡張の説明をする話
  • わりと C拡張の作り方が丁寧に解説されていて、勉強になった
  • C++ の unordered_map をラップして自分の Hash を作るという例だからか、ナチュナルに C++ の記法が出てくるのが少し驚く。(Ruby の C 拡張がああいうベターC で記述するのを見るのに慣れていないだけ)
  • Ruby の C拡張を作る API はとても素直で取り組みやすいという印象を持
  • Ruby の Hash 関数が C++ 実装よりも速いというのはさすが、というかかなりチューニングされているんだな、と思った。
  • そういう点では安心して、Ruby を使える