本文提供一个极简一步步安装 CUDA&Python&Pytorch 示例,此示例基于 Ubuntu18.04,Ubuntu16 及 Windows10 可以参考此示例做相应修改。
准备
示例环境:
Ubuntu18.04
需要安装的工具有:
- 英伟达驱动(连接 GPU 与主机)
- CudaToolKit(GPU 加速依赖)
- Miniconda(安装 Python 与管理 Python 环境)
- Pytorch、TensorFlow 与 MXNet 的 GPU 版本安装
操作
安装英伟达驱动
Ubuntu18.04:Bash 运行
sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
wget http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb
sudo apt install ./nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb
sudo apt-get install --no-install-recommends nvidia-driver-450
Ubuntu16.04:Bash 运行
sudo apt-get install gnupg-curl
sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
wget http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1604/x86_64/nvidia-machine-learning-repo-ubuntu1604_1.0.0-1_amd64.deb
sudo apt install ./nvidia-machine-learning-repo-ubuntu1604_1.0.0-1_amd64.deb
sudo apt-get install --no-install-recommends nvidia-418
然后重启系统,运行 nvidia-smi 看是否正确运行出如下界面:下面只是示例,应该 NVIDIA-SMI 后版本与上面安装的一致(nvidia-driver-450)
安装 CudaToolKit
以 cuda11.0,Ubuntu18.04 举例
- 百度搜索:cuda11.0
点击第一个链接进入(如果无法打开请科学上网解决):CUDA Toolkit 11.0 Download | NVIDIA Developer
Ubuntu16.04 以此选择:Linux->x86_64->Ubuntu->16.04->deb(local)
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-ubuntu1604.pin
sudo mv cuda-ubuntu1604.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget http://developer.download.nvidia.com/compute/cuda/11.0.2/local_installers/cuda-repo-ubuntu1604-11-0-local_11.0.2-450.51.05-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1604-11-0-local_11.0.2-450.51.05-1_amd64.deb
sudo apt-key add /var/cuda-repo-ubuntu1604-11-0-local/7fa2af80.pub
sudo apt-get -y install cuda
Ubuntu18.04 以此选择:Linux->x86_64->Ubuntu->18.04->deb(local),如图所示,复制 Installation Instructions 使用 Bash 执行:
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin
sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget http://developer.download.nvidia.com/compute/cuda/11.0.2/local_installers/cuda-repo-ubuntu1804-11-0-local_11.0.2-450.51.05-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1804-11-0-local_11.0.2-450.51.05-1_amd64.deb
sudo apt-key add /var/cuda-repo-ubuntu1804-11-0-local/7fa2af80.pub
sudo apt-get -y install cuda
小宋说:这一步主要会出问题的是第三步,这一步是下载完整安装包,2GB 左右。熟悉 Bash 指令小伙伴可以知道其实这是下载 developer.download.nvidia.com/compute/cud… 这个链接文件的指令。这一步可以使用迅雷等工具复制链接加速下载,后复制到 bash 运行路径下(第三步就不用再 bash 下执行了),后执行第四步安装。
Miniconda 安装
建议使用清华源,地址:mirrors.tuna.tsinghua.edu.cn/anaconda/mi…
网页翻到最后,下载对应系统下最新版即可(注意选择 x86_64 后缀):Miniconda3-py38_4.9.2-Linux-x86_64.sh
下载后使用在 bash 下执行一下(注意文件所在路径):
bash Miniconda3-py38_4.9.2-Linux-x86_64.sh
遇到选项属于 Yes,其他默认即可。安装完成后新建一个 Terminal,然后 conda 才会生效。
Pytorch 与 TensorFlow 的 GPU 版本安装
参照:『技术随手学』pip conda 替换清华源 Windows 与 Ubuntu 通用
- 首先对 conda 与 pip 换国内源用以加速,bash 执行
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --append channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/fastai/
conda config --append channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
conda config --append channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/
conda config --set show_channel_urls yes
如果以下步骤遇到 CondaHTTPError: HTTP 000 CONNECTION FAILED 问题,可以参考这个博客解决:
『技术随手学』解决 windows 与 ubuntu 平台 CondaHTTPError: HTTP 000 CONNECTION FAILED 问题
- 使用 conda 创建一个深度学习 Python 环境,bash 执行:
conda create -n dl_py37 python=3.7
后激活 Python 环境,注意如果执行后 (base) root@b9fc5be9c7f1:# -> (dl_py37) root@b9fc5be9c7f1:#
conda activate dl_py37
- 安装 Pytoch1.7,bash 执行(建议 cudatoolkit 使用 10.1 用来支持 TensorFlow2.3):
conda install pytorch torchvision torchaudio cudatoolkit=10.1
- 安装 TensorFlow,bash 执行(注意 tensorflow==2.3,是 ==,tensorflow2.3 已经默认支持 GPU,所以不用指定):
pip install tensorflow==2.3
- 安装 MXNet,bash 执行(注意 cu101 代表是 cudatoolkit=10.1):
pip install mxnet-cu101==1.7
- 测试 Pytorch、TensorFlow 与 MXNet
参照:『AI 实践学』测试深度学习框架 GPU 版本是否正确安装方法: TensorFlow,PyTorch,MXNet,PaddlePaddle
1)TensorFlow
TensorFlow1.x 与 TensorFlow2.x 测试方法是一样的,代码如下:
print(tf.test.is_gpu_available())
上述代码保存为. py 文件,使用需要测试环境即可运行,输出:上面是一下 log 信息,关键的是的最后 True,表示测试成功
2020-09-28 15:43:03.197710: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
2020-09-28 15:43:03.204525: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library nvcuda.dll
2020-09-28 15:43:03.232432: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1618] Found device 0 with properties:
name: GeForce RTX 2070 with Max-Q Design major: 7 minor: 5 memoryClockRate(GHz): 1.125
2020-09-28 15:43:03.235352: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudart64_100.dll
2020-09-28 15:43:03.242823: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cublas64_100.dll
2020-09-28 15:43:03.261932: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cufft64_100.dll
2020-09-28 15:43:03.268757: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library curand64_100.dll
2020-09-28 15:43:03.297478: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cusolver64_100.dll
2020-09-28 15:43:03.315410: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cusparse64_100.dll
2020-09-28 15:43:03.330562: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudnn64_7.dll
2020-09-28 15:43:03.332846: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1746] Adding visible gpu devices: 0
2020-09-28 15:43:05.198465: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1159] Device interconnect StreamExecutor with strength 1 edge matrix:
2020-09-28 15:43:05.200423: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1165] 0
2020-09-28 15:43:05.201540: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1178] 0: N
2020-09-28 15:43:05.203863: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1304] Created TensorFlow device (/device:GPU:0 with 6306 MB memory) -> physical GPU (device: 0, name: GeForce RTX 2070 with Max-Q Design, pci bus id: 0000:01:00.0, compute capability: 7.5)
上面是一下 log 信息,关键的是的最后 True,表示测试成功。其实我们还可以发现很多 GPU 信息
GPU 型号:name: GeForce RTX 2070 with Max-Q Design
cuda 版本:Successfully opened dynamic library cudart64_100.dll(10.0)
cudnn 版本:Successfully opened dynamic library cudnn64_7.dll(7.x)
GPU 数目:Adding visible gpu devices: 0(1)
GPU 显存:/device:GPU:0 with 6306 MB memory(8G)
2)PyTorch
PyTorch 与 TensorFlow 测试方法类似,都有 GPU 测试接口。PyTorch 的 GPU 测试代码如下:
print(torch.cuda.is_available())
上述代码保存为. py 文件,使用需要测试环境即可运行,输出:True,表示测试成功
True
可以看出 PyTorch 输出信息简洁很多。其实 TensorFlow 的 log 信息输出也是可以控制的。
3)MXNet
MXNet 与 PyTorch,TensorFlow 测试方法不同,由于 MXNet'没有 GPU 测试接口(或者说笔者没有找到)。所以 MXNet 的 GPU 测试代码采用 try-catch 捕捉异常的方法来测试,代码如下:
_ = mx.nd.array(1,ctx=mx.gpu(0))
上述代码保存为. py 文件,使用需要测试环境即可运行,输出:True,表示测试成功