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