確率的文法を用いたテキストの調整(その2)
前回の実験で、学習のために時間がかかることが分かったので、大きなデータを学習させる前段階として、GPGPUを用いた高速化の実験を行う。
Chainer本をみると、ChainerでCUDAを使うようにするのは簡単だよふふふん的なことが書いてあるので、その通りにやってみた。
GPGPUの環境は、GeForce 1050あたりを買ってもよかったのだが、とりあえず実験をしようということで、AWS EC2のGPUつきインスタンスを使ってみることにした。
NVIDIAが提供しているAMIを用い、仮想マシンは g2.2xlarge を用いた。
CUDA対応のChainerのインストール手順は以下である。
1. CUDA 7.5用のcuDNNをインストールする(ユーザ登録して、ダウンロードして、展開して、/opt/nvidia/cuda/配下にコピー)
2. sudo CUDA_PATH=/opt/nvidia/cuda pip install chainer
まず「走れメロス」のLSTMでの学習を50回走らせてみた。
1. 家のしょぼいCPU 36分
2. AWS EC2でのCUDA対応版 22分
3. AWS EC2でのCPU版 24分
2と3を比較すると、ほんの少しだけ速くなっている。
語彙数が増えたら変わるかと思って、GPU版に大きなデータをつっこんでみた。
vocab size: 235797
dataset size: 126493156
一週目の473900単語まで学習させたところで、226分であった。あきらめて止めた。
これでは使い物にならない。
前回のコードを見てもらえれば分かるが、今の実装は一単語ずつ切り出してモデルに送り込んで、GPU側で状態の更新をさせている。この時の行列計算だけがGPUで行われている。
これだと、そんなに速くはならんよな、と思う。
入力ベクトルが巨大(画像みたいに数十万次元とか)であれば、この方法でも高速化できると思うのだが、今のアルゴリズムだと逐次処理の粒度が小さすぎて効果が出ない。
たとえば、データセット全体をGPU側のメモリにまとめて送ってしまい、切り出しと学習をGPU側でやってもらうようにできるとよいのだが。
あとは、現状シングルスレッドで動いているので、マルチスレッド化して、コア沢山のCPUで頑張ってみるというアプローチもあるだろう。
このあたりのノウハウは、もう少しためてから、大きなデータを使うべきかなというのが今の状況である。さしあたり、言語モデルを作って文法的に調整するためのデータセットは、もっと小さなものを使うとしよう。
というところで、今回は一晩試したことの中間報告であった。
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます