# NVIDIA Driver 與 cuda 安裝
環境:
```
NAME="Ubuntu"
VERSION="20.04.6 LTS (Focal Fossa)"
GPU=NVIDIA Corporation GP102 [GeForce GTX 1080 Ti]
```
## 步驟
因為每次先裝好 driver 在裝 cuda,driver 就會壞掉,因此經過嘗試過後發現步驟要反過來。或是 driver 壞掉後重新安裝 driver 即可。
1. 刪除 NVIDIA 驅動
2. 安裝 cuda (先)
3. 安裝驅動 (後)
## 刪除 NVIDIA 驅動
如果使用官方 .run 檔案安裝過得話,可以在 .run 後面加上 --uninstall 將 driver 徹底移除,並透過下面的命令將檔案徹底刪除。
接著執行以下命令將 Driver 相關的檔案刪除
```
sudo apt-get --purge remove *nvidia*
sudo apt autoremove
```
如果要刪除已經安裝的 cuda ToolKit 的話可以執行以下命令
```
sudo apt-get --purge remove "*cublas*" "cuda*"
sudo apt autoremove
```
## 安裝 cuda
依照官網的教學安裝即可,不過要注意 cuda 版本與 driver 版本是否兼容。可透過 [CUDA Toolkit Release Notes](https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html) 查看兼容性。如果需要較舊版本的 cuda 可以從 [cuda-toolkit-archive](https://developer.nvidia.com/cuda-toolkit-archive) 挑選所需的版本。
## 安裝驅動
參考國網中心的 [教學](https://man.twcc.ai/@twccdocs/howto-vcs-install-nvidia-gpu-driver-zh)。注意:要將 Ubuntu 內建的 GPU 驅動(nouveau)關閉。
## 驗證
檢查 driver 是否安裝成功
```
nvidia-smi
```
檢查 cuda ToolKit 是否安裝成功
```
/usr/local/cuda/bin/nvcc --version
```
檢查是否抓的到 GPU
```cpp
// 檔名:main.c
#include <cuda_runtime.h>
int main() {
int deviceCount = 0;
cudaError_t error_id = cudaGetDeviceCount(&deviceCount);
if (error_id != cudaSuccess) {
std::cout << "cudaGetDeviceCount returned " << static_cast<int>(error_id) << "\n";
std::cout << "-> " << cudaGetErrorString(error_id) << "\n";
std::cout << "CUDA is not available." << std::endl;
return 1;
}
if (deviceCount == 0) {
std::cout << "There are no available device(s) that support CUDA." << std::endl;
} else {
std::cout << "Detected " << deviceCount << " CUDA-capable device(s)." << std::endl;
}
return 0;
}
```
編譯
```
nvcc -o main main.c
./main
```
## 參考資料
* https://medium.com/@wumeng9028/how-to-uninstall-nvidia-driver-and-install-the-latest-driver-in-ubuntu-96c0b2dc4cc4
* https://forums.developer.nvidia.com/t/how-do-i-completly-remove-an-nvidia-driver-by-hand/238053
* https://man.twcc.ai/@twccdocs/howto-vcs-install-nvidia-gpu-driver-zh