CUDA เวอร์ชันต่างๆที่แสดงโดย nvcc และ NVIDIA-smi


122

ฉันสับสนมากกับ CUDA เวอร์ชันต่างๆที่แสดงโดยการเรียกใช้which nvccและnvidia-smi.

ฉันติดตั้งทั้ง cuda9.2 และ cuda10 บน ubuntu 16.04 ของฉัน ตอนนี้ฉันตั้งค่า 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แนะนำ?

ฉันเห็นคำตอบนี้แต่ไม่ได้ให้คำตอบโดยตรงสำหรับความสับสน แต่ขอให้เราติดตั้ง cudatoolkit ใหม่ซึ่งฉันได้ทำไปแล้ว


29
ฉันคิดว่าฉันเคยเห็นคำถามที่แน่นอนนี้เกิดขึ้นหลายครั้งในช่วงสองสามวันที่ผ่านมา แต่ตอนนี้ฉันไม่พบรายการที่ซ้ำกัน คำตอบคือ: nvidia-smi จะแสดงเวอร์ชัน CUDA ที่ไดรเวอร์ของคุณรองรับ คุณมีไดรเวอร์ 410.x รุ่นล่าสุดที่ติดตั้งไว้ซึ่งรองรับ CUDA 10 เวอร์ชันที่ไดรเวอร์รองรับไม่มีส่วนเกี่ยวข้องกับเวอร์ชันที่คุณรวบรวมและเชื่อมโยงโปรแกรมของคุณ ไดรเวอร์ที่รองรับ CUDA 10.0 จะสามารถเรียกใช้แอปพลิเคชันที่สร้างขึ้นสำหรับ CUDA 9.2 ...
Michael Kenzel

@MichaelKenzel ฉันเห็น ขอขอบคุณสำหรับการชี้แจง! เดาว่าฉันใช้ CUDA9.2 แล้ว ..
yuqli

คำถามที่คล้ายกันคือที่นี่ @MichaelKenzel ถ้าคุณต้องการเพิ่มคำตอบฉันจะโหวตให้
Robert Crovella

1
@RobertCrovella ใช่นั่นคือสิ่งที่ฉันกำลังมองหา ฉันเรียนรู้คำตอบจากความคิดเห็นของคุณที่นั่นเท่านั้นดังนั้นหากใครก็ตามสมควรได้รับการโหวตเพิ่มขึ้นก็คือคุณเอง;)
Michael Kenzel

คำตอบ:


179

CUDA มี 2 API หลักรันไทม์และไดรเวอร์ API ทั้งสองรุ่นมีเวอร์ชันที่ตรงกัน (เช่น 8.0, 9.0 เป็นต้น)

การสนับสนุนที่จำเป็นสำหรับ API ไดรเวอร์ (เช่น libcuda.so บน linux) ได้รับการติดตั้งโดยโปรแกรมติดตั้งไดรเวอร์ GPU

การสนับสนุนที่จำเป็นสำหรับ runtime API (เช่น libcudart.so บน linux และยังnvcc) ได้รับการติดตั้งโดยตัวติดตั้งชุดเครื่องมือ CUDA (ซึ่งอาจมีตัวติดตั้งไดรเวอร์ GPU รวมอยู่ด้วย)

ไม่ว่าในกรณีใดเวอร์ชัน API ของไดรเวอร์ (ติดตั้ง) อาจไม่ตรงกับเวอร์ชันรันไทม์ API (ติดตั้ง) เสมอไปโดยเฉพาะอย่างยิ่งหากคุณติดตั้งไดรเวอร์ GPU โดยไม่ต้องติดตั้ง CUDA (เช่นชุดเครื่องมือ CUDA)

nvidia-smiเครื่องมือที่ได้รับการติดตั้งโดยการติดตั้งไดรเวอร์ GPU และโดยทั่วไปได้ขับ GPU ในมุมมองอะไรที่ไม่ติดตั้งโดยการติดตั้งเครื่องมือ CUDA

เมื่อเร็ว ๆ นี้ (บางแห่งระหว่าง 410.48 และ 410.73 เวอร์ชันไดรเวอร์บน linux) ขุมพลังที่ NVIDIA ตัดสินใจเพิ่มการรายงานเวอร์ชัน CUDA Driver API ที่ติดตั้งโดยไดรเวอร์ในเอาต์พุตจากnvidia-smi.

สิ่งนี้ไม่มีการเชื่อมต่อกับเวอร์ชันรันไทม์ CUDA ที่ติดตั้ง

nvccเครื่องมือไดรเวอร์คอมไพเลอร์ CUDA ที่ติดตั้งด้วยชุดเครื่องมือ CUDA จะรายงานเวอร์ชันรันไทม์ CUDA ที่สร้างขึ้นเพื่อให้รับรู้เสมอ ไม่รู้อะไรเลยเกี่ยวกับเวอร์ชันไดรเวอร์ที่ติดตั้งหรือแม้ว่าจะติดตั้งไดรเวอร์ GPU แล้วก็ตาม

ดังนั้นโดยการออกแบบตัวเลขทั้งสองนี้จึงไม่จำเป็นต้องตรงกันเนื่องจากสะท้อนถึงสองสิ่งที่แตกต่างกัน

หากคุณสงสัยว่าเหตุใดจึงnvcc -Vแสดง CUDA เวอร์ชันที่คุณไม่คาดคิด (เช่นแสดงเวอร์ชันอื่นที่ไม่ใช่เวอร์ชันที่คุณคิดว่าคุณติดตั้ง) หรือไม่แสดงอะไรเลยเวอร์ชันที่ชาญฉลาดอาจเป็นเพราะคุณไม่ ปฏิบัติตามคำแนะนำที่จำเป็นในขั้นตอนที่ 7 (ก่อน CUDA 11) (หรือขั้นตอนที่ 6 ในคู่มือการติดตั้งลินุกซ์ CUDA 11) ของคู่มือการติดตั้ง cuda linux

โปรดทราบว่าแม้ว่าคำถามนี้ส่วนใหญ่จะมี linux อยู่ในมุมมอง แต่แนวคิดเดียวกันนี้ก็ใช้กับการติดตั้งWindows CUDA ไดรเวอร์มีเวอร์ชันไดรเวอร์ CUDA ที่เชื่อมโยงอยู่ (ซึ่งสามารถสอบถามได้nvidia-smiเช่น) รันไทม์ CUDA ยังมีเวอร์ชันรันไทม์ CUDA ที่เชื่อมโยงอยู่ด้วย ทั้งสองไม่จำเป็นต้องตรงกันในทุกกรณี

ในกรณีส่วนใหญ่หากnvidia-smiรายงานเวอร์ชัน CUDA ที่มีตัวเลขเท่ากับหรือสูงกว่าที่รายงานโดยnvcc -Vจะไม่เป็นสาเหตุให้กังวล นั่นคือพา ธ ความเข้ากันได้ที่กำหนดไว้ใน CUDA (ไดรเวอร์ใหม่กว่า / ไดรเวอร์ API ที่ใหม่กว่ารองรับชุดเครื่องมือ CUDA / API รันไทม์ "รุ่นเก่า") ตัวอย่างเช่นหากnvidia-smiรายงาน CUDA 10.2 และnvcc -Vรายงาน CUDA 10.1 ซึ่งโดยทั่วไปไม่ก่อให้เกิดความกังวล ควรใช้งานได้จริงและไม่ได้แปลว่าคุณ "ติดตั้ง CUDA 10.2 จริงเมื่อคุณต้องการติดตั้ง CUDA 10.1"

หากnvccคำสั่งไม่รายงานอะไรเลย (เช่นCommand 'nvcc' not found...) อาจเป็นเพราะการติดตั้ง CUDA ที่ไม่ถูกต้องเช่นขั้นตอนบังคับที่กล่าวถึงข้างต้นไม่ได้ดำเนินการอย่างถูกต้อง คุณสามารถเริ่มหาสิ่งนี้ได้โดยใช้ยูทิลิตี้ linux เช่นfindหรือlocate(ใช้ man pages เพื่อเรียนรู้วิธีโปรด) เพื่อค้นหาnvccไฟล์ปฏิบัติการของคุณ สมมติว่ามีเพียงหนึ่งเส้นทางไปยังเส้นทางนั้นสามารถใช้เพื่อแก้ไขตัวแปรสภาพแวดล้อม PATH ของคุณได้



1
@Rober Crovella ขอบคุณสำหรับความชัดเจน ฉันมีสถานการณ์เดียวกัน nvidia-smi แสดง CUDA เวอร์ชัน 10.1 และ nvcc แสดง 9.1 ตอนนี้สามารถฝึกอบรมเครือข่ายได้หรือไม่หรือการติดตั้งยังใช้ได้หรือไม่?
Dhiren Hamal

ฉันทำตามขั้นตอนหลังการติดตั้ง แต่ถึงกระนั้น nvcc และ nvidia-smi กำลังแสดงเวอร์ชัน cuda ที่แตกต่างกัน
BeingMIAkashs

เป็นไปได้ทั้งหมด หากคุณติดตั้งไดรเวอร์ล่าสุด (ก่อให้เกิดnvidia-smiการแสดง CUDA 10.2 ในปัจจุบัน) แต่รุ่นก่อนหน้าของ CUDA (พูด, 10.1) จากนั้นจะมีความแตกต่างที่รายงานโดยเมื่อเทียบกับnvidia-smi nvccไม่ใช่ปัญหาในกรณีนั้น
Robert Crovella

ความคิดเห็นนี้มีประโยชน์ แต่ไม่ได้อธิบายว่าจะเกิดอะไรขึ้นหากnvccรายงานเวอร์ชันที่สูงกว่า (พูด 10.2) มากกว่าnvidia-smi(พูด 10.1) ในกรณีนั้น Cuda จะพยายามรวบรวมเป็น 10.2 และพยายามเรียกใช้บน 10.1 ซึ่งมักจะส่งผลให้เกิดข้อผิดพลาดรันไทม์"RuntimeError: CUDA error: no kernel image is available for execution on the device"ดังตัวอย่าง
TheSaurus

5

nvccอยู่ในโฟลเดอร์ถัง CUDA - ดังนั้นให้ตรวจสอบว่ามีการเพิ่มโฟลเดอร์ถังขยะ CUDA ลงใน$PATHไฟล์.

โดยเฉพาะอย่างยิ่งตรวจสอบให้แน่ใจว่าคุณได้ดำเนินการ CUDA หลังการติดตั้งแล้ว (เช่นจากที่นี่ ):

  1. เพิ่ม CUDA Bin ลงใน$PATH(เช่นเพิ่มบรรทัดต่อไปนี้ในของคุณ~/.bashrc)
export PATH=/usr/local/cuda-10.1/bin:/usr/local/cuda-10.1/NsightCompute-2019.1${PATH:+:${PATH}}

ปล. ตรวจสอบให้แน่ใจว่ามีสองเส้นทางด้านบนต่อไปนี้ก่อน: /usr/local/cuda-10.1/binและ/usr/local/cuda-10.1/NsightCompute-2019.1(เส้นทาง NsightCompute อาจมีการสิ้นสุดที่แตกต่างกันเล็กน้อยขึ้นอยู่กับเวอร์ชันของ Nsight compute ที่ติดตั้ง ...

  1. อัปเดต$LD_LIBRARY_PATH(เช่นเพิ่มบรรทัดต่อไปนี้ในของคุณ~/bashrc)
export LD_LIBRARY_PATH=/usr/local/cuda-10.1/lib64\
                         ${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

หลังจากนี้ทั้งnvccและnvidia-smi(หรือnvtop) รายงาน CUDA เวอร์ชันเดียวกัน ...


นั่นเป็นเพราะ $ PATH $ ระบุโดยใช้ CUDA 10 แต่ซอฟต์แวร์บางตัวต้องการ CUDA เวอร์ชันอื่น
yuqli

NsightCompute-2019.1ถูกเรียกNsightCompute-1.0ใน CUDA 10.0
Astrid

ฉันทำตามขั้นตอนหลังการติดตั้ง แต่ถึงกระนั้น nvcc และ nvidia-smi กำลังแสดงเวอร์ชัน cuda ที่แตกต่างกัน
BeingMIAkashs

ทุกครั้งที่ฉันเปิดเทอร์มินัลฉันต้องรันคำสั่งสองเส้นทาง (จากการติดตั้ง cuda post ในขั้นตอนที่ 7) มีวิธีใดบ้างที่ฉันสามารถคงสถานะและไม่ต้องรันคำสั่งพา ธ ซ้ำ ๆ
มอนติ

@monti ใช่คุณสามารถเขียนคำสั่งได้ .bashrcหรือbash_profileเพื่อให้โหลดโดยอัตโนมัติสำหรับแต่ละ bash session ดูได้ที่นี่: stackoverflow.com/questions/14637979/…
yuqli

0

หากคุณใช้ cuda 10.2:

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

อาจช่วยได้เพราะเมื่อฉันตรวจสอบไม่มีไดเร็กทอรีสำหรับ nsight-compute ใน cuda-10.2 ฉันไม่แน่ใจว่านี่เป็นเพียงปัญหาของฉันหรืออย่างอื่นทำไมพวกเขาไม่พูดถึงเรื่องนี้ในเอกสารอย่างเป็นทางการ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.