Skip to content

enable cross compile and run on mobile of lite#17541

Merged
tensor-tang merged 22 commits intoPaddlePaddle:incubate/litefrom
tensor-tang:lite
May 22, 2019
Merged

enable cross compile and run on mobile of lite#17541
tensor-tang merged 22 commits intoPaddlePaddle:incubate/litefrom
tensor-tang:lite

Conversation

@tensor-tang
Copy link
Copy Markdown
Contributor

@tensor-tang tensor-tang commented May 21, 2019

based on #17481

cmake .. -DWITH_GPU=OFF -DWITH_LITE=ON -DLITE_WITH_X86=OFF -DLITE_WITH_LIGHT_WEIGHT_FRAMEWORK=ON -DLITE_WITH_CUDA=OFF -DWITH_TESTING=ON -DWITH_MKL=OFF

@tensor-tang tensor-tang requested a review from Superjomn May 21, 2019 11:52
Comment thread CMakeLists.txt
Comment thread cmake/external/protobuf.cmake
Comment thread paddle/fluid/lite/kernels/arm/CMakeLists.txt
Comment thread paddle/fluid/lite/kernels/arm/fetch_compute.cc
@ysh329
Copy link
Copy Markdown
Contributor

ysh329 commented May 22, 2019

Paddle-lite-mobile交叉编译指导

Paddle-lite-mobile开发环境目前推荐在Docker容器里,在容器里进行交叉编译安卓版本的Native C/C++代码,然后将可执行程序adb push到安卓手机上进行调试。

1. 拉取代码创建容器

$ git clone --recursive https://github.com/PaddlePaddle/Paddle.git
$ git checkout incubate/lite

先根据仓库下的Dockerfile.android文件生成对应的环境镜像。

$ cd <paddle-repo>
$ mkdir android-docker
$ cp Dockerfile.android ./android-docker/Dockerfile
$ cd android-docker
$ docker build -t paddle/paddle-lite-mobile .

完成后,可以看到:

$ docker images
REPOSITORY                        TAG            IMAGE ID            CREATED             SIZE
paddle/paddle-lite-mobile         latest       9c2000469891        5 hours ago         3.88GB

基于paddle/paddle-lite镜像创建容器,并在容器内外建立目录映射关系:

$ ddocker run -v <your-directory-path>:<your-directory-path> -tdi paddle/paddle-lite-mobile
# 启动成功会显示container_id

进入容器并切换到Paddle仓库目录:

$ docker exec -it <container_id> bash
$ cd <paddle-repo>

2. 交叉编译Paddle-lite-mobile的Native C/C++程序

创建名为make_paddle_lite_mobile.sh的文件:

$ touch make_paddle_lite_mobile.sh
$ chmod +x make_paddle_lite_mobile.sh

打开make_paddle_lite_mobile.sh文件然后将以下内容复制到该文件中,保存并退出:

#!/usr/bin/env bash

# build mobile
mkdir build
cd build

# cross-compile native cpp
cmake .. \
  -DWITH_GPU=OFF \
  -DWITH_MKL=OFF \
  -DWITH_LITE=ON \
  -DLITE_WITH_X86=OFF \
  -DLITE_WITH_ARM=ON \
  -DLITE_WITH_LIGHT_WEIGHT_FRAMEWORK=ON \
  -DLITE_WITH_CUDA=OFF \
  -DWITH_TESTING=ON

# fc层单测
make test_fc_compute_arm -j
# 小模型单测
#make cxx_api_lite_bin

3. 上传编译文件到手机上

键盘上crtl+q+p同时摁下,切换到容器外(容器还在后台运行),将刚刚编译出的程序adb push到手机上。USB线连接手机,确保adb devices可以找到手机设备。

$ cd <paddle-repo>
$ adb push ./build/paddle/fluid/lite/api/test_cxx_api_lite /data/local/tmp/

# 进入手机
$ adb shell # 若多台手机设备先用命令adb devices查看目标手机的序列码
$ cd /data/local/tmp

# 执行编译的程序
$ ./test_cxx_api_lite

Q&A

1. adb命令找不到:adb: command not found

解决:sudo apt install -y adb

2. 明明手机USB连接电脑却显示找不到设备:error: device not found

解决:
第一步lsusb命令查看插上拔下手机前后usb设备的变化情况,确定手机设备的ID。 假设lsusb命令执行显示Bus 003 Device 011: ID 2717:9039 ,则ID是0x2717
第二步:创建adb_usb.ini文件并追加写入ID:echo 0x2717 >> ~/.android/adb_usb.ini
第三步:给手机添加权限sudo vim /etc/udev/rules.d/70-android.rules,根据第一步骤取得的ATTRS{idVendor}ATTRS{idProduct}这两个属性值,在该文件加入该设备信息:
SUBSYSTEM=="usb", ATTRS{idVendor}=="2717", ATTRS{idProduct}=="9039",MODE="0666"
第四步:重启USB服务:

$ sudo chmod a+rx /etc/udev/rules.d/70-android.rules
$ sudo service udev restart

第五步:重启adb服务,adb devices有设备说明adb安装成功。

$ adb kill-server
$ sudo adb start-server
$ adb devices

# 若显示连接的手机设备,则表示成功
List of devices attached
5cb00b6 device

@tensor-tang
Copy link
Copy Markdown
Contributor Author

嗯,确认后面我们可以整理一个文档。

Copy link
Copy Markdown
Contributor

@Superjomn Superjomn left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

I will continue to refine some HOST related concepts.

@tensor-tang tensor-tang merged commit 310fd51 into PaddlePaddle:incubate/lite May 22, 2019
@tensor-tang tensor-tang deleted the lite branch May 22, 2019 12:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants