Skip to content

Commit c1d5aaa

Browse files
author
yi.wu
committed
Merge branch 'develop' of https://github.com/PaddlePaddle/Paddle into thinnerdocker
2 parents 3298d30 + 56fcf9c commit c1d5aaa

33 files changed

+541
-402
lines changed

cmake/ccache.cmake

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
# Use ccache if found ccache program
22

3-
find_program(CCACHE_FOUND ccache)
3+
find_program(CCACHE_PATH ccache)
44

5-
if(CCACHE_FOUND)
5+
if(CCACHE_PATH)
66
message(STATUS "Ccache is founded, use ccache to speed up compile.")
7-
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
8-
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
9-
endif(CCACHE_FOUND)
7+
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ${CCACHE_PATH})
8+
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ${CCACHE_PATH})
9+
endif(CCACHE_PATH)

cmake/external/protobuf.cmake

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,14 @@ INCLUDE(ExternalProject)
1616

1717
FIND_PACKAGE(Protobuf 3.1)
1818

19+
IF(PROTOBUF_FOUND)
20+
EXEC_PROGRAM(${PROTOBUF_PROTOC_EXECUTABLE} ARGS --version OUTPUT_VARIABLE PROTOBUF_VERSION)
21+
STRING(REGEX MATCH "[0-9]+.[0-9]+" PROTOBUF_VERSION "${PROTOBUF_VERSION}")
22+
IF (${PROTOBUF_VERSION} VERSION_LESS "3.1.0")
23+
SET(PROTOBUF_FOUND OFF)
24+
ENDIF()
25+
ENDIF(PROTOBUF_FOUND)
26+
1927
IF(NOT PROTOBUF_FOUND)
2028
SET(PROTOBUF_SOURCES_DIR ${THIRD_PARTY_PATH}/protobuf)
2129
SET(PROTOBUF_INSTALL_DIR ${THIRD_PARTY_PATH}/install/protobuf)

cmake/util.cmake

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -71,21 +71,10 @@ function(link_paddle_exe TARGET_NAME)
7171
generate_rdma_links()
7272
endif()
7373

74-
if(WITH_METRIC)
75-
if(WITH_GPU)
76-
set(METRIC_LIBS paddle_metric_learning paddle_dserver_lib metric metric_cpu)
77-
else()
78-
set(METRIC_LIBS paddle_metric_learning paddle_dserver_lib metric_cpu)
79-
endif()
80-
else()
81-
set(METRIC_LIBS "")
82-
endif()
83-
8474
target_circle_link_libraries(${TARGET_NAME}
8575
ARCHIVE_START
8676
paddle_gserver
8777
paddle_function
88-
${METRIC_LIBS}
8978
ARCHIVE_END
9079
paddle_pserver
9180
paddle_trainer_lib
@@ -95,7 +84,6 @@ function(link_paddle_exe TARGET_NAME)
9584
paddle_parameter
9685
paddle_proto
9786
paddle_cuda
98-
${METRIC_LIBS}
9987
${EXTERNAL_LIBS}
10088
${CMAKE_THREAD_LIBS_INIT}
10189
${CMAKE_DL_LIBS}

doc/faq/index_cn.rst

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,3 +286,16 @@ PaddlePaddle的参数使用名字 :code:`name` 作为参数的ID,相同名字
286286
.. code-block:: bash
287287
288288
paddle train --use_gpu=true --trainer_count=2 --gpu_id=2
289+
290+
291+
12. 训练过程中出现 :code:`Floating point exception`, 训练因此退出怎么办?
292+
------------------------------------------------------------------------
293+
294+
Paddle二进制在运行时捕获了浮点数异常,只要出现浮点数异常(即训练过程中出现NaN或者Inf),立刻退出。浮点异常通常的原因是浮点数溢出、除零等问题。
295+
主要原因包括两个方面:
296+
297+
* 训练过程中参数或者训练过程中的梯度尺度过大,导致参数累加,乘除等时候,导致了浮点数溢出。
298+
* 模型一直不收敛,发散到了一个数值特别大的地方。
299+
* 训练数据有问题,导致参数收敛到了一些奇异的情况。或者输入数据尺度过大,有些特征的取值达到数百万,这时进行矩阵乘法运算就可能导致浮点数溢出。
300+
301+
主要的解决办法是减小学习律或者对数据进行归一化处理。

doc/getstarted/build_and_install/docker_install_cn.rst

Lines changed: 81 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,86 @@ PaddlePaddle的Docker容器使用方式
44
PaddlePaddle目前唯一官方支持的运行的方式是Docker容器。因为Docker能在所有主要操作系统(包括Linux,Mac OS X和Windows)上运行。 请注意,您需要更改 `Dockers设置 <https://github.com/PaddlePaddle/Paddle/issues/627>`_ 才能充分利用Mac OS X和Windows上的硬件资源。
55

66

7+
纯CPU和GPU的docker镜像使用说明
8+
------------------------------
9+
10+
对于每一个PaddlePaddle版本,我们都会发布两个Docker镜像:纯CPU的和GPU的。
11+
我们通过设置 `dockerhub.com <https://hub.docker.com/r/paddledev/paddle/>`_ 自动生成最新的docker镜像:
12+
`paddledev/paddle:0.10.0rc1-cpu` 和 `paddledev/paddle:0.10.0rc1-gpu`。
13+
14+
以交互容器方式运行纯CPU的镜像:
15+
16+
.. code-block:: bash
17+
18+
docker run -it --rm paddledev/paddle:0.10.0rc1-cpu /bin/bash
19+
20+
或者,可以以后台进程方式运行容器:
21+
22+
.. code-block:: bash
23+
24+
docker run -d -p 2202:22 -p 8888:8888 paddledev/paddle:0.10.0rc1-cpu
25+
26+
然后用密码 :code:`root` SSH进入容器:
27+
28+
.. code-block:: bash
29+
30+
ssh -p 2202 root@localhost
31+
32+
SSH方式的一个优点是我们可以从多个终端进入容器。比如,一个终端运行vi,另一个终端运行Python。另一个好处是我们可以把PaddlePaddle容器运行在远程服务器上,并在笔记本上通过SSH与其连接。
33+
34+
35+
以上方法在GPU镜像里也能用-只是请不要忘记按装CUDA驱动,以及告诉Docker:
36+
37+
.. code-block:: bash
38+
39+
export CUDA_SO="$(\ls /usr/lib64/libcuda* | xargs -I{} echo '-v {}:{}') $(\ls /usr/lib64/libnvidia* | xargs -I{} echo '-v {}:{}')"
40+
export DEVICES=$(\ls /dev/nvidia* | xargs -I{} echo '--device {}:{}')
41+
docker run ${CUDA_SO} ${DEVICES} -it paddledev/paddle:0.10.0rc1-gpu
42+
43+
44+
运行PaddlePaddle书籍
45+
---------------------
46+
47+
Jupyter Notebook是一个开源的web程序,大家可以通过它制作和分享带有代码、公式、图表、文字的交互式文档。用户可以通过网页浏览文档。
48+
49+
PaddlePaddle书籍是为用户和开发者制作的一个交互式的Jupyter Nodebook。
50+
如果您想要更深入了解deep learning,PaddlePaddle书籍一定是您最好的选择。
51+
52+
当您进入容器内之后,只用运行以下命令:
53+
54+
.. code-block:: bash
55+
56+
jupyter notebook
57+
58+
然后在浏览器中输入以下网址:
59+
60+
.. code-block:: text
61+
62+
http://localhost:8888/
63+
64+
就这么简单,享受您的旅程!
65+
66+
67+
非AVX镜像
68+
---------
69+
70+
纯CPU镜像以及GPU镜像都会用到AVX指令集,但是2008年之前生产的旧电脑不支持AVX。以下指令能检查Linux电脑是否支持AVX:
71+
72+
.. code-block:: bash
73+
74+
if cat /proc/cpuinfo | grep -i avx; then echo Yes; else echo No; fi
75+
76+
如果输出是No,我们就需要手动编译一个非AVX版本的镜像:
77+
78+
.. code-block:: bash
79+
80+
cd ~
81+
git clone https://github.com/PaddlePaddle/Paddle.git
82+
cd Paddle
83+
docker build --build-arg WITH_AVX=OFF -t paddle:cpu-noavx -f paddle/scripts/docker/Dockerfile .
84+
docker build --build-arg WITH_AVX=OFF -t paddle:gpu-noavx -f paddle/scripts/docker/Dockerfile.gpu .
85+
86+
787
通过Docker容器开发PaddlePaddle
888
------------------------------
989

@@ -57,67 +137,6 @@ PaddlePaddle目前唯一官方支持的运行的方式是Docker容器。因为Do
57137
ctest
58138
59139
60-
纯CPU和GPU的docker镜像
61-
----------------------
62-
63-
对于每一个PaddlePaddle版本,我们都会发布两个Docker镜像:纯CPU的和GPU的。我们通过设置 `dockerhub.com <https://hub.docker.com/r/paddledev/paddle/>`_ 自动运行以下两个命令:
64-
65-
.. code-block:: bash
66-
67-
docker build -t paddle:cpu -f paddle/scripts/docker/Dockerfile .
68-
docker build -t paddle:gpu -f paddle/scripts/docker/Dockerfile.gpu .
69-
70-
以交互容器方式运行纯CPU的镜像:
71-
72-
.. code-block:: bash
73-
74-
docker run -it --rm paddledev/paddle:cpu-latest /bin/bash
75-
76-
或者,可以以后台进程方式运行容器:
77-
78-
.. code-block:: bash
79-
80-
docker run -d -p 2202:22 paddledev/paddle:cpu-latest
81-
82-
然后用密码 :code:`root` SSH进入容器:
83-
84-
.. code-block:: bash
85-
86-
ssh -p 2202 root@localhost
87-
88-
SSH方式的一个优点是我们可以从多个终端进入容器。比如,一个终端运行vi,另一个终端运行Python。另一个好处是我们可以把PaddlePaddle容器运行在远程服务器上,并在笔记本上通过SSH与其连接。
89-
90-
91-
以上方法在GPU镜像里也能用-只是请不要忘记按装CUDA驱动,以及告诉Docker:
92-
93-
.. code-block:: bash
94-
95-
export CUDA_SO="$(\ls /usr/lib64/libcuda* | xargs -I{} echo '-v {}:{}') $(\ls /usr/lib64/libnvidia* | xargs -I{} echo '-v {}:{}')"
96-
export DEVICES=$(\ls /dev/nvidia* | xargs -I{} echo '--device {}:{}')
97-
docker run ${CUDA_SO} ${DEVICES} -it paddledev/paddle:gpu-latest
98-
99-
100-
非AVX镜像
101-
---------
102-
103-
纯CPU镜像以及GPU镜像都会用到AVX指令集,但是2008年之前生产的旧电脑不支持AVX。以下指令能检查Linux电脑是否支持AVX:
104-
105-
106-
.. code-block:: bash
107-
108-
if cat /proc/cpuinfo | grep -i avx; then echo Yes; else echo No; fi
109-
110-
如果输出是No,我们就需要手动编译一个非AVX版本的镜像:
111-
112-
.. code-block:: bash
113-
114-
cd ~
115-
git clone https://github.com/PaddlePaddle/Paddle.git
116-
cd Paddle
117-
docker build --build-arg WITH_AVX=OFF -t paddle:cpu-noavx -f paddle/scripts/docker/Dockerfile .
118-
docker build --build-arg WITH_AVX=OFF -t paddle:gpu-noavx -f paddle/scripts/docker/Dockerfile.gpu .
119-
120-
121140
文档
122141
----
123142

@@ -128,7 +147,7 @@ Paddle的Docker镜像带有一个通过 `woboq code browser
128147

129148
.. code-block:: bash
130149
131-
docker run -d --name paddle-cpu-doc paddle:cpu
150+
docker run -d --name paddle-cpu-doc paddle:0.10.0rc1-cpu
132151
docker run -d --volumes-from paddle-cpu-doc -p 8088:80 nginx
133152
134153
接着我们就能够打开浏览器在 http://localhost:8088/paddle/ 浏览代码。

0 commit comments

Comments
 (0)