LoginSignup
5
5

More than 5 years have passed since last update.

書籍「将棋AIで学ぶディープラーニング」のプログラムコードをCPUで動かす

Last updated at Posted at 2018-03-29

やること

書籍「将棋AIで学ぶディープラーニング」のプログラムコードを動かす』のコードがGPUありきなので、第7章のtrain_policy.pyを対象にCPUで動くように変更してみる。

Amazonのカスタマーレビュー

星一つの評価者が一人だけいまして、
理由が「GPU前提であるのが残念」らしいんです、
こちらに触発されまして

ChainerはGPUとCPUの切り替えが簡単

ただしCPUでは満足な学習のためにどれだけの時間がかかることかは知ったこっちゃないです

  • いまどきの10万円のGPUを用意することが難しければ
  • 古くても2万円のGPUくらい用意した方がまだましだし
  • AWSでg2を1時間動かすだけなら百円くらいみたいですよ->見積り
    • なんちゃって私は1万円のGPUで遅い遅いですけど

ChainerのコードをCPU対応にする

ChainerのコードをGPU対応にするの逆をする
- cuda.get_device()があれば消す
- model.to_gpu()があれば消す
- cuda.cupyをnpに置き換える(import numpy as np)

以上を念頭において、エラーを吐かせて直していくスタイル
通常のとおり学習をはじめる
>python train_policy.py kifulist_train_1000.txt kifulist_test_100.txt --eval_interval 100 --log log

"train_policy.py", line 38

エラー
Traceback (most recent call last):
  File "train_policy.py", line 38, in <module>
    model.to_gpu()
  File "C:\home\bin\miniconda3\lib\site-packages\chainer\link.py", line 730, in to_gpu
    super(Chain, self).to_gpu()
  File "C:\home\bin\miniconda3\lib\site-packages\chainer\link.py", line 364, in to_gpu
    cuda.check_cuda_available()
  File "C:\home\bin\miniconda3\lib\site-packages\chainer\backends\cuda.py", line 80, in check_cuda_available
    raise RuntimeError(msg)
RuntimeError: CUDA environment is not correctly set up
(see https://github.com/chainer/chainer#installation).No module named 'cupy'

念頭の2点めのやつ、38行めを消せばよい(行数変わると後がややこしいのでコメントアウト)

train_policy.py,38行
model.to_gpu()

# model.to_gpu()

"train_policy.py", line 118

エラー
Traceback (most recent call last):
  File "train_policy.py", line 118, in <module>
    x, t = mini_batch(positions_train_shuffled, i, args.batchsize)
  File "train_policy.py", line 94, in mini_batch
    return (Variable(cuda.to_gpu(np.array(mini_batch_data, dtype=np.float32))),
  File "C:\home\bin\miniconda3\lib\site-packages\chainer\backends\cuda.py", line 258, in to_gpu
    check_cuda_available()
  File "C:\home\bin\miniconda3\lib\site-packages\chainer\backends\cuda.py", line 80, in check_cuda_available
    raise RuntimeError(msg)
RuntimeError: CUDA environment is not correctly set up
(see https://github.com/chainer/chainer#installation).No module named 'cupy'

118行めで呼ぶ94行めにcuda.to_gpu()がいる(cuda.cupyでなくcuda.to_gpu(np)なんですね)、
こちらも行数を変えずに書き換える

train_policy.py,94-95行
    return (Variable(cuda.to_gpu(np.array(mini_batch_data, dtype=np.float32))),
            Variable(cuda.to_gpu(np.array(mini_batch_move, dtype=np.int32))))

    return (Variable(np.array(mini_batch_data, dtype=np.float32)),
            Variable(np.array(mini_batch_move, dtype=np.int32)))

つぎを実行する前にすぐ後の行が目にはいりました、105行めも同様にします。

train_policy.py,104-105行
    return (Variable(cuda.to_gpu(np.array(mini_batch_data, dtype=np.float32))),
            Variable(cuda.to_gpu(np.array(mini_batch_move, dtype=np.int32))))

    return (Variable(np.array(mini_batch_data, dtype=np.float32)),
            Variable(np.array(mini_batch_move, dtype=np.int32)))

一応これぽちの修正で動きます。
ただし本当に遅いですよ!?

たったこれだけの書き換えをあきらめて
GPUないもんと拗ねるのは勿体ない
みんなでディープラーニングの流行に乗りましょう

おしまい

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5