EAIS实例成功绑定至ECS实例后,您需要远程登录该ECS实例,然后使用EAIS实例进行AI推理。本文为您介绍使用Python脚本通过EAIS推理PyTorch模型的具体操作。
前提条件
已将EAIS实例绑定至ECS实例上。具体操作,请参见绑定实例。
已绑定的ECS实例操作系统为Ubuntu、CentOS或Alibaba Cloud Linux。更换ECS实例操作系统的具体操作,请参见更换操作系统(系统盘)。
背景信息
EAIS支持您根据自身业务场景选择不同的编程语言,来使用EAIS进行PyTorch模型推理,目前支持两种方式分别为:
使用Python脚本推理PyTorch模型。支持使用PyTorch script模式或者PyTorch eager mode模式进行推理。本文介绍使用该方式进行推理的具体操作。
使用C++程序推理PyTorch模型。具体操作,请参见使用EAIS推理PyTorch模型(C++)。
如果您使用EAIS推理过程中遇到性能或者功能问题,请联系EAIS技术支持为您提供定制化的优化方案。
运行环境
本教程重点介绍使用Python脚本推理PyTorch模型的过程,过程中使用EAIS为您提供的两种运行环境部署方式:
使用EAIS提供的EAIS miniconda环境。
说明EAIS miniconda环境是阿里云基于miniconda开发的EAIS使用环境,该环境包含了推理PyTorch模型和使用EAIS推理PyTorch模型所依赖的软件环境,以及用于测试体验的样例文件和模型文件等。部分文件目录的说明如下:
eais/data/
:存放了用于执行示例程序时需要的数据文件和模型文件。eais/python/
:存放了推理样例所需的Python脚本。
在您已有的PyTorch模型运行环境中安装EAIS提供的Python软件包。
推理性能
与GPU实例(NVIDIA T4)相比,使用EAIS推理会明显提升推理的性能。Python脚本使用eais.ei-a6.2xlarge规格的EAIS实例与使用GPU实例(NVIDIA T4)推理的性能对比数据如下表所示。
本文数据仅为示例,具体数据以您的实际推理结果为准。
您也可以参考eais-miniconda软件包中提供的Python脚本,自行测试GPU实例(NVIDIA T4)推理的性能来与EAIS实例进行比较。
推理模型 | eais.ei-a6.2xlarge | GPU实例(NVIDIA T4) | EAIS比GPU实例(NVIDIA T4)提升的性能倍数 |
resnet50 | 2.19 ms | 6.24 ms | 2.85倍 |
bert-base | 5.37 ms | 8.32 ms | 1.55倍 |
操作步骤
登录并连接实例。
安装eais-tool软件包,然后查看EAIS实例的相关信息。
具体操作,请参见eais-tool。
安装CUDA 11.X.X版本软件包。
执行如下命令,安装CUDA软件包。
说明本操作以安装CUDA 11.7.0版本为例,具体命令以您实际安装的版本为准。
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。
搭建运行环境。
方法一:使用EAIS提供的EAIS miniconda环境。
您只需要安装eais-miniconda软件包即可,具体操作,请参见eais-miniconda。
方法二:在您已有的PyTorch模型运行环境中安装EAIS提供的Python软件包。
重要请确保您的运行环境中已安装了Python3以及pip3软件包。
执行如下命令,安装官方提供的PyTorch版本的软件包,以PyTorch 1.13.1为例。
pip3 install torch==1.13.1
安装eais-torch软件包。
具体操作,请参见eais-torch。
开发模型推理脚本并使用EAIS进行加速推理。
相较于普通推理流程,您仅需要在进行推理前,在您原有推理脚本的基础上添加一行
import eais.torch_eais
导入EAIS提供的Python模块,即可使用EAIS推理PyTorch模型。支持使用PyTorch script模式和PyTorch eager mode模式进行推理,Python脚本开发说明和使用示例如下:使用PyTorch script模式推理
Python脚本开发说明
假设您的PyTorch模型推理初始源代码如下所示:
# 导入torch模块 import torch import torchvision # 加载script模型 model = torch.jit.load(model_file).cuda() # 初始化输入 tensor input_tensor = torch.randn(...).cuda() # 使用gpu进行模型推理 output_tensors = model(input_tensor)
如果您需要使用EAIS推理您的PyTorch模型,请将源代码修改为如下内容:
# 导入torch模块 import torch import torchvision # 导入eais提供的python模块 import eais.torch_eais # 加载script模型 model = torch.jit.load(model_file).cuda() # 初始化输入 tensor input_tensor = torch.randn(...).cuda() # 使用eais进行模型推理 output_tensors = model(input_tensor)
使用示例
准备您的模型推理Python脚本。
本示例以resnet50模型推理、pytorch_resnet50.py脚本为例,脚本内容如下:
# 导入torch模块 import torch # 导入eais提供的python模块 import eais.torch_eais # 导入参数解析模块 import argparse if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('-m', '--model', type=str, required=True, help='model file path') FLAGS = parser.parse_args() # 加载script模型 model = torch.jit.load(FLAGS.model).cuda() # 初始化随机输入tensor input_tensor = torch.rand((1, 3, 224, 224)).cuda() # 执行模型推理 output = model(input_tensor).cpu() print("output shape:", output.shape)
执行如下命令,运行您准备好的EAIS模型推理脚本。
python3 pytorch_resnet50.py -m <resnet50_model_file>
使用PyTorch eager mode模式推理
Python脚本开发说明
假设您的PyTorch模型推理初始源代码如下所示:
# 导入torch模块 import torch import torchvision class MyModule(torch.nn.Module): def __init__(self): super(MyModule, self).__init__() ...... def forward(self, x): ...... # 初始化torch模型 model = MyModule.cuda() # 初始化输入 tensor input_tensor = torch.randn(...).cuda() # 使用gpu进行模型推理 output_tensors = model(input_tensor)
如果您需要使用EAIS推理您的PyTorch模型,请将源代码修改为如下内容:
重要源代码中不支持
forward
函数中包含有python numpy
操作和自定义的python function
。# 导入torch模块 import torch import torchvision # 导入eais提供的python模块 import eais.torch_eais class MyModule(torch.nn.Module): def __init__(self): super(MyModule, self).__init__() ...... def forward(self, x): ...... # 初始化torch模型 model = MyModule().cuda() # 初始化输入 tensor input_tensor = torch.randn(...).cuda() # 使用eais进行模型推理 output_tensors = model(input_tensor)
使用示例
准备您的模型推理Python脚本。
本示例以resnet50模型推理、pytorch_resnet50.py脚本为例,脚本内容如下:
# 导入torch模块 import torch import torchvision # 导入eais提供的python模块 import eais.torch_eais if __name__ == '__main__': # 初始化resnet50 torch模型 model = torchvision.models.resnet50(pretrained=True).cuda() # 初始化随机输入tensor input_tensor = torch.rand((1, 3, 224, 224)).cuda() # 执行模型推理 output = model(input_tensor).cpu() print("output shape:", output.shape)
执行如下命令,运行您准备好的EAIS模型推理脚本。
python3 pytorch_resnet50.py