EAIS实例成功绑定至ECS实例后,您需要远程登录该ECS实例,然后使用EAIS实例进行AI推理。本文为您介绍使用C++程序通过EAIS推理PyTorch模型的具体操作。
前提条件
已将EAIS实例绑定至ECS实例上。具体操作,请参见绑定ECS实例。
已绑定的ECS实例操作系统为Ubuntu、CentOS或Alibaba Cloud Linux。更换ECS实例操作系统的具体操作,请参见更换操作系统(系统盘)。
背景信息
EAIS支持您根据自身业务场景进行选择不同的编程语言,来使用EAIS进行PyTorch模型推理,目前支持两种方式分别为:
使用Python脚本推理PyTorch模型。具体操作,请参见使用EAIS推理PyTorch模型(Python)。
使用C++程序推理PyTorch模型。EAIS支持包含libtorch和CUDA(包含CUDA API和CUDA kernel)的C++程序调用。
本文介绍使用该方式进行推理的具体操作。如果您使用EAIS推理过程中遇到性能或者功能问题,请联系EAIS技术支持为您提供定制化的优化方案。
与GPU实例(NVIDIA T4)相比,使用EAIS推理会明显提升推理的性能。C++程序(依赖于libtorch)使用EAIS实例(eais.ei-a6.2xlarge规格)与使用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倍 |
使用限制
EAIS支持的软件版本如下:
如果您的ECS实例操作系统为CentOS 7.9,则默认glibc和libstdc++软件环境不满足需求,需要您手动升级glibc和libstdc++版本。查看与升级软件版本的具体操作,请参见相关操作。
软件名称 | 版本 |
glibc版本 | 不低于2.23 |
libstdc++版本 | 不低于3.4.25 |
操作步骤
使用EAIS部署推理程序
您可以在您的开发机器上开发并编译好代码,然后将编译好的程序拷贝到ECS实例上运行,即可使用EAIS推理PyTorch模型。
远程登录ECS实例。
安装eais-tool软件包,然后查看EAIS实例的相关信息。
具体操作,请参见eais-tool。
安装eais-cuda软件包。
具体操作,请参见eais-cuda。
安装eais-torch软件包。
具体操作,请参见eais-torch。
部署应用程序。
将您在您自己的开发机器上编译好的C++推理应用程序以及依赖的库文件、PyTorch模型文件等拷贝至ECS实例上。
使用EAIS推理PyTorch模型。
假设您用于推理PyTorch模型C++程序名称为my_program,且您运行您的C++程序的命令为如下所示:
export LD_LIBRARY_PATH=/your/lib/path:$LD_LIBRARY_PATH ./my_program my_model.pt
如果您需要使用EAIS推理您的PyTorch模型,您可以执行如下任意一种命令运行您的C++程序:
命令一:
export LD_LIBRARY_PATH=/your/lib/path:$LD_LIBRARY_PATH LD_PRELOAD=libtorcheais.so ./my_program my_model.pt
命令二:
export LD_LIBRARY_PATH=/your/lib/path:$LD_LIBRARY_PATH export LD_PRELOAD=libtorcheais.so ./my_program my_model.pt
使用EAIS绑定的ECS实例编译并运行推理程序
您可以在EAIS实例绑定的ECS实例上直接编写代码、编译代码并运行推理程序。
远程登录ECS实例。
安装CUDA 11.X.X版本软件包。
执行如下命令,下载并安装CUDA软件包。
说明本操作以安装CUDA 11.7.0版本为例,具体命令以您实际安装的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-tool软件包,然后查看EAIS实例的相关信息。
具体操作,请参见eais-tool。
安装eais-cuda软件包。
具体操作,请参见eais-cuda。
安装eais-torch软件包。
具体操作,请参见eais-torch。
开发模型推理代码并完成编译。
执行如下命令,下载包并解压含有C++示例代码的软件包。
wget https://aiacc-inference-public.oss-cn-beijing.aliyuncs.com/eais/packages/eais-miniconda.zip unzip eais-miniconda.zip
开发模型推理代码并进行编译。
您可以根据实际情况参考软件包中的示例代码,开发需要的模型推理代码。
C++示例代码保存在eais-miniconda/eais/cpp/src目录下。
如果您需要使用EAIS运行推理程序,则您无需修改任何代码,执行下一步即可。
说明解压后的示例代码不依赖于EAIS产品,完全是基于libtorch+CUDA编写的模型推理代码,您可以直接使用,也可以在您自己的GPU实例上运行示例代码。
使用EAIS推理PyTorch模型。
假设您用于推理PyTorch模型C++程序名称为my_program,且您运行您的C++程序的命令为如下所示:
export LD_LIBRARY_PATH=/your/lib/path:$LD_LIBRARY_PATH ./my_program my_model.pt
如果您需要使用EAIS推理您的PyTorch模型,您可以执行如下任意一种命令运行您的C++程序:
命令一:
export LD_LIBRARY_PATH=/your/lib/path:$LD_LIBRARY_PATH LD_PRELOAD=libtorcheais.so ./my_program my_model.pt
命令二:
export LD_LIBRARY_PATH=/your/lib/path:$LD_LIBRARY_PATH export LD_PRELOAD=libtorcheais.so ./my_program my_model.pt
相关操作
查看和升级glibc版本
远程登录ECS实例。
执行如下命令,查看glibc版本。
strings /lib64/libc.so.6 | grep GLIBC_
命令回显如下,您只需要查看glibc最高的版本是否不低于2.23即可。
如果您的glibc版本低于2.23,则您需要执行如下命令,升级glibc版本。
mkdir glibc pushd glibc wget https://ftp.gnu.org/gnu/glibc/glibc-2.23.tar.gz tar -xf glibc-2.23.tar.gz cd glibc-2.23/ mkdir build pushd build ../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin make -j`nproc` sudo make DESTDIR=/tmp/stage install sudo make install popd popd sudo rm -rf glibc
查看和升级libstdc++版本
远程登录ECS实例。
执行如下命令,查看libstdc++版本。
strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX_
命令回显如下,您只需要查看libstdc++最高的版本是否不低于3.4.25即可。
如果您的libstdc++版本低于3.4.25,则您需要执行如下命令,升级libstdc++版本。
mkdir libstd pushd libstd wget http://ftp.de.debian.org/debian/pool/main/g/gcc-8/libstdc++6_8.3.0-6_amd64.deb ar -x libstdc++6_8.3.0-6_amd64.deb tar xf data.tar.xz rm /usr/lib64/libstdc++.so.6 cp usr/lib/x86_64-linux-gnu/* /usr/lib64/ popd sudo rm -rf libstd