使用EAIS推理PyTorch模型(C++)
您可以在ECS實(shí)例(非GPU實(shí)例)上綁定一個(gè)彈性加速計(jì)算實(shí)例EAIS(EAIS可以為ECS實(shí)例提供GPU資源),即可生成一款新規(guī)格的GPU實(shí)例。相比直接購(gòu)買(mǎi)GPU實(shí)例,使用該方式可以為您靈活提供GPU資源并有效節(jié)省成本。如果您初次使用EAIS,可以通過(guò)本文內(nèi)容體驗(yàn)在ECS實(shí)例上使用EAIS通過(guò)C++程序推理PyTorch模型并獲得性能加速的完整使用流程,幫助您快速上手EAIS。
背景信息
本教程將引導(dǎo)您創(chuàng)建一個(gè)華東1(杭州)地域,eais.ei-a6.2xlarge規(guī)格的EAIS實(shí)例,并以公開(kāi)的resnet50模型和bert-base模型為例,帶您體驗(yàn)在基于圖像分類(lèi)和NLP的推理場(chǎng)景下,使用EAIS推理PyTorch模型并獲得性能加速的完整操作流程。如果您使用EAIS推理過(guò)程中遇到性能或者功能問(wèn)題,請(qǐng)聯(lián)系EAIS技術(shù)支持為您提供定制化的優(yōu)化方案。
本教程重點(diǎn)介紹使用C++程序推理PyTorch模型的過(guò)程,如需了解Python腳本推理PyTorch模型的過(guò)程,請(qǐng)參見(jiàn)使用EAIS推理PyTorch模型(Python)。
與GPU實(shí)例(NVIDIA T4)相比,使用EAIS推理會(huì)明顯提升推理的性能。C++程序(依賴(lài)于libtorch)使用eais.ei-a6.2xlarge規(guī)格的EAIS實(shí)例與使用GPU實(shí)例(NVIDIA T4)推理的性能對(duì)比數(shù)據(jù)如下表所示。
本文數(shù)據(jù)僅為示例,具體數(shù)據(jù)以您的實(shí)際推理結(jié)果為準(zhǔn)。
您也可以參考eais-miniconda軟件包中提供的C++程序代碼,自行測(cè)試GPU實(shí)例(NVIDIA T4)推理的性能來(lái)與EAIS實(shí)例進(jìn)行比較。
推理模型 | eais.ei-a6.2xlarge | GPU實(shí)例(NVIDIA T4) | EAIS比GPU實(shí)例(NVIDIA T4)提升的性能倍數(shù) |
resnet50 | 2.20 ms | 6.24 ms | 2.84倍 |
bert-base | 5.38 ms | 8.32 ms | 1.55倍 |
步驟一:創(chuàng)建并綁定ECS實(shí)例和EAIS實(shí)例
創(chuàng)建ECS實(shí)例。
創(chuàng)建一個(gè)專(zhuān)有網(wǎng)絡(luò)類(lèi)型的ECS實(shí)例,來(lái)作為EAIS實(shí)例的綁定目標(biāo)。
具體操作,請(qǐng)參見(jiàn)實(shí)例創(chuàng)建方式介紹。
說(shuō)明ECS實(shí)例的操作系統(tǒng)推薦使用Ubuntu 18.04。
創(chuàng)建EAIS實(shí)例。
登錄EAIS控制臺(tái)。
在左側(cè)導(dǎo)航欄,選擇彈性加速計(jì)算實(shí)例 EAIS > 彈性加速計(jì)算實(shí)例列表。
重要如果您的阿里云賬號(hào)未添加并授權(quán)AliyunServiceRoleForEais角色(角色權(quán)限策略為AliyunServiceRoleForEais),您需要先授權(quán)EAIS創(chuàng)建一個(gè)服務(wù)關(guān)聯(lián)角色后,再創(chuàng)建EAIS實(shí)例。具體操作,請(qǐng)參見(jiàn)服務(wù)關(guān)聯(lián)角色。
單擊創(chuàng)建彈性加速計(jì)算實(shí)例。
在EAIS實(shí)例購(gòu)買(mǎi)頁(yè)面,配置EAIS實(shí)例參數(shù),然后單擊立即購(gòu)買(mǎi)。
配置項(xiàng)說(shuō)明如下:
配置項(xiàng)
配置示例
地域
華東1(杭州)
實(shí)例名稱(chēng)
eais_test
實(shí)例規(guī)格
eais.ei-a6.2xlarge
專(zhuān)有網(wǎng)絡(luò)
eais-vpc
交換機(jī)
eais-vswitch
安全組
eais-securitygroup
資源組
默認(rèn)資源組
在確認(rèn)訂單頁(yè)面,選中服務(wù)協(xié)議右側(cè)的我已閱讀并同意彈性加速計(jì)算實(shí)例服務(wù)協(xié)議,然后單擊立即開(kāi)通。
綁定EAIS實(shí)例至ECS實(shí)例。
單擊管理控制臺(tái),前往EAIS控制臺(tái)。
在EAIS實(shí)例列表中,單擊實(shí)例
eais_test
所在操作列下的綁定。在對(duì)話(huà)框中,選擇待綁定的ECS實(shí)例。
單擊確定。
EAIS實(shí)例列表每15秒自動(dòng)刷新,當(dāng)EAIS實(shí)例狀態(tài)由綁定中變?yōu)?b data-tag="uicontrol" id="fec77329c7vq1" class="uicontrol">已綁定時(shí),表示EAIS實(shí)例綁定成功。
重要一個(gè)EAIS實(shí)例僅支持綁定一個(gè)ECS實(shí)例,一個(gè)ECS實(shí)例支持綁定一個(gè)或多個(gè)EAIS實(shí)例。更多信息,請(qǐng)參見(jiàn)使用限制。
步驟二:?jiǎn)?dòng)EAIS實(shí)例
僅使用EAIS控制臺(tái)和調(diào)用CreateEaisEi創(chuàng)建的EAIS實(shí)例需要執(zhí)行本操作。
在EAIS實(shí)例列表中,單擊實(shí)例
eais_test
所在操作列下的啟動(dòng)。在啟動(dòng)實(shí)例對(duì)話(huà)框中,單擊確定。
EAIS實(shí)例列表每15秒自動(dòng)刷新,當(dāng)EAIS實(shí)例狀態(tài)由已綁定變?yōu)?b data-tag="uicontrol" id="83f70b850c25p" class="uicontrol">使用中時(shí),表示EAIS實(shí)例啟動(dòng)成功。
步驟三:登錄ECS實(shí)例
登錄EAIS控制臺(tái)。
在EAIS實(shí)例列表中,單擊實(shí)例
eais_test
綁定的ECS實(shí)例ID,進(jìn)入該ECS實(shí)例詳情頁(yè)。遠(yuǎn)程登錄ECS實(shí)例。
具體操作,請(qǐng)參見(jiàn)連接方式概述。
步驟四:查看EAIS相關(guān)信息
安裝eais-tool軟件包。
執(zhí)行如下命令,安裝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
執(zhí)行如下命令,查看eais-tool deb軟件包安裝結(jié)果。
dpkg -l | grep eais-tool
回顯信息中包含eais-tool軟件包信息,表示eais-tool deb軟件包安裝成功。
查看EAIS相關(guān)信息。
如果您想查看EAIS相關(guān)信息,只需在您安裝eais-tool軟件包后,執(zhí)行
eais_smi
命令,即可在回顯中查看EAIS實(shí)例規(guī)格、EAIS GPU使用率等信息,回顯示例如下。
步驟五:搭建運(yùn)行環(huán)境
本教程以cxx11 ABI方式編譯的依賴(lài)于libtorch 1.13.1版本的EAIS deb軟件包為例,進(jìn)行如下步驟搭建C++運(yùn)行環(huán)境。
安裝CUDA。
執(zhí)行如下命令,下載并安裝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
執(zhí)行如下命令,設(shè)置CUDA相關(guān)的環(huán)境變量。
export PATH=/usr/local/cuda/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
安裝eais-cuda軟件包。
執(zhí)行如下命令,安裝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
執(zhí)行如下命令,查看eais-cuda deb軟件包安裝結(jié)果。
dpkg -l | grep eais-cuda
回顯信息中包含eais-cuda軟件包信息,表示eais-cuda deb軟件包安裝成功。
安裝eais-torch軟件包。
執(zhí)行如下命令,安裝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
執(zhí)行如下命令,查看eais-torch deb軟件包安裝結(jié)果。
dpkg -l | grep eais-torch
回顯信息中包含eais-torch軟件包信息,表示eais-torch deb軟件包安裝成功。
步驟六:推理并加速PyTorch模型
下載EAIS C++測(cè)試樣例。
執(zhí)行如下命令,下載并解壓包含了EAIS C++測(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
執(zhí)行如下命令,進(jìn)入eais-miniconda軟件包根目錄。
cd eais-miniconda/
說(shuō)明后續(xù)操作均會(huì)以此為根目錄。
使用C++軟件包推理并加速Pytorch模型。
執(zhí)行如下命令,進(jìn)入C++軟件包測(cè)試目錄。
cd eais/cpp
編譯C++示例腳本。
執(zhí)行如下命令,安裝編譯及運(yùn)行示例腳本所需要的軟件包。
sudo apt-get install -y build-essential cmake libopencv-dev
執(zhí)行如下命令,編譯生成可執(zhí)行的示例程序。
mkdir build cd build cmake .. make -j8 cd ..
執(zhí)行如下命令,查看生成的示例程序。
ls build/src
回顯結(jié)果如下,表示示例程序已生成。
運(yùn)行C++示例程序。
執(zhí)行如下命令,設(shè)置示例程序依賴(lài)的動(dòng)態(tài)庫(kù)路徑。
export LD_LIBRARY_PATH=`pwd`/third_party/libtorch/lib:$LD_LIBRARY_PATH
進(jìn)行resnet50模型推理。
執(zhí)行如下命令,進(jìn)行resnet50模型推理(不包含CUDA調(diào)用信息)。
說(shuō)明本示例中數(shù)據(jù)預(yù)處理、后處理是調(diào)用
opencv
和torch
接口在CPU上實(shí)現(xiàn)的,具體代碼實(shí)現(xiàn)在src
目錄下。LD_PRELOAD=libtorcheais.so \ build/src/pytorch_resnet50 \ -m ../data/models/resnet50.pt \ -l ../data/densenet_labels.txt \ ../data/images
參數(shù)信息說(shuō)明如下:
LD_PRELOAD
:預(yù)加載已安裝的動(dòng)態(tài)庫(kù)libtorcheais.so
。build/src/pytorch_resnet50
:通過(guò)編譯命令生成的可執(zhí)行的示例程序pytorch_resnet50
。../data/models/resnet50.pt
:eais-miniconda軟件包中提供的resnet50模型文件。../data/densenet_labels.txt
:eais-miniconda軟件包中提供的存放圖片類(lèi)別名稱(chēng)的文件。../data/images/
:eais-miniconda軟件包中提供的樣例圖片路徑。
您將從執(zhí)行結(jié)果中獲取圖片的分類(lèi)結(jié)果信息,部分回顯如下。
執(zhí)行如下命令,進(jìn)行包含cuda調(diào)用信息的resnet50模型推理。
說(shuō)明本示例中數(shù)據(jù)預(yù)處理、后處理是使用
cuda kernel
實(shí)現(xiàn)的,具體代碼實(shí)現(xiàn)在src
目錄下。LD_PRELOAD=libtorcheais.so \ build/src/pytorch_resnet50_cuda \ -m ../data/models/resnet50.pt \ -l ../data/densenet_labels.txt \ ../data/images
參數(shù)信息說(shuō)明如下:
LD_PRELOAD
:預(yù)加載已安裝的動(dòng)態(tài)庫(kù)libtorcheais.so
。build/src/pytorch_resnet50_cuda
:通過(guò)編譯命令生成的可執(zhí)行的示例程序build/src/pytorch_resnet50_cuda
。../data/models/resnet50.pt
:eais-miniconda軟件包中提供的resnet50模型文件。../data/densenet_labels.txt
:eais-miniconda軟件包中提供的存放圖片類(lèi)別名稱(chēng)的文件。../data/images/
:eais-miniconda軟件包中提供的樣例圖片路徑。
測(cè)試推理resnet50模型和bert-base模型的性能。
執(zhí)行如下命令,測(cè)試使用EAIS推理resnet50模型的性能。
LD_PRELOAD=libtorcheais.so \ build/src/pytorch_resnet50_perf \ -m ../data/models/resnet50.pt \ -d gpu
您將從執(zhí)行結(jié)果中獲取到resnet50模型的推理延遲數(shù)據(jù),部分回顯如下。
執(zhí)行如下命令,測(cè)試使用EAIS推理bert-base模型的性能。
LD_PRELOAD=libtorcheais.so \ build/src/pytorch_bert_perf \ -m ../data/models/bert-base-uncased.pt \ -d gpu
您將從執(zhí)行結(jié)果中獲取到bert-base模型的推理延遲數(shù)據(jù),部分回顯如下。
(可選)步驟七:停止EAIS實(shí)例
當(dāng)您暫時(shí)不需要EAIS提供的GPU能力時(shí),您可以停止EAIS實(shí)例。
僅使用EAIS控制臺(tái)和調(diào)用CreateEaisEi創(chuàng)建的EAIS實(shí)例支持執(zhí)行本操作。
登錄EAIS控制臺(tái)。
在EAIS實(shí)例列表中,單擊實(shí)例
eais_test
所在操作列下的停止。在停止實(shí)例對(duì)話(huà)框中,單擊確定。
EAIS實(shí)例列表每15秒自動(dòng)刷新,當(dāng)EAIS實(shí)例狀態(tài)由使用中變?yōu)?b data-tag="uicontrol" id="81c9c52634pmg" class="uicontrol">已綁定時(shí),表示EAIS實(shí)例已停止。
(可選)步驟八:解綁并釋放EAIS實(shí)例
完成推理后,如果您需要將該EAIS實(shí)例綁定至其他ECS實(shí)例,您可以將該EAIS實(shí)例從ECS實(shí)例上解綁后,再重新綁定至其他ECS實(shí)例。如果您不再需要使用該EAIS實(shí)例,則您需要將該EAIS實(shí)例從ECS實(shí)例上解綁后,才能釋放該EAIS實(shí)例。解綁和釋放EAIS實(shí)例的具體操作如下:
登錄EAIS控制臺(tái)。
將EAIS實(shí)例從ECS實(shí)例上解綁。
在EAIS實(shí)例列表中,單擊實(shí)例
eais_test
所在操作列下的解綁。在解綁ECS實(shí)例對(duì)話(huà)框中,單擊確定。
EAIS實(shí)例列表每15秒自動(dòng)刷新,當(dāng)EAIS實(shí)例狀態(tài)變從已綁定變?yōu)?b data-tag="uicontrol" id="fec884a0c7eem" class="uicontrol">可綁定時(shí),表示EAIS實(shí)例解綁成功。
將已解綁的EAIS實(shí)例釋放。
在EAIS實(shí)例列表中,單擊實(shí)例
eais_test
所在操作列下的釋放資源。在釋放資源對(duì)話(huà)框中,單擊確定。
EAIS實(shí)例將從EAIS實(shí)例列表中刪除。
相關(guān)文檔
您也可以使用Python腳本體驗(yàn)EAIS推理PyTorch模型的完整使用流程,具體操作,請(qǐng)參見(jiàn)使用EAIS推理PyTorch模型(Python)。
您也可以使用EAIS體驗(yàn)EAIS推理TensorFlow模型的完整使用流程,幫助您快速上手EAIS,具體操作,請(qǐng)參見(jiàn)使用EAIS推理TensorFlow模型。
更多EAIS實(shí)例使用方法,請(qǐng)參見(jiàn)使用EAIS實(shí)例或實(shí)踐教程。