アプリケーション開発ポータルサイト
ServerNote.NET
カテゴリー【PythonWindows
【Windows】Python3.10+TensorFlow2.6-GPU+CUDA11.4+cuDNN8.2を動かす【2】
POSTED BY
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.cGitHub 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】

※本記事は当サイト管理人の個人的な備忘録です。本記事の参照又は付随ソースコード利用後にいかなる損害が発生しても当サイト及び管理人は一切責任を負いません。
※本記事内容の無断転載を禁じます。
【WEBMASTER/管理人】
自営業プログラマーです。お仕事ください!
ご連絡は以下アドレスまでお願いします★

【キーワード検索】