TVM:源碼編譯安裝

TVM:Linux源碼編譯安裝

筆者環境:

OS:Ubuntu 18.04

CMake:3.10.2

gcc:7.5.0

cuda:11.1

編譯安裝過程總覽

本文將簡介 tvm 的編譯安裝過程,包含兩個步驟:

  1. 通過C++代碼構建共享庫
  2. 設置相關的語言包(如Python包)

源碼獲取

官網教程提供了兩種源碼獲取方式:

  1. 通過下載頁面直接下載

  2. 通過 github 倉庫來下載

    git clone --recursive https://github.com/apache/tvm tvm
    

    注意一定要有 --recursive 參數,保證子模塊正常下載。

構建共享庫

構建 tvm 共享庫,在我們 Linux 系統上即 libtvm.solibtvmruntime.so 。也可以只構建運行時庫 libtvmruntime.so ,在要被部署的遠程邊緣設備(如樹莓派、移動手機等)上,我們通常只需要安裝運行時庫。這也會在后面介紹遠程邊緣部署時提到。總之現在,在我們的主機上,我們先完全安裝 tvm。

準備工作

官方給出的安裝 tvm 的最小要求如下:

  • 一個支持C++ 14 的編譯器 (如g+±5 or higher)
  • CMake 3.5 or higher
  • 強烈建議安裝 llvm
  • Python 3.7 / 3.8 (Python 3.9 暫不支持)
  • 如果要使用CUDA,CUDA toolkit version >= 8.0

安裝最小依賴

安裝上述最小要求的命令(ubuntu / debian):

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

檢查一下CMake,如果沒有的話,到該下載頁面下載。

llvm

llvm 雖然不是強制要求,但我們通常都是需要的,強烈建議大家安裝。過程也很簡單,從這個下載頁面選擇適合我們設備和系統的 pre-built 版本(壓縮文件 .xz)下載并解壓即可:

wget http://releases.llvm.org/x.x.x/clang+llvm-x.x.x-x86_64-linux-gnu-ubuntu-xx.xx.tar.xztar -xf clang+llvm-x.x.x-x86_64-linux-gnu-ubuntu-xx.xx.tar.xz

解壓完成后進入解壓目錄,找到 bin 目錄下的 llvm-config 文件,記下其路徑,一會兒要用。

開始編譯構建

準備工作完成之后我們開始編譯構建。

首先進入到我們剛才下載的 tvm 源碼目錄下,新建 build 目錄,將 cmake 目錄下的 config.cmake 拷貝的 build 目錄下:

cd tvm
mkdir build
cp cmake/config.cmake build/

然后按需修改 config.cmake 文件:

  • 如果要時候用某些后端和庫(如CUDA, OpenCL, RCOM, METAL, VULKAN,等)。這里以CUDA為例,將 set(USE_CUDA OFF) 修改為 set(USE_CUDA ON),其他庫同理。

  • 為了幫助調試,需要啟用嵌入式圖形執行器和調試功能 set(USE_GRAPH_DEBUG ON)set(USE_PROFILER ON)

  • 如果要調試 IR,要啟用 set(USE_RELAY_DEBUG ON) ,并設置環境變量:

    export TVM_LOG_DEBUG="ir/transform.cc=1;relay/ir/transform.cc=1"
    
  • 使用 LLVM,這里要使用到我們剛才記下的 LLVM 路徑了,設置 set(USE_LLVM /path/to/your/llvm/bin/llvm-config)

config.cmake 修改完成后,我們開始構建 tvm 及相關庫:

cd build
cmake ..
make -j4

Python 包

Python 會根據環境變量 PYTHONPATH 尋找庫文件,在 ~/.bashrc中設置這個環境變量,其中 /path/to/tvm 是上文 tvm 目錄的絕對路徑。

export TVM_HOME=/path/to/tvm
export PYTHONPATH=$TVM_HOME/python:${PYTHONPATH}

python 依賴安裝

  • 必需依賴

    pip3 install --user numpy decorator attrs
    
  • 如果要使用 RPC 追蹤器

    pip3 install --user tornado
    
  • 如果要使用 auto-tuning 模塊

    pip3 install --user tornado psutil xgboost cloudpickle
    

測試

這里我們用 Google Test 來進行測試,首先先安裝 GTest(不要和 tvm 裝在一起,建議另找一個目錄):

git clone https://github.com/google/googletest
cd googletest
mkdir build
cd build
cmake -DBUILD_SHARED_LIBS=ON ..
make
sudo make install

安裝完成后,在 tvm 安裝目錄下執行測試:

./tests/scripts/task_cpp_unittest.sh

順利完成無報錯的話,即告 tvm 安裝完成。

Ref:

https://tvm.apache.org/docs/install/from_source.html#developers-get-source-from-github

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/532681.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/532681.shtml
英文地址,請注明出處:http://en.pswp.cn/news/532681.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

第2章線性表的基本使用及其cpp示例(第二章匯總,線性表都在這里)

2.1線性表的定義和特點 【類型定義: *是n個元素的有限序列 *除了第一個元素沒有直接前驅和最后一個沒有直接后驅之外,其余的每個元素只有一個直接前驅和直接后驅; (a1,a2…an) 【特征: *有窮性&#xff1…

TVM:通過Python接口(AutoTVM)來編譯和優化模型

TVM:通過Python接口(AutoTVM)來編譯和優化模型 上次我們已經介紹了如何從源碼編譯安裝 tvm,本文我們將介紹在本機中使用 tvm Python 接口來編譯優化模型的一個demo。 TVM 是一個深度學習編譯器框架,有許多不同的模塊…

TVM:在樹莓派上部署預訓練的模型

TVM:在樹莓派上部署預訓練的模型 之前我們已經介紹如何通過Python接口(AutoTVM)來編譯和優化模型。本文將介紹如何在遠程(如本例中的樹莓派)上部署預訓練的模型。 在設備上構建 TVM Runtime 首先我們需要再遠程設備…

2.2線性表的順序表

2.2.1線性表的順序表示和實現------順序映像 【順序存儲】在【查找時】的時間復雜度為【O(1)】,因為它的地址是連續的,只要知道首元素的地址,根據下標可以很快找到指定位置的元素 【插入和刪除】操作由于可能要在插入前或刪除后對元素進行移…

TVM:交叉編譯和RPC

TVM:交叉編譯和RPC 之前我們介紹了 TVM 的安裝、本機demo和樹莓派遠程demo。本文將介紹了在 TVM 中使用 RPC 進行交叉編譯和遠程設備執行。 通過交叉編譯和 RPC,我們可以在本地機器上編譯程序,然后在遠程設備上運行它。 當遠程設備資源有限…

2.3單鏈表的基本使用及其cpp示例

2.3線性表的鏈式表現與實現 2.3.1.1單鏈表 【特點: *用一組任意的存儲單元存儲線性表的數據元素 *利用指針實現用不同相鄰的存儲單元存放邏輯上相鄰的元素 *每個元素ai,除存儲本身信息外,還存儲其直接后繼的元素(后一個元素的地址…

TVM:簡介

TVM:簡介概述 Apache TVM 是一個用于 CPU、GPU 和機器學習加速器的開源機器學習編譯器框架。它旨在使機器學習工程師能夠在任何硬件后端上高效地優化和運行計算。本教程的目的是通過定義和演示關鍵概念,引導您了解 TVM 的所有主要功能。新用戶應該能夠從…

2.3.3單鏈表的雙向鏈表

2.3.3雙向鏈表 插入、刪除 指在前驅和后驅方向都能游歷(遍歷)的線性鏈表 雙向鏈表的每個結點有兩個指針域 【結構】:prior data next 雙鏈表通常采用帶頭結點的循環鏈表形式 可理解為首位相接的數據“圈”,每個結點都可以向前…

nvidia-smi 命令詳解

nvidia-smi 命令詳解 簡介 nvidia-smi - NVIDIA System Management Interface program nvidia smi(也稱為NVSMI)為來自 Fermi 和更高體系結構系列的 nvidia Tesla、Quadro、GRID 和 GeForce 設備提供監控和管理功能。GeForce Titan系列設備支持大多數…

2.4一元多項式的表示及相加,含cpp算法

2.4一元多項式的表示及相加 n階多項式的表示: n階多項式有n1項 指數按升冪排序 【 優點: 多項式的項數可以動態增長,不存在存儲溢出的問題插入,刪除方便,不移動元素 【表示: 有兩個數據域,一…

TVM:使用Tensor Expression (TE)來處理算子

TVM:使用Tensor Expression (TE)來處理算子 在本教程中,我們將聚焦于在 TVM 中使用張量表達式(TE)來定義張量計算和實現循環優化。TE用純函數語言描述張量計算(即每個表達式都沒有副作用)。當在 TVM 的整體…

4-數據結構-串的學習

4.1串類型的定義 1.串:(或字符串) 串是由多個字符組成的有限序列,記作:S‘c1c2c3…cn’ (n>0) 其中S是串的名字,‘c1c2c3…cn’ 是串值 ci是串中字符 n是串的長度,表示字符的數目 空串&a…

Linux下rm誤刪恢復 extundelete

Linux下rm誤刪恢復 extundelete 誤刪之后要第一時間卸載(umount)該分區,或者以只讀的方式來掛載(mount)該分區,否則覆寫了誰也沒辦法恢復。如果誤刪除的是根分區,最好直接斷電,進入…

5-數據結構-數組的學習

5.1數組的定義 定義: 由一組類型相同的數據元素構成的有序集合,每個數據元素稱為一個數據元素(簡稱元素),每個元素受n(n>1)個線性關系的約束,每個元素在n個線性關系中的序號i1、…

timm 視覺庫中的 create_model 函數詳解

timm 視覺庫中的 create_model 函數詳解 最近一年 Vision Transformer 及其相關改進的工作層出不窮,在他們開源的代碼中,大部分都用到了這樣一個庫:timm。各位煉丹師應該已經想必已經對其無比熟悉了,本文將介紹其中最關鍵的函數之…

C--數據結構--樹的學習

6.2.1二叉樹的性質 1.二叉樹 性質: 1.若二叉樹的層次從1開始,則在二叉樹的第i層最多有2^(i-1)個結點 2.深度為k的二叉樹最多有2^k -1個結點 (k>1) 3.對任何一顆二叉樹,如果其葉結點個數為n0,度為2的非葉結點個數…

TVM:使用 Schedule 模板和 AutoTVM 來優化算子

TVM:使用 Schedule 模板和 AutoTVM 來優化算子 在本文中,我們將介紹如何使用 TVM 張量表達式(Tensor Expression,TE)語言編寫 Schedule 模板,AutoTVM 可以搜索通過這些模板找到最佳 Schedule。這個過程稱為…

TVM:使用 Auto-scheduling 來優化算子

TVM:使用 Auto-scheduling 來優化算子 在本教程中,我們將展示 TVM 的 Auto-scheduling 功能如何在無需編寫自定義模板的情況下找到最佳 schedule。 與基于模板的 AutoTVM 依賴手動模板定義搜索空間不同,auto-scheduler 不需要任何模板。 用…

C語言—sort函數比較大小的快捷使用--algorithm頭文件下

sort函數 一般情況下要將一組數從的大到小排序或從小到大排序&#xff0c;要定義一個新的函數排序。 而我們也可以直接使用在函數下的sort函數&#xff0c;只需加上頭文件&#xff1a; #include<algorithm> using namespace std;sort格式&#xff1a;sort(首元素地址&…

散列的使用

散列 散列簡單來說&#xff1a;給N個正整數和M個負整數&#xff0c;問這M個數中的每個數是否在N中出現過。 比如&#xff1a;N&#xff1a;{1,2,3,4}&#xff0c;M{2,5,7}&#xff0c;其中M的2在N中出現過 對這個問題最直觀的思路是&#xff1a;對M中每個欲查的值x&#xff0…