はじめに
データサイエンティストの皆さん、ディープラーニングしてますか?
ディープラーニングと言えばGPUでガリガリ高速計算ですが、今回はCUDAとcuDNNをインストールして、
tensorflowとpytorchで動かそうという趣旨の記事です。
それも8年前の骨董品級のオンボログラボで。
結論から言うと失敗しました。
いえ、とうとう成功しました。詳細は最後のセクションにて。
動機としては、ローカルでゴリゴリ高速に処理を動かしたかったからです。
最新のCUDAに対応しているグラボは高いですし(3万円~)、
クラウドもGoogle Colaboratoryは時間が経つといちいち接続が切れますし、
Google Driveとの連携も認証し直さなければならないので手間がかかります。
ブラウザのタブとして開いておいて、好きなときにコーディングを始めるという
スタイルでやりたかったのです。
グラボのスペック
項目名 | 値 |
---|---|
型番 | GF-GT730-LE1GHD/D5 |
搭載チップ | NVIDIA GeForce GT 730 (64-bit GDDR5) |
VRAM容量 | 1 GB |
発売日 | 2014年 6月19日 |
現在においては見る影もないスペックですが・・・
そもそもこのグラボCUDAが使えるのか?
これについては比較的簡単に調べられるそうです。
デスクトップで右クリックしたとき、「NVIDIA コントロール パネル」があれば、それをクリックして実行。 その後、上のメニューの「ヘルプ」の「システム情報」をクリック。「ディスプレイ」タブの、「グラフィックス カード情報」の 「詳細」のところに「CUDA コア」という項目があり、それがゼロでない場合は、そのグラフィックスカードはCUDAが使用可能です。
私のグラボでは、きちんとゼロ以上の値が出ました。なのでCUDAは使用可能と言えそうです。
CUDAのインストール
まずどのバージョンのCUDAを入れるかなのですが、全く同じグラボを使っていてCUDAをインストールしようとしている方のページを見つけました。
cudaのバージョンが変わった場合などは、release.mdのところに書かれるはず。リンク先でpipでページ検索すると、下記のような記述が見られる。
GPU Pip wheels are built with cuda 7.5 and cudnn-v4, making them required for the binary releases. Lower versions of cuda/cudnn can be supported by installing from sources and setting the options during ./configure
上記に従い、Cuda Toolkit7.5とcudnn-v4をインストールする。
ちょっと腹落ちしないところがありますが、取り敢えずCUDA 7.5, cuDNN v4で進めてみます。
CUDA toolkit 7.5は以下からダウンロードできますので、ここから取ってインストールしました。
https://developer.nvidia.com/cuda-75-downloads-archive
インストール中に、Visual Studioがインストールされていることを求められる場面がありますので、
ちゃんと入れておきましょう(後述)。
また、ちょっと脇道に逸れますが、グラボにはcompute capabilityというものがあり、これにより使えるCUDAのバージョンやcuDNNの使用可否が変わります。GF-GT730-LE1GHD/D5の場合は以下のようでした。
compute capability | CUDA | cuDNN |
---|---|---|
2.1 | 8 or prior | no cuDNN |
3.5 | 8, 9, 9.1 | cuDNN |
また、compute capability=2.1, 3.5とどちらにGF-GT730-LE1GHD/D5は相当するのか?結論から言うと3.5でした。
DDR3, 128bitが2.1とありますが、該当グラボはメモリGDDR5、バス幅64bitなので違います。
なので、該当のグラボはcompute capability 3.5できちんとCUDAもcuDNNも使えそうです。
Visual Studioのインストール
ここでも、あるブログで貴重な情報があり、VS 2013 Communityをインストールすればいいことが分かりました。
調べてみたところ、CUDA7.5は、VS2010、2012、2013および2013 communityに対応しているようだ。つまり、express版と2015には対応していないとのこと。
該当バージョンのVisual Studioについては、https://my.visualstudio.com/Downloads から"Visual Studio Community 2013 with Update 5"を検索して落としてください。マイクロソフトのアカウントが必要です。
cuDNNのインストール
インストール用ファイルを手に入れる前に手順があるのですが、まず、https://developer.nvidia.com/ に登録して下さい。この登録がかなり長ったらしく途中で嫌になります。ちなみに私はテキトーに入力してやり過ごしました。真似しないでね。
登録が終わったら、https://developer.nvidia.com/rdp/cudnn-archive から、cuDNN v4 Library for Windows (updated October 18th,2016)をダウンロードして下さい。
そして、中身をCUDAのフォルダにコピー&ペーストします。
そしてタスクバーのWindowsマークの隣にある検索ボックスに
『C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\vXX.X』と打ち込み、コピーしたデータをそのフォルダ内に貼り付けます。
この場合CUDA7.5なので、C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5 ですね
これでcuDNNのインストールは完了です。
tensorflowのインストール
ここがかなり難関でした。CUDAのバージョンが古すぎるので、tensorflowのサイトで対応バージョンを探したのですが、CUDA 7.5が載っていない・・・
ですが、このページの記述でtensorflow 0.8.0をダウンロードすればいいのではないかということが分かりました。
これで準備は整ったので、TensorFlowのGPU版をインストールする。
$ sudo pip3 install --upgrade https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.8.0-cp34-cp34m-linux_x86_64.whl
ただ、上のwhlファイルはlinux用なのでインストールできません(platformが違うとエラーが出る)。では、version 0.8.0のダウンロードですが、ぐぐっても0.8.0が見つかりませんでした。では、https://storage.googleapis.com/tensorflow/ で該当バージョンのwhlファイルのURLを調べようとして"0.8.0 site:https://storage.googleapis.com/tensorflow/ "をChromeで検索したのですが、何も出てきませんでした。今度は当て推量でURLを定めてやってみましたが、不成功でした。
pip3 install --upgrade https://storage.googleapis.com/tensorflow/windows/gpu/tensorflow-0.8.0-cp36-cp36m-win_amd64.whl
ERROR: HTTP error 404 while getting https://storage.googleapis.com/tensorflow/windows/gpu/tensorflow-0.8.0-cp36-cp36m-win_amd64.whl
ERROR: Could not install requirement tensorflow==0.8.0 from https://storage.googleapis.com/tensorflow/windows/gpu/tensorflow-0.8.0-cp36-cp36m-win_amd64.whl because of HTTP error 404 Client Error: Not Found for url: https://storage.googleapis.com/tensorflow/windows/gpu/tensorflow-0.8.0-cp36-cp36m-win_amd64.whl for URL https://storage.googleapis.com/tensorflow/windows/gpu/tensorflow-0.8.0-cp36-cp36m-win_amd64.whl
whlファイルのURLを直接ブラウザに打ち込んでみましたが、NoSuchKeyと表示されるのでおそらくファイル自体が存在しません。whlファイルを使わずレポジトリからパッケージを取得する方法も功を奏しませんでした。
pip install tensorflow-gpu==0.8.0
ERROR: Could not find a version that satisfies the requirement tensorflow-gpu==0.8.0 (from versions: 1.2.0, 1.2.1, 1.3.0, 1.4.0, 1.5.0, 1.5.1, 1.6.0, 1.7.0, 1.7.1, 1.8.0, 1.9.0, 1.10.0, 1.11.0, 1.12.0, 1.12.2, 1.12.3, 1.13.1, 1.13.2, 1.14.0, 1.15.0, 1.15.2, 1.15.3, 1.15.4, 1.15.5, 2.0.0, 2.0.1, 2.0.2, 2.0.3, 2.0.4, 2.1.0, 2.1.1, 2.1.2, 2.1.3, 2.1.4, 2.2.0, 2.2.1, 2.2.2, 2.2.3, 2.3.0, 2.3.1, 2.3.2, 2.3.3, 2.3.4, 2.4.0, 2.4.1, 2.4.2, 2.4.3, 2.4.4, 2.5.0, 2.5.1, 2.5.2, 2.6.0, 2.6.1, 2.6.2)
ERROR: No matching distribution found for tensorflow-gpu==0.8.0
pip install tensorflow==0.8.0
ERROR: Could not find a version that satisfies the requirement tensorflow==0.8.0 (from versions: 1.2.0, 1.2.1, 1.3.0, 1.4.0, 1.5.0, 1.5.1, 1.6.0, 1.7.0, 1.7.1, 1.8.0, 1.9.0, 1.10.0, 1.11.0, 1.12.0, 1.12.2, 1.12.3, 1.13.1, 1.13.2, 1.14.0, 1.15.0, 1.15.2, 1.15.3, 1.15.4, 1.15.5, 2.0.0, 2.0.1, 2.0.2, 2.0.3, 2.0.4, 2.1.0, 2.1.1, 2.1.2, 2.1.3, 2.1.4, 2.2.0rc0, 2.2.0rc1, 2.2.0rc2, 2.2.0rc3, 2.2.0rc4, 2.2.0, 2.2.1, 2.2.2, 2.2.3, 2.3.0rc0, 2.3.0rc1, 2.3.0rc2, 2.3.0, 2.3.1, 2.3.2, 2.3.3, 2.3.4, 2.4.0rc0, 2.4.0rc1, 2.4.0rc2, 2.4.0rc3, 2.4.0rc4, 2.4.0, 2.4.1, 2.4.2, 2.4.3, 2.4.4, 2.5.0rc0, 2.5.0rc1, 2.5.0rc2, 2.5.0rc3, 2.5.0, 2.5.1, 2.5.2, 2.6.0rc0, 2.6.0rc1, 2.6.0rc2, 2.6.0, 2.6.1, 2.6.2)
ERROR: No matching distribution found for tensorflow==0.8.
仕方ないので取り敢えず最も若いバージョンをインストールしてやってみました。
pip install tensorflow-gpu==1.2.0
次に、以下のコードを走らせて反応を見ようとしてましたが、
from tensorflow.python.client import device_lib
device_lib.list_local_devices()
ImportErrorが出て失敗してしまいました。やはり別バージョンだとダメみたいですね。
>>> from tensorflow.python.client import device_lib
Traceback (most recent call last):
File "E:\usr\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 18, in swig_import_helper
return importlib.import_module(mname)
File "E:\usr\lib\importlib\__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 994, in _gcd_import
File "<frozen importlib._bootstrap>", line 971, in _find_and_load
File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 658, in _load_unlocked
File "<frozen importlib._bootstrap>", line 571, in module_from_spec
File "<frozen importlib._bootstrap_external>", line 922, in create_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
ImportError: DLL load failed: 指定されたモジュールが見つかりません。
ということでtensorflowのインストールは万策尽きて終了です。
Pytorchのインストール
以下に詳しいやり方が書いてあります。
https://chowdera.com/2022/01/202201080436140979.html#5_Pytorch_041_26
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
conda config --set show_channel_urls yes
をやった後にcondaとpip両方の手法を試しましたが、両方ダメでした。
> conda install pytorch==0.4.1 torchvision==0.2.1 cuda75
Collecting package metadata (repodata.json): done
Solving environment: failed with initial frozen solve. Retrying with flexible solve.
PackagesNotFoundError: The following packages are not available from current channels:
- cuda75
> pip install https://download.pytorch.org/whl/cu75/torch-0.4.1-cp36-cp36m-win_amd64.whl torchvision==0.2.1
Collecting torch==0.4.1
ERROR: HTTP error 403 while getting https://download.pytorch.org/whl/cu75/torch-0.4.1-cp36-cp36m-win_amd64.whl
ERROR: Could not install requirement torch==0.4.1 from https://download.pytorch.org/whl/cu75/torch-0.4.1-cp36-cp36m-win_amd64.whl because of HTTP error 403 Client Error: Forbidden for url: https://download.pytorch.org/whl/cu75/torch-0.4.1-cp36-cp36m-win_amd64.whl for URL https://download.pytorch.org/whl/cu75/torch-0.4.1-cp36-cp36m-win_amd64.whl
pip install https://download.pytorch.org/whl/cu75/torch-0.4.1-cp36-cp36m-win_amd64.whl torchvision==0.2.1
というのも試しましたが、403エラーが返ってきてダメでした。外部からのアクセスを遮断しているみたいです。
最後に
古いグラボ挿している人は、素直にクラウド使うか、最新のCUDA対応のグラボを買った方がいいと思います。一連の試行錯誤で1.5日潰れました!
追記:やっと成功したぞ!
成功の条件が分かりました。
項目名 | 値 |
---|---|
CUDA | 9.1 |
cuDNN | 7.1 |
Visual Studio | Visual Studio Community 2015 with Update 3 |
tensorflow | tensorflow-gpu==1.12.0 |
pytorch | torch==1.1.0 torchvision==0.3.0 |
若干の補足をします。
- この条件だと、VS2017ではビルドできないらしいです (https://taktak.jp/2018/05/13/3028/)
- VSは右からダウンロード https://my.visualstudio.com/Downloads?q=visual%20studio%202017
- cuDNNは中身をC:\ProgramData\NVIDIA GPU Computing Toolkit\CUDA\v9.1に貼り付けるだけですが、CUDA\v9.1が何故か無いので手動で作って私は入れました
- tensorflowはconda install tensorflow-gpu==1.12.0で行けました。pipでも行けるかも?
- pytorchはpip install torch==1.1.0 torchvision==0.3.0 -f https://download.pytorch.org/whl/cu90/torch_stable.html で成功しました。"You can also install PyTorch 1.0.1, 1.0.0, 0.4.1, 0.4.0., 0.3.1, 0.3.0, but not 1.2.0, 1.3.0, 1.3.1, 1.4.0, 1.5.0, 1.5.1, 1.6.0 for CUDA 9.1."とあったので、他のバージョンのpytorchもできるかも?
- import torch; torch.cuda.is_available()はTrueを返しました。pytorchではGPUが使えそうです。
- from tensorflow.python.client import device_lib;device_lib.list_local_devices()は以下のようなアウトプットを返しました。
2022-02-14 20:24:03.938527: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX AVX2
2022-02-14 20:24:04.129005: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1432] Found device 0 with properties:
name: GeForce GT 730 major: 3 minor: 5 memoryClockRate(GHz): 0.954
pciBusID: 0000:01:00.0
totalMemory: 1.00GiB freeMemory: 833.46MiB
2022-02-14 20:24:04.129241: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1511] Adding visible gpu devices: 0
2022-02-14 20:24:04.561058: I tensorflow/core/common_runtime/gpu/gpu_device.cc:982] Device interconnect StreamExecutor with strength 1 edge matrix:
2022-02-14 20:24:04.561220: I tensorflow/core/common_runtime/gpu/gpu_device.cc:988] 0
2022-02-14 20:24:04.561670: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1001] 0: N
2022-02-14 20:24:04.563117: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1115] Created TensorFlow device (/device:GPU:0 with 561 MB memory) -> physical GPU (device: 0, name: GeForce GT 730, pci bus id: 0000:01:00.0, compute capability: 3.5)
[name: "/device:CPU:0"
device_type: "CPU"
memory_limit: 268435456
locality {
}
incarnation: 7942324163660345203
, name: "/device:GPU:0"
device_type: "GPU"
memory_limit: 588732827
locality {
bus_id: 1
links {
}
}
incarnation: 1622033143383668544
physical_device_desc: "device: 0, name: GeForce GT 730, pci bus id: 0000:01:00.0, compute capability: 3.5"
]
"GPU"の文言が現れているので、tensorflowでGPUが使えそうですね。
しかし、メモリが561MBしか使えないのは痛い・・・バッチの区切り方を工夫しないと苦戦しそうです。
なにはともあれ、骨董品のグラボでtensorflowとpytorchが動いたというお話でした!