Saya sangat bingung dengan versi CUDA berbeda yang ditunjukkan dengan menjalankan which nvcc
dan 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 nvcc
disarankan, atau apakah saya menggunakan cuda10 seperti yang nvidia-smi
disarankan?
Saya melihat jawaban ini tetapi tidak memberikan jawaban langsung untuk kebingungan, itu hanya meminta kami untuk menginstal ulang cudatoolkit, yang sudah saya lakukan.
Jawaban:
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-smi
alat 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 -V
menampilkan 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 linuxPerhatikan 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-smi
melaporkan versi CUDA yang secara numerik sama dengan atau lebih tinggi dari yang dilaporkannvcc -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 jikanvidia-smi
melaporkan CUDA 10.2, dannvcc -V
melaporkan 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
nvcc
perintah tidak melaporkan apa pun (misalnyaCommand '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 sepertifind
ataulocate
(gunakan halaman manual untuk mempelajari caranya) untuk menemukannvcc
file yang dapat dieksekusi. Dengan asumsi hanya ada satu, jalur ke sana kemudian dapat digunakan untuk memperbaiki variabel lingkungan PATH Anda.sumber
nvidia-smi
CUDA 10.2 ditampilkan, saat ini) tetapi CUDA versi sebelumnya (katakanlah, 10.1) maka akan ada perbedaan yang dilaporkan olehnvidia-smi
dibandingkan dengannvcc
. Tidak masalah dalam kasus itu.nvcc
melaporkan versi yang lebih tinggi (katakanlah 10.2) daripadanvidia-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.nvcc
ada 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 ):
$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}}
$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
nvcc
dannvidia-smi
(ataunvtop
) laporkan versi CUDA yang sama ...sumber
NsightCompute-2019.1
disebutNsightCompute-1.0
dalam CUDA 10.0..bashrc
ataubash_profile
agar perintah tersebut otomatis dimuat untuk setiap sesi bash. Lihat di sini: stackoverflow.com/questions/14637979/…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.
sumber