Ubuntu系統如何安裝和卸載CUDA和CUDNN

背景

最近在學習PaddlePaddle在各個顯卡驅動版本的安裝和使用,所以同時也學習如何在Ubuntu安裝和卸載CUDA和CUDNN,在學習過程中,順便記錄學習過程。在供大家學習的同時,也在加強自己的記憶。本文章以卸載CUDA 8.0CUDNN 7.05 為例,以安裝CUDA 10.0 和 CUDNN 7.4.2 為例。

安裝顯卡驅動

禁用nouveau驅動

sudo vim /etc/modprobe.d/blacklist.conf

在文本最后添加:

blacklist nouveau
options nouveau modeset=0

然后執行:

sudo update-initramfs -u

重啟后,執行以下命令,如果沒有屏幕輸出,說明禁用nouveau成功:

lsmod | grep nouveau

下載驅動

官網下載地址:https://www.nvidia.cn/Download/index.aspx?lang=cn ,根據自己顯卡的情況下載對應版本的顯卡驅動,比如顯卡是RTX2070

在這里插入圖片描述

下載完成之后會得到一個安裝包,不同版本文件名可能不一樣:

NVIDIA-Linux-x86_64-410.93.run

卸載舊驅動

以下操作都需要在命令界面操作,執行以下快捷鍵進入命令界面,并登錄:

Ctrl-Alt+F1

執行以下命令禁用X-Window服務,否則無法安裝顯卡驅動:

sudo service lightdm stop

執行以下三條命令卸載原有顯卡驅動:

sudo apt-get remove --purge nvidia*
sudo chmod +x NVIDIA-Linux-x86_64-410.93.run
sudo ./NVIDIA-Linux-x86_64-410.93.run --uninstall

安裝新驅動

直接執行驅動文件即可安裝新驅動,一直默認即可:

sudo ./NVIDIA-Linux-x86_64-410.93.run

執行以下命令啟動X-Window服務

sudo service lightdm start

最后執行重啟命令,重啟系統即可:

reboot

注意: 如果系統重啟之后出現重復登錄的情況,多數情況下都是安裝了錯誤版本的顯卡驅動。需要下載對應本身機器安裝的顯卡版本。

卸載CUDA

為什么一開始我就要卸載CUDA呢,這是因為換了顯卡RTX2070,原本就安裝了CUDA 8.0 和 CUDNN 7.0.5不能夠正常使用,需要安裝CUDA 10.0 和 CUDNN 7.4.2,所以要先卸載原來的CUDA。注意以下的命令都是在root用戶下操作的。

卸載CUDA很簡單,一條命令就可以了,主要執行的是CUDA自帶的卸載腳本,讀者要根據自己的cuda版本找到卸載腳本:

sudo /usr/local/cuda-8.0/bin/uninstall_cuda_8.0.pl

卸載之后,還有一些殘留的文件夾,之前安裝的是CUDA 8.0。可以一并刪除:

sudo rm -rf /usr/local/cuda-8.0/

這樣就算卸載完了CUDA。

安裝CUDA

安裝的CUDA和CUDNN版本:

  • CUDA 10.0
  • CUDNN 7.4.2

接下來的安裝步驟都是在root用戶下操作的。

下載和安裝CUDA

我們可以在官網:CUDA10下載頁面,
下載符合自己系統版本的CUDA。頁面如下:

在這里插入圖片描述

下載完成之后,給文件賦予執行權限:

chmod +x cuda_10.0.130_410.48_linux.run

執行安裝包,開始安裝:

./cuda_10.0.130_410.48_linux.run

開始安裝之后,需要閱讀說明,可以使用Ctrl + C直接閱讀完成,或者使用空格鍵慢慢閱讀。然后進行配置,我這里說明一下:

(是否同意條款,必須同意才能繼續安裝)
accept/decline/quit: accept(這里不要安裝驅動,因為已經安裝最新的驅動了,否則可能會安裝舊版本的顯卡驅動,導致重復登錄的情況)
Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 410.48?
(y)es/(n)o/(q)uit: nInstall the CUDA 10.0 Toolkit?(是否安裝CUDA 10 ,這里必須要安裝)
(y)es/(n)o/(q)uit: yEnter Toolkit Location(安裝路徑,使用默認,直接回車就行)[ default is /usr/local/cuda-10.0 ]:  Do you want to install a symbolic link at /usr/local/cuda?(同意創建軟鏈接)
(y)es/(n)o/(q)uit: yInstall the CUDA 10.0 Samples?(不用安裝測試,本身就有了)
(y)es/(n)o/(q)uit: nInstalling the CUDA Toolkit in /usr/local/cuda-10.0 ...(開始安裝)

安裝完成之后,可以配置他們的環境變量,在vim ~/.bashrc的最后加上以下配置信息:

export CUDA_HOME=/usr/local/cuda-10.0
export LD_LIBRARY_PATH=${CUDA_HOME}/lib64
export PATH=${CUDA_HOME}/bin:${PATH}

最后使用命令source ~/.bashrc使它生效。

可以使用命令nvcc -V查看安裝的版本信息:

test@test:~$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2018 NVIDIA Corporation
Built on Sat_Aug_25_21:08:01_CDT_2018
Cuda compilation tools, release 10.0, V10.0.130

測試安裝是否成功

執行以下幾條命令:

cd /usr/local/cuda-10.0/samples/1_Utilities/deviceQuery
make
./deviceQuery

正常情況下輸出:

./deviceQuery Starting...CUDA Device Query (Runtime API) version (CUDART static linking)Detected 1 CUDA Capable device(s)Device 0: "GeForce RTX 2070"CUDA Driver Version / Runtime Version          10.0 / 10.0CUDA Capability Major/Minor version number:    7.5Total amount of global memory:                 7950 MBytes (8335982592 bytes)(36) Multiprocessors, ( 64) CUDA Cores/MP:     2304 CUDA CoresGPU Max Clock rate:                            1620 MHz (1.62 GHz)Memory Clock rate:                             7001 MhzMemory Bus Width:                              256-bitL2 Cache Size:                                 4194304 bytesMaximum Texture Dimension Size (x,y,z)         1D=(131072), 2D=(131072, 65536), 3D=(16384, 16384, 16384)Maximum Layered 1D Texture Size, (num) layers  1D=(32768), 2048 layersMaximum Layered 2D Texture Size, (num) layers  2D=(32768, 32768), 2048 layersTotal amount of constant memory:               65536 bytesTotal amount of shared memory per block:       49152 bytesTotal number of registers available per block: 65536Warp size:                                     32Maximum number of threads per multiprocessor:  1024Maximum number of threads per block:           1024Max dimension size of a thread block (x,y,z): (1024, 1024, 64)Max dimension size of a grid size    (x,y,z): (2147483647, 65535, 65535)Maximum memory pitch:                          2147483647 bytesTexture alignment:                             512 bytesConcurrent copy and kernel execution:          Yes with 3 copy engine(s)Run time limit on kernels:                     YesIntegrated GPU sharing Host Memory:            NoSupport host page-locked memory mapping:       YesAlignment requirement for Surfaces:            YesDevice has ECC support:                        DisabledDevice supports Unified Addressing (UVA):      YesDevice supports Compute Preemption:            YesSupports Cooperative Kernel Launch:            YesSupports MultiDevice Co-op Kernel Launch:      YesDevice PCI Domain ID / Bus ID / location ID:   0 / 1 / 0Compute Mode:< Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 10.0, CUDA Runtime Version = 10.0, NumDevs = 1
Result = PASS

下載和安裝CUDNN

進入到CUDNN的下載官網:https://developer.nvidia.com/rdp/cudnn-download ,然點擊Download開始選擇下載版本,當然在下載之前還有登錄,選擇版本界面如下,我們選擇cuDNN Library for Linux:\

在這里插入圖片描述

下載之后是一個壓縮包,如下:

cudnn-10.0-linux-x64-v7.4.2.24.tgz 

然后對它進行解壓,命令如下:

tar -zxvf cudnn-10.0-linux-x64-v7.4.2.24.tgz 

解壓之后可以得到以下文件:

cuda/include/cudnn.h
cuda/NVIDIA_SLA_cuDNN_Support.txt
cuda/lib64/libcudnn.so
cuda/lib64/libcudnn.so.7
cuda/lib64/libcudnn.so.7.4.2
cuda/lib64/libcudnn_static.a

使用以下兩條命令復制這些文件到CUDA目錄下:

cp cuda/lib64/* /usr/local/cuda-10.0/lib64/
cp cuda/include/* /usr/local/cuda-10.0/include/

拷貝完成之后,可以使用以下命令查看CUDNN的版本信息:

cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

測試安裝結果

到這里就已經完成了CUDA 10 和 CUDNN 7.4.2 的安裝。可以安裝對應的Pytorch的GPU版本測試是否可以正常使用了。安裝如下:

pip3 install https://download.pytorch.org/whl/cu100/torch-1.0.0-cp35-cp35m-linux_x86_64.whl
pip3 install torchvision

然后使用以下的程序測試安裝情況:

import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
import torch.backends.cudnn as cudnn
from torchvision import datasets, transformsclass Net(nn.Module):def __init__(self):super(Net, self).__init__()self.conv1 = nn.Conv2d(1, 10, kernel_size=5)self.conv2 = nn.Conv2d(10, 20, kernel_size=5)self.conv2_drop = nn.Dropout2d()self.fc1 = nn.Linear(320, 50)self.fc2 = nn.Linear(50, 10)def forward(self, x):x = F.relu(F.max_pool2d(self.conv1(x), 2))x = F.relu(F.max_pool2d(self.conv2_drop(self.conv2(x)), 2))x = x.view(-1, 320)x = F.relu(self.fc1(x))x = F.dropout(x, training=self.training)x = self.fc2(x)return F.log_softmax(x, dim=1)def train(model, device, train_loader, optimizer, epoch):model.train()for batch_idx, (data, target) in enumerate(train_loader):data, target = data.to(device), target.to(device)optimizer.zero_grad()output = model(data)loss = F.nll_loss(output, target)loss.backward()optimizer.step()if batch_idx % 10 == 0:print('Train Epoch: {} [{}/{} ({:.0f}%)]\tLoss: {:.6f}'.format(epoch, batch_idx * len(data), len(train_loader.dataset),100. * batch_idx / len(train_loader), loss.item()))def main():cudnn.benchmark = Truetorch.manual_seed(1)device = torch.device("cuda")kwargs = {'num_workers': 1, 'pin_memory': True}train_loader = torch.utils.data.DataLoader(datasets.MNIST('../data', train=True, download=True,transform=transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.1307,), (0.3081,))])),batch_size=64, shuffle=True, **kwargs)model = Net().to(device)optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.5)for epoch in range(1, 11):train(model, device, train_loader, optimizer, epoch)if __name__ == '__main__':main()

如果正常輸出一下以下信息,證明已經安裝成了:

Train Epoch: 1 [0/60000 (0%)]	Loss: 2.365850
Train Epoch: 1 [640/60000 (1%)]	Loss: 2.305295
Train Epoch: 1 [1280/60000 (2%)]	Loss: 2.301407
Train Epoch: 1 [1920/60000 (3%)]	Loss: 2.316538
Train Epoch: 1 [2560/60000 (4%)]	Loss: 2.255809
Train Epoch: 1 [3200/60000 (5%)]	Loss: 2.224511
Train Epoch: 1 [3840/60000 (6%)]	Loss: 2.216569
Train Epoch: 1 [4480/60000 (7%)]	Loss: 2.181396

參考資料
https://developer.nvidia.com
https://www.cnblogs.com/luofeel/p/8654964.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/532076.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/532076.shtml
英文地址,請注明出處:http://en.pswp.cn/news/532076.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

session.merge 緩存不更新_如何保證緩存與數據庫雙寫時的數據一致性?

在做系統優化時&#xff0c;想到了將數據進行分級存儲的思路。因為在系統中會存在一些數據&#xff0c;有些數據的實時性要求不高&#xff0c;比如一些配置信息。基本上配置了很久才會變一次。而有一些數據實時性要求非常高&#xff0c;比如訂單和流水的數據。所以這里根據數據…

java替換圖片中文字_Java 添加、替換、刪除Word中的圖片

文檔中&#xff0c;可以通過圖文混排的方式來增加內容的可讀性&#xff0c;相比純文本文檔&#xff0c;在內容展現方式上也更具美觀性。在給文檔添加圖片時&#xff0c;可設置圖片的文本環繞方式、旋轉角度、圖片高度/寬度等&#xff1b;另外&#xff0c;也可對文檔中已有的圖片…

kafka如何保證不重復消費又不丟失數據_Kafka寫入的數據如何保證不丟失?

我們暫且不考慮寫磁盤的具體過程&#xff0c;先大致看看下面的圖&#xff0c;這代表了 Kafka 的核心架構原理。Kafka 分布式存儲架構那么現在問題來了&#xff0c;如果每天產生幾十 TB 的數據&#xff0c;難道都寫一臺機器的磁盤上嗎?這明顯是不靠譜的啊!所以說&#xff0c;這…

不允許輸入特殊字符的正則表達式_JavaScript正則表達式常用技巧

正則表達式是用于匹配字符串中字符組合的模式。在 JavaScript 中&#xff0c;正則表達式也是對象。這些模式被用于 RegExp 的 exec 和 test 方法, 以及 String 的 match、matchAll、replace、search 和 split 方法。正則表達式的掌握程度能粗略地看出程序員的技術底子&#xff…

latex 算法_GitHub項目awesome-latex-drawing新增內容(四):繪制貝葉斯網絡

近期&#xff0c;我們整理和開源了一個基于LaTeX的科技繪圖項目&#xff0c;并將其取名為awesome-latex-drawing&#xff08;GitHub網址為&#xff1a;https://github.com/xinychen/awesome-latex-drawing&#xff09;&#xff0c;案例包括貝葉斯網絡、圖模型、矩陣/張量示意圖…

python123動物重量排序_python進階

面向對象oopclass Student(object):def __init__(self,name,score)self.name nameself.score scoredef print_score(self)print(%s: %s % (self.name,self.score))給對象發消息實際上就是調用對象對應的關聯函數&#xff0c;我們稱之為對象的方法(Method)。面向對象的程序寫出…

mysql中的生日應該是什么類型_MySQL中的定點數類型

上一篇文章我們嘮叨了浮點數&#xff0c;知道了浮點數存儲小數是不精確的。本篇繼續嘮叨一下MySQL中的另一種存儲小數的方式 —— 定點數。浮點數文章閃現&#xff1a;什么, 0.3 - 0.2 ≠ 0.1 ? 什么鬼定點數類型正因為用浮點數表示小數可能會有不精確的情況&#xff0c;在一些…

python怎么制作圖像_python數字圖像處理(5):圖像的繪制

實際上前面我們就已經用到了圖像的繪制&#xff0c;如&#xff1a;io.imshow(img)這一行代碼的實質是利用matplotlib包對圖片進行繪制&#xff0c;繪制成功后&#xff0c;返回一個matplotlib類型的數據。因此&#xff0c;我們也可以這樣寫&#xff1a;importmatplotlib.pyplot …

axios代理跨域 cli4_vuecli 3.0之跨域請求代理配置及axios路徑配置 莫小龍

vue-cli 3.0之跨域請求代理配置及axios路徑配置問題&#xff1a;在前后端分離的跨域請求中&#xff0c;報跨域問題配置&#xff1a;vue.config.js&#xff1a;module.exports {runtimeCompiler: true,publicPath: /, // 設置打包文件相對路徑devServer: {// open: process.pla…

string轉為char數組_StringBuilder的區別是什么?String是不可變?一點課堂(多岸學院)...

String和StringBuffer、StringBuilder的區別可變性簡單的來說&#xff1a;String 類中使用 final 關鍵字字符數組保存字符串&#xff0c;private final char value[]&#xff0c;所以 String 對象是不可變的。而StringBuilder 與 StringBuffer 都繼承自 AbstractStringBuild…

python去年軟件排行_2017年編程語言排行榜,Python位居榜首(C語言需求最大)

最近IEEE Spectrum 發布了編程語言交互式排行榜&#xff0c;為很多學習代碼的朋友們詳解各類代碼語言的需求和占有率。為學習代碼的朋友們能更加重視哪一種編程語言而有一個明確的方向。下面排行榜123網為你公布2017年編程語言排行榜,Python位居榜首(C語言需求最大)。2017年編程…

mysql test數據庫_mysql數據庫test

Re介紹一下CentOS下MySQL數據庫的安裝與配置方法MySQL數據庫配置的具體步驟&#xff1a;1、編輯MySQL的配置文件&#xff0c;使用vi /etc/my.cnf[rootsample ~]# vi /etc/my.cnf  ← 編輯MySQL的配置文件[mysqld]datadir/var/lib/mysqlsocket/var/lib/mysql/mysql.sock# Defau…

mysql 升級 openssl_【1分鐘教程】LNMP架構應用實戰 Openssl升級操作

由于實際生產環境需求&#xff0c;需要將LNMP環境中的openssl版本升級至目前最新版本openssl-1.1.0c&#xff0c;這玩意升級還真的不是一般的麻煩&#xff0c;由于它與系統各種服務都有相關的聯系&#xff0c;比如ssh服務等&#xff0c;因此&#xff0c;升級非常的繁瑣,所以今天…

miui秒解bl鎖_MIUI12解鎖bl篇(原諒我的過失,接上篇文章)

求原諒真心求原諒由于我的疏忽&#xff0c;上期教程不完整&#xff0c;對大家造成不便在這里給大家真誠道歉&#xff01;對不起&#xff01;請收下我的膝蓋&#xff01;&#xff01;&#xff01;我的上個教程小米手機MIUI系統降級任意版本通用教程&#xff0c;MIUI12→MIUI9因為…

腐蝕rust服務器命令_【使用 Rust 寫 Parser】2. 解析Redis協議

系列所有文章https://zhuanlan.zhihu.com/p/115017849?zhuanlan.zhihu.comhttps://zhuanlan.zhihu.com/p/139387293?zhuanlan.zhihu.comhttps://zhuanlan.zhihu.com/p/146455601?zhuanlan.zhihu.comhttps://zhuanlan.zhihu.com/p/186217695?zhuanlan.zhihu.com在基本熟悉 n…

python中dic_python之dic {字典}(重要指數*****)

1. 什么是字典{name: 汪峰, age: 18} 鍵:值 別的語言鍵值對數據鍵: 必須是可哈希(不可變的數據類型),并且是唯一的值: 任意可以保存任意類型的數據字典是無序的python3.6版本以上,默認定義了順序,python3.5以下是隨機顯示不能進?切片?作. 它只能通過key來獲取dict中的數據字典…

python裝飾器帶參數函數二階導數公式_一文搞定Python裝飾器,看完面試不再慌

本文始發于個人公眾號&#xff1a;TechFlow&#xff0c;原創不易&#xff0c;求個關注今天是Python專題的第12篇文章&#xff0c;我們來看看Python裝飾器。一段囧事差不多五年前面試的時候&#xff0c;我就領教過它的重要性。那時候我Python剛剛初學乍練&#xff0c;看完了廖雪…

centos7源碼安裝mysql報錯_CentOS7 下源碼安裝MySQL數據庫 8.0.11

本文主要向大家介紹了CentOS7 下源碼安裝MySQL數據庫 8.0.11&#xff0c;通過具體的內容向大家展現&#xff0c;希望對大家學習MySQL數據庫有所幫助。CentOS7 下源碼安裝MySQL 8.0.11系統環境&#xff1a;CentOS7&#xff0c; 內核&#xff1a;Linux 3.10.0-862.el7.x86_64如果…

python全排列問題_Python基于回溯法子集樹模板解決全排列問題示例

本文實例講述了Python基于回溯法子集樹模板解決全排列問題。分享給大家供大家參考&#xff0c;具體如下&#xff1a;問題實現 a, b, c, d 四個元素的全排列。分析這個問題可以直接套用排列樹模板。不過本文使用子集樹模板。分析如下&#xff1a;一個解x就是n個元素的一種排列&a…

file js new 傳到后臺_js 圖片上傳傳給后臺的3種格式

$("#imgfile").change(function () {var formData new FormData();$.each($(#imgfile)[0].files, function (i, file) {formData.set(idcard, file); //idcard 字段 根據自己后端接口定});//processData: false, contentType: false,多用來處理異步上傳二進制文件。…