5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

8年前のオンボログラボでTensorflowとPytorchを走らせようとした話

Last updated at Posted at 2022-02-13

はじめに

データサイエンティストの皆さん、ディープラーニングしてますか?
ディープラーニングと言えばGPUでガリガリ高速計算ですが、今回はCUDAとcuDNNをインストールして、
tensorflowとpytorchで動かそうという趣旨の記事です。
それも8年前の骨董品級のオンボログラボで。

結論から言うと失敗しました
いえ、とうとう成功しました。詳細は最後のセクションにて。

動機としては、ローカルでゴリゴリ高速に処理を動かしたかったからです。
最新のCUDAに対応しているグラボは高いですし(3万円~)、
クラウドもGoogle Colaboratoryは時間が経つといちいち接続が切れますし、
Google Driveとの連携も認証し直さなければならないので手間がかかります。
ブラウザのタブとして開いておいて、好きなときにコーディングを始めるという
スタイルでやりたかったのです。

グラボのスペック

キャプチャ.JPG

項目名
型番 ‎GF-GT730-LE1GHD/D5
搭載チップ NVIDIA GeForce GT 730 (64-bit GDDR5)
VRAM容量 ‎1 GB
発売日 2014年 6月19日

現在においては見る影もないスペックですが・・・

そもそもこのグラボCUDAが使えるのか?

これについては比較的簡単に調べられるそうです。

デスクトップで右クリックしたとき、「NVIDIA コントロール パネル」があれば、それをクリックして実行。 その後、上のメニューの「ヘルプ」の「システム情報」をクリック。「ディスプレイ」タブの、「グラフィックス カード情報」の 「詳細」のところに「CUDA コア」という項目があり、それがゼロでない場合は、そのグラフィックスカードはCUDAが使用可能です。

私のグラボでは、きちんとゼロ以上の値が出ました。なのでCUDAは使用可能と言えそうです。

cuda version.JPG

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が動いたというお話でした!

5
1
2

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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?