2023-10-06
【Windows】Python3.10+TensorFlow2.6-GPU+CUDA11.4+cuDNN8.2を動かす【1】
続けて、NVIDIA-GPUをC言語で操作するライブラリCUDA, cuDNNを入れていく。TensorFlow-GPUが内部でこのLIBを使う。
【Visual Studio C++コンパイラのインストール】
https://visualstudio.microsoft.com/ja/vs/community/
「Visual Studioのダウンロード」で、インストーラをダウンロード、実行する。
今回の目的ではC++によるデスクトップ開発のみでOKなのでそれのみにチェックを入れ、インストールする。
環境変数の設定
コンパイラ本体cl.exeにパスを通す。コマンドプロントから直接cl.exeと打てるようにする。
エクスプローラでまず探してみる。当方環境では、
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\Hostx64\x64\cl.exe
に発見した。
コントロールパネル→システムとセキュリティ→システム→システムの詳細設定→環境変数→システム環境変数→PATH→編集
「新規」で、
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\Hostx64\x64
を加えて、すべてOKで保存。
コマンドプロンプトを開き、clと打って、エラーが出なければパスが通っている。
cl Microsoft(R) C/C++ Optimizing Compiler Version 19.29.30133 for x64 Copyright (C) Microsoft Corporation. All rights reserved. 使い方: cl [ オプション... ] ファイル名... [ /link リンク オプション... ]
【NVIDIA CUDA 11.4のインストール】2021/10/07時点最新
https://developer.nvidia.com/cuda-toolkit-archive
Latest Release→CUDA Toolkit 11.4.2をクリック
Windows→x86_64→10→exe (local)を選んでBase Installer→Download、でダウンロード、実行する。
解凍フォルダはデフォルトでOK
インストールオプション→カスタム→コンポーネント「CUDA」にチェックを入れる。
インストール場所はデフォルトでOK
Visual Studioについての表示が出た場合、インストールされていない可能性あり、先にVisual Studioをインストールしておく。
問題なければ「インストール」し、「Nsight Visual Studio Edition Summary」が出たことを確認してしゅうろゆする。
確認
コントロールパネル→システムとセキュリティ→システム→システムの詳細設定→環境変数→システム環境変数を確認
PATH: C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.4\{bin, libnvpp}
CUDA_PATH: C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.4
CUDA_PATH_V11_4: C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.4
などの自動設定を確認する。
コマンドプロンプトを開いて、nvccコマンドの確認をする。
nvcc -V nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2021 NVIDIA Corporation Built on Sun_Aug_15_21:18:57_Pacific_Daylight_Time_2021 Cuda compilation tools, release 11.4, V11.4.120 Build cuda_11.4.r11.4/compiler.30300941_0
【NVIDIA cuDNN 8.2.4 のインストール】2021/10/07時点最新
https://developer.nvidia.com/cudnn
Download cuDNNで、ユーザー登録していなければJoin Nowでユーザー登録してから、Loginする。
cuDNN Library for Windows x86_64 最新版のZIPファイルをダウンロード
cudnn-11.4-windows-x64-v8.2.4.15.zip
ファイルを右クリック→すべて展開 でZIPを展開し、cudaフォルダが出来上がるので、その中のすべて
bin, include, lib, を、CUDAのあるフォルダ=
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.4
に、コピーする。
環境変数の設定
コントロールパネル→システムとセキュリティ→システム→システムの詳細設定→環境変数→システム環境変数→新規作成
変数名:CUDNN_PATH
変数値:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.4
として、すべてOKで閉じる。
確認
cudnnはDLLなので、存在確認はwhereで行う。コマンドプロンプトを開いて、
where cudnn64_8.dll C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.4\bin\cudnn64_8.dll
と確認できればOK。
【公式のサンプルプログラムビルド】
https://developer.nvidia.com/blog/easy-introduction-cuda-c-and-c/
の、A First CUDA C Program をコンパイル・実行してみる。コピーしてcuda_sample.cなどと保存する。
C/C++ | cuda_sample.c | GitHub Source |
#include <stdio.h> __global__ void saxpy(int n, float a, float *x, float *y) { int i = blockIdx.x*blockDim.x + threadIdx.x; if (i < n) y[i] = a*x[i] + y[i]; } int main(void) { int N = 1<<20; float *x, *y, *d_x, *d_y; x = (float*)malloc(N*sizeof(float)); y = (float*)malloc(N*sizeof(float)); cudaMalloc(&d_x, N*sizeof(float)); cudaMalloc(&d_y, N*sizeof(float)); for (int i = 0; i < N; i++) { x[i] = 1.0f; y[i] = 2.0f; } cudaMemcpy(d_x, x, N*sizeof(float), cudaMemcpyHostToDevice); cudaMemcpy(d_y, y, N*sizeof(float), cudaMemcpyHostToDevice); // Perform SAXPY on 1M elements saxpy<<<(N+255)/256, 256>>>(N, 2.0f, d_x, d_y); cudaMemcpy(y, d_y, N*sizeof(float), cudaMemcpyDeviceToHost); float maxError = 0.0f; for (int i = 0; i < N; i++) maxError = max(maxError, abs(y[i]-4.0f)); printf("Max error: %f\n", maxError); cudaFree(d_x); cudaFree(d_y); free(x); free(y); }
コマンドプロンプトを開き、nvccでコンパイル・実行する。
nvcc cuda_sample.c cuda_sampple.c ライブラリ a.lib とオブジェクト a.exp を作成中 a.exe Max error: 2.000000
問題なさそう。次はようやくTensorFlow最新版を入れる。
【Windows】Python3.10+TensorFlow2.6-GPU+CUDA11.4+cuDNN8.2を動かす【3】
※本記事内容の無断転載を禁じます。
ご連絡は以下アドレスまでお願いします★
Windowsのデスクトップ画面をそのまま配信するための下準備
WindowsでGPUの状態を確認するには(ASUS系監視ソフトの自動起動を停止する)
CORESERVER v1プランからさくらインターネットスタンダートプランへ引っ越しメモ
さくらインターネットでPython MecabをCGIから使う
さくらインターネットのPHPでAnalytics-G4 APIを使う
インクルードパスの調べ方
【Git】特定ファイルを除外する.gitignore
【Ubuntu/Debian】NVIDIA関係のドライバを自動アップデートさせない
【Python】Spacyを使用して文章から出発地と目的地を抜き出す
【Windows10】リモートデスクトップ間のコピー&ペーストができなくなった場合の対処法
【Apache】サーバーに同時接続可能なクライアント数を調整する
GitLabにHTTPS経由でリポジトリをクローン&読み書きを行う
Windows版Google Driveが使用中と言われアンインストールできない場合
【Linux】iconv/libiconvをソースコードからインストール
【C/C++】小数点以下の切り捨て・切り上げ・四捨五入
Windows11+WSL2でUbuntuを使う【2】ブリッジ接続+固定IPの設定
【PHP】Mail/mimeDecodeを使ってメールの中身を解析(準備編)
Googleファミリーリンクで子供の端末の現在地がエラーで取得できない場合