1. 程式人生 > 其它 >Linux ARM架構編譯Python版本Paddle-Lite(2021.1.21)

Linux ARM架構編譯Python版本Paddle-Lite(2021.1.21)

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 或其它支援版本。

  1. 安裝相關依賴包

    # 更新本地索引
    $ sudo apt update
    
    # 安裝相關依賴
    $ sudo apt install software-properties-common
    
  2. 新增 Python 官方 PPA

    # 新增python ppa
    $ sudo add-apt-repository ppa:deadsnakes/ppa
    
    # 更新本地索引
    $ sudo apt update
    
  3. 安裝 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