---
title: 簡單在ubuntu 安裝CUDA/cudnn/tensorflow-gpu/keras/pytorch
tags: ubuntu, pytrch, keras, cudnn, cuda, tensroflow-gpu, AI, ML, DL, 環境
---
## 目的
- 未來要使用建置在tensroflow或者pytorch上面的任何framework時,能使用GPU幫忙運算加速
## 準備安裝項目
- pyenv (開發環境)
- vscode (個人偏好的IDE)
- cuda
- cuda-toolkit
- cudnn
### python需安裝套件
- keras (基於tensorflow 的高階 api)
- tensorflow (AI framework有GPU版)
- keras-bert (能使用keras來玩nlp的一個套件包)
- bert-tensorflow (能使用tensorflow來玩nlp的一個套件包)
- nltk (自然語言套件包 幫忙分析字詞的)
- jieba (中文自然語言套件包 幫忙分析中文字詞的)
- sklearn (Machine Learning 的套件包)
- pytorch
- pandas==0.22.0(版本記得是這個)
- numpy
### pyenv 使用方法
`使用原因: python 有很多版本 很多套件 pyenv 可以建立不同pthon須環境 也可以在不同環境中安裝不同套件 難過的是 windows 沒有 pyenv 可以用 pyenv 開發者說他不用windows XD 以下是開發者的話`
`I'm no longer using Windows. I don't like to waste my time with such thing.`
- 安裝
- 再裝以前先將apt更新
- `sudo apt-get update`
- git
- pyenv有提供快速安裝 但要從git上載下來 所以先安裝git
- `sudo apt install git`
- 安裝curl
- `sudo apt install curl`
- 再來從 git 上把它拿下來
- `curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash`
- 將產生出來的環境變量加入 ~/.bashrc 中
- 
- 最後 reboot
- 使用
- 可以使用 pyenv install 來安裝你所需要的python版本
- `pyenv install 3.6.8` 3.6.8 很穩定 [name=yeamao][time=2019]
`如果install 不起來試試看輸入這行指令`
` sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev `
- 用 pyenv version 看目前版本
- 用 pyenv versions 看目前下載了那些版本
- 用 pyenv virtualenv `版本` `虛擬環境名` 創建虛擬的python 虛擬環境
- 你所建立的虛擬環境會在 .pyenv/version裡面
- 用 pyenv activate `虛擬環境名` 激活你的虛擬環境
- 用 pyenv deactivate 離還虛擬環境
- 用 pyenv uninstall `虛擬環境名` 刪掉你的虛擬環境
## python 安裝
- 基本上由於會安裝蠻多套件的,會建議寫一個requirement.txt,然後再一次install完,之後需要的套件都寫在裡面,到另一個環境也可以直接使用這個 requirement.txt 安裝
### 安裝套件前
- 先進入你的指定虛擬環境或者建立一個虛擬環境
`pyenv activate yeamao`
### keras
- 在pip下來以下這兩個套件
`pip install keras`
`pip install tensorflow`
`pip install keras-bert`
`pip install bert-tensorflow`
- 這樣基本下來你就可以使用keras了 不過在這個階段會是使用cpu在run的
:::info
keras 有支援bert 快速開發的話可以使用這個 `keras-bert`
:::
### nltk jieba
`以上這兩個套件是自然語言分析裡面常會用到的工具,後者那個套件,針對中文文本斷詞有很好的效果`
### pandas numpy
`以上這兩個工具,是非常好用的數據處理工具與科學運算工具`
---
# GPU 部分
### CUDA
- 下載 CUDA-Toolkit 10.0 (目前的tensorflow最高支援到 cuda 10.0 你也可以試9.0)
- 到cuda toolkit 10.0 archive 下載(dev local) (大約30min ~ 1hr)
- 稍微更改一下你下載的檔案名字讓他短一點等等好執行(我改成 cuda.deb)
- 使用dpkg將它安裝起來
- `sudo dpkg -i cuda.deb`
- 指令完成後使用他產生的 commend 來安裝 (大概像`sudo apt-key add....`)
- 然後在執行一次一開始的指令
- `sudo dpkg -i cuda.deb`
- 更新一下你的apt
- `sudo apt update` 更新時應該會看到 cuda 10 等等的資訊出現
- 再來就安裝cuda
`sudo apt install cuda`
- reboot
- 下載 nvidia-cuda-toolkit
`sudo apt install nvidia-cuda-toolkit`
- reboot
- 現在你可以使用 nvcc -V 與 stat cuda 應該會看到你目前的版本
- 你也可以使用 nvidia-smi來看看你是否已經裝了你的顯卡驅動
:::info
### 排解疑難
遇到情況
nvcc -V 的結果是 compilation tools, release 7.5 V7.5.17
stat cuda 指到的卻是 10.0
解決方法
到 /usr/local 把cuda整個砍掉,用以下指令建一個新的(我裝的是10.0版)
`sudo ln -s /usr/local/cuda-10.0 /usr/local/cuda`
去確認`cat /usr/local/cuda/version.txt`給你的東西是不是10.0(卻認為10.0版)
將以下的環境變數加入 ~/.bashrc中
`export PATH=/usr/local/cuda/bin:$PATH`
`export LD_LIBRARY_PATH=/usr/local/cuda/lib64$LD_LIBRARY_PATH`
`export CUDA_HOME=/usr/local/cuda`
最後 `source ~/.bashrc`
再去查看nvcc顯示的是否為正確版本
[參照連結](https://www.jianshu.com/p/6a6fbce9073f)
:::
### cudnn
- 去nvidia官網將cudnn載下來
- 去Download解壓縮這個檔案
- 接下來參照官方網站的
- 
[參照連結](https://docs.nvidia.com/deeplearning/sdk/cudnn-install/index.html)
### GPU 使用
- pytorch
- pytorch對於GPU環境十分友善
- 有指令叫torch.cuda()
- 你也可以用這個連結來去試試看cuda與GPU是否成功在你的電腦使用[參考](https://blog.csdn.net/nima1994/article/details/83001910)
- keras
- keras是基於tensorflow的高階API,所以如果keras要使用GPU那就要將原本的tensorflow移除,然後重新安裝tensorflow-gpu
### 檢測 GPU
- 透過print(tnesorflow.python.client.device_lib) 就會看到妳的tensorflow 正確抓到了GPU了
- 根據參考你也可以使用他的方法來抓抓看是否有使用到GPU [另外參考](https://blog.csdn.net/castle_cc/article/details/78389082)
---
### 額外加裝 Docker
由於Docker是個業界常用的工具,提供了一個很方便的虛擬環境來給你執行,而且docker也可以支援使用GPU,我們就順便把它裝起來吧
- 首先透過 `uname -a` 或者 `lsb_release -a` 是否為正確版本(目前我用ubuntu 16.04)
- 再來先更新 `sudo apt-get update`
- 安裝docker 過程中我使用了 ssl 確保安全 `sudo -ssl curl https://get.docker.com | sh` 直接下載docker官方的腳本下來安裝
- 你也可以透過apt-get安裝 `sudo apt-get install docker.io`
- 透過 service docker status 來查看是否正確安裝