最近公司需要自己組裝3090顯卡,記錄一下裝機踩的坑。
首先安裝Ubantu20.04,進入系統后有配置顯卡所需環境有幾個需要注意的地方:
一、網絡設置
機器沒有無線網卡只能使用usb共享手機熱點聯網;需要買外接網卡
chrome瀏覽器安裝
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo dpkg -i google-chrome-stable_current_amd64.deb
二、關鍵軟件安裝
anaconda
cuda
cudnn
tensorflow
pytorch
1.anaconda
Anaconda是一個python環境的管理工具,使用它可以很方便對不同python版本的軟件進行管理,所以首先安裝anaconda
下載安裝軟件,可以從
https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/
下載各個歷史版本的anaconda,我下載的是Anaconda3-5.2.0-Linux-x86_64.sh
下載好之后直接放到ubantu中運行,根據提示選擇就行
環境變量配置
安裝的過程中會提示自動將安裝路徑加入到.bashrc文件中,所以安裝好后需要使用
source ~/.bashrc
刷新環境變量。
Anaconda一個非常重要的功能就是可以創建不同的python虛擬環境,使用
Conda info —env命令查看當前環境
然后使用conda create -n tf1 python=3.6創建一個tf1的虛擬環境
之后可以用conda activate 和deactivate命令開啟和關閉虛擬環境
也可以用conda env remove -n xxx 刪除某一個虛擬環境
同樣的方法創建tf2,以及putorch+python3.8環境
需要注意的是,后面每個虛擬環境里安裝軟件包則需要用pip命令,而不是conda命令,避免和其他環境起沖突。
一個技巧,在下載包的時候可以加上國內的源,加快下載安裝的進度,需要配置vim /etc/pip.conf
在文件里編輯:
[global]
Trusted-host = mirrors.aliyun.com
index_url = http://mirrors.aliyun.com/simple
2.CUDA+CUDNN
CUDA是一種由NVIDIA推出的通用並行計算架構,該架構使GPU能夠解決復雜的計算問題。 NVIDIA cuDNN是用於深度神經網絡的GPU加速庫。
從官方安裝指南可以看出,只要把cuDNN文件復制到CUDA的對應文件夾里就可以,即是所謂插入式設計,把cuDNN數據庫添加CUDA里,cuDNN是CUDA的擴展計算庫,不會對CUDA造成其他影響。
一般來說,不同系列的顯卡需要安裝不同的CUDA,網上最新的資料都說3090需要安裝最新的CUDA11.1以及配套的CUDNN8.0.5
從Nvidia官網上下載和操作系統對應的軟件
從網上的各種資料看,大部分主流的資料都說3090的顯卡需要cuda11.1加上cudnn8,然后tensorflow則需要配最新的tf2.5;還有部分資料說當前匹配不了cuda11.1,需要安裝cuda11.0
但是由於已經習慣使用tf1.x版本,發現需要使用cuda10.0和cudnn7。
所以不確定哪個版本真正的可以使用3090,於是把3個版本都下載下來,然后安裝3個版本,通過命令行切換軟鏈接。安裝cuda的時候根據提示就行,然后就是安裝完成后配置環境變量,再把cudnn的相關文件根據網站的提示加到指定的位置。
需要注意的是不同的cuda版本是使用不同版本的gcc編譯的,在安裝的過程中還要對gcc進行升級和降級的操作。
還有一種方案是直接在anaconda的虛擬環境中安裝不同版本的cuda,需要把真實環境中的cuda先卸載掉,這個方案也很靈活,但是我已經安裝了cuda,也就沒用這個方案了。
最終可以使用nvidia-smi查看gpu驅動的情況
然后使用nvcc -V查看當前的cuda版本
cat cuda/include/cudnn_version.h |grep ^# 查看cudnn版本
3.測試是否使用gpu加速
主要需要確認一下幾個步驟:
(1)tensorflow能否檢測到gpu設備
Import tensor flow as tf
print(tf.test.is_gpu_available())
如果為true表示tensorflow安裝成功,且能檢測到gpu設備
(2)跑訓練模型查看日志是否加載cudnn的lib64的相關文件,如果沒有加載則說明tensorflow版本和cuda版本不匹配
(3)使用nvidia-smi命令監控gpu的利用率,注意是利用率,因為程序跑通可能會占用gpu內存,但是如果沒有看到gpu利用率發生變化則也可能是存在問題的。
三、BERT微調以及預訓練測試
BERT微調主要包括以下幾個步驟:下載預訓練好的bert模型文件;准備微調的文本;加載模型進行微調。
此次微調使用的是哈工大的預訓練好的中文bert文件,微調的文本則是做測試用的情感識別的二分類以及句子相似度任務的分類。

上圖是對二分類任務的微調測試,框架使用的是tensorflow2.5,文本按照每條句子進行輸入,跑一條句子是時間平均下來為360ms,與網上相關文章對比發現性能有點偏慢,可能是因為加上了對原始文本進行分詞的時間。
上圖則是一個句子相似度任務的微調測試,每條句子用時差不多268ms,時間比分類任務
少,原因是輸入的文本更短。
由於tensorflow2.0以上版本變化太大,不能很好地兼容bert預訓練任務,於是使用pytorch對文本進行預訓練任務測試,測試文本使用的是86000條新聞標題短文本,訓練過程如下圖:

跑完一個完整的數據大概需要68分鍾,每條數據大概46ms,對比網上1080ti每條216ms快了差不多5倍。
