LoginSignup
21
16

More than 5 years have passed since last update.

WindowsでCUDA+PyTorchのサンプル実行するまでのメモ

Posted at

CUDA + PyTorch + IntelliJ IDEA を使ってPyTorchのVAEのサンプルを動かすとこまでのメモです。

PyTorchの環境作ってIntelliJ IDEAで動かすところまでの番外編というか、むしろこっちが本編です。
↑の記事との違いは、GPUを使うためにCUDAを入れるところ、Anacondaを使わずにできるだけ最小限のライブラリインストールで済ませているところです。

2018/7月版。

前提

  • Windows10、GTX1080環境での手順です
  • Mac(CUDA抜き)でも同様の手順で動作を確認

環境構築

Visual Studioを先に入れる

CUDAインストール時にVisual Studio入れてね、と言われるので先に入れておきます。
C++のコンパイラ使ってるみたいです。
Visual Studio Communityで大丈夫です。
Visual Studio

CUDA入れる

nVIDIAのGPUを計算処理に使うためのツールキットCUDAをインストールします。
現時点で9.2が最新バージョンですが、ライブラリ側が対応していないことが多いため、9.0を入れておくと良いと思います。
(あと、自分の環境では9.1がエラーでうまくインストールされませんでした。)
CUDA Toolkit

PyTorch入れる

インストール方法は公式サイトを参考に。バージョン等をぽちぽち選択すると、1〜2行のインストールコマンドが出てきます。
https://pytorch.org/
python3.6ならこんな感じ。

pythonインストール
pip3 install http://download.pytorch.org/whl/cu90/torch-0.4.0-cp36-cp36m-win_amd64.whl 
pip3 install torchvision

Python環境作る

venvの機能を使って仮想環境を作っておきます。プロジェクトごとにライブラリの管理などができ、便利です。

venv
python -m venv dir_name

とすると、dir_nameディレクトリが作成され、その中は仮想環境になっています。
以下のようにすることで有効化できます。(bashの場合)

venv
cd dir_name
source bin/activate

image.png
シェル別有効化方法はこちら。
引用&参考:venv - 仮想環境の作成

無効化するときはdeactivate

サンプル実行

サンプルとしてpytorch-exampleのVAEのソースを持ってきて動かしてみます。

git clone https://github.com/pytorch/examples.git
cd examples/vae/
python main.py

ここでwindows環境ではMultiprocessing error without if-clause protectionという実行エラーが出ました。

RuntimeError:
    An attempt has been made to start a new process before the
    current process has finished its bootstrapping phase.

   This probably means that you are not using fork to start your
   child processes and you have forgotten to use the proper idiom
   in the main module:

       if __name__ == '__main__':
           freeze_support()
           ...

   The "freeze_support()" line can be omitted if the program
   is not going to be frozen to produce an executable.

この場合、エラーメッセージのように実行するコードを関数化してf __name__ == '__main__':から呼び出すことで回避できます。
サンプルコードの下部、forループの部分を以下のように雑に変更しました。(全体を囲ってしまってもよいですけどね)

windows用
def main():
    for epoch in range(1, args.epochs + 1):
        train(epoch)
        test(epoch)
        with torch.no_grad():
            s = torch.randn(64,2)
            for i in range(0,64):
                i
                s[i] = epoch / 4 + 2/1024*i + (torch.range(1,2) / 1024) - 5

            sample = s.to(device)
            sample = model.decode(sample).cpu()
            save_image(sample.view(64, 1, 28, 28),
                       'results/sample_' + str(epoch) + '.png')

if __name__ == '__main__':
    main()

他にもwindowsで起こりがちなエラーは以下のページに解決策が載っていることもあるので、困ったら確認しましょう。
https://pytorch.org/docs/stable/notes/windows.html

これで計算結果がズラーっと出てくれば動作OKです。

また、この時代表的な引数として以下を指定できるようです。

指定 デフォルト値
--batch-size 128
--epochs 10
--no-cuda False
--seed 1
--log-interval 10

Intellij IDEA設定する

IDEから先ほど作成したvenv環境にアクセスできるようにします。(もちろんIDE側で新規作成しても良い)
importプロジェクトでVAEのプロジェクトを指定します。
image.png
この時、途中でSDKの選択が出てくるのでvenvで作成した環境の物を選択します。
image.png
左上の+ボタンからSDKを追加できるので・・・
image.png
Base interpreterに、作成した仮想環境以下のbin/pythonを指定

これで、開発環境もOK

※キャプチャ画面がWindowsだったりMacだったりになっていますが、WindowsとMac両方で試してたからです。念のため。

おまけ 速度比較

cudaありなしでどの程度速度に差が出るかを試してみました。

  • cudaなし
    vae_no_cuda.gif

  • cudaあり
    vae_cuda.gif

結論:GPUすごい。

21
16
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
21
16