Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
BaiXuePrincess
Paddle
提交
5005ca73
P
Paddle
项目概览
BaiXuePrincess
/
Paddle
与 Fork 源项目一致
Fork自
PaddlePaddle / Paddle
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Paddle
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
5005ca73
编写于
5月 17, 2017
作者:
L
Liu Yiqun
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add document, cross-compiling for Raspberry Pi; and refine document, cross-compiling for Android.
上级
8f1a5ff2
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
56 addition
and
40 deletion
+56
-40
doc/howto/cross_compiling/cross_compiling_for_android_cn.md
doc/howto/cross_compiling/cross_compiling_for_android_cn.md
+5
-5
doc/howto/cross_compiling/cross_compiling_for_raspberry_cn.md
...howto/cross_compiling/cross_compiling_for_raspberry_cn.md
+51
-35
未找到文件。
doc/howto/cross_compiling/cross_compiling_for_android_cn.md
浏览文件 @
5005ca73
...
...
@@ -35,7 +35,7 @@ CMake系统对交叉编译提供了支持[cmake-toolchains](https://cmake.org/cm
Android平台可选配置参数:
-
`ANDROID_STANDALONE_TOOLCHAIN`
,独立工具链所在的绝对路径,或者相对
构建目录的相对路径。PaddlePaddle的CMake系统将根据该值自动推导和设置需要使用的交叉编译器、sysroot、以及Android API级别;否则,用户需要在cmake时自
动设置这些值。无默认值。
-
`ANDROID_STANDALONE_TOOLCHAIN`
,独立工具链所在的绝对路径,或者相对
于构建目录的相对路径。PaddlePaddle的CMake系统将根据该值自动推导和设置需要使用的交叉编译器、sysroot、以及Android API级别;否则,用户需要在cmake时手
动设置这些值。无默认值。
-
`ANDROID_ABI`
,目标架构ABI。目前只支持
`armeabi-v7a`
,默认值为
`armeabi-v7a`
。
-
`ANDROID_NATIVE_API_LEVEL`
,工具链的Android API级别。若没有显式设置,PaddlePaddle将根据
`ANDROID_STANDALONE_TOOLCHAIN`
的值自动推导得到。
-
`ANROID_ARM_MODE`
,是否使用ARM模式。可设置
`ON/OFF`
,默认值为
`ON`
。
...
...
@@ -43,7 +43,7 @@ Android平台可选配置参数:
其他配置参数:
-
`HOST_C/CXX_COMPILER`
,
CMake编译的宿主平台的C/C++编译器。在编译宿主机版protoc可执行文件和目标机版OpenBLAS时需要用到
。
-
`HOST_C/CXX_COMPILER`
,
宿主机的C/C++编译器。在编译宿主机版protoc可执行文件和目标机版OpenBLAS库时需要用到。默认设置成环境变量
`CC`
的值;若环境变量
`CC`
没有设置,则设置成
`cc`
编译器
。
一种常用的cmake配置如下:
...
...
@@ -59,11 +59,11 @@ cmake -DCMAKE_SYSTEM_NAME=Android \
..
```
用户还可根据自己的需求设置其他编译参数。比如希望最小化生成的库的大小,可以设置
`CMAKE_BUILD_TYPE`
为
`MinSizeRel`
;若希望最快的执行速度,则可设置
`CMAKE_BUILD_TYPE`
为
`Release`
。
用户还可根据自己的需求设置其他编译参数。比如希望最小化生成的库的大小,可以设置
`CMAKE_BUILD_TYPE`
为
`MinSizeRel`
;若希望最快的执行速度,则可设置
`CMAKE_BUILD_TYPE`
为
`Release`
。
亦可以通过手动设置
`CMAKE_C/CXX_FLAGS_MINSIZEREL/RELEASE`
来影响PaddlePaddle的编译过程。
## 编译和安装
CMake配置完成后,执行以下命令,PaddlePaddle将自动下载和编译所有
所需要的
第三方依赖库、编译和安装PaddlePaddle预测库。
CMake配置完成后,执行以下命令,PaddlePaddle将自动下载和编译所有第三方依赖库、编译和安装PaddlePaddle预测库。
```
bash
make
...
...
@@ -72,5 +72,5 @@ make install
注意:如果你曾经在源码目录下编译过其他平台的PaddlePaddle库,请先使用
`rm -rf`
命令删除
`third_party`
目录和
`build`
目录,以确保所有的第三方依赖库和PaddlePaddle代码都是针对新的CMake配置重新编译的。
执行完安装命令后,
`your/path/to/install`
目录
会中
包含
`include`
和
`lib`
目录,其中
`include`
中包含C-API的头文件,
`lib`
中包含一个Android版本的库。自此,PaddlePaddle的已经安装完成,用户可将
`your/path/to/install`
目录下的生成文件用于深度学习相关Android App中,调用方法见C-API文档。
执行完安装命令后,
`your/path/to/install`
目录
中会
包含
`include`
和
`lib`
目录,其中
`include`
中包含C-API的头文件,
`lib`
中包含一个Android版本的库。自此,PaddlePaddle的已经安装完成,用户可将
`your/path/to/install`
目录下的生成文件用于深度学习相关Android App中,调用方法见C-API文档。
doc/howto/cross_compiling/cross_compiling_for_raspberry_cn.md
浏览文件 @
5005ca73
#
如何构建Raspberry Pi下运行的PaddlePaddle
#
构建Raspberry Pi平台上的PaddlePaddle库
这里考虑的是交叉编译方式,即在Linux-x86环境下构建Raspberry pi下可运行的PaddlePaddle。
对于Rasspberry Pi系统,用户可通过ssh等方式登录到Raspberry Pi系统上,按照
[
源码编译PaddlePaddle
](
http://www.paddlepaddle.org/doc_cn/getstarted/build_and_install/cmake/build_from_source_cn.html
)
相关文档所述,直接编译Raspberry Pi平台上适用的PaddlePaddle库。
## 下载交叉编译环境
```
git clone https://github.com/raspberrypi/tools
```
如果host是x86-64环境,选用
`arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64`
下的作为编译工具。注意,需要系统glibc支持2.14以上。
用户也可以在自己熟悉的开发平台上,通过交叉编译的方式来编译。这篇文档将以Linux x86-64平台为例,介绍交叉编译Raspberry Pi平台上适用的PaddlePaddle的方法和步骤。
## 准备交叉编译环境
## 编译第三方库
cmake编译PaddlePaddle时候会自动下载编译依赖的第三方库,不过openblas和protobuf最好还是在编译PaddlePaddle之前先编译好,这样可以保证编译PaddlePaddle的时候更加顺畅。
从源码交叉编译PaddlePaddle,用户需要提前准备好交叉编译环境。用户可自行前往
[
github
](
https://github.com/raspberrypi/tools
)
下载Raspberry Pi平台使用的C/C++交叉编译工具链,也可通过以下命令获取:
### 编译OpenBLAS
```
git clone https://github.com/xianyi/OpenBLAS.git
make TARGET=ARMV7 HOSTCC=gcc CC=arm-linux-gnueabihf-gcc NOFORTRAN=1 USE_THREAD=0
```
bash
git clone https://github.com/raspberrypi/tools.git
```
### 编译protobuf
该github仓库中包含若干个预编译好的、针对不同平台的编译工具。宿主机是Linux x86-64环境,则需选用
`arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64`
下的作为编译工具,所使用的编译器为arm-linux-gnueabihf-gcc 4.8.3。
注意,该编译工具链需要系统glibc支持2.14以上。
## 配置交叉编译参数
CMake系统对交叉编译提供了支持
[
cmake-toolchains
](
https://cmake.org/cmake/help/v3.0/manual/cmake-toolchains.7.html#cross-compiling
)
。为了简化cmake配置,PaddlePaddle为交叉编译提供了工具链配置文档
[
cmake/cross_compiling/raspberry_pi.cmake
](
https://github.com/PaddlePaddle/Paddle/blob/develop/cmake/cross_compiling/raspberry_pi.cmake
)
,以提供一些默认的编译器和编译参数相关配置。
交叉编译Raspberry Pi版本PaddlePaddle库时,有一些必须配置的参数:
-
`CMAKE_SYSTEM_NAME`
,CMake编译的目标平台,必须配置为
`RPi`
。在设置
`CMAKE_SYSTEM_NAME=RPi`
后,PaddlePaddle的CMake系统才认为在是在交叉编译Raspberry Pi系统的版本,并自动编译宿主机版protoc可执行文件、目标机版protobuf库、以及目标机版OpenBLAS库。
Raspberry Pi平台可选配置参数:
-
`RPI_TOOLCHAIN`
,编译工具链所在的绝对路径,或者相对于构建目录的相对路径。PaddlePaddle的CMake系统将根据该值自动设置需要使用的交叉编译器;否则,用户需要在cmake时手动设置这些值。无默认值。
-
`RPI_ARM_NEON`
,是否使用NEON指令。目前必须设置成
`ON`
,默认值为
`ON`
。
其他配置参数:
-
`HOST_C/CXX_COMPILER`
,宿主机的C/C++编译器。在编译宿主机版protoc可执行文件和目标机版OpenBLAS库时需要用到。默认设置成环境变量
`CC`
的值;若环境变量
`CC`
没有设置,则设置成
`cc`
编译器。
cmake参数如下;
```
git clone https://github.com/google/protobuf.git
git checkout 9f75c5aa851cd877fb0d93ccc31b8567a6706546
cmake ../protobuf/cmake
\
-Dprotobuf_BUILD_TESTS=OFF
\
-DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++
\
-DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc
\
-DCMAKE_POSITION_INDEPENDENT_CODE=ON
\
-DCMAKE_BUILD_TYPE=Release
\
-DCMAKE_INSTALL_LIBDIR=lib
cmake -DCMAKE_SYSTEM_NAME=RPi \
-DRPI_TOOLCHAIN=your/path/to/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64 \
-DRPI_ARM_NEON=ON
\
-DCMAKE_INSTALL_PREFIX=your/path/to/install
\
-DWITH_GPU=OFF
\
-DWITH_C_API=ON
\
-DWITH_PYTHON=OFF
\
-DWITH_SWIG_PY=OFF
\
..
```
注意:这样编译出来的
`libprotobuf.a`
和
`protoc`
都是ARM版本的,而我们需要的是一个x86-64版本的
`protoc`
,所以需要用host gcc再编译一遍protobuf然后使用其中的
`protoc`
。
用户还可根据自己的需求设置其他编译参数。比如希望最小化生成的库的大小,可以设置
`CMAKE_BUILD_TYPE`
为
`MinSizeRel`
;若希望最快的执行速度,则可设置
`CMAKE_BUILD_TYPE`
为
`Release`
。亦可以通过手动设置
`CMAKE_C/CXX_FLAGS_MINSIZEREL/RELEASE`
来影响PaddlePaddle的编译过程。
## 编译
PaddlePaddle
## 编译
和安装
cmake参数如下;其中
`WITH_C_API`
设置为ON,编译输出的output目录会中包含
`include`
和
`lib`
目录,其中
`include`
中包含CAPI的头文件,
`lib`
中包含一个ARM版本的库。另外,
`CMAKE_BUILD_TYPE`
设置为
`MinSizeRel`
可以减小编译的库的大小
。
CMake配置完成后,执行以下命令,PaddlePaddle将自动下载和编译所有第三方依赖库、编译和安装PaddlePaddle
。
```
bash
make
make
install
```
cmake .. -DWITH_GPU=OFF -DWITH_C_API=ON -DWITH_PYTHON=OFF -DWITH_SWIG_PY=OFF \
-DCMAKE_CXX_COMPILER:FILEPATH=arm-linux-gnueabihf-g++ \
-DCMAKE_C_COMPILER:FILEPATH=arm-linux-gnueabihf-gcc \
-DCMAKE_C_FLAGS="-mfpu=neon" \
-DCMAKE_CXX_FLAGS="-mfpu=neon" \
-DOPENBLAS_ROOT=openblas \
-DCMAKE_PREFIX_PATH=protobuf \
-DCMAKE_BUILD_TYPE=MinSizeRel
```
注意:如果你曾经在源码目录下编译过其他平台的PaddlePaddle库,请先使用
`rm -rf`
命令删除
`third_party`
目录和
`build`
目录,以确保所有的第三方依赖库和PaddlePaddle代码都是针对新的CMake配置重新编译的。
执行完安装命令后,由于上一步cmake配置中
`WITH_C_API`
设置为
`ON`
,
`your/path/to/install`
目录中会包含
`include`
和
`lib`
目录,其中
`include`
中包含C-API的头文件,
`lib`
中包含一个Raspberry Pi版本的库。
更多的编译配置见
[
源码编译PaddlePaddle
](
http://www.paddlepaddle.org/doc_cn/getstarted/build_and_install/cmake/build_from_source_cn.html
)
相关文档。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录