EC2(Amazon Linux AMI)へのPostgreSQLのインストールと設定

PostgreSQLの設定にだいぶ手間取ったので、 次からすぐに設定できるようにメモ。

インストール

yumにはPostgresSQLが準備されてないので、rpmからとってくる。 今回インストールしたのはPostgresSQL-9.6.

wget https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-6-x86_64/pgdg-ami201503-96-9.6-2.noarch.rpm
sudo rpm -ivh pgdg-ami201503-96-9.6-2.noarch.rpm
sudo yum install -y postgresql96 postgresql96-server postgresql96-libs postgresql96-contrib
sudo /etc/init.d/postgresql-9.6 initdb
sudo /etc/init.d/postgresql-9.6 start

公式にDL用のコマンドジェネレータがあるので、違うバージョンをダウンロードしたいときはこちらから。 PostgreSQL: Linux downloads (Red Hat family)

常に起動したいときは以下もたたいておく。

chkconfig postgresql-9.6 on

ここまでで、以下のコマンドでpsql(PostgreSQL)に接続できるようになる。

sudo -u postgres -i psql

パスワード設定とアプリケーション用ユーザの設定

PostgresSQLは最初「Unixユーザ名」と「PostgresSQLのユーザ」が一致しないとログインできない Peer認証というのになっている。

Postgresユーザでアプリが起動するとは限らないし、sudoとかしたくない。 新しいユーザを作り、sudoしないでshellからpsqlにログイン&アプリケーションからつなげるようにしていく。

最初はpostgresユーザしかいないのでpostgresユーザで入る

sudo -u postgres -i psql

パスワードの設定とアプリケーション用ユーザの作成

-- パスワードの設定
\password
-- ここでパスワードをきかれるので設定する

-- ユーザを作る
CREATE ROLE ユーザ名 LOGIN CREATEDB PASSWORD 'ここにパスワード';

-- ↑のユーザが管理したいdbを作る
CREATE DATABASE データベース名 OWNER ユーザ名;

ユーザを作ったら、psqlの設定を-Uで選択するユーザをUnixユーザ名と関係なく指定できるよう 以下の設定を変更する。

amazon linuxの場合は以下のパスに設定ファイルがあるが、 OSが違う場合は違うところにあるので注意。

sudo emacs /var/lib/pgsql/9.6/data/pg_hba.conf

以下のように変更

# local   all             all                                    peer
local   all             all                                    md5

# localhostからのアクセスをパスワード認証にしたい場合はこちらも変更
# host    all             all             127.0.0.1/32            ident
host    all             all             127.0.0.1/32            md5

これでパスワード認証ができるように。 詳しい設定方法は以下を見ればわかる。 https://www.postgresql.org/docs/9.6/static/auth-pg-hba-conf.html

設定が完了したらpsqlをリスタートする。

sudo /etc/init.d/postgresql-9.6 restart
# reloadでも大丈夫そう
# sudo /etc/init.d/postgresql-9.6 reload

# 以下でログイン可能に
psql -U ユーザ名 -d データベース名 -h localhost;

PostgresSQL の connection URI

以上の設定で postgresql://ユーザ名:パスワード@localhost:5432/データベース名 でアクセスできる。

おまけ

Deep Learning Acceleration勉強会(# DLAccel)に参加してきたのでまとめ

今日参加してきた Deep Learning Acceleration勉強会 - connpass が非常に面白かった. 一度聞いただけでは全然理解できなかったので、後から読み返すように公開された資料や論文などをメモをまとめた。

私自身は仕事で一度tensorflowでCNN触ってみたくらいで、超初心者なので、 おかしな書き方をしているところがあるかもしれませんヾ(´゚Д゚;)

[2017/09/04 11:00 追記] 間違いの修正/情報追記

目次

モデルアーキテクチャ観点からのDeep Neural Network高速化 by Yusuke Uchida(@yu4u)さん

資料

www.slideshare.net

よくある高速化の方法

  • 行列を分解して早くする
  • 高速モジュールを使う
  • pruning
  • 重みの量子化

Factorization

畳み込みカーネルを低ランクに近似することで計算量を削減する

conv(5 x 5) => conv(3 x 3) - conv(3 x 3)

計算量が25 -> 18

例えば・・・

  • VGGNet: 3x3をめっちゃ重ねてる
  • AlexNet: 11 x 11 - 5 x 5 - 3 x 3 ….

conv(3 x 3) -> conv(1 x 3) - conv (3 x 1)

Efficient microarchitecture

25P: モデルアーキテクチャ観点からのDeep Neural Network高速化

File modure (SqueezeNet)

3x3のFilterの代わりに1x1をつかう(=主成分分析的な)

  • Squeeze layerでの圧縮率 0.75程度だと精度低下しない

  • expand layer 3*3の割合 0.75程度なら精度低下しない

pruning

重みレベルのpruning(論文:deep compression)

チャネルレベルのpruning

Quantization

重みを量子化することでモデルのメモリの削減

Binary NN

神資料: バイナリニューラルネットとハードウェアの関係

Distillation

Early termination

まとめ

フレームワークより上のレイヤで意味があるのは

  • Efficient microarchitecture module
  • Pruning (channelレベル)

Convolutionの数理とアルゴリズム by Koichi Nakamura(@9_ties)さん

資料

speakerdeck.com

数学的にCNNって何してるんだーっていう話。ゆっくり後から見直したい。

今回解説された代表的なアルゴリズム

CNNのやってる計算を数学的に理解しよう。

実況など

最初から煽ってくる(^o^)

ウェブブラウザ向け深層学習モデル高速実行フレームワーク「WebDNN」 by きくらげ(@Kiikurage)さん

ウェブブラウザ向け深層学習モデル高速実行フレームワーク「WebDNN」 // Speaker Deck

speakerdeck.com

ウェブブラウザ向けDeepLearningモデルの高速実行フレームワーク 学習済みモデルを推論フェーズ に最適化して、webブラウザ上で実行できる

  • 例: MakeGirlsMoe

なぜブラウザで深層学習?

サーバーサイドで計算する問題点

  • プライバシーに抵触するデータを扱いづらい
  • クライアント数に対するスケールアウトが難しい

=> クライアントサイドで計算することでこれらの問題を解決

WebDNNの特徴

ブラウザに実装されているAPIに応じて自動的に最適なバックエンドを選択

  • WebGPU
  • WebGL
  • WebAssembly
  • FallBack

既存の以下の深層学習フレームワークの学習済みモデルに対応

独自実装した関数への対応も可能

  • keras
  • caffe
  • chainer
  • tensorflow

Keras-jsとの比較

資料内の画像を参照: https://speakerdeck.com/kiikurage/uebuburauzaxiang-keshen-ceng-xue-xi-moderugao-su-shi-xing-huremuwaku-webdnn?slide=14

計算グラフ最適化による計算の高速化

資料参照

実況など

Using Raspberry Pi GPU for DNN by Noriyuki OHKAWA(@notogawa)さん

ラズパイでのDeepLearningの高速化

資料

www.slideshare.net

ハードより・実践寄りで理解は難しかったのでメモなし|||||/(=ω=。)\ 資料へGO。今までの理論の話から、実践の話へ。

実況など

TensorFlow XLAの可能性 by 無限ゲームのなか(@Vengineer)さん

資料

www.slideshare.net

TenorFlow XLA

同じデバイス内で実行できるサブグラフ単位をノードに1つにまとめて、 _XlaLaunch OP内で実行する。

  1. 一連の関数群のコンパイルCache->Compile
  2. 各パラメータと入力リストをXLA用データに変換
  3. キャッシュの作成 + 実行 Cache->client()->Execute()

Intel Nervana, GraphcoreがXLAをサポートするかも。

@Vengineerさんその他の資料

実況など

↑今回のみそ

@Vengineer さんのブログが更新されていた

blogs.yahoo.co.jp

Googleが開発したニューラルネット専用LSITensor Processing Unit」by Kazunori Sato(@kazunori_279)さん

資料

現状まだあがってないもよう

FPGAエクストリーム・コンピューティングの紹介

FPGAエクストリーム・コンピューティング - connpass

次回こちら: FPGAエクストリーム・コンピューティング 第9回 - connpass

TensorFlowの紹介

DeepLearningをもっとみんなが使える状況を目指している。(数学が)

TPUとは?

DeepLearning専用プロセッサ 論文: In-Datacenter Performance Analysis of a Tensor Processing Unit​ TM

  • 2015年からGoogle検索・翻訳・フォトで使われている
  • MLPでの利用例が多い
  • SystolicArray
  • minimal design for NN
    • latencyが予測し易い
    • シングルスレッド
    • control logic: 2%
    • 7ms or die.

TPU v2

  • 学習もできるようになる (v1は推論だけ)
  • 45 Tflops / chip

ChainerMN による分散深層学習 by Takuya Akiba(@iwiwi)さん

@iwiwi「今年Kaggle Masterになりました」

資料

まだでていないので出たらはります

まず最初に一言だけ言いたい

(^◇^)「ChainerMNつかったら遅くなりました」
=> インターコネクトは何ですか?
(^◇^)「? つながってますよ」

━━(゚Д゚;)━━━!
=> GPUだけじゃなくてインターコネクトにもお金つかって!!話はそれからだ!

インターコネクト雑な早わかり

Ethernet
  • ~ 10Gb - 厳しい
  • 40Gb ~ 闘えるかも
InfiniBand(Mellanox) <= おすすめ
Omni-Path(Intel)
  • ハード的にはIBと同等だが深層学習では茨の道
  • IntelNVIDIAは・・・。

分散深層学習の基礎

通常イテレーション

  • forward(予測) -> backward(逆向き計算) -> optimize(勾配方向に動かす)

この処理を高速化するには

  • データ並列 => こっちが一般的
  • モデル並列 => GPUメモリが足りない時代に使われていた

同期型 vs 非同期型

  • 同期型
    • 常に同じworkerを持っている
  • 非同期
    • 勾配をパラメータサーバーに送りつけてパラメータサーバが計算させる

どっちを使うべき? スループットは非同期型のほうが高い。

  • Large Scale Distributed Deep Networks

    • ↑有名なこちらの論文が非同期大前提。古い情報だからこの情報だけに惑わされないで!
  • スループットだけを見てはいけない

  • 同期型のほうがはやく高い精度に到達するにという実験結果がある

  • GradientStaleness

    • 非同期型では、各ワーカーが持つモデルが古く、それがモデル改善に悪影響がある
    • 同期型にはStalenessがない
  • ImageNet (ILSVRC'17)の優勝チームも同期型

以上ふまえ、非同期型のほうがチューニング難しいのでそこ頑張れば同期型の精度までいける場合は多いと予想されるが、同期型のほうがチューニングが簡単である。

ChainerMNの利用法

  • 動的なネットワークも分散学習可能
  • Chainerのコードをちょっと変えればChainerMNで使える
  • MPIを利用・SPMDで動作。
  • 1プロセス1GPU

ChainerMNでのイテレーション

  • forward(予測) -> backward(逆向き計算) -> ALL Reduce -> optimize(勾配方向に動かす)

参考: 集団通信アルゴリズムまとめ - Google スプレッドシート

ChainerMNに必要なもの

  • Chainer, cupy
  • MPI
  • NVIDIA NCCL

使い方

  1. communicator()を作る
  2. optimizerをつくる
  3. あとは今までのChainerコードで

実験結果

  • ほぼ線形に速度向上、128GPUで100倍近い
  • Chainer早い。 GPUが多ければ多いほどChainerが威力発揮する
  • tensorflowは分散であんまり・・・(今後さらに調査予定)
    • tensorflowは パラメータサーバのかずを 奇数にしないと性能がでない
      • round robinで割当をやるので,,,バイアス持ってるやつ・weightばっかもってるやつに分かれてしまう

このあたりは実際の性能比較の資料ページをもってきたい。(あとで探す)

最後に

_人人人人人人人人人人人人人人人人人_  
> ChainerMN v1.0.0リリースしました <  
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄  

感想とおまけ

Deep Learning Acceleration勉強会の雰囲気とか

上級者向けの会という感じで私レベルが参加するのは申し訳ない感じだったけどとっても面白かった! 紹介された論文等、全部は読めないかもだけど少しずつ関わりそうなやつを見ていきたい。

ハッシュタグ #DLAccel がトレンドに入ったせいで途中から関係ないツイートとかあってカオスだった_| ̄|○ il||li

DeepLearning始めたい方へ

最初DeepLearning案件に足を突っ込む時、幾つかディープラーニングに関する資料読んだり本を読んだりしたんだけどめっちゃむずくて最初くじけた。

以下の本の内容を全実装自分で書いてみたらようやく少し理解できたので、 (この記事を読んでる人にそんな人がいるかはわかりませんが)これから勉強する方がいれば最初の1冊目におすすめです。

まとめや他の方のブログなど

togetter.com vaaaaaanquish.hatenablog.com