Linux ARM架構編譯Python版本Paddle-Lite(2021.1.21)
阿新 • • 發佈:2022-05-26
Linux ARM架構編譯Python版本Paddle-Lite(2021.1.21)
目錄官方文件:https://paddle-lite.readthedocs.io/zh/latest/index.html
1. 編譯環境
- Ubuntu 18.04 aarch64;
- python3.7;
2. 準備工作
2.1 安裝 Python3.7
Paddle-Lite 編譯 Python 版本根據官方文件介紹只支援 Python2.7、Python3.5 和 Python3.7 版本,Ubuntu 18.04 預設 Python 版本為 3.6,因此需要先安裝 Python3.7 或其它支援版本。
-
安裝相關依賴包
# 更新本地索引 $ sudo apt update # 安裝相關依賴 $ sudo apt install software-properties-common
-
新增 Python 官方 PPA
# 新增python ppa $ sudo add-apt-repository ppa:deadsnakes/ppa # 更新本地索引 $ sudo apt update
-
安裝 Python3.7
# 安裝 python3.7 相關工具包 $ sudo apt install python3.7 python3.7-dev python3.7-venv python3-pip # 清除本地包快取,釋放磁碟空間 $ sudo apt clean
2.2 準備編譯環境
編譯環境要求:
- gcc、g++、git、make、wget、patchelf
- cmake(建議使用3.10或以上版本)
具體操作過程如下:
# 更新本地索引 $ sudo apt update # 安裝基礎依賴包 $ sudo apt install gcc g++ make wget unzip patchelf # 安裝 cmake3.10 或更高版本 $ wget https://www.cmake.org/files/v3.10/cmake-3.10.3.tar.gz $ tar -zxvf cmake-3.10.3.tar.gz $ cd cmake-3.10.3 $ ./configure $ make $ sudo make install
3. 編譯過程
下文中涉及到從 Github 下載原始碼的部分可能會因為網路問題比較慢,可以使用國內的映象進行加速下載。此處提供一個國內映象地址(https://hub.fastgit.org),利用該地址替換下文中的 https://github.com 即可。
3.1 下載原始碼
# 下載Paddle-Lite原始碼 並切換到release分支
$ git clone https://github.com/PaddlePaddle/Paddle-Lite.git
$ cd Paddle-Lite
$ git checkout -t origin/release/v2.6
3.2 準備第三方庫檔案
# 刪除原來第三方庫下的檔案
$ rm third-party/*
# 準備第三方庫檔案
$ git clone https://github.com/google/flatbuffers.git third-party/flatbuffers
$ git clone https://github.com/gflags/gflags.git third-party/gflags
$ git clone https://github.com/google/googletest.git third-party/googletest
$ git clone https://github.com/protocolbuffers/protobuf.git third-party/protobuf-host
$ git clone https://github.com/tensor-tang/protobuf.git third-party/protobuf-mobile
3.3 開始編譯
# 檢視編譯可選引數
$ ./lite/tools/build_linux.sh help
# 開始編譯,等待編譯完成
$ ./lite/tools/build_linux.sh --with_python=ON --python_version=3.7 --with_extra=ON --with_cv=ON
3.4 編譯結果
# 檢視編譯結果
$ sudo apt install tree
$ tree build.lite.linux.armv8.gcc/inference_lite_lib.armlinux.armv8/
build.lite.linux.armv8.gcc/inference_lite_lib.armlinux.armv8/
|-- bin
| |-- benchmark_bin
| |-- paddle_code_generator
| `-- test_model_bin
|-- cxx
| |-- include
| | |-- paddle_api.h
| | |-- paddle_image_preprocess.h
| | |-- paddle_lite_factory_helper.h
| | |-- paddle_place.h
| | |-- paddle_use_kernels.h
| | |-- paddle_use_ops.h
| | `-- paddle_use_passes.h
| `-- lib
| |-- libpaddle_api_full_bundled.a
| |-- libpaddle_api_light_bundled.a
| |-- libpaddle_full_api_shared.so
| `-- libpaddle_light_api_shared.so
|-- demo
| `-- python
| |-- mobilenetv1_full_api.py
| `-- mobilenetv1_light_api.py
`-- python
|-- install
| |-- build
| | |-- bdist.linux-aarch64
| | |-- lib
| | | `-- paddlelite
| | | |-- __init__.py
| | | `-- lite.so
| | `-- scripts-3.7
| | `-- paddle_lite_opt
| |-- dist
| | `-- paddlelite-2708c2fe-cp37-cp37m-linux_aarch64.whl
| |-- libs
| |-- lite
| | |-- __init__.py
| | |-- lite.so
| | `-- paddle_lite_opt
| |-- paddlelite.egg-info
| | |-- PKG-INFO
| | |-- SOURCES.txt
| | |-- dependency_links.txt
| | `-- top_level.txt
| `-- setup.py
`-- lib
`-- lite.so
3.5 安裝 Paddle-Lite
編譯生成的安裝包在 build.lite.linux.armv8.gcc/inference_lite_lib.armlinux.armv8/python/install/dist/paddlelite-2708c2fe-cp37-cp37m-linux_aarch64.whl
目錄下,通過 Pip 離線安裝 Paddle-Lite:
# 離線安裝 Paddle-Lite
$ python3.7 -m pip install build.lite.linux.armv8.gcc/inference_lite_lib.armlinux.armv8/python/install/dist/paddlelite-2708c2fe-cp37-cp37m-linux_aarch64.whl
# 檢視安裝結果
$ python3.7 -m pip list