1. 准备一台GPU服务器
OS: ubuntu 20.04
实例规格:4vCPU 16GiB
主机名:test-t4
远程登录刚建好的ecs,运行nvidia-smi查看GPU信息,发现有一张telsa T4卡,驱动版本为470.57.02,CUDA库版本为11.4(此信息不准,公共镜像没有预装cuda库)。
2. 下载Anaconda
访问Anaconda官网,查找最新版linux安装包链接
命令行中运行以下命令下载最新版Anaconda3-2022.05
wget -P /gpu https://repo.anaconda.com/archive/Anaconda3-2022.05-Linux-x86_64.sh
2.1 验证包的完整性
验证下载完成的安装包完整性
先去官方文档找到安装包的hash值为a7c0afe862f6ea19a596801fc138bde0463abcbce1b753e8d5c474b506a2db2d
接下来用sha256sum命令计算已下载文件的哈希值,与官方值进行比对,发现完全一致,表示安装包已完整下载。
root@test-t4:/gpu# sha256sum Anaconda3-2022.05-Linux-x86_64.sh
a7c0afe862f6ea19a596801fc138bde0463abcbce1b753e8d5c474b506a2db2d Anaconda3-2022.05-Linux-x86_64.sh
运行脚本启动安装进程,一路ENTER,或yes,1分钟左右即可完成安装。
bash /gpu/Anaconda3-2020.02-Linux-x86_64.sh
Welcome to Anaconda3 2020.02
In order to continue the installation process, please review the license
agreement.
Please, press ENTER to continue
>>>
完成安装后,重新启动命令行,重新加载环境变量。输入conda命令,确认为可用状态。
3.安装pytorch
3.1创建conda虚拟环境
为pytorch创建一个独立的conda环境,环境名pytorchtest,python解析器版本3.9
conda create -n pytorchtest python=3.9
创建成功,输出如下
(base) root@test-t4:~# conda create -n pytorchtest python=3.9
Collecting package metadata (current_repodata.json): done
Solving environment: done
##省略若干行##
environment location: /root/anaconda3/envs/pytorchtest
added / updated specs:
- python=3.9
##省略若干行##
The following NEW packages will be INSTALLED:
_libgcc_mutex pkgs/main/linux-64::_libgcc_mutex-0.1-main
_openmp_mutex pkgs/main/linux-64::_openmp_mutex-5.1-1_gnu
ca-certificates pkgs/main/linux-64::ca-certificates-2022.4.26-h06a4308_0
certifi pkgs/main/linux-64::certifi-2022.5.18.1-py39h06a4308_0
ld_impl_linux-64 pkgs/main/linux-64::ld_impl_linux-64-2.38-h1181459_1
libffi pkgs/main/linux-64::libffi-3.3-he6710b0_2
libgcc-ng pkgs/main/linux-64::libgcc-ng-11.2.0-h1234567_1
libgomp pkgs/main/linux-64::libgomp-11.2.0-h1234567_1
libstdcxx-ng pkgs/main/linux-64::libstdcxx-ng-11.2.0-h1234567_1
ncurses pkgs/main/linux-64::ncurses-6.3-h7f8727e_2
openssl pkgs/main/linux-64::openssl-1.1.1o-h7f8727e_0
pip pkgs/main/linux-64::pip-21.2.4-py39h06a4308_0
python pkgs/main/linux-64::python-3.9.12-h12debd9_1
readline pkgs/main/linux-64::readline-8.1.2-h7f8727e_1
setuptools pkgs/main/linux-64::setuptools-61.2.0-py39h06a4308_0
sqlite pkgs/main/linux-64::sqlite-3.38.3-hc218d9a_0
tk pkgs/main/linux-64::tk-8.6.12-h1ccaba5_0
tzdata pkgs/main/noarch::tzdata-2022a-hda174b7_0
wheel pkgs/main/noarch::wheel-0.37.1-pyhd3eb1b0_0
xz pkgs/main/linux-64::xz-5.2.5-h7f8727e_1
zlib pkgs/main/linux-64::zlib-1.2.12-h7f8727e_2
Proceed ([y]/n)? y
Downloading and Extracting Packages
##省略若干行##
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
#
# To activate this environment, use
#
# $ conda activate pytorchtest
#
# To deactivate an active environment, use
#
# $ conda deactivate
进入pytorch的conda环境
conda activate pytorchtest
3.2安装pytorch
复制pytorch官方推荐安装命令
conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c pytorch
进入pytorch conda环境后运行pytorch安装命令
3.3 pytorch下载0进度问题解决办法
出现一个问题,pytorch安装包无法下载,进度一直为0%
这里需要更换为清华源,方法为逐条执行以下命令。
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/menpo/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/
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/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
运行官网推荐命令时,去掉末尾的-c pytorch
conda install pytorch torchvision torchaudio cudatoolkit=11.3
顺利安装完成。
验证pytorch是否安装成功,在conda环境中进python命令行模式,输入import torch,如不报错,代表pytorch安装成功。下图代表pytorch已安装成功。
3.4 cuda和pytorch版本不适配问题解决
torch.cuda.is_available()输出为false,说明cuda无法开启。经查询,从清华源默认安装的pytorch版本比较老1.7.1,无法适配cuda版本11.3。
卸载已安装的pytorch torchvision torchaudio cudatoolkit等安装包
conda uninstall pytorch
conda uninstall cudatoolkit=11.3
重新指定版本安装
conda install pytorch=1.11.0 torchvision=0.12.0 torchaudio=0.11.0 cudatoolkit=11.3
验证pytorch版本
print(torch.__version__)根据输出发现pytorch版本已正确安装。
(pytorchtest) root@test-t4:~# python
Python 3.9.12 (main, Jun 1 2022, 11:38:51)
[GCC 7.5.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> print(torch.__version__)
1.11.0
>>> torch.cuda
<module 'torch.cuda' from '/root/anaconda3/envs/pytorchtest/lib/python3.9/site-packages/torch/cuda/__init__.py'>
>>> torch.cuda.is_available()
False
torch.cuda.is_available()还是false
3.5 清华源默认推送cpu版本pytorch问题解决
conda list发现,上面的pytorch默认安装的是cpu版,需要安装cuda版
用清华源安装pytorch及相关组件时,会默认推送cpu版本,而我们需要gpu版本的安装包。从网上查询资料找到解决方法,先安装cpuonly这个包,然后卸载cpuonly,卸载过程中,会自动将原来安装的cpu版本的包替换成gpu版本。
conda install cpuonly
conda uninstall cpuonly
卸载cpuonly过程打印的部分片段,可以看出pytorch-1.11.0,torchvision-0.12.0 两个关键的包被替换成gpu(cuda)版。
(pytorchtest) root@test-t4:~/anaconda3/pkgs# conda uninstall cpuonly
Collecting package metadata (repodata.json): done
Solving environment: done
## Package Plan ##
environment location: /root/anaconda3/envs/pytorchtest
removed specs:
- cpuonly
The following packages will be downloaded:
package | build
---------------------------|-----------------
ffmpeg-4.2.2 | h20bf706_0 59.6 MB https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
intel-openmp-2021.4.0 | h06a4308_3561 4.2 MB https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
jpeg-9b | 0 941 KB https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
libopus-1.3.1 | h7b6447c_0 491 KB https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
libtiff-4.1.0 | h2733197_1 449 KB https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
libuv-1.40.0 | h7b6447c_0 736 KB https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
libvpx-1.7.0 | h439df22_0 1.2 MB https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
libwebp-1.2.0 | h89dd481_0 493 KB https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
mkl-2021.4.0 | h06a4308_640 142.6 MB https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
mkl-service-2.4.0 | py39h7f8727e_0 59 KB https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
mkl_fft-1.3.1 | py39hd3c417c_0 182 KB https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
mkl_random-1.2.2 | py39h51133e4_0 309 KB https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
numpy-1.22.3 | py39he7a7128_0 10 KB https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
numpy-base-1.22.3 | py39hf524024_0 5.4 MB https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
pytorch-1.11.0 |py3.9_cuda11.3_cudnn8.2.0_0 1.02 GB https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch
torchvision-0.12.0 | py39_cu113 9.2 MB https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch
x264-1!157.20191217 | h7b6447c_0 922 KB https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
zstd-1.4.9 | haebb681_0 480 KB https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
------------------------------------------------------------
Total: 1.24 GB
安装完成后,conda list发现pytorch,torchvision版本变为gpu版本,torch.cuda.is_available()结果变为True!
4. 安装jupyter notebook
4.1 安装和配置
为了提高python数学计算的便捷性,jupyter notebook是比较好的工具。
conda install nb_conda -y
#生成配置文件
jupyter notebook --generate-config
#设置密码
jupyter notebook password
#修改配置文件
vim /root/.jupyter/jupyter_notebook_config.py
修改下方参数的值。切记:参数名前面不能留空格,否则会报“unexpected indent”错误。
c.NotebookApp.ip = '*'。#不限制访问IP
c.NotebookApp.open_browser = False
c.NotebookApp.port = 8888
c.NotebookApp.allow_root =True
增加安全组规则,放开8888端口
4.2 运行jupyter notebook
本地用浏览器打开http://180.184.77.192:8888/,输入上面设置的密码,即可开始使用jupyter notebook
5 对比CPU和T4的矩阵乘法运算速度
- 使用 torch.mm(a,b)来处理N阶二维矩阵乘法,引入计时器time.time(),统计CPU和GPU的计算耗时。
- 目标是计算N阶随机矩阵的乘法,并对比cpu和T4的计算速度。
5.1 python代码
import torch
import time
N = 100 #定义矩阵的维度
# 生成两个N维随机矩阵,load到CPU
a = torch.randn(N,N)
b = torch.randn(N,N)
# 生成两个N维随机矩阵,load进T4
cuda = torch.device("cuda:0")
c = a.to(cuda)
d = b.to(cuda)
cpu_start= time.time()
x= torch.mm(a,b)
cpu_end= time.time()
print("cpu time cost: ",cpu_end-cpu_start,'s')
gpu_start= time.time()
y= torch.mm(c,d)
gpu_end= time.time()
print("T4 time cost: ",gpu_end-gpu_start,'s')
其中N为方阵的阶数,设置不同的N,观测耗时结果。本次测试N取值为100,500,1000,5000,10000。
5.2 测试结果
矩阵阶数 | cpu time cost(秒) | gpu time cost(秒) |
100 | 0.0003 | 0.0005 |
500 | 0.0015 | 0.0006 |
1000 | 0.0127 | 0.0004 |
5000 | 1.0003 | 0.0005 |
10000 | 7.478 | 0.0007 |
- 100阶矩阵的乘法运算速度,cpu和T4都是百微秒级,多次重复测试发现,CPU略快于GPU;
- 阶数为500时,cpu的耗时增长到毫秒级,而T4仍然微秒级,cpu耗时比T4大;
- 阶数越大,cpu耗时增长越多
随着阶数增长,耗时变化图如下所示
6 总结
- 计算量非常小时,CPU比GPU更快,因为计算时间可能比CPU到GPU的数据拷贝时间还短。
- 计算量越大,GPU的优势越明显。
- pytorch,cuda和gpu驱动三者版本需要适配,pytorch才能正常调用GPU算力。
- 清华源安装软件包时,必须指定版本,指定类型(CPU/GPU)。
以上是深度学习的基础环境部署和验证。
欢迎大家评论交流!
本文暂时没有评论,来添加一个吧(●'◡'●)