[解決済み] nvccとNVIDIA-smiが示す異なるCUDAのバージョン
質問
を実行して表示されるCUDAのバージョンが異なるため、非常に混乱しています。
which nvcc
と
nvidia-smi
. 私のubuntu 16.04には、cuda9.2とcuda10の両方がインストールされています。今、私はPATHがcuda9.2を指すように設定しました。そのため、以下を実行すると
$ which nvcc
/usr/local/cuda-9.2/bin/nvcc
しかし
$ nvidia-smi
Wed Nov 21 19:41:32 2018
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 410.72 Driver Version: 410.72 CUDA Version: 10.0 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GeForce GTX 106... Off | 00000000:01:00.0 Off | N/A |
| N/A 53C P0 26W / N/A | 379MiB / 6078MiB | 2% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 1324 G /usr/lib/xorg/Xorg 225MiB |
| 0 2844 G compiz 146MiB |
| 0 15550 G /usr/lib/firefox/firefox 1MiB |
| 0 19992 G /usr/lib/firefox/firefox 1MiB |
| 0 23605 G /usr/lib/firefox/firefox 1MiB |
ということは、私はcuda9.2を使っているのでしょうか?
which nvcc
が示唆するようにcuda10を使用しているのか、それとも
nvidia-smi
ということでしょうか?I
こんな回答がありました。
しかし、それは混乱に対する直接的な答えを提供するものではなく、ただCUDAツールキットを再インストールするよう求めているだけです。
解決方法は?
CUDAには、ランタイムとドライバーAPIの2つの主要なAPIがあります。 どちらにも対応するバージョンがあります(例:8.0、9.0、など)。
ドライバAPIに必要なサポート(例:linuxのlibcuda.so)は、GPUドライバのインストーラでインストールされます。
ランタイム API に必要なサポート (例: Linux の libcudart.so、および
nvcc
) は、CUDA ツールキットのインストーラー (GPUドライバーのインストーラーもバンドルされている場合があります) によってインストールされます。
いずれにせよ、(インストールされた)ドライバーAPIバージョンは、(インストールされた)ランタイムAPIバージョンと必ずしも一致しません。特に、CUDA(すなわちCUDAツールキット)のインストールから独立してGPUドライバーをインストールした場合は、その限りではありません。
は
nvidia-smi
ツールは GPU ドライバのインストーラによってインストールされ、通常、CUDA ツールキットのインストーラによってインストールされたものでなく、GPU ドライバが表示されます。
最近(Linuxの410.48と410.73の間のどこか)、NVIDIAの権力者は、ドライバによってインストールされたCUDA Driver APIバージョンの報告を、以下の出力に追加することに決めました。
nvidia-smi
.
これは、インストールされているCUDAランタイムのバージョンとは関係ありません。
nvcc
CUDAツールキットとともにインストールされるCUDAコンパイラ・ドライバツールは、常に認識できるようにビルドされたCUDAランタイムバージョンを報告します。 これは、インストールされているドライバのバージョンや、GPUドライバがインストールされているかどうかについては、何も知りません。
したがって、設計上、この2つの数値は、2つの異なるものを反映しているため、必ずしも一致しません。
という方は
nvcc -V
は、あなたが期待していないCUDAのバージョンを表示する(例えば、あなたがインストールしたと思っているものとは別のバージョンを表示する)か、バージョンに関して全く何も表示しません。
cuda linux インストールガイド
この質問はほとんどLinuxを対象にしていますが、同じコンセプトが次の質問にも当てはまります。
ウィンドウズ
CUDAのインストール。 ドライバはそれに関連したCUDAドライバのバージョンを持っています(これは、以下の方法で問い合わせることができます。
nvidia-smi
など)。 CUDAランタイムには、CUDAランタイムのバージョンも関連付けられています。 この2つは必ずしもすべてのケースで一致するわけではありません。
ほとんどの場合、もし
nvidia-smi
が報告するCUDAバージョンと数値的に等しいか、それ以上であることを報告します。
nvcc -V
これは心配することではありません。 これは、CUDAで定義された互換性パスです(新しいドライバ/ドライバAPIは古いCUDAツールキット/ランタイムAPIをサポートします)。 たとえば、次のようになります。
nvidia-smi
は CUDA 10.2 を報告し
nvcc -V
がCUDA 10.1を報告していても、一般的には心配する必要はないでしょう。 CUDA 10.1をインストールするつもりが、実際にはCUDA 10.2をインストールしてしまったということではありません。
もし
nvcc
コマンドは全く何も報告しません (例.
Command 'nvcc' not found...
) または予期しない CUDA バージョンが報告された場合、これは CUDA のインストールが正しくない、つまり上記の必須手順が正しく実行されていないことが原因である可能性もあります。この問題を解決するには、次のような Linux ユーティリティを使用します。
find
または
locate
(方法はmanページで確認してください)。
nvcc
を実行します。1つしかないと仮定すると、そのパスはPATH環境変数を修正するために使用することができます。 その
CUDA linux インストールガイド
にも設定方法が記載されています。 PATH変数のCUDAバージョンは、実際にインストールしたい/インストールしたCUDAのバージョンに合わせて調整する必要があるかもしれません。
同様に、dockerを使用する場合は
nvidia-smi
コマンドは一般的にベースマシンにインストールされているドライバのバージョンを報告します。
nvcc --version
は、Docker コンテナ内にインストールされた CUDA のバージョンを報告します。
同様に、Anaconda などの CUDA ツールキット用の別のインストール方法を使用した場合、Anaconda によって示されるバージョンは
nvidia-smi
. ただし、上記のコメントはそのまま適用されます。 Anaconda によってインストールされた古い CUDA ツールキットは、以下のように報告されたより新しいバージョンで使用することができます。
nvidia-smi
であること、そして
nvidia-smi
は Anaconda によってインストールされたものよりも新しい/高い CUDA バージョンを報告しますが、これはインストールに問題があることを意味しません。
ここで
も似たような内容の質問です。 上記の扱いは、決して、複数のCUDAバージョンを意図的または非意図的にインストールした場合にのみ、この回答が適用されることを意味するものではありません。 状況は以下の通りです。
CUDAをインストールするときはいつでも
. で報告されたバージョンは
nvcc
と
nvidia-smi
が一致しない場合があり、それは
期待される
の動作は、ほとんどの場合、極めて正常です。
関連
-
CUDAドライバのバージョンが、CUDAランタイムのバージョンに対して不足している問題
-
CUDAのcudaMalloc()のパラメータを理解する方法
-
MatlabからCUDAへの呼び出しの概要(Windows, Ubuntu)
-
CUDA プログラミングのエラー処理
-
cudaMemcpyとcudaMemcpyAsyncの違い
-
[解決済み] CUDAバージョンの取得方法を教えてください。
-
CUDA (V) deviceQueryを使ったGPUのプロパティ
-
[解決済み】DockerコンテナからGPUを使用する?
-
[解決済み] nvccとNVIDIA-smiが示す異なるCUDAのバージョン
-
[解決済み] グローバル機能とデバイス機能の違い
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
CUDAドライバのバージョンが、CUDAランタイムのバージョンに対して不足している問題
-
CUDAのcudaMalloc()のパラメータを理解する方法
-
MatlabからCUDAへの呼び出しの概要(Windows, Ubuntu)
-
CUDAアトミック操作
-
CUDA プログラミングのエラー処理
-
[解決済み] CUDAバージョンの取得方法を教えてください。
-
CUDA (V) deviceQueryを使ったGPUのプロパティ
-
[解決済み】DockerコンテナからGPUを使用する?
-
[解決済み] CUDAのグリッド寸法、ブロック寸法、スレッド構成を理解する(簡単な説明)【終了しました。
-
[解決済み] グローバル機能とデバイス機能の違い