用UOS有点奇特,我申请了快半年的测试申请,没理我,偶然情况下得到一份UOS的ISO,然后就是一系列的故事,昨天的事,默认居然锁了超级用户权限,必须进开发者模式,进开发者模式必须试用激活,还必须用个人帐号登陆,反正弄得很罗嗦的事,Deepin15.11基于Debian9,UOS刚开把我弄懵了,设备管理器上居然是Debian8.3.2,居然取的是Debian的编译编译器的版本好,不是Debian的发行版的号,我还去论坛抱怨了一下,闹了个乌龙,节操掉了一地。我正好是1080TI卡,正好试试CUDA的配置,下面记录一下折腾过程,估计后期UOS的用户也会有用作深度学习的,希望我踩的坑别人不要踩第二遍。
1、更新PCIID信息,主要是看看卡能不能正常识别
sudo update-pciids
2、查看显卡信息
sudo lspci | grep -i nvidia
正常应该看到如下信息
01:00.0 VGA compatible controller: NVIDIA Corporation GP102 [GeForce GTX 1080 Ti] (rev a1)
01:00.1 Audio device: NVIDIA Corporation GP102 HDMI Audio Controller (rev a1)
3、安装个编辑器,我喜欢用这个。
sudo apt install gedit -y
4.禁用开源驱动
sudo gedit /etc/modprobe.d/blacklist.conf
打开后估计是个空白文件,把下面的内容拷贝进去:
blacklist nouveau
options nouveau modeset=0
5、安装辅助文件,主要是update-initramfs会有Warning 安不安装都无所谓,g++编译器要装,debian10.3默认是8.3版本的g++和gcc,默认安装中没有g++所以要安装,可以把gcc-7的有关参数去掉。我这里顺手安装许多其他支持的库。
sudo apt install console-setup plymouth-themes -y
sudo apt install exfat-fuse exfat-utils unrar p7zip-full p7zip-rar rar unzip gtk2-engines-pixbuf libxml2-utils build-essential gcc-7 gcc-7-multilib g++-7 g++-7-multilib curl terminator libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev libgles2-mesa-dev libfreeimage3 libfreeimage-dev freeglut3-dev libffi-dev freeglut3 -y
6、更新内启动内核
sudo update-initramfs -u
7、先不要重启,先把cuda文件下载下来,网址如下,我用的第一版的10.1,你可以在这个网址上选自己的适应版本,10.2 或者后续10.1update
https://www.nvidia.cn/Download/driverResults.aspx/159365/cn //下载驱动 440.82
https://developer.nvidia.com/cuda-toolkit-archive //下载
https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&target_distro=Ubuntu&target_version=1804&target_type=runfilelocal
下载完后文件名如下:
显卡驱动
NVIDIA-Linux-x86_64-440.82.run
cuda:
cuda_10.2.89_440.33.01_linux.run
拷贝到你的用户目录下,就是为了登陆的时候不要切换目录就可以安装
重新启动
8、启动之后,此时已经不能进Xwindows了,按CTRL+ALT+F2进入TTY2
登陆
在命令行运行:
sudo bash NVIDIA-Linux-x86_64-440.82.run
根据命令提示安装,这个时候一定要保证在网。
安装完Reboot
9、正常应该可以进图形界面了,在自己的工作目录建立opt目录,等一会要用到。
打开终端,在命令行输入:
nvidia-smi
应该能查到显卡信息
10、安装CUDA10.2组件,不选了,定义好参数,静默安装。
cd
mkdir opt
sudo bash cuda_10.2.89_440.33.01_linux.run --silent --toolkit --toolkitpath=$HOME/opt/cuda10.1 --defaultroot=$HOME/opt/cuda10.1 --samples --samplespath=$HOME/
没有错误信息及安装成功,有错误信息的话,查看/var/log/cuda-installer.log的内容。
11、添加环境变量(全局)
sudo gedit /etc/profile
自己的则是
sudo gedit .bashrc
将下列文本拷贝到文件末尾
CUDA_HOME=/usr/local/cuda/
export PATH=$PATH:$CUDA_HOME/bin/
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CUDA_HOME/lib64
12、安装cudnn-10.2-linux-x64-v7.6.5.32,下载网址
https://developer.nvidia.com/rdp/cudnn-download
要注册,有帐号登陆即可。
选择适应自己CUDA版本的CUDNN.
解压拷贝到对应目录即可
tar -xzvf cudnn-10.2-linux-x64-v7.6.5.32.tgz
sudo cp cuda/include/cudnn.h /usr/local/cuda/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*
13、测试,随便找个工程编译
cd ~/NVIDIA_CUDA-10.1_Samples/0_Simple/clock
make
./clock
输出如下:
CUDA Clock sample
GPU Device 0: "GeForce GTX 1080 Ti" with compute capability 6.1
Average clocks/block = 3748.296875
或者是
cd ~/NVIDIA_CUDA-10.1_Samples/1_Utilities/deviceQuery
make
./deviceQuery
输出如下:
./deviceQuery Starting...
CUDA Device Query (Runtime API) version (CUDART static linking)
Detected 1 CUDA Capable device(s)
Device 0: "GeForce GTX 1080 Ti"
CUDA Driver Version / Runtime Version 10.1 / 10.1
CUDA Capability Major/Minor version number: 6.1
。。。。。
Support host page-locked memory mapping: Yes
Alignment requirement for Surfaces: Yes
Device has ECC support: Disabled
Device supports Unified Addressing (UVA): Yes
Device supports Compute Preemption: Yes
Supports Cooperative Kernel Launch: Yes
Supports MultiDevice Co-op Kernel Launch: Yes
Device PCI Domain ID / Bus ID / location ID: 0 / 1 / 0
Compute Mode:
< Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >
deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 10.1, CUDA Runtime Version = 10.1, NumDevs = 1
Result = PASS
14、安装anaconda
https://www.anaconda.com/distribution/#linux
15、安装tensorflow
16、安装pytorch1.4,选择10.1的目的就是为了用它。这两个库的安装网上教程很多,自己百度。没任何难度,无非选不对源速度慢点,不会掉链子搞不定。
17、测试:
import torch
print(torch.__version__)
print(torch.cuda.is_available())
x=torch.randn(10)
if torch.cuda.is_available():
device=torch.device("cuda")
y=torch.ones_like(x,device=device)
x=x.to(device)
z=x+y
print(z)
print(z.to("cpu",torch.double))
输出:
1.4.0
True
tensor([ 2.2741, 2.7812, 2.3704, 0.3750, 1.2991, 1.3362, 1.4424, -0.7325,
0.4616, 1.3321], device='cuda:0')
tensor([ 2.2741, 2.7812, 2.3704, 0.3750, 1.2991, 1.3362, 1.4424, -0.7325,
0.4616, 1.3321], dtype=torch.float64)
Process finished with exit code 0