😇

【NVIDIA】GPU駆動の環境をCUDAで作る際に気をつけるべきこと

2024/09/21に公開

はじめに

GPU搭載PC上で音声認識をするために、Whisperモデルを動かせるローカル環境を整えていたところ、CUDAやcuDNNあたりのセッティングで沼にハマりました。
NVIDIA関連の環境構築は社内外で躓くことが多いと聞きます。私も例外ではなく大変苦労しました。
同じような状況の人の役に立てたら嬉しいです。

前提

やりたいこと

AIアバターとのリアルタイムの会話です。
インプットは人の声です。それをLLMやAIアバターの処理を挟んで、最終的にアウトプットとしてAIの音声を出力するフローのアプリを開発していました。
STTやTTSをGPU上で実現することでタイムラグがなく、本当に人と話すくらいのスピード感でやりとりできないか?という観点で検証をしていました。

使用した環境

エラーと試したこと

環境を構築し、試しに発話してみたところ、以下のようなエラーがでました。これに大苦戦です…

Audio data saved to output.wav
Could not locate cudnn_ops_infer64_8.dll. Please make sure it is in your library path!

とりあえずcuDNNのパスが通っていないのが原因とはわかります。
そもそもcuDNNをインストールしていなかったので、CUDAやcuDNNをインストールしたのですが、それだけで解決するほど優しい世界ではありませんでした。

結論

やるべきことは以下です。ただし注意事項があります。(今回のミソ欄に書いてます。)

  • CUDA Toolkit をダウンロード
  • cuDNN をダウンロード
  • cuDNN のパスを通す
  • Pytorch をインストール
  • PCの再起動

CUDA Toolkitをダウンロード

以下のリンクから、OSなどを要件にあわせてダウンロードしましょう。
例えばこんな感じで指定していきます。

https://developer.nvidia.com/cuda-downloads

cuDNN をダウンロード

アカウント登録を求められるので、素直に応じてください。登録しないとcuDNNをインストールできないので。
こちらもToolkit同様に要件に合わせてダウンロードしてください。

https://developer.nvidia.com/cudnn-downloads

cuDNN のパスを通す

ダウンロードが完了したら、ZIPファイルを任意の場所に展開してください。
私はC:\Program Files\NVIDIA GPU Computing Toolkit\cuDNN\というディレクトリを自分で作って、その配下に格納しました。格納するのはbin, include, lib, LICENSEというファイルやフォルダです。

PCのユーザー環境変数のPathにbinのパスを追加してください。

Pytorch をインストール

PyTorchの公式サイトから、インストールするバージョンを指定してください。
コマンドが作成されるので、表示されたコマンドを叩けばOKです。
https://pytorch.org/get-started/locally/

インストールが完了したら、PyTorchとGPUの動作確認です。pythonコマンドでPythonを立ち上げて、以下を試してみてください。

import torch

torch.cuda.is_available()
# -> True

torch.tensor([0.1, 0.2], device=torch.device('cuda:0'))
# -> tensor([0.1000, 0.2000], device='cuda:0')

ここで問題なく動けばインストール完了です。

PCの再起動

各種インストールが終わったら、PCを再起動します。
NVIDIAのライブラリ系は再起動しないとパスが通らない、反映されないようなので忘れずに再起動しましょう!
意外と再起動していなかったから動かなかっただけというオチもあります。

今回のミソ

やっていることはただのツールのインストールですが、これだけで解決しませんでした。
調べていく中で、バージョンの互換性が重要だということがわかりました。
ここが原因で、各種インストールをしてもエラーが解決しなかったわけです。

もともとインストールしていたものは

  • CUDA:v12.4
  • cuDNN: v9.4(cudnn-windows-x86_64-9.4.0.58_cuda12-archive.zip)
  • PyTorch: 2.4.1+cu121
  • Python: 3.11

でした。
CUDAとcuDNNは互換性があったようですが、GPUとの互換性がなかったのが根本の原因だったようです。

下記サイトを見ると、バージョンの互換性が書いてあります。
https://www.tensorflow.org/install/source?hl=ja#common_installation_problems

サイトの表を見て、渡しの場合は

  • CUDA:v11.4
    ※表には11.2や11.0のみ書いてありましたが、NVIDIAのサイトからダウンロードできるのが11.4だけだったので11.4にしました。一応うまく言ったので細かいことは考えてません。
  • cuDNN: v9.4(cudnn-windows-x86_64-9.4.0.58_cuda11-archive.zip)
    ※cuDNNのバージョンではなく、対応するVersionを10からTarBallに、CUDA Verionを11に変更してzipをダウンロードした。
  • PyTorch: 2.4.1+cu121 ※変更なし
  • Python: 3.11 ※変更なし

に変更しました。
もう一度パスを通して再起動して試したところ無事にエラーが解決していました。

おわりに

バージョンの互換性が特に重要、そしてPCの再起動も必要というところが学びでした。
以下は参考にしたサイトなので、詳細はこちらをご覧ください。

https://qiita.com/gomi1994/items/36d5c75a29231fc3c9d7
https://pages.samuraishockdo.com/anaconda_tensorflow.html

https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html#cublas-library

ヘッドウォータース

Discussion