【TVM系列一】開發(fā)環(huán)境搭建

一、前言

眾所周知夜焦,深度學(xué)習(xí)的計(jì)算量龐大,在追求效率與實(shí)用性的工業(yè)界含友,深度學(xué)習(xí)所面臨的一個(gè)最大的問題就是如何在不影響模型精度的前提下將算法模型部署到目標(biāo)硬件平臺(tái)上進(jìn)行高效的前向計(jì)算吮便。

和單純研究相比隙轻,在工業(yè)界主要遇到了兩個(gè)問題:

  • 深度學(xué)習(xí)框架眾多恨诱,caffe / mxnet / tensorflow / pytorch訓(xùn)練出來的模型都彼此有不同的分發(fā)格式晕窑,對(duì)于部署有環(huán)境兼容的問題。

  • 硬件價(jià)格昂貴睹栖,一些嵌入式平臺(tái)沒有使用GPU的條件硫惕。同時(shí)一些人也開始在做FPGA/ASIC的深度學(xué)習(xí)加速卡。

針對(duì)這些問題野来,TVM應(yīng)運(yùn)而生恼除,為了解決第一個(gè)問題,TVM內(nèi)部實(shí)現(xiàn)了自己的IR曼氛,可以將上面這些主流深度學(xué)習(xí)框架的模型轉(zhuǎn)換為統(tǒng)一的內(nèi)部表示豁辉,主要是通過NNVM進(jìn)行轉(zhuǎn)換。

image.png

為了解決第二個(gè)問題舀患,TVM內(nèi)部有多重機(jī)制來做優(yōu)化徽级。其中一個(gè)特點(diǎn)是,使用機(jī)器學(xué)習(xí)(結(jié)合專家知識(shí))的方法聊浅,通過在目標(biāo)硬件上跑大量trial餐抢,來獲得該硬件上相關(guān)運(yùn)算(例如卷積)的最優(yōu)實(shí)現(xiàn)。這使得TVM能夠做到快速為新型硬件或新的op做優(yōu)化狗超。

本文作為TVM系列文章的開篇弹澎,先從TVM的開發(fā)環(huán)境搭建開始。

二努咐、開發(fā)環(huán)境搭建

1、Anconda安裝

  • 下載32位anconda
wget https://repo.anaconda.com/archive/Anaconda3-5.3.1-Linux-x86.sh
  • 安裝
chmod +x Anaconda3-5.31-Linux-x86.sh
./Anaconda3-5.31-Linux-x86.sh

根據(jù)提示輸入yes/no殴胧,最后source .bashrc更新環(huán)境配置即可渗稍。

2、TVM庫(kù)源碼編譯

從源碼編譯tvm分兩步:

(1)將C++代碼編譯成libtvm.so和libtvm_runtime.so

(2)配置python包

  • 下載源碼:
git clone --recursive https://github.com/apache/tvm tvm

編譯需要的環(huán)境配置:支持C++14的c++編譯器g++ >= g++-5团滥,CMake >=3.5

sudo apt-get update
sudo apt-get install -y python3 python3-dev python3-setuptools gcc libtinfo-dev zlib1g-dev build-essential cmake libedit-dev libxml2-dev

遇到問題:

W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: http://storage.googleapis.com/bazel-apt stable InRelease: The following signatures were invalid: KEYEXPIRED 1590239453  KEYEXPIRED 1590239453  KEYEXPIRED 1590239453
W: Failed to fetch http://storage.googleapis.com/bazel-apt/dists/stable/InRelease  The following signatures were invalid: KEYEXPIRED 1590239453  KEYEXPIRED 1590239453  KEYEXPIRED 1590239453
W: Some index files failed to download. They have been ignored, or old ones used instead.

解決:

curl https://bazel.build/bazel-release.pub.gpg | sudo apt-key add -
  • 下載llvm竿屹,用于CPU后端代碼生成:
wget https://apt.llvm.org/llvm.sh
chmod +x llvm.sh
sudo ./llvm.sh 10

遇到問題:

apt-get install -y clang-12 lldb-12 lld-12 clangd-12
E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unavailable)
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?

解決:

sudo rm /var/lib/dpkg/lock
  • 編譯tvm:
mkdir build && cp cmake/config.cmake build

修改cmake/config.cmake中的配置,將set(USE_LLVM OFF)改為ON灸姊,然后就可以編譯了:

cd build && cmake .. && make -j4

編譯完成后在build目錄會(huì)生成libtvm.so與libtvm_runtime.so兩個(gè)動(dòng)態(tài)庫(kù)文件

3拱燃、TVM python軟件包使用配置

安裝xgboost遇到問題:

Command "/home/zgs/anaconda3/envs/py36/bin/python3 -u -c "
import setuptools, tokenize;__file__='/tmp/pip-install-5hsr7l_p/xgboost/setup.py';
f=getattr(tokenize, 'open', open)(__file__);
code=f.read().replace('\r\n', '\n');f.close();
exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-record-53aqs7l9/install-record.txt --single-version-externally-managed --compile" 
failed with error code 1 in /tmp/pip-install-5hsr7l_p/xgboost/

解決:

pip install --upgrade --force pip 
pip install setuptools==33.1.1

xgboost需要cmake版本 > 3.11,升級(jí)cmake:

wget https://github.com/Kitware/CMake/releases/download/v3.20.5/cmake-3.20.5.tar.gz
./configure && make && sudo make install
ln -sf /usr/local/bin/cmake /usr/bin/cmake
ln -sf /usr/local/bin/ctest /usr/bin/ctest
ln -sf /usr/local/bin/cpack /usr/bin/cpack

遇到問題:

CMake Error at /usr/local/share/cmake-3.5/Modules/FindPackageHandleStandardArgs.cmake:148 (message):
Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the
system variable OPENSSL_ROOT_DIR (missing: OPENSSL_LIBRARIES
OPENSSL_INCLUDE_DIR)
Call Stack (most recent call first):
/usr/local/share/cmake-3.5/Modules/FindPackageHandleStandardArgs.cmake:388 (_FPHSA_FAILURE_MESSAGE)
/usr/local/share/cmake-3.5/Modules/FindOpenSSL.cmake:370 (find_package_handle_standard_args)
CMakeLists.txt:61 (find_package)

解決:

sudo apt-get install libssl-dev

安裝python依賴包:

pip3 install --user numpy decorator attrs
# For RPC tracker
pip3 install --user tornado
# For auto-tuning module
pip3 install --user tornado psutil xgboost cloudpickle

添加tvm環(huán)境變量到.bashrc文件力惯,執(zhí)行source .bashrc:

export TVM_HOME=/path/to/tvm
export PYTHONPATH=$TVM_HOME/python:${PYTHONPATH}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末碗誉,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子父晶,更是在濱河造成了極大的恐慌哮缺,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件甲喝,死亡現(xiàn)場(chǎng)離奇詭異尝苇,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門糠溜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來淳玩,“玉大人,你說我怎么就攤上這事非竿】撸” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵汽馋,是天一觀的道長(zhǎng)侮东。 經(jīng)常有香客問我,道長(zhǎng)豹芯,這世上最難降的妖魔是什么悄雅? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮铁蹈,結(jié)果婚禮上宽闲,老公的妹妹穿的比我還像新娘。我一直安慰自己握牧,他們只是感情好容诬,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著沿腰,像睡著了一般览徒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上颂龙,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天习蓬,我揣著相機(jī)與錄音,去河邊找鬼措嵌。 笑死躲叼,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的企巢。 我是一名探鬼主播枫慷,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼浪规!你這毒婦竟也來了或听?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤罗丰,失蹤者是張志新(化名)和其女友劉穎神帅,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體萌抵,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡找御,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年元镀,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片霎桅。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡栖疑,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出滔驶,到底是詐尸還是另有隱情遇革,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布揭糕,位于F島的核電站萝快,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏著角。R本人自食惡果不足惜揪漩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望吏口。 院中可真熱鬧奄容,春花似錦、人聲如沸产徊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)舟铜。三九已至戈盈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間深滚,已是汗流浹背奕谭。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留痴荐,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓官册,卻偏偏與公主長(zhǎng)得像生兆,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子膝宁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容