云服务器ECS:GPU计算型实例上
导读:云服务器ECS实例之GPU计算型实例上 咨询热线 4006-333-292
本文介绍GPU计算型实例规格族vgn5i、gn6i、gn6v、gn5、gn5i和gn4,并列出了具体的实例规格。
轻量级GPU计算型实例规格族 vgn5i
规格族特点
· I/O优化实例
· 支持IPv6
· 仅支持SSD云盘和高效云盘
· 采用NVIDIA P4 GPU计算加速器
· 实例包含分片虚拟化后的虚拟GPU
· 计算能力支持NVIDIA Tesla P4的 1/8、1/4、1/2和1:1
· GPU显存支持1 GiB、2 GiB、4 GiB和8 GiB
· 处理器与内存配比为1:3
· 处理器:2.5 GHz主频的Intel Xeon E5-2682 v4(Broadwell)
· 实例网络性能与计算规格对应(规格越高网络性能越强)
· 适用场景:
· 云游戏的云端实时渲染
· AR/VR的云端实时渲染
· AI(DL/ML)推理,适合用户弹性部署含有AI推理计算应用的互联网业务
· 深度学习的教学练习环境
· 深度学习的模型实验环境
实例规格
实例规格vCPU内存(GiB)本地存储(GiB)*GPU显存(GiB)网络带宽能力(出/入)(Gbit/s)**网络收发包能力(出/入)(万PPS)***支持IPv6多队列****弹性网卡(包括一块主网卡)*****
ecs.vgn5i-m1.large26无P4*1/81130是22
ecs.vgn5i-m2.xlarge412无P4*1/42250是23
ecs.vgn5i-m4.2xlarge824无P4*1/24380是24
ecs.vgn5i-m8.4xlarge1648无P4*185100是45
说明 更多信息,请参见 创建GPU计算型实例。
回到目录 查看其他实例规格族。
GPU计算型实例规格族 gn6i
规格族特点
· I/O优化实例
· 支持IPv6
· 处理器与内存配比为1:4
· 处理器:2.5 GHz主频的Intel Xeon Platinum 8163(Skylake)
· 支持ESSD(百万IOPS)、SSD云盘和高效云盘
· 基于X-Dragon神龙新一代计算架构,性能更优
· GPU加速器:T4
· 创新的Turing架构
· 多达320个Turing Tensorcore
· 2560个CUDA Cores
· 可变精度Tensor Cores支持65 TFlops FP16、130 INT8 TOPS、260 INT4 TOPS
· 显存16 GiB(显存带宽320 GB/s)
· 实例网络性能与计算规格对应(规格越高网络性能越强)
· 适用场景:
· AI(DL/ML)推理,适合计算机视觉、语音识别、语音合成、NLP、机器翻译、推荐系统
· 云游戏云端实时渲染
· AR/VR的云端实时渲染
· 重载图形计算或图形工作站
· GPU加速数据库
· 高性能计算
实例规格
实例规格vCPU内存(GiB)本地存储(GiB)*GPU显存(GiB)网络带宽能力(出/入)(Gbit/s)**网络收发包能力(出/入)(万PPS)***支持IPv6多队列****弹性网卡(包括一块主网卡)*****
ecs.gn6i-c4g1.xlarge415无T4*116450是22
ecs.gn6i-c8g1.2xlarge831无T4*116580是22
ecs.gn6i-c16g1.4xlarge1662无T4*1166100是43
ecs.gn6i-c24g1.6xlarge2493无T4*1167.5120是64
ecs.gn6i-c24g1.12xlarge48186无T4*23215240是126
ecs.gn6i-c24g1.24xlarge96372无T4*46430480是248
ecs.gn6i-c32g1.8xlarge32124无T4*11610160是86
ecs.gn6i-c48g1.12xlarge48186无T4*11612240是126
ecs.gn6i-c72g1.18xlarge72279无T4*11621.5360是188
说明 更多信息,请参见 创建GPU计算型实例。
回到目录 查看其他实例规格族。
GPU计算型实例规格族 gn6v
规格族特点
· I/O优化实例
· 支持IPv6
· 仅支持SSD云盘和高效云盘
· 采用NVIDIA V100 GPU计算卡
· 处理器与内存配比为1:4
· 处理器:2.5 GHz主频的Intel Xeon Platinum 8163(Skylake)
· GPU加速器:V100(SXM2封装)
· 创新的Volta架构
· 显存16 GiB HBM2
· CUDA Cores 5120
· Tensor Cores 640
· 显存带宽900 GB/s
· 支持6个NVLink链路,每个25 GB/s,总共300 GB/s
· 实例网络性能与计算规格对应(规格越高网络性能越强)
· 适用场景:
· 深度学习,如图像分类、无人驾驶、语音识别等人工智能算法的训练以及推理应用
· 科学计算,如计算流体动力学、计算金融学、分子动力学、环境分析等
实例规格
实例规格vCPU内存(GiB)本地存储(GiB)*GPUGPU显存(GB)网络带宽能力(出/入)(Gbit/s)**网络收发包能力(出/入)(万PPS)***支持IPv6多队列****弹性网卡(包括一块主网卡)*****
ecs.gn6v-c8g1.2xlarge832.0无1 * NVIDIA V1001 * 162.580是44
ecs.gn6v-c8g1.8xlarge32128.0无4 * NVIDIA V1004 * 1610.0200是88
ecs.gn6v-c8g1.16xlarge64256.0无8 * NVIDIA V1008 * 1620.0250是168
说明 更多信息,请参见 创建GPU计算型实例。
回到目录 查看其他实例规格族。
GPU计算型实例规格族 gn5
规格族特点
· I/O优化实例
· 仅支持SSD云盘和高效云盘
· 采用NVIDIA P100 GPU计算卡
· 多种处理器与内存配比
· 高性能NVMe SSD本地盘
· 处理器:2.5 GHz主频的Intel Xeon E5-2682 v4(Broadwell)
· 实例网络性能与计算规格对应(规格越高网络性能越强)
· 适用场景:
· 深度学习
· 科学计算,如计算流体动力学、计算金融学、基因组学研究、环境分析
· 高性能计算、渲染、多媒体编解码及其他服务器端GPU计算工作负载
实例规格
实例规格vCPU内存(GiB)本地存储(GiB)*GPUGPU显存(GB)网络带宽能力(出/入)(Gbit/s)**网络收发包能力(出/入)(万PPS)***支持IPv6多队列****弹性网卡(包括一块主网卡)*****
ecs.gn5-c4g1.xlarge430.04401 * NVIDIA P1001 * 163.030否13
ecs.gn5-c8g1.2xlarge860.04401 * NVIDIA P1001 * 163.040否14
ecs.gn5-c4g1.2xlarge860.08802 * NVIDIA P1002 * 165.0100否24
ecs.gn5-c8g1.4xlarge16120.08802 * NVIDIA P1002 * 165.0100否48
ecs.gn5-c28g1.7xlarge28112.04401 * NVIDIA P1001 * 165.0100否88
ecs.gn5-c8g1.8xlarge32240.017604 * NVIDIA P1004 * 1610.0200否88
ecs.gn5-c28g1.14xlarge56224.08802 * NVIDIA P1002 * 1610.0200否148
ecs.gn5-c8g1.14xlarge54480.035208 * NVIDIA P1008 * 1625.0400否148
说明 更多信息,请参见 创建GPU计算型实例。
回到目录 查看其他实例规格族。
GPU计算型实例规格族 gn5i
规格族特点
· I/O优化实例
· 支持IPv6
· 仅支持SSD云盘和高效云盘
· 采用NVIDIA P4 GPU计算卡
· 处理器与内存配比为1:4
· 处理器:2.5 GHz主频的Intel Xeon E5-2682 v4(Broadwell)
· 实例网络性能与计算规格对应(规格越高网络性能越强)
· 适用场景:
· 深度学习推理
· 多媒体编解码等服务器端GPU计算工作负载
实例规格
实例规格vCPU内存(GiB)本地存储(GiB)*GPUGPU显存(GB)网络带宽能力(出/入)(Gbit/s)**网络收发包能力(出/入)(万PPS)***支持IPv6多队列****弹性网卡(包括一块主网卡)*****
ecs.gn5i-c2g1.large28.0无1 * NVIDIA P41 * 81.010是22
ecs.gn5i-c4g1.xlarge416.0无1 * NVIDIA P41 * 81.520是23
ecs.gn5i-c8g1.2xlarge832.0无1 * NVIDIA P41 * 82.040是44
ecs.gn5i-c16g1.4xlarge1664.0无1 * NVIDIA P41 * 83.080是48
ecs.gn5i-c16g1.8xlarge32128.0无2 * NVIDIA P42 * 86.0120是88
ecs.gn5i-c28g1.14xlarge56224.0无2 * NVIDIA P42 * 810.0200是148
说明 更多信息,请参见 创建GPU计算型实例。
回到目录 查看其他实例规格族。
GPU计算型实例规格族 gn4
规格族特点
· I/O优化实例
· 仅支持SSD云盘和高效云盘
· 采用NVIDIA M40 GPU计算卡
· 多种处理器与内存配比
· 处理器:2.5 GHz主频的Intel Xeon E5-2682 v4(Broadwell)
· 实例网络性能与计算规格对应(规格越高网络性能越强)
· 适用场景
· 深度学习
· 科学计算,如计算流体动力学、计算金融学、基因组学研究、环境分析
· 高性能计算、渲染、多媒体编解码及其他服务器端GPU计算工作负载
实例规格
实例规格vCPU内存(GiB)本地存储(GiB)*GPUGPU显存(GB)网络带宽能力(出/入)(Gbit/s)**网络收发包能力(出/入)(万PPS)***支持IPv6多队列****弹性网卡(包括一块主网卡)*****
ecs.gn4-c4g1.xlarge430.0无1 * NVIDIA M401 * 123.030否13
ecs.gn4-c8g1.2xlarge830.0无1 * NVIDIA M401 * 123.040否14
ecs.gn4.8xlarge3248.0无1 * NVIDIA M401 * 126.080否38
ecs.gn4-c4g1.2xlarge860.0无2 * NVIDIA M402 * 125.050否14
ecs.gn4-c8g1.4xlarge1660.0无2 * NVIDIA M402 * 125.050否18
ecs.gn4.14xlarge5696.0无2 * NVIDIA M402 * 1210.0120否48
GPU计算型实例必须安装GPU驱动才可以使用。您可以在创建实例时自动安装GPU驱动,也可以在实例创建后手动安装GPU驱动。本文介绍如何创建GPU计算型实例并自动安装驱动。
注意事项
如果您使用了自动安装GPU驱动功能,请注意:
· 自动安装只支持Linux公共镜像。
· 自动安装过程受不同实例规格的内网带宽和CPU核数的影响,安装时间约4~10分钟,在安装过程中无法使用GPU,请勿对实例进行任何操作,也不要安装其它GPU相关软件,以防自动安装失败,导致实例不可用。
· 如果您在创建完成后更换操作系统 ,请确保使用同一镜像或者为可自动安装CUDA和GPU驱动的镜像,以防自动安装失败。
· 您可以远程连接实例,通过安装日志查看安装进程和结果:
· 如果您勾选了自动安装GPU驱动,安装日志位于/root/nvidia_install.log。
· 如果您在实例自定义数据配置nvidia_install_v2.0版本的安装脚本,安装日志位于/root/nvidia/nvidia_install.log。
操作步骤
本步骤重点介绍GPU计算型实例相关的配置,您可以参见创建ECS实例了解其它通用配置。
1. 前往ECS售卖页。
2. 完成基础配置。在选择配置时,请注意:
· 地域:请根据表格提供GPU计算型实例的地域和可用区选择地域和可用区。如果售卖页显示的地域和可用区和表格不一致,以售卖页为准。
· 实例:定位到异构计算GPU/FPGA > GPU计算型,然后根据需求选择实例规格。
· 镜像:部分Linux公共镜像支持自动安装CUDA和GPU驱动,支持的镜像请参见支持自动安装的镜像。
如果您选择的镜像支持自动安装驱动,勾选自动安装GPU驱动,并选择驱动版本。如果是新业务系统,建议选择最新的版本。
·
如果您不勾选自动安装GPU驱动,或者镜像不支持自动安装,则需要在实例自定义数据模块下配置安装脚本,或者在创建实例后手动安装GPU驱动。如何配置安装脚本,请参见脚本版本。
·
说明 如果调用RunInstances创建GPU计算型实例,必须通过 UserData参数上传安装脚本,脚本内容需要采用Base64方式编码。
·
3. 完成网络和安全组配置。在选择配置时,请注意:
· 网络:选择专有网络。
· 公网带宽:请根据您的业务需要选择带宽。
注意 如果您在 基础配置中选用了Windows 2008 R2及以下版本的镜像,在GPU驱动安装生效后,您将无法通过管理终端连接GPU计算型实例,远程连接时会始终显示黑屏或停留在启动界面。您需要在此处勾选 分配公网IP地址,或者在创建实例后绑定弹性公网IP,以便通过其他协议连接实例,例如RDP(Windows自带的远程连接)、PCOIP、XenDeskop HDX 3D等。其中RDP不支持DirectX、OpenGL等应用,您需要自行安装VNC服务和客户端。
·
4. 完成系统配置。在选择配置时,请注意:
· 登录凭证:建议选择密钥对或自定义密码。如果您选择创建后设置,通过管理终端登录实例时必须绑定SSH密钥对或者重置密码,然后重启实例使修改生效。如果此时GPU驱动尚未安装完成,重启操作会导致安装失败。
· 实例自定义数据:
· 如果您在基础配置页面的镜像中选择了自动安装GPU驱动,此处会显示自动安装CUDA和GPU驱动的注意事项和Shell脚本内容。
· 如果您未选择自动安装GPU驱动,可以在实例自定义数据处配置安装脚本,脚本示例请参见实例自定义数据方式安装脚本。
5. 根据需要完成分组设置并确认订单,完成创建GPU计算型实例。
说明
6.
· 如果您配置了自动安装脚本,实例启动后会自动安装GPU驱动。安装完成后实例会自动重启,重启过后GPU驱动才能正常工作。
· GPU驱动在Persistence Mode下工作更稳定。安装脚本会自动开启GPU驱动的Persistence Mode,并将该设置添加到Linux系统的自启动脚本中,确保实例重启后还能默认开启Persistence Mode。
提供GPU计算型实例的地域和可用区
提供各GPU计算型实例规格族的地域和可用区如下表所示:
实例规格地域和可用区
gn4· 华北2(可用区A)、华东2(可用区B)
· 华南1(可用区C)
gn5· 华北2(可用区C、E)、华北5(可用区A)
· 华东1(可用区G、F)、华东2(可用区D、B、E)
· 华南1(可用区D)
· 香港(可用区C、B)
· 亚太东南1(可用区B、A)、亚太东南2(可用区A)、亚太东南3(可用区A)、亚太东南5(可用区A)
· 美国西部1(可用区B、A)、美国东部1(可用区B、A)
· 欧洲中部1(可用区A)
gn5(部署NGC环境)部分地域下的gn5实例不支持部署NGC(NVIDIA GPU CLOUD)环境,更多信息请参见在gn5实例上部署NGC环境。
gn5i· 华北2(可用区C、E、A)
· 华东1(可用区B)、华东2(可用区D、B)
· 华南1(可用区A)
gn6v华东2(可用区F)
支持自动安装的镜像
支持自动安装CUDA和GPU驱动的镜像如下:
镜像来源镜像版本
公共镜像支持如下版本:
· CentOS 64位(目前提供的所有版本都支持)
· Ubuntu16.04 64位镜像
· SUSE Linux Enterprise Server 12 SP2 64位镜像
镜像市场请按以下方式获取:
· 搜索NVIDIA并选择需要的镜像,目前只支持CentOS 7.3。
· 如果GPU计算型实例用于深度学习,您可以选择预装深度学习框架的镜像。搜索深度学习并选择需要的镜像,目前只支持CentOS 7.3。
脚本版本
实例首次启动时,cloud-init会自动执行Shell脚本安装CUDA和GPU驱动。
· 如果您勾选了自动安装GPU驱动,实例会使用安装脚本的nvidia_install_v1.0版本。目前,可选的CUDA和GPU驱动版本如下:
CUDAGPU驱动支持的实例规格
9.1.85390.46· gn5
· gn5i
· gn6v
· gn4
9.0.176· 390.46
· 384.125
· 384.111· gn5
· gn5i
· gn6v
· gn4
8.0.61· 390.46
· 384.125
· 384.111· gn5
· gn5i
· gn4
·
· 如果您在实例自定义数据配置安装脚本,建议使用安装脚本的nvidia_install_v2.0版本,脚本内容请参见实例自定义数据方式安装脚本。nvidia_install_v2.0版本具有以下优势:
· 提供最新版本的CUDA、GPU驱动和cuDNN库。
· 登录实例后,如果正在安装驱动,您可以看到安装进度条,如果已经安装完成,无论是否成功,您可以看到安装结果提示(NVIDIA INSTALL OK或NVIDIA INSTALL FAIL)。
使用nvidia_install_v2.0版本时,您需要修改安装脚本的以下参数,指定GPU驱动、CUDA、cuDNN版本号,例如:
试用
driver_version="410.79"cuda_version="9.0.176"cudnn_version="7.4.2"
目前支持的CUDA、GPU驱动和cuDNN库版本如下:
CUDAGPU驱动cuDNN
10.0.130410.79· 7.4.2
· 7.3.1
9.2.148· 410.79
· 396.44· 7.4.2
· 7.3.1
· 7.1.4
9.0.176· 410.79
· 396.44
· 390.46· 7.4.2
· 7.3.1
· 7.1.4
· 7.0.5
8.0.61· 410.79
· 396.44
· 390.46· 7.1.3
· 7.0.5
实例自定义数据方式安装脚本
通过实例自定义数据方式安装驱动时,建议使用安装脚本的nvidia_install_v2.0版本,脚本内容如下:
试用
#!/bin/sh
driver_version=$1
cuda_version=$2
cudnn_version=$3
NVIDIA_DIR="/root/nvidia"log=${NVIDIA_DIR}"/nvidia_install.log"
PROCESS_NAME="/var/lib/cloud/instance/scripts/part-001"
DRIVER_PROCESS_NAME=${NVIDIA_DIR}"/NVIDIA-Linux-x86_64"
CUDA_PROCESS_NAME=${NVIDIA_DIR}"/cuda"
CUDNN_PROCESS_NAME=${NVIDIA_DIR}"/cudnn"
DOWNLOAD_PROCESS_NAME="wget"
SUCCESS_STR="NVIDIA INSTALL OK"
DOWNLOAD_SUCCESS_STR="Download OK"
DRIVER_FAIL_STR="Driver INSTALL FAIL"
CUDA_FAIL_STR="CUDA INSTALL FAIL"
CUDNN_FAIL_STR="CUDNN INSTALL FAIL"
DOWNLOAD_FAIL_STR="Download FAIL"
install_notes="The script automatically downloads and installs a NVIDIA GPU driver and CUDA/CUDNN library.
1. The installation takes 6 to 10 minutes, depending on the intranet bandwidth and the quantity of vCPU cores of the instance. Please do not operate the GPU or install any GPU-related software until the GPU driver is installed successfully.
2. After the GPU is installed successfully, the instance will restarts automatically."
check_install()
{
b=''
if [ "$1" = "NVIDIA" ]; then
ProcessName=$DRIVER_PROCESS_NAME
t=2
elif [ "$1" = "cuda" ]; then
ProcessName=$CUDA_PROCESS_NAME
t=2.5
elif [ "$1" = "cudnn" ]; then
ProcessName=$CUDNN_PROCESS_NAME
t=0.5
fi
i=0
while true
do
pid_num=$(ps -ef | grep $ProcessName |grep -v grep | wc -l)
if [ $pid_num -eq 0 ]; then
str=$(printf "%-100s" "#")
b=$(echo "$str" | sed 's/ /#/g')
printf "| %-100s | %d%% \r\n" "$b" "100";
break
fi
i=$(($i+1))
str=$(printf "%-${i}s" "#")
b=$(echo "$str" | sed 's/ /#/g')
printf "| %-100s | %d%% \r" "$b" "$i";
sleep $t
done
echo
return 0
}
check_download()
{
name=$1
i=0
b=''
filesize=0
percent=0
sleep 0.5
while true
do
pid_num=$(ps -ef | grep wget |grep $name |grep -v grep | wc -l)
if [ $pid_num -eq 0 ]; then
filesize=$(du -sk /root/nvidia/${name}* | awk '{print $1}')
str=$(printf "%-100s" "#")
b=$(echo "$str" | sed 's/ /#/g')
printf "%-8s| %-100s | %d%% \r\n" "${filesize}K" "$b" "100";
break
fi
line=$(tail -2 /root/nvidia/nvidia_install.log)
filesize=$(echo $line | awk -F ' ' '{print $1}')
percent=$(echo $line | awk -F '%' '{print $1}' | awk -F ' ' '{print $NF}')
if [ "$percent" -ge 0 ] 2>/dev/null ;then
str=$(printf "%-${percent}s" "#")
b=$(echo "$str" | sed 's/ /#/g')
printf "%-8s| %-100s | %d%% \r" "${filesize}" "$b" "$percent";
else
continue
fi
sleep 0.5
done
return 0
}
check_install_log()
{
if [ ! -f "$log" ];then
echo "NVIDIA install log $log not exist! Install may fail!"
echo
exit 1
fi
if [ "$1" = "NVIDIA" ]; then
succstr=$SUCCESS_STR
str2=$(cat $log |grep "INSTALL_ERROR")
echo
if [ -n "$succstr" ] && [ -z "$str2" ]; then
echo "$succstr !!"
echo
return 0
else
echo "NVIDIA install may have some INSTALL_ERROR, please check log $log !"
return 1
fi
fi
if [ "$1" = "DRIVER" ]; then
failstr=$DRIVER_FAIL_STR
elif [ "$1" = "CUDA" ]; then
failstr=$CUDA_FAIL_STR
elif [ "$1" = "CUDNN" ]; then
failstr=$CUDNN_FAIL_STR
fi
str1=$(cat $log |grep "$failstr")
if [ -n "$str1" ] ;then
echo
echo "NVIDIA $failstr ! please check install log $log !"
return 1
fi
}
check_install_process()
{
echo "CHECKING NVIDIA INSTALL, PLEASE WAIT ......"
echo "$install_notes"
echo
while true
do
pid_num=$(ps -ef | grep $PROCESS_NAME |grep -v grep | grep -v check | wc -l)
if [ $pid_num -eq 0 ];then
check_install_log "NVIDIA"
return 0
else
pid_num=$(ps -ef | grep $DOWNLOAD_PROCESS_NAME |grep driver |grep -v grep | wc -l)
if [ $pid_num -gt 0 ];then
echo "Driver-${1} downloading, need 10 seconds. Remaining installation time 360 - 600 seconds!"
check_download "NVIDIA"
fi
pid_num=$(ps -ef | grep $DOWNLOAD_PROCESS_NAME |grep cuda |grep -v grep | wc -l)
if [ $pid_num -gt 0 ];then
echo "CUDA-${2} downloading, need 150 or more seconds. Remaining installation time 350 - 590 seconds!"
while true
do
check_download "cuda"
sleep 1
pid_num=$(ps -ef | grep $DOWNLOAD_PROCESS_NAME |grep cuda |grep -v grep | wc -l)
if [ $pid_num -eq 0 ];then
break
fi
done
fi
pid_num=$(ps -ef | grep $DOWNLOAD_PROCESS_NAME |grep cudnn |grep -v grep | wc -l)
if [ $pid_num -gt 0 ];then
echo "cuDNN-${3} downloading, need about 30 seconds. Remaining installation time 200 - 430 seconds!"
check_download "cudnn"
fi
pid_num=$(ps -ef | grep $DRIVER_PROCESS_NAME |grep -v grep | wc -l)
if [ $pid_num -gt 0 ];then
echo
echo "Driver-${1} installing, need 30 - 160 seconds. Remaining installation time 160 - 400 seconds!"
check_install "NVIDIA"
check_install_log "DRIVER"
fi
pid_num=$(ps -ef | grep $CUDA_PROCESS_NAME |grep -v grep | wc -l)
if [ $pid_num -gt 0 ];then
echo "CUDA-${2} installing, need 80 - 200 seconds. Remaining installation time 90 - 220 seconds!"
check_install "cuda"
check_install_log "CUDA"
fi
pid_num=$(ps -ef | grep $CUDNN_PROCESS_NAME |grep -v grep | wc -l)
if [ $pid_num -gt 0 ];then
echo "cuDNN-${3} installing, need 10 seconds. Installation will be successful soon, please wait......"
check_install "cudnn"
check_install_log "CUDNN"
fi
fi
sleep 1
done
}
create_nvidia_repo_centos()
{
baseurl_centos=$(cat /etc/yum.repos.d/CentOS-Base.repo |grep baseurl | head -1 | awk -F'[/]' '{print $1"//"$3}')
if [ -z "$baseurl_centos" ]; then
url="http://mirrors.cloud.aliyuncs.com"
fi
cudaurl=$baseurl_centos"/opsx/ecs/linux/rpm/cuda/${version}/\$basearch/"
driverurl=$baseurl_centos"/opsx/ecs/linux/rpm/driver/${version}/\$basearch/"
echo "[ecs-cuda]" > /etc/yum.repos.d/nvidia.repo
echo "name=ecs cuda - \$basearch" >> /etc/yum.repos.d/nvidia.repo
echo $cudaurl >> /etc/yum.repos.d/nvidia.repo
echo "enabled=1" >> /etc/yum.repos.d/nvidia.repo
echo "gpgcheck=0" >> /etc/yum.repos.d/nvidia.repo
echo "[ecs-driver]" >> /etc/yum.repos.d/nvidia.repo
echo "name=ecs driver - \$basearch" >> /etc/yum.repos.d/nvidia.repo
echo $driverurl >> /etc/yum.repos.d/nvidia.repo
echo "enabled=1" >> /etc/yum.repos.d/nvidia.repo
echo "gpgcheck=0" >> /etc/yum.repos.d/nvidia.repo
yum clean all >> $log 2>&1
yum makecache >> $log 2>&1
}
disable_nouveau_centos()
{
echo "blacklist nouveau" > /etc/modprobe.d/blacklist-nouveau.conf
echo "options nouveau modeset=0" >> /etc/modprobe.d/blacklist-nouveau.conf
echo "***exec \"dracut --force\" to regenerate the kernel initramfs"
dracut --force
}
disable_nouveau_ubuntu()
{
echo "blacklist nouveau" > /etc/modprobe.d/blacklist-nouveau.conf
echo "options nouveau modeset=0" >> /etc/modprobe.d/blacklist-nouveau.conf
echo "***exec \"update-initramfs -u\" to regenerate the kernel initramfs"
update-initramfs -u
}install_kernel_centos()
{
kernel_version=$(uname -r)
kernel_devel_num=$(rpm -qa | grep kernel-devel | grep $kernel_version | wc -l)
if [ $kernel_devel_num -eq 0 ];then
echo "******exec \"yum install -y kernel-devel-$kernel_version\""
yum install -y kernel-devel-$kernel_version
if [ $? -ne 0 ]; then
echo "INSTALL_ERROR: install kernel-devel fail!!!"
return 1
fi
fi
return 0
}install_kernel_suse()
{
kernel_version=$(uname -r|awk -F'-' '{print $1"-"$2}')
kernel_devel_num=$(rpm -qa | grep kernel-default-devel | wc -l)
if [ $kernel_devel_num -eq 0 ];then
echo "***exec \"zypper install -y kernel-default-devel=$kernel_version\""
zypper install -y kernel-default-devel=$kernel_version
if [ $? -ne 0 ]; then
echo "error: install kernel-default-devel fail!!!"
return 1
fi
fi
}install_kernel_ubuntu()
{
kernel_version=$(uname -r)
linux_headers_num=$(dpkg --list |grep linux-headers | grep $kernel_version | wc -l)
if [ $linux_headers_num -eq 0 ];then
echo "***exec \"apt-get install -y --allow-unauthenticated linux-headers-$kernel_version\""
apt-get install -y --allow-unauthenticated linux-headers-$kernel_version
if [ $? -ne 0 ]; then
echo "error: install linux-headers fail!!!"
return 1
fi
fi
}
download()
{
download_url="${baseurl}/opsx/ecs/linux/binary/nvidia"
wget ${download_url}/driver/${driver_file}
if [ $? -ne 0 ]; then
echo "INSTALL_ERROR: Download driver fail!!! return: $?"
return 1
fi
cudafilelist=$(curl ${download_url}/cuda/${cuda_version}/ |grep "cuda_${cuda_version}" | awk -F '>' '{print $2}' | awk -F '<' '{print $1}')
if [ -z "$cudafilelist" ]; then
echo "INSTALL_ERROR: Download CUDA fail!!! get cuda-${cuda_version} filename fail!!"
return 1
fi
mkdir /root/nvidia/cuda
cd /root/nvidia/cuda
echo $cudafilelist
for cudafile in $cudafilelist
do
sleep 1
wget ${download_url}/cuda/${cuda_version}/$cudafile
if [ $? -ne 0 ]; then
echo "INSTALL_ERROR: Download CUDA fail!!! wget $cudafile fail! return: $?"
return 1
fi
done
chmod +x /root/nvidia/cuda/*
cd /root/nvidia
wget ${download_url}/cudnn/${cuda_big_version}/${cudnn_file}
if [ $? -ne 0 ]; then
echo "INSTALL_ERROR: Download cuDNN fail!!! return :$?"
return 1
fi
chmod +x /root/nvidia/*
echo "$DOWNLOAD_SUCCESS_STR !"
return 0
}
install_driver()
{
/root/nvidia/$driver_file --silent
if [ $? -ne 0 ]; then
echo "INSTALL_ERROR: driver install fail!!!"
return 1
fi
echo "$DRIVER_SUCCESS_STR !"
return 0
}
install_cuda()
{
cd /root/nvidia/cuda
cuda_file=$(ls -S | grep cuda | grep $cuda_version | head -1)
echo "cuda file: "$cuda_file
if [ -z "$cuda_file" ]
then
echo "INSTALL_ERROR: cuda file is null, cuda install fail!!!"
return 1
fi
/root/nvidia/cuda/$cuda_file --silent --toolkit --samples --samplespath=/root
if [ $? -ne 0 ]; then
echo "INSTALL_ERROR: cuda install fail!!!"
return 1
fi
cuda_patchfile=$(ls | grep cuda | grep $cuda_version | grep -v ${cuda_file})
for cuda_patch in $cuda_patchfile
do
echo "install cuda patch file: "$cuda_patch
/root/nvidia/cuda/$cuda_patch --silent --installdir=/usr/local/cuda --accept-eula
if [ $? -ne 0 ]; then
echo "INSTALL_ERROR: cuda patch install fail!!!"
return 1
fi
done
echo "$CUDA_SUCCESS_STR !"
return 0
}
install_cudnn()
{
tar zxvf /root/nvidia/$cudnn_file -C /usr/local
if [ $? -ne 0 ]; then
echo "INSTALL_ERROR: CUDNN INSTALL FAIL !!!"
return 1
fi
echo "$CUDNN_SUCCESS_STR !"
return 0
}
enable_pm()
{
echo "#!/bin/bash" > /etc/init.d/enable_pm.sh
echo "nvidia-smi -pm 1" >> /etc/init.d/enable_pm.sh
echo "exit 0" >> /etc/init.d/enable_pm.sh
chmod +x /etc/init.d/enable_pm.sh
str=$(tail -1 $filename |grep "exit")
if [ -z "$str" ]; then
echo "/etc/init.d/enable_pm.sh" >> $filename
else
sed -i '$i\/etc/init.d/enable_pm.sh' $filename
fi
chmod +x $filename
}
issue=$(cat /etc/issue | grep Ubuntu)if [ -n "$issue" ];then
os="ubuntu"
profile_file="/root/.profile"
filename="/etc/rc.local"
else
issue=$(cat /etc/issue | grep SUSE)
if [ -n "$issue" ];then
os="suse"
filename="/etc/init.d/after.local"
else
os="centos"
filename="/etc/rc.d/rc.local"
fi
profile_file="/root/.bash_profile"fi
if [ "$1" = "check" ];then
check_install_process $driver_version $cuda_version $cudnn_version
sed -i '/part-001 /d' $profile_file
exit 0else
mkdir $NVIDIA_DIR
echo "begin to install, driver: $driver_version, cuda: $cuda_version, cudnn: $cudnn_version " >> $log 2>&1
driver_file="NVIDIA-Linux-x86_64-"${driver_version}".run"
cuda_big_version=$(echo $cuda_version | awk -F'.' '{print $1"."$2}')
cudnn_file="cudnn-"${cuda_big_version}"-linux-x64-v"${cudnn_version}".tgz"
echo "sh /var/lib/cloud/instance/scripts/part-001 check" | tee -a $profile_filefiecho "os:$os" >> $log 2>&1if [ "$os" = "ubuntu" ]; then
disable_nouveau_ubuntu >> $log 2>&1
if [ -f "/etc/apt/sources.list.d/sources-aliyun-0.list" ]; then
repo_file="/etc/apt/sources.list.d/sources-aliyun-0.list"
else
repo_file="/etc/apt/sources.list"
fi
baseurl=$(cat $repo_file |grep "^deb" | head -1 | awk -F'[/]' '{print $1"//"$3}' |awk -F ' ' '{print $2}')
if [ -z "$baseurl" ]; then
baseurl="http://mirrors.cloud.aliyuncs.com"
fielif [ "$os" = "suse" ]; then
baseurl=$(cat /etc/zypp/repos.d/SLES12-SP2-0.repo |grep baseurl | head -1| awk -F'[=/]' '{print $2"//"$4}')
if [ -z "$baseurl" ]; then
baseurl="http://mirrors.cloud.aliyuncs.com"
fielif [ "$os" = "centos" ]; then
baseurl=$(cat /etc/yum.repos.d/CentOS-Base.repo |grep baseurl | head -1 | awk -F'[/]' '{print $1"//"$3}' |awk -F '=' '{print $2}')
if [ -z "$url" ]; then
baseurl="http://mirrors.cloud.aliyuncs.com"
fi
if [ ! -f "/usr/bin/lsb_release" ]; then
pkgname=$(yum provides /usr/bin/lsb_release |grep centos|grep x86_64 |head -1 |awk -F: '{print $1}')
if [ -z "$pkgname" ]; then
echo "INSTALL_ERROR: /usr/bin/lsb_release pkg not exists!" >> $log 2>&1
exit 1
fi
yum install -y $pkgname >> $log 2>&1
fi
if [ ! -f "/usr/bin/gcc" ]; then
yum install -y gcc
fi
disable_nouveau_centos >> $log 2>&1
str=$(lsb_release -r | awk -F'[:.]' '{print $2}')
version=$(echo $str | sed 's/ //g')
create_nvidia_repo_centosfi
install_kernel_${os} >> $log 2>&1if [ $? -ne 0 ]; then
echo "INSTALL_ERROR: kernel-devel install fail!!!" >> $log 2>&1
exit 1fi
cd /root/nvidia
begin_download=$(date '+%s')
download >> $log 2>&1if [ $? -ne 0 ]; then
exit 1fi
end_download=$(date '+%s')
time_download=$((end_download-begin_download))echo "NVIDIA download OK! Using time $time_download s !!" >> $log 2>&1
begin=$(date '+%s')
install_driver >> $log 2>&1if [ $? -ne 0 ]; then
exit 1fi
end=$(date '+%s')
time_install=$((end-begin))echo "NVIDIA install driver OK! Using time $time_install s !!" >> $log 2>&1
begin=$(date '+%s')
install_cuda >> $log 2>&1if [ $? -ne 0 ]; then
exit 1fi
end=$(date '+%s')
time_install=$((end-begin))echo "NVIDIA install cuda OK! Using time $time_install s !!" >> $log 2>&1
begin=$(date '+%s')
install_cudnn >> $log 2>&1if [ $? -ne 0 ]; then
exit 1fi
end=$(date '+%s')
time_install=$((end-begin))echo "NVIDIA install cudnn OK! Using time $time_install s !!" >> $log 2>&1
enable_pmecho "reboot......" >> $log 2>&1
sleep 2
reboot
【阿里云,阿里巴巴集团旗下云计算品牌,全球卓越的云计算技术和服务提供商。海商(www.hishop.com.cn)作为阿里云湖南唯一授权服务中心,国内知名商城系统及商城网站建设提供商,专为企业提供专业完善电商整体解决方案、微商云、视频云、医疗云等,咨询阿里云服务器详情可电联:18684778716(微信同号)】