Versi CUDA yang berbeda ditunjukkan oleh nvcc dan NVIDIA-smi

122

Saya sangat bingung dengan versi CUDA berbeda yang ditunjukkan dengan menjalankan which nvccdan nvidia-smi.

Saya memiliki cuda9.2 dan cuda10 diinstal di ubuntu 16.04 saya. Sekarang saya mengatur PATH untuk menunjuk ke cuda9.2. Jadi saat saya lari:

 $ which nvcc
 /usr/local/cuda-9.2/bin/nvcc

Namun, saat saya lari

$ 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 |

Jadi, apakah saya menggunakan cuda9.2 seperti yang which nvccdisarankan, atau apakah saya menggunakan cuda10 seperti yang nvidia-smidisarankan?

Saya melihat jawaban ini tetapi tidak memberikan jawaban langsung untuk kebingungan, itu hanya meminta kami untuk menginstal ulang cudatoolkit, yang sudah saya lakukan.

yuqli
sumber
29
Saya rasa saya telah melihat pertanyaan persis ini muncul beberapa kali selama beberapa hari terakhir. Tapi sepertinya saya tidak bisa menemukan duplikatnya sekarang. Jawabannya adalah: nvidia-smi menampilkan versi CUDA yang didukung oleh driver Anda. Anda memiliki salah satu driver 410.x terbaru yang diinstal yang mendukung CUDA 10. Versi yang didukung driver tidak ada hubungannya dengan versi yang Anda kompilasi dan tautkan program Anda. Seorang pengemudi yang mendukung CUDA 10.0 juga akan dapat menjalankan aplikasi yang dibangun untuk CUDA 9.2…
Michael Kenzel
@Michael, begitu. Terimakasih atas klarifikasinya! Kira saya menggunakan CUDA9.2 lalu ..
yuqli
Pertanyaan serupa ada di sini . @MichaelKenzel jika Anda ingin menambahkan jawaban saya akan upvote.
Robert Crovella
1
@RobertCrovella ya, itu yang saya cari. Saya hanya mengetahui jawabannya dari komentar Anda di sana, jadi jika ada yang layak mendapat suara positif maka itu Anda sendiri;)
Michael Kenzel

Jawaban:

179

CUDA memiliki 2 API utama, runtime dan API driver. Keduanya memiliki versi yang sesuai (misalnya 8.0, 9.0, dll.)

Dukungan yang diperlukan untuk API driver (misalnya libcuda.so di linux) diinstal oleh penginstal driver GPU.

Dukungan yang diperlukan untuk runtime API (misalnya libcudart.so di linux, dan juga nvcc) diinstal oleh penginstal toolkit CUDA (yang mungkin juga memiliki penginstal driver GPU yang disertakan di dalamnya).

Bagaimanapun, versi API driver (terinstal) mungkin tidak selalu cocok dengan versi API runtime (terinstal), terutama jika Anda menginstal driver GPU secara terpisah dari menginstal CUDA (yaitu toolkit CUDA).

The nvidia-smialat terinstal dengan GPU installer driver, dan umumnya memiliki driver GPU dalam pandangan, tidak apa-apa diinstal oleh installer CUDA toolkit.

Baru-baru ini (di suatu tempat antara versi driver 410.48 dan 410.73 di linux) kekuatan-yang-ada di NVIDIA memutuskan untuk menambahkan pelaporan versi CUDA Driver API yang diinstal oleh driver, dalam output dari nvidia-smi.

Ini tidak memiliki koneksi ke versi runtime CUDA yang diinstal.

nvcc, alat compiler-driver CUDA yang diinstal dengan toolkit CUDA, akan selalu melaporkan versi runtime CUDA yang dibuat untuk dikenali. Itu tidak tahu apa-apa tentang versi driver apa yang diinstal, atau bahkan jika driver GPU diinstal.

Oleh karena itu, menurut desain, kedua angka ini tidak selalu cocok, karena keduanya mencerminkan dua hal yang berbeda.

Jika Anda bertanya-tanya mengapa nvcc -Vmenampilkan versi CUDA yang tidak Anda harapkan (mis. CUDA menampilkan versi selain yang Anda pikir telah Anda instal) atau tidak menampilkan apa pun, dari segi versi, itu mungkin karena Anda belum ikuti instruksi wajib di langkah 7 (sebelum CUDA 11) (atau langkah 6 di panduan instalasi linux CUDA 11) dari panduan instalasi cuda linux

Perhatikan bahwa meskipun pertanyaan ini sebagian besar memiliki tampilan linux, konsep yang sama berlaku untuk instalasi Windows CUDA. Driver tersebut memiliki versi driver CUDA yang terkait dengannya (yang dapat dipertanyakan nvidia-smi, misalnya). Runtime CUDA juga memiliki versi runtime CUDA yang terkait dengannya. Keduanya belum tentu cocok di semua kasus.

Dalam kebanyakan kasus, jika nvidia-smimelaporkan versi CUDA yang secara numerik sama dengan atau lebih tinggi dari yang dilaporkan nvcc -V, hal ini tidak perlu dikhawatirkan. Itu adalah jalur kompatibilitas yang ditentukan di CUDA (API driver / driver yang lebih baru mendukung API toolkit / runtime CUDA "lama"). Misalnya jika nvidia-smimelaporkan CUDA 10.2, dan nvcc -Vmelaporkan CUDA 10.1, itu umumnya tidak perlu dikhawatirkan. Ini seharusnya berfungsi, dan itu tidak berarti bahwa Anda "benar-benar menginstal CUDA 10.2 saat Anda bermaksud menginstal CUDA 10.1"

Jika nvccperintah tidak melaporkan apa pun (misalnya Command 'nvcc' not found...), ini mungkin juga disebabkan oleh instalasi CUDA yang salah, yaitu langkah wajib yang disebutkan di atas tidak dilakukan dengan benar. Anda dapat mulai mencari tahu dengan menggunakan utilitas linux seperti findatau locate(gunakan halaman manual untuk mempelajari caranya) untuk menemukan nvccfile yang dapat dieksekusi. Dengan asumsi hanya ada satu, jalur ke sana kemudian dapat digunakan untuk memperbaiki variabel lingkungan PATH Anda.

Robert Crovella
sumber
2
Perbedaan antara API driver dan runtime menurut Nvidia.
HongboZhu
1
@Rober Crovella Terima kasih atas kejelasannya. Saya memiliki situasi yang sama nvidia-smi menunjukkan CUDA versi 10.1 dan nvcc menunjukkan 9.1. Sekarang tidak apa-apa untuk melatih jaringan atau apakah pemasangannya masih berfungsi?
Dhiren Hamal
Saya mengikuti langkah-langkah pasca instalasi, tetapi tetap saja, nvcc dan nvidia-smi menunjukkan versi
cuda yang
Itu sangat mungkin. Jika Anda menginstal driver terbaru (menyebabkan nvidia-smiCUDA 10.2 ditampilkan, saat ini) tetapi CUDA versi sebelumnya (katakanlah, 10.1) maka akan ada perbedaan yang dilaporkan oleh nvidia-smidibandingkan dengan nvcc. Tidak masalah dalam kasus itu.
Robert Crovella
Komentar ini membantu, tetapi tidak menjelaskan apa yang terjadi jika nvccmelaporkan versi yang lebih tinggi (katakanlah 10.2) daripada nvidia-smi(katakanlah 10.1). Dalam hal ini, Cuda mencoba mengkompilasinya sebagai 10.2 dan mencoba menjalankannya pada 10.1. Ini biasanya menghasilkan error runtime, "RuntimeError: CUDA error: no kernel image is available for execution on the device"sebagai contoh.
TheSaurus
5

nvccada di folder bin CUDA - dengan demikian periksa apakah folder bin CUDA telah ditambahkan ke file $PATH.

Secara khusus, pastikan Anda telah melakukan tindakan Pasca-Pemasangan CUDA (misalnya dari sini ):

  1. Tambahkan CUDA Bin ke $PATH(yaitu tambahkan baris berikut ke Anda ~/.bashrc)
export PATH=/usr/local/cuda-10.1/bin:/usr/local/cuda-10.1/NsightCompute-2019.1${PATH:+:${PATH}}

PS. Pastikan dua jalur berikut di atas, ada terlebih dahulu: /usr/local/cuda-10.1/bindan /usr/local/cuda-10.1/NsightCompute-2019.1(jalur NsightCompute dapat memiliki akhiran yang sedikit berbeda tergantung pada versi komputasi Nsight yang diinstal ...

  1. Perbarui $LD_LIBRARY_PATH(yaitu tambahkan baris berikut ke Anda ~/bashrc).
export LD_LIBRARY_PATH=/usr/local/cuda-10.1/lib64\
                         ${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

Setelah ini, keduanya nvccdan nvidia-smi(atau nvtop) laporkan versi CUDA yang sama ...

Ismail Moghul
sumber
Itu karena $ PATH $ ditentukan menggunakan CUDA 10. Tetapi beberapa perangkat lunak memerlukan versi CUDA yang berbeda.
yuqli
NsightCompute-2019.1disebut NsightCompute-1.0dalam CUDA 10.0.
Astrid
Saya mengikuti langkah-langkah pasca instalasi, tetapi tetap saja, nvcc dan nvidia-smi menunjukkan versi
cuda yang
setiap kali saya membuka terminal, saya harus menjalankan perintah dua jalur (dari cuda post instalasi di step7). apakah ada cara agar saya dapat mempertahankan status dan tidak harus menjalankan perintah jalur berulang kali?
monti
@monti Ya, Anda dapat menulis perintah ke .bashrcatau bash_profileagar perintah tersebut otomatis dimuat untuk setiap sesi bash. Lihat di sini: stackoverflow.com/questions/14637979/…
yuqli
0

Jika Anda menggunakan cuda 10.2:

export PATH=/usr/local/cuda-10.2/bin:/opt/nvidia/nsight-compute/2019.5.0${PATH:+:${PATH}}

mungkin bisa membantu karena ketika saya cek, tidak ada direktori untuk nsight-compute di cuda-10.2. Saya tidak yakin apakah ini hanya masalah saya atau mengapa mereka tidak menyebutkannya dalam dokumentasi resmi.

Cerah
sumber