SlideShare ist ein Scribd-Unternehmen logo
1 von 15
Downloaden Sie, um offline zu lesen
もくもくしたこと
おいかわ かずき
(Jubatusもくもく会 #2, 2016/02/27)
自己紹介
• 及川 一樹
– GitHub: https://github.com/kazuki/
– Twitter: @k_oi
• 趣味とか使ってるものとか
– 音声・映像符号
– HTML5とか(WebAudio, WebRTC, asmjs…)
– GPGPU (OpenCL, HSA)
– 暗号
– 分散とかクラウドとか (Hadoop, P2P, OpenStack, ...)
– Gentoo Linux
– Python, TypeScript, Rust, C#
もくもくしたもの
• メイン
– Nearest Neighbor の高速化 ➔ △
• バックアップねた
– Jubatus in Browser ➔ △
– Gentooパッケージの不満解消 ➔ △
• メインが完成するかわからなかったので,
バックアップネタをいくつか用意したのですが,すべてが中途半端に....
Jubatus NNの高速化
• Nearest Neighbor遅いです
– 20newsの分類  train: 30分, classify: 30分
※ Haswell 3.5GHz,全件のtrain/classifyの所要時間
• 原因
– train/classify: ハッシュへの変換が遅い (random_projection)
– classify: 登録済みハッシュとの距離計算が遅い
速くする!
• Random Projectionが遅い
– 熊崎さんが2015年10月ぐらいにキャッシュする実装を作っている
 feature/cached_random_projection ブランチ
– 及川も2015年10月 ぐらいに正規分布に従う乱数生成の高速化を実施
– 今回はこの2つを混ぜて+AVX2(SIMD)でさらなる高速化!
• 距離計算が遅い
– 比較対象が増えるので,沢山trainするとどんどん遅くなる
– GPGPUで力技で解決する!
0
10
20
30
40
50
60
70
80
90
100
train classify結果
結果
手法 Train [ms] Classify [ms]
Default (box-muller) 96.8534 99.3197
[1]: Polar法で正規分布生成 24.3529 29.4501
[2]: AVX2版Box-muller 8.5948 13.7828
[3]: Cache 13.1329 11.3558
[4]: [1] + [3] 4.48 5.83724
[5]: [2]+ [3] 2.03893 5.26619
[6]: [5] + ハミング距離計算AVX2 2.01252 4.73609
[7]: [6] + メモリコピー削減 1.97709 3.28481
※メモリコピー削減: 比較対象のBitVectorを常にコピーしていたので,
コピーしないで比較するように改良.近いうちにpull-reqだしたい
(結果的にモデルサイズ分のメモリコピーを1回のClassifyで実施していた)
GPGPU !
• 間に合いませんでした...
– AMD Kaveri APU + OpenCL 2.0で仮想メモリ空間共有を動かすのに
数時間かかってしまった...
– マニュアルに記載の無いコンパイルオプションが必要だった…
• 得られた知見
– NNのストレージのメモリ空間は連続しているのでGPGPUしやすい
– bit_vectorが必要量の8倍のメモリを確保している
=>ストレージはbit_vectorじゃないので大した影響はなさげ
(パッチはpull-req済み)
• ここまでの作業内容は私のGitHubのjubatus_coreのexperimental/nnブランチで公開済
Gentooパッケージ作成上の不満
• Gentooの特徴
– ソースからビルド
– 他と比べてパッケージのバージョンが新しい
• JubatusのGentooパッケージを作ってます (2012年〜)
– https://github.com/kazuki/overlay
• ここが不満!
– https://github.com/kazuki/overlay/blob/master/sci-calculators/jubatus-
core/jubatus-core-0.2.7.ebuild#L15-L16
Gentooパッケージ作成上の不満
• というわけで msgpack1.1.0に対応させてみました
– 最新は1.4.0ですがGentooは1.1.0までしか入ってないので...
– Msgpack,API互換壊しまくりなので順に確認したほうが楽そう
– MsgpackのC++03向けtuple実装が残念でビルドが通らない...
• C++11にすれば解決! ➔ jubatus-msgpack-rpcがC++11に対応してない...orz
• 仕方がないので,msgpackのヘッダにパッチをあてて回避...
– Jubatus_core: 121+, 103-
– Jubatus: 12+, 11-
– Jubatus-msgpack-rpc: msgpack-1.xブランチで対応済み
– 中途半端... JubatusをC++11化してお掃除するのとあわせて... そのうち...
• 利点
– Msgpack 1.0.0 から C++版はヘッダオンリライブラリ
➔libmsgpack.soへのリンクが消滅
• 私のGitHubのjubatus/jubatus_coreのmsgpack-1.1ブランチで公開済み
Jubatus in Browser
• Msgpack 1.0からはヘッダオンリーライブラリ
 依存関係が減り jubatus_core単品で動くようになる
すべてがJavaScript になる
https://github.com/kripken/emscripten
Jubatus_coreをJavaScript化!
• システムコールとかpthreadとかはJavaScriptは対応していないので,#ifdef
で隠す
• 出力されたJavaScriptファイル  2.3MB
• とりあえずnode で Classify のサンプルは動くが,
ブラウザのインタフェース作る時間がなかった...
• スマフォ向けブラウザは加速度やBluetoothが利用できるので,ブラウザだけ
でJubatusを使って何かできる!
• 私のGitHubのjubatus_coreのemscriptenブランチで公開済
GPGPUの続き…
• あと少しだったのでお家に帰ってからもくもく会の続きを実施
– 動いた!  experimental/nn-gpgpu-opencl ブランチ
• 性能評価 (20newsの全件Classify)
– Haswell 3.5GHz AVX2: 64s (3.4ms/ops)
– Haswell 3.5GHz AVX2 + dGPU: 161s (8.5ms/ops) ※CPU利用率は25%程度
– Kaveri 3.7GHz AVX: 143s (7.6ms/ops)
– Kaveri 3.7GHz AVX + iGPU: 137s (7.2ms/ops)※CPU利用率は50%程度
• モデルが小さい(32MBぐらい)ので,カーネル実行レイテンシが支配的
– 大きいモデルで実験すると効果が見えるかも…?
– (KaveriはCPU性能低い+iGPUでメモリ転送レイテンシが小さいため少し改善)
dGPU: AMD Radeon R9 285, GCN 1.2 Tonga, 3.3TFLOPS (1792SP, 918MHz)
iGPU: GCN 1.1, 737GFLOPS (512SP, 720MHz)
GPGPU版の今後
• OpenCL 2.0 SharedVirtualMemory Fine-grain Bufferで実装
– 仮想メモリ空間共有
– clSVMAllocでアロケートしたメモリである必要がある
 内部ストレージで利用されている std::vector 等相当の物を書き換える必要
• OpenCL 2.0 SVM Fine-grain System / HAS に切り替え
– malloc等で確保したメモリ空間がそのままGPUからも見える!
– AMD Kaveri,Intel Broadwell以降でHW的には対応
(SW的には不明.AMDはHSAのみ.Intelはブツを持ってないので未確認)
– より簡単に統合できるし,モデルの更新も従来通り実施できる

Weitere ähnliche Inhalte

Was ist angesagt?

Javascriptを書きたくないヒ トのためのPythonScript
Javascriptを書きたくないヒ トのためのPythonScriptJavascriptを書きたくないヒ トのためのPythonScript
Javascriptを書きたくないヒ トのためのPythonScriptKazufumi Ohkawa
 
5社のGTFSをマージして、PostgreSQLにインポートしてみた
5社のGTFSをマージして、PostgreSQLにインポートしてみた5社のGTFSをマージして、PostgreSQLにインポートしてみた
5社のGTFSをマージして、PostgreSQLにインポートしてみたMasaki Ito
 
Log Analysis System And its designs in LINE Corp. 2014 early
Log Analysis System And its designs in LINE Corp. 2014 earlyLog Analysis System And its designs in LINE Corp. 2014 early
Log Analysis System And its designs in LINE Corp. 2014 earlySATOSHI TAGOMORI
 
HexRinger と FOSS4G の紆余曲折
HexRinger と FOSS4G の紆余曲折HexRinger と FOSS4G の紆余曲折
HexRinger と FOSS4G の紆余曲折Hironov OKUYAMA
 
Pynyumon03 LT
Pynyumon03 LTPynyumon03 LT
Pynyumon03 LTdrillan
 
HTTP2 RFC 発行記念祝賀会
HTTP2 RFC 発行記念祝賀会HTTP2 RFC 発行記念祝賀会
HTTP2 RFC 発行記念祝賀会Jxck Jxck
 

Was ist angesagt? (7)

先取り Go1.5
先取り Go1.5先取り Go1.5
先取り Go1.5
 
Javascriptを書きたくないヒ トのためのPythonScript
Javascriptを書きたくないヒ トのためのPythonScriptJavascriptを書きたくないヒ トのためのPythonScript
Javascriptを書きたくないヒ トのためのPythonScript
 
5社のGTFSをマージして、PostgreSQLにインポートしてみた
5社のGTFSをマージして、PostgreSQLにインポートしてみた5社のGTFSをマージして、PostgreSQLにインポートしてみた
5社のGTFSをマージして、PostgreSQLにインポートしてみた
 
Log Analysis System And its designs in LINE Corp. 2014 early
Log Analysis System And its designs in LINE Corp. 2014 earlyLog Analysis System And its designs in LINE Corp. 2014 early
Log Analysis System And its designs in LINE Corp. 2014 early
 
HexRinger と FOSS4G の紆余曲折
HexRinger と FOSS4G の紆余曲折HexRinger と FOSS4G の紆余曲折
HexRinger と FOSS4G の紆余曲折
 
Pynyumon03 LT
Pynyumon03 LTPynyumon03 LT
Pynyumon03 LT
 
HTTP2 RFC 発行記念祝賀会
HTTP2 RFC 発行記念祝賀会HTTP2 RFC 発行記念祝賀会
HTTP2 RFC 発行記念祝賀会
 

Andere mochten auch

"アレ"からJubatusを使う
"アレ"からJubatusを使う"アレ"からJubatusを使う
"アレ"からJubatusを使うJubatusOfficial
 
Jubatusハンズオン 機械学習はじめてみた
Jubatusハンズオン 機械学習はじめてみたJubatusハンズオン 機械学習はじめてみた
Jubatusハンズオン 機械学習はじめてみたJubatusOfficial
 
もくもく成果 IMAMASU
もくもく成果 IMAMASUもくもく成果 IMAMASU
もくもく成果 IMAMASUJubatusOfficial
 
単語コレクター(文章自動校正器)
単語コレクター(文章自動校正器)単語コレクター(文章自動校正器)
単語コレクター(文章自動校正器)JubatusOfficial
 
発言小町からのプロファイリング
発言小町からのプロファイリング発言小町からのプロファイリング
発言小町からのプロファイリングJubatusOfficial
 
小町のレス数が予測できるか試してみた
小町のレス数が予測できるか試してみた小町のレス数が予測できるか試してみた
小町のレス数が予測できるか試してみたJubatusOfficial
 
かまってちゃん小町
かまってちゃん小町かまってちゃん小町
かまってちゃん小町JubatusOfficial
 
Python 特徴抽出プラグイン
Python 特徴抽出プラグインPython 特徴抽出プラグイン
Python 特徴抽出プラグインJubatusOfficial
 
新聞から今年の漢字を予測する
新聞から今年の漢字を予測する新聞から今年の漢字を予測する
新聞から今年の漢字を予測するJubatusOfficial
 
Jubatus解説本の紹介
Jubatus解説本の紹介Jubatus解説本の紹介
Jubatus解説本の紹介JubatusOfficial
 
地域の魅力を伝えるツアーガイドAI
地域の魅力を伝えるツアーガイドAI地域の魅力を伝えるツアーガイドAI
地域の魅力を伝えるツアーガイドAIJubatusOfficial
 
FIT2012招待講演「異常検知技術のビジネス応用最前線」
FIT2012招待講演「異常検知技術のビジネス応用最前線」FIT2012招待講演「異常検知技術のビジネス応用最前線」
FIT2012招待講演「異常検知技術のビジネス応用最前線」Shohei Hido
 
Jubakit の紹介
Jubakit の紹介Jubakit の紹介
Jubakit の紹介kmaehashi
 
Jubatus 新機能ハイライト
Jubatus 新機能ハイライトJubatus 新機能ハイライト
Jubatus 新機能ハイライトJubatusOfficial
 

Andere mochten auch (20)

"アレ"からJubatusを使う
"アレ"からJubatusを使う"アレ"からJubatusを使う
"アレ"からJubatusを使う
 
Jubatusハンズオン 機械学習はじめてみた
Jubatusハンズオン 機械学習はじめてみたJubatusハンズオン 機械学習はじめてみた
Jubatusハンズオン 機械学習はじめてみた
 
もくもく成果 IMAMASU
もくもく成果 IMAMASUもくもく成果 IMAMASU
もくもく成果 IMAMASU
 
単語コレクター(文章自動校正器)
単語コレクター(文章自動校正器)単語コレクター(文章自動校正器)
単語コレクター(文章自動校正器)
 
Jubatus 1.0 の紹介
Jubatus 1.0 の紹介Jubatus 1.0 の紹介
Jubatus 1.0 の紹介
 
新機能紹介 1.0.6
新機能紹介 1.0.6新機能紹介 1.0.6
新機能紹介 1.0.6
 
発言小町からのプロファイリング
発言小町からのプロファイリング発言小町からのプロファイリング
発言小町からのプロファイリング
 
小町のレス数が予測できるか試してみた
小町のレス数が予測できるか試してみた小町のレス数が予測できるか試してみた
小町のレス数が予測できるか試してみた
 
かまってちゃん小町
かまってちゃん小町かまってちゃん小町
かまってちゃん小町
 
Python 特徴抽出プラグイン
Python 特徴抽出プラグインPython 特徴抽出プラグイン
Python 特徴抽出プラグイン
 
Jubakitの解説
Jubakitの解説Jubakitの解説
Jubakitの解説
 
新聞から今年の漢字を予測する
新聞から今年の漢字を予測する新聞から今年の漢字を予測する
新聞から今年の漢字を予測する
 
Jubatus解説本の紹介
Jubatus解説本の紹介Jubatus解説本の紹介
Jubatus解説本の紹介
 
銀座のママ
銀座のママ銀座のママ
銀座のママ
 
小町の溜息
小町の溜息小町の溜息
小町の溜息
 
JUBARHYME
JUBARHYMEJUBARHYME
JUBARHYME
 
地域の魅力を伝えるツアーガイドAI
地域の魅力を伝えるツアーガイドAI地域の魅力を伝えるツアーガイドAI
地域の魅力を伝えるツアーガイドAI
 
FIT2012招待講演「異常検知技術のビジネス応用最前線」
FIT2012招待講演「異常検知技術のビジネス応用最前線」FIT2012招待講演「異常検知技術のビジネス応用最前線」
FIT2012招待講演「異常検知技術のビジネス応用最前線」
 
Jubakit の紹介
Jubakit の紹介Jubakit の紹介
Jubakit の紹介
 
Jubatus 新機能ハイライト
Jubatus 新機能ハイライトJubatus 新機能ハイライト
Jubatus 新機能ハイライト
 

Ähnlich wie もくもくしたこと

Metahub for github
Metahub for githubMetahub for github
Metahub for githubSuguru Oho
 
OpenStackでつくる開発環境と外道塾
OpenStackでつくる開発環境と外道塾OpenStackでつくる開発環境と外道塾
OpenStackでつくる開発環境と外道塾外道 父
 
エンジニアのための痔の話
エンジニアのための痔の話エンジニアのための痔の話
エンジニアのための痔の話Kouhei Maeda
 
Jupyterで運用やってみた
Jupyterで運用やってみたJupyterで運用やってみた
Jupyterで運用やってみたSatoshi Yazawa
 
Debian tokyo-20150224-01
Debian tokyo-20150224-01Debian tokyo-20150224-01
Debian tokyo-20150224-01Yuji IMAI
 
Building Static Website With Github And Jekyll
Building Static Website With Github And JekyllBuilding Static Website With Github And Jekyll
Building Static Website With Github And JekyllYoji Shidara
 
GoでEPC作って本番運用している話
GoでEPC作って本番運用している話GoでEPC作って本番運用している話
GoでEPC作って本番運用している話雄也 日下部
 
第1回Hadoop関西勉強会参加レポート
第1回Hadoop関西勉強会参加レポート第1回Hadoop関西勉強会参加レポート
第1回Hadoop関西勉強会参加レポートYou&I
 
Functional Programming in Scala Reading #2
Functional Programming in Scala Reading #2Functional Programming in Scala Reading #2
Functional Programming in Scala Reading #2Naoyuki Yamada
 
Yapcasia2012 ltthon
Yapcasia2012 ltthonYapcasia2012 ltthon
Yapcasia2012 ltthonturugina
 
Debianのstart-stop-daemonがLXC対応じゃないのでいじってたら何故かkFreeBSDも触ることになった話
Debianのstart-stop-daemonがLXC対応じゃないのでいじってたら何故かkFreeBSDも触ることになった話Debianのstart-stop-daemonがLXC対応じゃないのでいじってたら何故かkFreeBSDも触ることになった話
Debianのstart-stop-daemonがLXC対応じゃないのでいじってたら何故かkFreeBSDも触ることになった話Genta Iha
 
Gentooサークル新歓コンパのご案内
Gentooサークル新歓コンパのご案内Gentooサークル新歓コンパのご案内
Gentooサークル新歓コンパのご案内Takuto Matsuu
 
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)Kenichiro MATOHARA
 
今最もアツイdistribution Gentoo Linuxについて
今最もアツイdistribution Gentoo Linuxについて今最もアツイdistribution Gentoo Linuxについて
今最もアツイdistribution Gentoo LinuxについてTakuto Matsuu
 
GitLabを骨までしゃぶりつくす@ゆるUniStudy#7
GitLabを骨までしゃぶりつくす@ゆるUniStudy#7GitLabを骨までしゃぶりつくす@ゆるUniStudy#7
GitLabを骨までしゃぶりつくす@ゆるUniStudy#7Wataru NOGUCHI
 
Goodby Hatena, hello Sphinx
Goodby Hatena, hello SphinxGoodby Hatena, hello Sphinx
Goodby Hatena, hello SphinxKouhei Maeda
 
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021Preferred Networks
 
ドキュメントの話、しませんか? #428rk01
ドキュメントの話、しませんか? #428rk01ドキュメントの話、しませんか? #428rk01
ドキュメントの話、しませんか? #428rk01Takeshi Komiya
 

Ähnlich wie もくもくしたこと (20)

Metahub for github
Metahub for githubMetahub for github
Metahub for github
 
OpenStackでつくる開発環境と外道塾
OpenStackでつくる開発環境と外道塾OpenStackでつくる開発環境と外道塾
OpenStackでつくる開発環境と外道塾
 
エンジニアのための痔の話
エンジニアのための痔の話エンジニアのための痔の話
エンジニアのための痔の話
 
Jupyterで運用やってみた
Jupyterで運用やってみたJupyterで運用やってみた
Jupyterで運用やってみた
 
Debian tokyo-20150224-01
Debian tokyo-20150224-01Debian tokyo-20150224-01
Debian tokyo-20150224-01
 
Ingress on GKE/GCE
Ingress on GKE/GCEIngress on GKE/GCE
Ingress on GKE/GCE
 
Building Static Website With Github And Jekyll
Building Static Website With Github And JekyllBuilding Static Website With Github And Jekyll
Building Static Website With Github And Jekyll
 
GoでEPC作って本番運用している話
GoでEPC作って本番運用している話GoでEPC作って本番運用している話
GoでEPC作って本番運用している話
 
第1回Hadoop関西勉強会参加レポート
第1回Hadoop関西勉強会参加レポート第1回Hadoop関西勉強会参加レポート
第1回Hadoop関西勉強会参加レポート
 
Functional Programming in Scala Reading #2
Functional Programming in Scala Reading #2Functional Programming in Scala Reading #2
Functional Programming in Scala Reading #2
 
Yapcasia2012 ltthon
Yapcasia2012 ltthonYapcasia2012 ltthon
Yapcasia2012 ltthon
 
Debianのstart-stop-daemonがLXC対応じゃないのでいじってたら何故かkFreeBSDも触ることになった話
Debianのstart-stop-daemonがLXC対応じゃないのでいじってたら何故かkFreeBSDも触ることになった話Debianのstart-stop-daemonがLXC対応じゃないのでいじってたら何故かkFreeBSDも触ることになった話
Debianのstart-stop-daemonがLXC対応じゃないのでいじってたら何故かkFreeBSDも触ることになった話
 
Gentooサークル新歓コンパのご案内
Gentooサークル新歓コンパのご案内Gentooサークル新歓コンパのご案内
Gentooサークル新歓コンパのご案内
 
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)
 
今最もアツイdistribution Gentoo Linuxについて
今最もアツイdistribution Gentoo Linuxについて今最もアツイdistribution Gentoo Linuxについて
今最もアツイdistribution Gentoo Linuxについて
 
GitLabを骨までしゃぶりつくす@ゆるUniStudy#7
GitLabを骨までしゃぶりつくす@ゆるUniStudy#7GitLabを骨までしゃぶりつくす@ゆるUniStudy#7
GitLabを骨までしゃぶりつくす@ゆるUniStudy#7
 
Goodby Hatena, hello Sphinx
Goodby Hatena, hello SphinxGoodby Hatena, hello Sphinx
Goodby Hatena, hello Sphinx
 
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
 
Nbug201503
Nbug201503Nbug201503
Nbug201503
 
ドキュメントの話、しませんか? #428rk01
ドキュメントの話、しませんか? #428rk01ドキュメントの話、しませんか? #428rk01
ドキュメントの話、しませんか? #428rk01
 

Kürzlich hochgeladen

20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価sugiuralab
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールsugiuralab
 

Kürzlich hochgeladen (7)

20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツール
 

もくもくしたこと

  • 2. 自己紹介 • 及川 一樹 – GitHub: https://github.com/kazuki/ – Twitter: @k_oi • 趣味とか使ってるものとか – 音声・映像符号 – HTML5とか(WebAudio, WebRTC, asmjs…) – GPGPU (OpenCL, HSA) – 暗号 – 分散とかクラウドとか (Hadoop, P2P, OpenStack, ...) – Gentoo Linux – Python, TypeScript, Rust, C#
  • 3. もくもくしたもの • メイン – Nearest Neighbor の高速化 ➔ △ • バックアップねた – Jubatus in Browser ➔ △ – Gentooパッケージの不満解消 ➔ △ • メインが完成するかわからなかったので, バックアップネタをいくつか用意したのですが,すべてが中途半端に....
  • 4. Jubatus NNの高速化 • Nearest Neighbor遅いです – 20newsの分類  train: 30分, classify: 30分 ※ Haswell 3.5GHz,全件のtrain/classifyの所要時間 • 原因 – train/classify: ハッシュへの変換が遅い (random_projection) – classify: 登録済みハッシュとの距離計算が遅い
  • 5. 速くする! • Random Projectionが遅い – 熊崎さんが2015年10月ぐらいにキャッシュする実装を作っている  feature/cached_random_projection ブランチ – 及川も2015年10月 ぐらいに正規分布に従う乱数生成の高速化を実施 – 今回はこの2つを混ぜて+AVX2(SIMD)でさらなる高速化! • 距離計算が遅い – 比較対象が増えるので,沢山trainするとどんどん遅くなる – GPGPUで力技で解決する!
  • 7. 結果 手法 Train [ms] Classify [ms] Default (box-muller) 96.8534 99.3197 [1]: Polar法で正規分布生成 24.3529 29.4501 [2]: AVX2版Box-muller 8.5948 13.7828 [3]: Cache 13.1329 11.3558 [4]: [1] + [3] 4.48 5.83724 [5]: [2]+ [3] 2.03893 5.26619 [6]: [5] + ハミング距離計算AVX2 2.01252 4.73609 [7]: [6] + メモリコピー削減 1.97709 3.28481 ※メモリコピー削減: 比較対象のBitVectorを常にコピーしていたので, コピーしないで比較するように改良.近いうちにpull-reqだしたい (結果的にモデルサイズ分のメモリコピーを1回のClassifyで実施していた)
  • 8. GPGPU ! • 間に合いませんでした... – AMD Kaveri APU + OpenCL 2.0で仮想メモリ空間共有を動かすのに 数時間かかってしまった... – マニュアルに記載の無いコンパイルオプションが必要だった… • 得られた知見 – NNのストレージのメモリ空間は連続しているのでGPGPUしやすい – bit_vectorが必要量の8倍のメモリを確保している =>ストレージはbit_vectorじゃないので大した影響はなさげ (パッチはpull-req済み) • ここまでの作業内容は私のGitHubのjubatus_coreのexperimental/nnブランチで公開済
  • 9. Gentooパッケージ作成上の不満 • Gentooの特徴 – ソースからビルド – 他と比べてパッケージのバージョンが新しい • JubatusのGentooパッケージを作ってます (2012年〜) – https://github.com/kazuki/overlay • ここが不満! – https://github.com/kazuki/overlay/blob/master/sci-calculators/jubatus- core/jubatus-core-0.2.7.ebuild#L15-L16
  • 10. Gentooパッケージ作成上の不満 • というわけで msgpack1.1.0に対応させてみました – 最新は1.4.0ですがGentooは1.1.0までしか入ってないので... – Msgpack,API互換壊しまくりなので順に確認したほうが楽そう – MsgpackのC++03向けtuple実装が残念でビルドが通らない... • C++11にすれば解決! ➔ jubatus-msgpack-rpcがC++11に対応してない...orz • 仕方がないので,msgpackのヘッダにパッチをあてて回避... – Jubatus_core: 121+, 103- – Jubatus: 12+, 11- – Jubatus-msgpack-rpc: msgpack-1.xブランチで対応済み – 中途半端... JubatusをC++11化してお掃除するのとあわせて... そのうち... • 利点 – Msgpack 1.0.0 から C++版はヘッダオンリライブラリ ➔libmsgpack.soへのリンクが消滅 • 私のGitHubのjubatus/jubatus_coreのmsgpack-1.1ブランチで公開済み
  • 11. Jubatus in Browser • Msgpack 1.0からはヘッダオンリーライブラリ  依存関係が減り jubatus_core単品で動くようになる
  • 13. Jubatus_coreをJavaScript化! • システムコールとかpthreadとかはJavaScriptは対応していないので,#ifdef で隠す • 出力されたJavaScriptファイル  2.3MB • とりあえずnode で Classify のサンプルは動くが, ブラウザのインタフェース作る時間がなかった... • スマフォ向けブラウザは加速度やBluetoothが利用できるので,ブラウザだけ でJubatusを使って何かできる! • 私のGitHubのjubatus_coreのemscriptenブランチで公開済
  • 14. GPGPUの続き… • あと少しだったのでお家に帰ってからもくもく会の続きを実施 – 動いた!  experimental/nn-gpgpu-opencl ブランチ • 性能評価 (20newsの全件Classify) – Haswell 3.5GHz AVX2: 64s (3.4ms/ops) – Haswell 3.5GHz AVX2 + dGPU: 161s (8.5ms/ops) ※CPU利用率は25%程度 – Kaveri 3.7GHz AVX: 143s (7.6ms/ops) – Kaveri 3.7GHz AVX + iGPU: 137s (7.2ms/ops)※CPU利用率は50%程度 • モデルが小さい(32MBぐらい)ので,カーネル実行レイテンシが支配的 – 大きいモデルで実験すると効果が見えるかも…? – (KaveriはCPU性能低い+iGPUでメモリ転送レイテンシが小さいため少し改善) dGPU: AMD Radeon R9 285, GCN 1.2 Tonga, 3.3TFLOPS (1792SP, 918MHz) iGPU: GCN 1.1, 737GFLOPS (512SP, 720MHz)
  • 15. GPGPU版の今後 • OpenCL 2.0 SharedVirtualMemory Fine-grain Bufferで実装 – 仮想メモリ空間共有 – clSVMAllocでアロケートしたメモリである必要がある  内部ストレージで利用されている std::vector 等相当の物を書き換える必要 • OpenCL 2.0 SVM Fine-grain System / HAS に切り替え – malloc等で確保したメモリ空間がそのままGPUからも見える! – AMD Kaveri,Intel Broadwell以降でHW的には対応 (SW的には不明.AMDはHSAのみ.Intelはブツを持ってないので未確認) – より簡単に統合できるし,モデルの更新も従来通り実施できる