阿里云服务器vgn5i配NVIDIA CUDA
先吐槽会
说实在话,本来感觉这个服务器挺牛的,什么TSLA P4,稍微不注意全是坑。以前也没买过类似的GPU卡,完全不知道配置vgn5i P4/4竟然是2G的显存,啥玩意????还不够我配置一个深度服务的。不过就当GPU服务器玩玩,看得上的只是阿里云的带宽,不像本地网速,卡卡卡。。
驱动的安装那就又是一个坑,玩了我整整一天时间,和客服各种交流,终于可以运行调起nvidia, cuda, cudnn服务了。赶紧记录一下吧。
驱动安装
安装的参考目录:
(1)阿里云GPU实例中安装GRID驱动
(2)在vgn6i和vgn5i实例中安装GRID驱动(Linux)
(3)安装Anaconda环境
(4)Tensorflow环境安装与配置
驱动安装并测试
话不多少,开始干。。。
安装Ubuntu 16.04 64-bit系统
进入控制台,进入自己的实例列表,在当前实例的操作菜单栏中,选择更多下的实例状态,点击停止,然后在磁盘和镜像中,选择切换操作系统,切记一定要选择阿里云提供的纯净的Ubuntu 16.04 64-bit的系统。市场的系统,会给你安装特别多的插件,容易出问题。
设置密码,安装完成以后,使用远程连接工具进行服务器的连接。
安装Nvidia Cuda驱动
1、查看是否存在blacklist-nouveau.conf文件。
ls /etc/modprobe.d/blacklist-nouveau.conf
2、如果文件存在,则跳过本步骤。如果文件不存在,则执行命令vim /etc/modprobe.d/blacklist-nouveau.conf
创建文件,并在文件中添加以下内容禁用nouveau。
blacklist nouveau
blacklist lbm-nouveau
options nouveau modeset=0
3、生成kernel initramfs。
rmmod nouveau
update-initramfs -u
注:我在执行第一条命令的时候,报错了,啥玩意。。。不过还是硬着头皮继续吧。第二条命令正常执行,如果有错,那也继续,万一不影响呢。心态要好,继续吧。。。
4、重启实例。
reboot
5、远程连接实例,依次运行以下命令升级系统并安装KDE桌面。
apt-get update
apt-get upgrade
apt-get install kubuntu-desktop
注:不管用不用KDE桌面这玩意,都装吧。只为了GPU更好用。
6、重启实例。
reboot
7、远程连接实例,下载驱动包:
wget http://nvdia-driver-410.oss-cn-shenzhen.aliyuncs.com/NVIDIA-Linux-x86_64-410.39-grid.run
注:一定要下载阿里云指定的这个驱动,千万别自作聪明。
8、安装GRID驱动
chmod 777 NVIDIA-Linux-x86_64-410.39-grid.run
./NVIDIA-Linux-x86_64-410.39-grid.run
9、运行命令nvidia-smi测试驱动安装结果。
如果返回以下类似结果,说明驱动已经安装成功了。
10、当然别以为这样就行了,也许其他的非GRID驱动能看到这张图就能够调起GPU来,但是这玩意儿不是,我用代码测试了,不太行。所以,继续做验证吧:
添加License服务器并激活License:
(1)切换到/etc/nvidia目录:
cd /etc/nvidia。
(2)创建gridd.conf文件:
cp gridd.conf.template gridd.conf
(3)在gridd.conf文件中添加License服务器的信息。
ServerAddress=<License服务器的IP>
ServerPort=<License服务器的端口(默认为7070)>
FeatureType=2
EnableUI=TRUE
注:一般人应该没用过这玩意,这玩意应该是nvidia这家公司想多赚钱,开启的一个认证的凭证。每次使用的时候,去请求nvidia公司,征得许可,才可调用到gpu模块,唉,技术这玩意真能赚钱。不过,阿里云是有免费的测试凭证的,可以去和客服要一下。
11、运行命令安装x11vnc。
apt-get install x11vnc
注:装吧,别想了。。
12、运行命令lspci | grep NVIDIA查询GPU BusID
本示例中,查询到的GPU BusID为00:07.0。
13、配置X Server环境并重启。
(1)运行命令nvidia-xconfig --enable-all-gpus --separate-x-screens
(2)编辑/etc/X11/xorg.conf,在Section "Device"段添加GPU BusID,如本示例中为BusID “PCI:0:7:0”
14、重启实例。
reboot
15、运行命令安装GLX测试程序。
apt-get install mesa-utils
注:别问,继续
16、运行命令startx启动X Server。
apt-get install xinit
startx
17、开启一个新的SSH客户端终端,运行命令启动x11vnc。
x11vnc -display :1
18、安装Anaconda环境
(1)安装软件
wget -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
注:安装过程中,一直按着enter键,如果有停顿,就写yes。
(2)安装完成后,激活环境
source ~/.bashrc
(3)给anaconda添加镜像
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
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/cloud/bioconda
conda config --set show_channel_urls yes
(4)创建python3.7 的环境
conda create --name tf2 python=3.7
注:需要等一会,有耐心。
(5)激活tf2,并安装tensorflow 2.1.0 环境
conda activate tf2
pip install tensorflow==2.1.0
(6)安装 CUDA Toolkit 和 cuDNN
conda install cudatoolkit=10.1
conda install cudnn=7.6.5
19、测试
(1)新建一个测试gpu的文件,vi test1.py
import tensorflow as tf
from tensorflow.keras.layers import Flatten,Conv2D,Dropout,Input,Dense,MaxPooling2D
from tensorflow.keras.models import Model
import numpy as np
from tensorflow.compat.v1 import ConfigProto
from tensorflow.compat.v1 import InteractiveSession
config = ConfigProto()
config.gpu_options.allow_growth = True
session = InteractiveSession(config=config)
# 载入Mnist手写数据集
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
x_train = np.expand_dims(x_train,-1)
x_test = np.expand_dims(x_test,-1)
# 作为输入
inputs = Input([28,28,1])
x = Conv2D(32, kernel_size= 5,padding = 'same',activation="relu")(inputs)
x = MaxPooling2D(pool_size = 2, strides = 2, padding = 'same',)(x)
x = Conv2D(64, kernel_size= 5,padding = 'same',activation="relu")(x)
x = MaxPooling2D(pool_size = 2, strides = 2, padding = 'same',)(x)
x = Flatten()(x)
x = Dense(1024)(x)
x = Dense(256)(x)
out = Dense(10, activation='softmax')(x)
# 建立模型
model = Model(inputs,out)
# 设定优化器,loss,计算准确率
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
# 利用fit进行训练
model.fit(x_train, y_train, epochs=5)
model.evaluate(x_test, y_test, verbose=2)
(3)执行该文件
python test1.py
(4)再开启一个远程连接,监控 nvidia使用情况:
watch -n 0.1 nvidia-smi
如果上述紫色框内容有值,那么恭喜你,如果没有,那无能为力了。
20、感慨
这玩意儿太麻烦了,配置这么低,NVIDIA还要收服务费,黑心商家!!!
今天刚测试好,赶紧花了半个小时记录一下,如果有同样入坑的小伙伴,那就来参考参考吧。点点小心心++++