NPU计算型实例必须安装NPU驱动才可以使用NPU的计算能力。本文介绍如何创建NPU计算型实例并自动安装驱动和SDK。
前提条件
完成创建ECS实例的准备工作:
- 创建账号,以及完善账号信息。
- 阿里云提供一个默认的专有网络VPC,如果您不想使用默认专有网络VPC,可以在目标地域创建一个专有网络和交换机。具体操作,请参见搭建IPv4专有网络。
- 阿里云提供一个默认的安全组,如果您不想使用默认安全组,可以在目标地域创建一个安全组。具体操作,请参见创建安全组。
背景信息
操作步骤
本步骤重点介绍NPU计算型实例相关的配置,如果您想了解其他通用配置,请参见使用向导创建实例。
自动安装NPU驱动和SDK
如果通过实例自定义数据传入了自动安装脚本,NPU计算型实例首次启动时会通过cloud-init自动执行脚本,安装NPU驱动和SDK。
- NPU驱动:支持的版本、镜像要求、实例规格要求下表所示。
NPU驱动 支持的公共镜像版本 支持的实例规格 1.0.5 - CentOS 7.6 64位
- CentOS 7.7 64位
- Ubuntu 16.04 64位
ebman1 - SDK:SDK为通过Python Conda环境安装的Tensorflow和MXNet深度学习框架,版本信息如下表所示。
Conda环境 相关版本信息 alinpu_tensorflow_py36 - agraph=1.0.2
- hgai=1.0.5
- tensorflow=1.13.2
alinpu_mxnet_py36 - agraph=1.0.2
- hgai=1.0.5
- mxnet=1.5.1
如果您自行在实例自定义数据区域配置自动安装脚本或者手动执行脚本,请参考以下脚本内容:
#!/usr/bin/env bash
IS_INSTALL_DRIVER="TRUE"
IS_INSTALL_SDK="TRUE"
INSTALL_DIR="/root/auto_install"
AUTO_INSTALL_SCRIPT="auto_install.sh"
INSTANCE_TYPE=$(curl http://100.100.100.200/latest/meta-data/instance/instance-type)
INSTANCE_ARRAY=(${INSTANCE_TYPE//./ })
INSTANCE_FAMILY=${INSTANCE_ARRAY[1]}
BASE_URL=$(curl http://100.100.100.200/latest/meta-data/source-address | head -1)
DOWNLOAD_URL="${BASE_URL}/opsx/ecs/linux/binary"
DOWNLOAD_URL_SCRIPT=${DOWNLOAD_URL}/script/${INSTANCE_FAMILY}/${AUTO_INSTALL_SCRIPT}
echo ${DOWNLOAD_URL_SCRIPT}
mkdir -p ${INSTALL_DIR} && cd ${INSTALL_DIR} && wget -t 10 --timeout=10 ${DOWNLOAD_URL_SCRIPT}
bash ${INSTALL_DIR}/${AUTO_INSTALL_SCRIPT} ${IS_INSTALL_DRIVER} ${IS_INSTALL_SDK}
说明 如果不需要安装SDK,将IS_INSTALL_SDK的值修改为FALSE即可。
自动安装脚本具有以下优势:
- 提供最新版本的NPU驱动和SDK。
- 登录实例后可以查看安装进度,如果正在安装可以看到安装进度条,如果已经完成安装可以看到安装结果。
NPU使用示例
成功安装NPU驱动和SDK后,您可以执行以下例程体验使用SDK编写一个运行在NPU上的推理应用,实现使用NPU进行图像分类。
说明 模型量化过程中会产生中间数据,为保证顺利执行例程,需要预留约60 GiB的磁盘空间。
- NPU TensorFlow例程
NPU TensorFlow例程以预训练模型resnet_v2_50为例,执行该例程时包括以下模式:
- convert mode:此模式下会加载原始FP32模型,经过量化、编译生成适合NPU处理的INT8模型。生成的NPU INT8模型文件会放在output_resnet_v2_50目录下,命名为resnet_v2_50.npu.pb。
- npu mode:此模式下会加载NPU INT8模型进行模型评估。
脚本内容如下:# 激活NPU TensorFlow环境。 conda activate alinpu_tensorflow_py36 # 下载测试数据集。 mkdir -p /root/.cache/agraph/tf/datasets/imagenet_val/tf_record_cal source_address=$(curl http://100.100.100.200/latest/meta-data/source-address|head -n 1) source_address="${source_address}/opsx/ecs/linux/binary/alinpu" wget -t 100 --timeout=10 ${source_address}/data/tf_record.tgz tar -zxf tf_record.tgz mv tf_record /root/.cache/agraph/tf/datasets/imagenet_val cp /root/.cache/agraph/tf/datasets/imagenet_val/tf_record/validation-00000-of-00128 /root/.cache/agraph/tf/datasets/imagenet_val/tf_record_cal # 下载resnet_v2_50 FP32模型。 mkdir -p /root/.cache/agraph/tf/models/resnet_v2_50 wget ${source_address}/models/tensorflow/resnet_v2_50/resnet_v2_50.pb mv resnet_v2_50.pb /root/.cache/agraph/tf/models/resnet_v2_50 # 下载例程测试脚本。 wget ${source_address}/example/tf_resnet_v2_50.py # 在convert mode下执行,生成的NPU INT8模型文件会放在output_resnet_v2_50目录下,命名为resnet_v2_50.npu.pb。 python tf_resnet_v2_50.py --mode convert # 在npu mode下执行,使用生成的NPU INT8模型进行模型评估。 python tf_resnet_v2_50.py --mode npu
成功执行脚本后,模型评估结果如下图所示。 - NPU MXNet例程
NPU MXNet例程以预训练模型resnet50_v2为例,执行该例程时包括以下模式:
- convert mode:此模式下会加载原始FP32模型,经过量化、编译生成适合NPU处理的INT8模型。生成的NPU INT8模型文件会放在output_resnet50_v2的目录下,命名为resnet50_v2.npu-symbol.json以及resnet50_v2.npu-0000.params。
- npu mode:此模式会加载NPU INT8模型进行模型评估。
脚本内容如下:# 激活NPU MXNet环境。 conda activate alinpu_mxnet_py36 # 下载测试数据集。 mkdir -p /root/.cache/agraph/mxnet/datasets/imagenet_mxnet source_address=$(curl http://100.100.100.200/latest/meta-data/source-address|head -n 1) source_address="${source_address}/opsx/ecs/linux/binary/alinpu" wget -t 100 --timeout=10 ${source_address}/data/ILSVRC2012_img_out.tgz tar -zxf ILSVRC2012_img_out.tgz mv ILSVRC2012_img_out /root/.cache/agraph/mxnet/datasets/imagenet_mxnet/ # 下载resnet50_v2 FP32模型。 mkdir -p /root/.cache/agraph/mxnet/models/resnet50_v2 wget ${source_address}/models/mxnet/resnet50_v2/resnet50_v2-0000.params wget ${source_address}/models/mxnet/resnet50_v2/resnet50_v2-symbol.json mv resnet50_v2-0000.params resnet50_v2-symbol.json /root/.cache/agraph/mxnet/models/resnet50_v2/ # 下载例程测试脚本。 wget ${source_address}/example/mxnet_resnet50_v2.py # 在convert mode下执行,生成的NPU INT8模型文件会放在output_resnet50_v2目录下,命名为resnet50_v2.npu-symbol.json以及resnet50_v2.npu-0000.params。 python mxnet_resnet50_v2.py --mode convert # 在npu mode下执行,使用生成的NPU INT8模型进行模型评估。 python mxnet_resnet50_v2.py --mode npu
成功执行脚本后,模型评估结果如下图所示。