Các phiên bản CUDA khác nhau được hiển thị bởi nvcc và NVIDIA-smi


103

Tôi rất bối rối bởi các phiên bản CUDA khác nhau được hiển thị bằng cách chạy which nvccnvidia-smi.

Tôi đã cài đặt cả cuda9.2 và cuda10 trên ubuntu 16.04 của mình. Bây giờ tôi đặt PATH trỏ tới cuda9.2. Vì vậy, khi tôi chạy:

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

Tuy nhiên, khi tôi chạy

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

Vì vậy, tôi đang sử dụng cuda9.2 như which nvccđề xuất, hay tôi đang sử dụng cuda10 như được nvidia-smiđề xuất?

Tôi đã thấy câu trả lời này nhưng nó không cung cấp câu trả lời trực tiếp cho sự nhầm lẫn, nó chỉ yêu cầu chúng tôi cài đặt lại cudatoolkit mà tôi đã làm.


24
Tôi nghĩ rằng tôi đã thấy câu hỏi chính xác này xuất hiện nhiều lần trong vài ngày qua. Nhưng tôi dường như không thể tìm thấy một bản sao bây giờ. Câu trả lời là: nvidia-smi hiển thị cho bạn phiên bản CUDA mà trình điều khiển của bạn hỗ trợ. Bạn đã cài đặt một trong các trình điều khiển 410.x gần đây hỗ trợ CUDA 10. Phiên bản trình điều khiển hỗ trợ không liên quan gì đến phiên bản bạn biên dịch và liên kết chương trình của bạn. Một tài xế có hỗ trợ CUDA 10.0 cũng sẽ có thể chạy một ứng dụng được xây dựng cho CUDA 9.2 ...
Michael Kenzel

@MichaelKenzel Tôi hiểu rồi. Cảm ơn bạn đã làm rõ! Đoán tôi đang sử dụng CUDA9.2 sau đó ..
yuqli

Một câu hỏi tương tự là ở đây . @MichaelKenzel nếu bạn muốn thêm câu trả lời, tôi sẽ tán thành.
Robert Crovella

@RobertCrovella vâng, đó là người tôi đang tìm kiếm. Tôi chỉ học được những câu trả lời từ nhận xét của bạn đó, vì vậy nếu có ai xứng đáng một upvote sau đó nó là bạn thân;)
Michael Kenzel

Câu trả lời:


160

CUDA có 2 API chính, API thời gian chạy và API trình điều khiển. Cả hai đều có phiên bản tương ứng (ví dụ: 8.0, 9.0, v.v.)

Hỗ trợ cần thiết cho API trình điều khiển (ví dụ: libcuda.so trên linux) được cài đặt bởi trình cài đặt trình điều khiển GPU.

Hỗ trợ cần thiết cho API thời gian chạy (ví dụ: libcudart.so trên linux và cả nữa nvcc) được cài đặt bởi trình cài đặt bộ công cụ CUDA (cũng có thể có trình cài đặt trình điều khiển GPU đi kèm trong đó).

Trong mọi trường hợp, phiên bản API trình điều khiển (đã cài đặt) có thể không phải lúc nào cũng khớp với phiên bản API thời gian chạy (đã cài đặt), đặc biệt nếu bạn cài đặt trình điều khiển GPU độc lập với cài đặt CUDA (tức là bộ công cụ CUDA).

Công nvidia-smicụ được cài đặt bởi trình cài đặt trình điều khiển GPU và thường có trình điều khiển GPU trong chế độ xem, không phải bất kỳ thứ gì được cài đặt bởi trình cài đặt bộ công cụ CUDA.

Gần đây (ở đâu đó giữa phiên bản trình điều khiển 410.48 và 410.73 trên linux), quyền hạn của NVIDIA đã quyết định thêm báo cáo về phiên bản API trình điều khiển CUDA được cài đặt bởi trình điều khiển, trong đầu ra từ nvidia-smi.

Điều này không có kết nối với phiên bản thời gian chạy CUDA đã cài đặt.

nvcc, công cụ trình điều khiển trình biên dịch CUDA được cài đặt cùng với bộ công cụ CUDA, sẽ luôn báo cáo phiên bản thời gian chạy CUDA mà nó được xây dựng để nhận dạng. Nó không biết bất cứ điều gì về phiên bản trình điều khiển được cài đặt hoặc thậm chí nếu trình điều khiển GPU được cài đặt.

Do đó, theo thiết kế, hai con số này không nhất thiết phải khớp nhau, vì chúng phản ánh hai điều khác nhau.

Nếu bạn đang thắc mắc tại sao lại nvcc -Vhiển thị phiên bản CUDA mà bạn không mong đợi (ví dụ: nó hiển thị một phiên bản khác với phiên bản bạn nghĩ rằng bạn đã cài đặt) hoặc không hiển thị bất kỳ thứ gì, phiên bản khôn ngoan, có thể là do bạn chưa đã làm theo các hướng dẫn bắt buộc trong bước 7 (trước CUDA 11) (hoặc bước 6 trong hướng dẫn cài đặt Linux CUDA 11) của hướng dẫn cài đặt cuda linux

Lưu ý rằng mặc dù câu hỏi này chủ yếu có linux trong xem, các khái niệm tương tự áp dụng cho các cài đặt CUDA windows . Trình điều khiển có phiên bản trình điều khiển CUDA được liên kết với nó ( nvidia-smiví dụ: có thể được truy vấn bằng ). Thời gian chạy CUDA cũng có phiên bản thời gian chạy CUDA được liên kết với nó. Cả hai không nhất thiết sẽ phù hợp trong mọi trường hợp.

Trong hầu hết các trường hợp, nếu nvidia-smibáo cáo một phiên bản CUDA bằng hoặc cao hơn phiên bản được báo cáo về mặt số học nvcc -V, thì đây không phải là lý do đáng lo ngại. Đó là đường dẫn tương thích được xác định trong CUDA (trình điều khiển mới hơn / API trình điều khiển hỗ trợ bộ công cụ CUDA "cũ hơn" / API thời gian chạy). Ví dụ: nếu nvidia-smibáo cáo CUDA 10.2 và nvcc -Vbáo cáo CUDA 10.1, điều đó thường không gây lo ngại. Nó chỉ hoạt động và nó không nhất thiết có nghĩa là bạn "thực sự đã cài đặt CUDA 10.2 khi bạn định cài đặt CUDA 10.1"

Nếu nvcclệnh hoàn toàn không báo cáo bất cứ điều gì (ví dụ Command 'nvcc' not found...), điều này cũng có thể là do cài đặt CUDA không chính xác, tức là các bước bắt buộc được đề cập ở trên không được thực hiện đúng. Bạn có thể bắt đầu tìm ra điều này bằng cách sử dụng một tiện ích linux như findhoặc locate(vui lòng sử dụng các trang nam để tìm hiểu cách thực hiện) để tìm nvcctệp thực thi của bạn . Giả sử chỉ có một, đường dẫn đến nó sau đó có thể được sử dụng để sửa biến môi trường PATH của bạn.



1
@Rober Crovella Cảm ơn vì sự rõ ràng. Tôi gặp trường hợp tương tự nvidia-smi hiển thị CUDA phiên bản 10.1 và nvcc hiển thị 9.1. Bây giờ train mạng có ổn không hay cài đặt xong vẫn dùng được ạ?
Dhiren Hamal

Tôi đã làm theo các bước sau khi cài đặt, nhưng nvcc và nvidia-smi vẫn hiển thị phiên bản
cuda

Điều đó hoàn toàn có thể xảy ra. Nếu bạn đã cài đặt trình điều khiển mới nhất ( nvidia-smihiện đang hiển thị CUDA 10.2) nhưng là phiên bản CUDA trước đó (giả sử 10.1) thì sẽ có sự khác biệt được báo cáo nvidia-smiso với nvcc. Nó không phải là một vấn đề trong trường hợp đó.
Robert Crovella

Nhận xét hữu ích, nhưng không giải thích điều gì xảy ra nếu nvccbáo cáo phiên bản cao hơn (giả sử 10.2) hơn nvidia-smi(giả sử 10.1). Trong trường hợp đó, Cuda cố gắng biên dịch nó thành 10.2 và cố gắng chạy nó trên 10.1. "RuntimeError: CUDA error: no kernel image is available for execution on the device"Ví dụ , điều này thường dẫn đến lỗi thời gian chạy .
TheSaurus

3

nvccnằm trong thư mục bin CUDA - như vậy hãy kiểm tra xem thư mục bin CUDA đã được thêm vào của bạn chưa $PATH.

Cụ thể, hãy đảm bảo rằng bạn đã thực hiện các hành động sau khi cài đặt CUDA (ví dụ: từ đây ):

  1. Thêm Thùng CUDA vào $PATH(tức là thêm dòng sau vào của bạn ~/.bashrc)
export PATH=/usr/local/cuda-10.1/bin:/usr/local/cuda-10.1/NsightCompute-2019.1${PATH:+:${PATH}}

Tái bút. Đảm bảo hai đường dẫn sau ở trên, tồn tại trước: /usr/local/cuda-10.1/bin/usr/local/cuda-10.1/NsightCompute-2019.1(đường dẫn NsightCompute có thể có phần cuối hơi khác tùy thuộc vào phiên bản Nsight compute được cài đặt ...

  1. Cập nhật $LD_LIBRARY_PATH(tức là thêm dòng sau vào của bạn ~/bashrc).
export LD_LIBRARY_PATH=/usr/local/cuda-10.1/lib64\
                         ${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

Sau đó, cả nvccnvidia-smi(hoặc nvtop) báo cáo cùng một phiên bản CUDA ...


Đó là vì $ PATH $ chỉ định sử dụng CUDA 10. Nhưng một số phần mềm yêu cầu các phiên bản CUDA khác nhau.
yuqli

NsightCompute-2019.1được gọi NsightCompute-1.0trong CUDA 10.0.
Astrid

Tôi đã làm theo các bước sau khi cài đặt, nhưng nvcc và nvidia-smi vẫn hiển thị phiên bản
cuda

Mỗi khi tôi mở thiết bị đầu cuối, tôi phải chạy lệnh hai đường dẫn (từ cài đặt cuda post ở bước 7). có cách nào tôi có thể duy trì trạng thái và không phải chạy các lệnh đường dẫn liên tục không?
Monti

@monti Có, bạn có thể viết lệnh vào .bashrchoặc bash_profileđể nó tự động tải cho mỗi phiên bash. Xem tại đây: stackoverflow.com/questions/14637979/…
yuqli

-1

Nếu bạn đang sử dụng cuda 10.2:

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

có thể hữu ích vì khi tôi kiểm tra, không có thư mục nào cho nsight-compute trong cuda-10.2. Tôi không chắc đây có phải chỉ là vấn đề với tôi hay không hay tại sao họ không đề cập đến nó trong tài liệu chính thức.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.