使用EAIS推理PyTorch模型(C++)

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模型。

  1. 远程登录ECS实例。

    1. 登录EAIS控制台

    2. 在页面左上角选择实例所在地域。

    3. 在实例列表中,单击EAIS实例对应的ECS实例ID,进入该ECS实例控制台。

    4. 远程登录ECS实例。

      具体操作,请参见远程连接ECS实例

  2. 安装eais-tool软件包,然后查看EAIS实例的相关信息。

    具体操作,请参见eais-tool

  3. 安装eais-cuda软件包。

    具体操作,请参见eais-cuda

  4. 安装eais-torch软件包。

    具体操作,请参见eais-torch

  5. 部署应用程序。

    将您在您自己的开发机器上编译好的C++推理应用程序以及依赖的库文件、PyTorch模型文件等拷贝至ECS实例上。

  6. 使用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实例上直接编写代码、编译代码并运行推理程序。

  1. 远程登录ECS实例。

    1. 登录EAIS控制台

    2. 在页面左上角选择实例所在地域。

    3. 在实例列表中,单击EAIS实例对应的ECS实例ID,进入该ECS实例控制台。

    4. 远程登录ECS实例。

      具体操作,请参见远程连接ECS实例

  2. 安装CUDA 11.X.X版本软件包。

    1. 执行如下命令,下载并安装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
    2. 执行如下命令,设置CUDA相关的环境变量。

      export PATH=/usr/local/cuda/bin:$PATH
      export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
  3. 安装eais-tool软件包,然后查看EAIS实例的相关信息。

    具体操作,请参见eais-tool

  4. 安装eais-cuda软件包。

    具体操作,请参见eais-cuda

  5. 安装eais-torch软件包。

    具体操作,请参见eais-torch

  6. 开发模型推理代码并完成编译。

    1. 执行如下命令,下载包并解压含有C++示例代码的软件包。

      wget https://aiacc-inference-public.oss-cn-beijing.aliyuncs.com/eais/packages/eais-miniconda.zip
      unzip eais-miniconda.zip
    2. 开发模型推理代码并进行编译。

      • 您可以根据实际情况参考软件包中的示例代码,开发需要的模型推理代码。

        C++示例代码保存在eais-miniconda/eais/cpp/src目录下。

      • 如果您需要使用EAIS运行推理程序,则您无需修改任何代码,执行下一步即可。

      说明

      解压后的示例代码不依赖于EAIS产品,完全是基于libtorch+CUDA编写的模型推理代码,您可以直接使用,也可以在您自己的GPU实例上运行示例代码。

  7. 使用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版本

  1. 远程登录ECS实例。

    1. 登录EAIS控制台

    2. 在页面左上角选择实例所在地域。

    3. 在实例列表中,单击EAIS实例对应的ECS实例ID,进入该ECS实例控制台。

    4. 远程登录ECS实例。

      具体操作,请参见远程连接ECS实例

  2. 执行如下命令,查看glibc版本。

    strings /lib64/libc.so.6 | grep GLIBC_

    命令回显如下,您只需要查看glibc最高的版本是否不低于2.23即可。glibc版本

  3. 如果您的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++版本

  1. 远程登录ECS实例。

    1. 登录EAIS控制台

    2. 在页面左上角选择实例所在地域。

    3. 在实例列表中,单击EAIS实例对应的ECS实例ID,进入该ECS实例控制台。

    4. 远程登录ECS实例。

      具体操作,请参见远程连接ECS实例

  2. 执行如下命令,查看libstdc++版本。

    strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX_

    命令回显如下,您只需要查看libstdc++最高的版本是否不低于3.4.25即可。libstdc++版本

  3. 如果您的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