您可以在ECS实例(非GPU实例)上绑定一个弹性加速计算实例EAIS(EAIS可以为ECS实例提供GPU资源),即可生成一款新规格的GPU实例。相比直接购买GPU实例,使用该方式可以为您灵活提供GPU资源并有效节省成本。如果您初次使用EAIS,可以通过本文内容体验在ECS实例上使用EAIS通过C++程序推理PyTorch模型并获得性能加速的完整使用流程,帮助您快速上手EAIS。
背景信息
本教程将引导您创建一个华东1(杭州)地域,eais.ei-a6.2xlarge规格的EAIS实例,并以公开的resnet50模型和bert-base模型为例,带您体验在基于图像分类和NLP的推理场景下,使用EAIS推理PyTorch模型并获得性能加速的完整操作流程。如果您使用EAIS推理过程中遇到性能或者功能问题,请联系EAIS技术支持为您提供定制化的优化方案。
本教程重点介绍使用C++程序推理PyTorch模型的过程,如需了解Python脚本推理PyTorch模型的过程,请参见使用EAIS推理PyTorch模型(Python)。
与GPU实例(NVIDIA T4)相比,使用EAIS推理会明显提升推理的性能。C++程序(依赖于libtorch)使用eais.ei-a6.2xlarge规格的EAIS实例与使用GPU实例(NVIDIA T4)推理的性能对比数据如下表所示。
本文数据仅为示例,具体数据以您的实际推理结果为准。
您也可以参考eais-miniconda软件包中提供的C++程序代码,自行测试GPU实例(NVIDIA T4)推理的性能来与EAIS实例进行比较。
推理模型 | eais.ei-a6.2xlarge | GPU实例(NVIDIA T4) | EAIS比GPU实例(NVIDIA T4)提升的性能倍数 |
resnet50 | 2.20 ms | 6.24 ms | 2.84倍 |
bert-base | 5.38 ms | 8.32 ms | 1.55倍 |
步骤一:创建并绑定ECS实例和EAIS实例
创建ECS实例。
创建EAIS实例。
登录EAIS控制台。
在左侧导航栏,选择弹性加速计算实例 EAIS > 弹性加速计算实例列表。
重要如果您的阿里云账号未添加并授权AliyunServiceRoleForEais角色(角色权限策略为AliyunServiceRoleForEais),您需要先授权EAIS创建一个服务关联角色后,再创建EAIS实例。具体操作,请参见服务关联角色。
单击创建弹性加速计算实例。
在EAIS实例购买页面,配置EAIS实例参数,然后单击立即购买。
配置项说明如下:
配置项
配置示例
地域
华东1(杭州)
实例名称
eais_test
实例规格
eais.ei-a6.2xlarge
专有网络
eais-vpc
交换机
eais-vswitch
安全组
eais-securitygroup
资源组
默认资源组
在确认订单页面,选中服务协议右侧的我已阅读并同意弹性加速计算实例服务协议,然后单击立即开通。
绑定EAIS实例至ECS实例。
步骤二:启动EAIS实例
仅使用EAIS控制台和调用CreateEaisEi创建的EAIS实例需要执行本操作。
在EAIS实例列表中,单击实例
eais_test
所在操作列下的启动。在启动实例对话框中,单击确定。
EAIS实例列表每15秒自动刷新,当EAIS实例状态由已绑定变为使用中时,表示EAIS实例启动成功。
步骤三:登录ECS实例
步骤四:查看EAIS相关信息
安装eais-tool软件包。
执行如下命令,安装eais-tool deb软件包。
export VERSION=4.2.5 wget https://eais-rel-pub.oss-cn-beijing.aliyuncs.com/packages/eais-tool_${VERSION}_amd64.deb sudo dpkg -i eais-tool_${VERSION}_amd64.deb source /etc/profile
执行如下命令,查看eais-tool deb软件包安装结果。
dpkg -l | grep eais-tool
回显信息中包含eais-tool软件包信息,表示eais-tool deb软件包安装成功。
查看EAIS相关信息。
如果您想查看EAIS相关信息,只需在您安装eais-tool软件包后,执行
eais_smi
命令,即可在回显中查看EAIS实例规格、EAIS GPU使用率等信息,回显示例如下。
步骤五:搭建运行环境
本教程以cxx11 ABI方式编译的依赖于libtorch 1.13.1版本的EAIS deb软件包为例,进行如下步骤搭建C++运行环境。
安装CUDA。
执行如下命令,下载并安装CUDA软件包。
wget https://developer.download.nvidia.com/compute/cuda/11.7.0/local_installers/cuda_11.7.0_515.43.04_linux.run sudo sh cuda_11.7.0_515.43.04_linux.run --silent --toolkit
执行如下命令,设置CUDA相关的环境变量。
export PATH=/usr/local/cuda/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
安装eais-cuda软件包。
执行如下命令,安装eais-cuda deb软件包。
export VERSION=4.2.5 wget https://eais-rel-pub.oss-cn-beijing.aliyuncs.com/packages/eais-cuda_${VERSION}_amd64.deb sudo dpkg -i eais-cuda_${VERSION}_amd64.deb
执行如下命令,查看eais-cuda deb软件包安装结果。
dpkg -l | grep eais-cuda
回显信息中包含eais-cuda软件包信息,表示eais-cuda deb软件包安装成功。
安装eais-torch软件包。
执行如下命令,安装eais-torch软件包。
export VERSION=4.2.5 wget https://eais-rel-pub.oss-cn-beijing.aliyuncs.com/packages/eais-torch1.13.1-cxx11-abi_${VERSION}_amd64.deb sudo dpkg -i eais-torch1.13.1-cxx11-abi_${VERSION}_amd64.deb source /etc/profile
执行如下命令,查看eais-torch deb软件包安装结果。
dpkg -l | grep eais-torch
回显信息中包含eais-torch软件包信息,表示eais-torch deb软件包安装成功。
步骤六:推理并加速PyTorch模型
下载EAIS C++测试样例。
执行如下命令,下载并解压包含了EAIS C++测试样例的eais-miniconda软件包。
wget https://eais-rel-pub.oss-cn-beijing.aliyuncs.com/packages/eais-miniconda.zip sudo apt-get update && sudo apt-get install -y unzip unzip -q eais-miniconda.zip
执行如下命令,进入eais-miniconda软件包根目录。
cd eais-miniconda/
说明后续操作均会以此为根目录。
使用C++软件包推理并加速Pytorch模型。
执行如下命令,进入C++软件包测试目录。
cd eais/cpp
编译C++示例脚本。
执行如下命令,安装编译及运行示例脚本所需要的软件包。
sudo apt-get install -y build-essential cmake libopencv-dev
执行如下命令,编译生成可执行的示例程序。
mkdir build cd build cmake .. make -j8 cd ..
执行如下命令,查看生成的示例程序。
ls build/src
回显结果如下,表示示例程序已生成。
运行C++示例程序。
执行如下命令,设置示例程序依赖的动态库路径。
export LD_LIBRARY_PATH=`pwd`/third_party/libtorch/lib:$LD_LIBRARY_PATH
进行resnet50模型推理。
执行如下命令,进行resnet50模型推理(不包含CUDA调用信息)。
说明本示例中数据预处理、后处理是调用
opencv
和torch
接口在CPU上实现的,具体代码实现在src
目录下。LD_PRELOAD=libtorcheais.so \ build/src/pytorch_resnet50 \ -m ../data/models/resnet50.pt \ -l ../data/densenet_labels.txt \ ../data/images
参数信息说明如下:
LD_PRELOAD
:预加载已安装的动态库libtorcheais.so
。build/src/pytorch_resnet50
:通过编译命令生成的可执行的示例程序pytorch_resnet50
。../data/models/resnet50.pt
:eais-miniconda软件包中提供的resnet50模型文件。../data/densenet_labels.txt
:eais-miniconda软件包中提供的存放图片类别名称的文件。../data/images/
:eais-miniconda软件包中提供的样例图片路径。
您将从执行结果中获取图片的分类结果信息,部分回显如下。
执行如下命令,进行包含cuda调用信息的resnet50模型推理。
说明本示例中数据预处理、后处理是使用
cuda kernel
实现的,具体代码实现在src
目录下。LD_PRELOAD=libtorcheais.so \ build/src/pytorch_resnet50_cuda \ -m ../data/models/resnet50.pt \ -l ../data/densenet_labels.txt \ ../data/images
参数信息说明如下:
LD_PRELOAD
:预加载已安装的动态库libtorcheais.so
。build/src/pytorch_resnet50_cuda
:通过编译命令生成的可执行的示例程序build/src/pytorch_resnet50_cuda
。../data/models/resnet50.pt
:eais-miniconda软件包中提供的resnet50模型文件。../data/densenet_labels.txt
:eais-miniconda软件包中提供的存放图片类别名称的文件。../data/images/
:eais-miniconda软件包中提供的样例图片路径。
测试推理resnet50模型和bert-base模型的性能。
执行如下命令,测试使用EAIS推理resnet50模型的性能。
LD_PRELOAD=libtorcheais.so \ build/src/pytorch_resnet50_perf \ -m ../data/models/resnet50.pt \ -d gpu
您将从执行结果中获取到resnet50模型的推理延迟数据,部分回显如下。
执行如下命令,测试使用EAIS推理bert-base模型的性能。
LD_PRELOAD=libtorcheais.so \ build/src/pytorch_bert_perf \ -m ../data/models/bert-base-uncased.pt \ -d gpu
您将从执行结果中获取到bert-base模型的推理延迟数据,部分回显如下。
(可选)步骤七:停止EAIS实例
当您暂时不需要EAIS提供的GPU能力时,您可以停止EAIS实例。
仅使用EAIS控制台和调用CreateEaisEi创建的EAIS实例支持执行本操作。
登录EAIS控制台。
在EAIS实例列表中,单击实例
eais_test
所在操作列下的停止。在停止实例对话框中,单击确定。
EAIS实例列表每15秒自动刷新,当EAIS实例状态由使用中变为已绑定时,表示EAIS实例已停止。
(可选)步骤八:解绑并释放EAIS实例
完成推理后,如果您需要将该EAIS实例绑定至其他ECS实例,您可以将该EAIS实例从ECS实例上解绑后,再重新绑定至其他ECS实例。如果您不再需要使用该EAIS实例,则您需要将该EAIS实例从ECS实例上解绑后,才能释放该EAIS实例。解绑和释放EAIS实例的具体操作如下:
登录EAIS控制台。
将EAIS实例从ECS实例上解绑。
在EAIS实例列表中,单击实例
eais_test
所在操作列下的解绑。在解绑ECS实例对话框中,单击确定。
EAIS实例列表每15秒自动刷新,当EAIS实例状态变从已绑定变为可绑定时,表示EAIS实例解绑成功。
将已解绑的EAIS实例释放。
在EAIS实例列表中,单击实例
eais_test
所在操作列下的释放资源。在释放资源对话框中,单击确定。
EAIS实例将从EAIS实例列表中删除。
相关文档
您也可以使用Python脚本体验EAIS推理PyTorch模型的完整使用流程,具体操作,请参见使用EAIS推理PyTorch模型(Python)。
您也可以使用EAIS体验EAIS推理TensorFlow模型的完整使用流程,帮助您快速上手EAIS,具体操作,请参见使用EAIS推理TensorFlow模型。