「TensorFlow 1系(GPU版)をインストールできない!」
比較的新しいPCであれば、あるあるの事象でしょう。
これには、CUDAのバージョンが大きく影響しています。
本記事の内容
- 旧バージョンのCUDA 10.0をインストールする理由
- CUDA 10.0のシステム要件
- CUDA 10.0のダウンロード
- CUDA 10.0のインストール
- CUDA 10.0の動作確認
それでは、上記に沿って解説していきます。
旧バージョンのCUDA 10.0をインストールする理由
大前提として、TensorFlowやPytorchではGPUを使います。
GPUを利用せずCPUだけで機械学習を行うと、時間を無駄にします。
そして、GPUを利用するためにCUDAが必須です。
CUDAも定期的にバージョンアップしています。
このCUDAのバージョンアップが、問題となるのです。
まず、以下の表を見てください。

上の表は、公式より取得した情報です。
https://www.tensorflow.org/install/source_windows#tested_build_configurations
「テスト済みのビルド構成」と公式では記載されています。
でも、基本的にはこの構成にしないと動かないと考えてもいいでしょう。
現状では、まだまだCUDA 10.0に依存している機械学習のコードが多いです。
例えば、TensorFlow 1.14.0はCUDA 10.1では動きません。
このTensorFlow 1.14.0を利用しているライブラリ・コードが、多いのですよね。
TensorFlow 1.14.0でGPUを利用することを考えると、どうしてもCUDA 10.0は無視できません。
おそらく、これはTensorFlowだけではなく、Pytorchでもあり得ることでしょう。
以上より、2018年にリリースされたCUDA 10.0をインストールする必要があるのです。
そうすれば、TensorFlow 1.14.0をGPUで動かすことが可能です。
なお、2021年1月時点では、11.2.0がCUDAの最新バージョンとなります。
CUDA 10.0のシステム要件
今回は、Windowsが対象となります。
CUDA 10.0が対応しているWindowsのバージョンは、以下。
- Windows 10
- Windows 8.1
- Windows 7
- Windows Server 2016
- Windows Server 2012 R2
OSに関しては、特に問題ないでしょう。
問題は、Visual Studioのバージョンです。
正確には、コンパイラになるのでしょうけどね。
CUDA 10.0が対応しているのは、下記のバージョンのVisual Studioとなります。
コンパイラ | IDE(Visual Studio) |
Visual C++ 15.0 and 15.7 | Visual Studio 2017 |
Visual C++ 14.0 | Visual Studio 2015 |
Visual C++ 14.0 | Visual Studio Community 2015 |
Visual C++ 12.0 | Visual Studio 2013 |
Visual C++ 11.0 | Visual Studio 2012 |
ただし、最新バージョンのVisual Studioは、2019です。
では、CUDA 10.0のために古いVisual Studioをインストールしなければならないのでしょうか?
いいえ、その必要はありません。
Visual Studio 2019は、Visual Studio 2017とVisual Studio 2015と互換性があります。
Visual Studio 2019、2017、2015における互換性に関しては以下のページが参考となります。
https://docs.microsoft.com/ja-jp/cpp/porting/binary-compat-2015-2017?view=msvc-160
なお、私の環境ではすでにVisual Studio 2019がインストール済みです。
Visual Studio 2019のインストールに関しては、以下の記事で解説しています。
CUDA 10.0のダウンロード
CUDAアーカイブ公式
https://developer.nvidia.com/cuda-toolkit-archive
上記ページにアクセスします。
アクセスした先のページには、以下のようなリンク一覧があります。

この中から、CUDA 10.0のバージョンへのリンクをクリック。
遷移したページには、以下のような項目が表示されています。
ここでは、CUDAをインストールするマシンの情報を入力していきます。

「Operating System」は、「Windows」を選択。
「Version」は、Windows 10であるため「10」を選択。
「Installer Type」は、「exe[network]」を選択。

上記を選択していくと、以下の表示が現れます。

「Download[17.2MB]」ボタンをクリックすると、ダウンロードが始まります。
保存場所は、適当な場所で構いません。

以上にて、CUDA 10.0のダウンロードが完了です。
次に、このダウンロードしたファイルをもとにCUDAのインストールを行います。
CUDA 10.0のインストール
ダウンロードした「cuda_10.0.130_win10_network.exe」を実行します。
インストール処理の作業を行うフォルダの指定です。

一時的な作業場所であるため、どこを選択しても問題ありません。
ただし、すでに存在しているフォルダを選ぶとエラーとなります。
「OK」ボタンをクリックすると、以下の画面まで一気に進んでいきます。

しばらく待たされます。
5分ぐらいは待たされました。
そのあと、「NVIDIAソフトウェア使用許諾契約書」画面に切り替わります。

もちろん、許諾するので「同意して継続する」ボタンを選択。
「インストールオプション」の選択画面に切り替わります。

ここは注意すべきポイントです。
「高速(推奨)」を選ぶと、すべて上書きされてしまいます。
CUDA 10.0より下のバージョンなら、上書きされてもそれほど問題はないでしょう。
しかし、CUDA 10.1以上のCUDAをインストール済みなら、上書きはされたくありません。
その場合は、「カスタム(詳細)」を選択します。
なお、CUDAのインストール状況はシステム環境変数を見ればわかります。
システム環境変数の確認方法に関しては、次の記事内で解説しています。
ちなみに、私の環境では以下です。

PCを購入した時期的に、CUDA 10.0はインストールする必要がなかったということです。
今回は、「カスタム(詳細)」を選択して、「次へ」ボタンをクリックします。

ここでも注意が必要です。
上記のように「CUDA」だけにチェックを入れます。
デフォルトでは、以下の二つにもチェックが入っています。
- Driver components
- Other components
今回の場合は、上記二つのチェックを外します。
この状態にして、「次へ」ボタンをクリック。

ここでは何も変更せずに、「次へ」ボタンをクリック。

サポート対象の「Visual Studio」が、インストールされていないこに対する警告みたいなモノです。
Visual Studioのバージョンに関しては、CUDA 10.0のシステム要件のところで解説しています。
それを理解してインストールを進めるので、チェックして「NEXT」ボタンをクリック。

処理が終わると、以下の画面に切り替わります。
ここでも、Visual Studioのバージョンがサポート対象外ということについて記載されています。

「次へ」ボタンをクリック。
コンポーネントのインストール状況が表示されます。

「閉じる」を押して終わります。
以上、CUDA 10.0のインストールの完了です。
CUDA 10.0の動作確認
最初にシステム環境変数を確認します。

「CUDA_PATH_V10_0」が、新たに追加されています。
これはこれでOKです。
ただ、「CUDA_PATH」の値が変更しています。
これは変更前の「v10.1」に戻しておきます。
cuDNNは、TensorFlow 1系(1.12.0だけ例外)とTensorFlow 2系とで同じモノを利用します。
そのため、CUDA_PATHにインストール済みのcuDNNをそのまま利用する形を取ります。
あと、もう一つの確認方法があります。
まず、コマンドプロンプトを起動。
起動したら、「where nvcc」と入力して実行します。

新たにインストールしたCUDA 10.0のパスが、存在しています。
このCUDA 10.0のexeを実行してみます。

大丈夫そうですね。
以上、CUDA 10.0の動作確認でした。