From 55be9c7460010055fc0c54173084e3f814a809aa Mon Sep 17 00:00:00 2001 From: Cheerego <35982308+shanyi15@users.noreply.github.com> Date: Sat, 23 Feb 2019 10:56:21 +0800 Subject: [PATCH] Cherrypick1.3 (#652) * thorough clean * delete_DS_Store * [Don't merge now]update_install_doc (#643) * update_install_doc * follow_comments * add maxdepth (#646) * upload_md (#649) * update_version (#650) * Translation of 16 new apis (#651) * fix_windows --- doc/fluid/api/gen_index.py | 2 +- doc/fluid/api/index_en.rst | 2 +- doc/fluid/api_cn/fluid_cn.rst | 103 +-- doc/fluid/api_cn/gen_index.py | 2 +- doc/fluid/api_cn/index_cn.rst | 2 +- doc/fluid/api_cn/initializer_cn.rst | 48 +- doc/fluid/api_cn/layers_cn.rst | 780 +++++++++++++++++- doc/fluid/beginners_guide/install/FAQ.md | 100 +-- doc/fluid/beginners_guide/install/Tables.md | 218 +++-- .../install/compile/compile_CentOS.md | 104 ++- .../install/compile/compile_MacOS.md | 121 ++- .../install/compile/compile_Ubuntu.md | 128 +-- .../install/compile/compile_Windows.md | 96 ++- .../install/compile/fromsource.rst | 5 +- .../beginners_guide/install/index_cn.rst | 6 +- .../beginners_guide/install/install_CentOS.md | 173 +--- .../beginners_guide/install/install_Docker.md | 89 ++ .../beginners_guide/install/install_MacOS.md | 137 +-- .../beginners_guide/install/install_Ubuntu.md | 178 +--- .../install/install_Windows.md | 58 +- .../beginners_guide/install/install_script.md | 53 ++ 21 files changed, 1493 insertions(+), 912 deletions(-) create mode 100644 doc/fluid/beginners_guide/install/install_Docker.md create mode 100644 doc/fluid/beginners_guide/install/install_script.md diff --git a/doc/fluid/api/gen_index.py b/doc/fluid/api/gen_index.py index 4189918e8..51aa256fe 100644 --- a/doc/fluid/api/gen_index.py +++ b/doc/fluid/api/gen_index.py @@ -10,7 +10,7 @@ API Reference ============= .. toctree:: - + :maxdepth: 1 ''') file_object.write(' ../api_guides/index_en.rst'+'\n') diff --git a/doc/fluid/api/index_en.rst b/doc/fluid/api/index_en.rst index d49136c06..b66676b23 100644 --- a/doc/fluid/api/index_en.rst +++ b/doc/fluid/api/index_en.rst @@ -3,7 +3,7 @@ API Reference ============= .. toctree:: - + :maxdepth: 1 ../api_guides/index_en.rst fluid.rst diff --git a/doc/fluid/api_cn/fluid_cn.rst b/doc/fluid/api_cn/fluid_cn.rst index a358254fc..29bb278e0 100644 --- a/doc/fluid/api_cn/fluid_cn.rst +++ b/doc/fluid/api_cn/fluid_cn.rst @@ -128,9 +128,62 @@ BOOL类型。如果设置为True, GPU操作中的一些锁将被释放,Paralle +.. _cn_api_fluid_CompiledProgram: +CompiledProgram +------------------------------- + +.. py:class:: paddle.fluid.CompiledProgram(program) + +编译一个接着用来执行的Program。 + +1. 首先使用layers(网络层)创建程序。 +2. (可选)可使用CompiledProgram来在运行之前优化程序。 +3. 定义的程序或CompiledProgram由Executor运行。 + +CompiledProgram用于转换程序以进行各种优化。例如, + +- 预先计算一些逻辑,以便每次运行更快。 +- 转换Program,使其可以在多个设备中运行。 +- 转换Program以进行优化预测或分布式训练。 + +**代码示例** + +.. code-block:: python + + place = fluid.CUDAPlace(0) if use_cuda else fluid.CPUPlace() + exe = fluid.Executor(place) + exe.run(startup) + compiled_prog = compiler.CompiledProgram(main).with_data_parallel( + loss_name=loss.name) + for i in range(5): + test_loss, = exe.run(compiled_prog, + feed=feed_dict, + fetch_list=[loss.name]) + +参数: + - **program** : 一个Program对象,承载着用户定义的模型计算逻辑 + +.. py:method:: with_data_parallel(loss_name=None, build_strategy=None, exec_strategy=None, share_vars_from=None) +配置Program使其以数据并行方式运行。 +参数: + - **loss_name** (str) - 损失函数名称必须在训练过程中设置。 默认None。 + - **build_strategy** (BuildStrategy) - build_strategy用于构建图,因此它可以在具有优化拓扑的多个设备/核上运行。 有关更多信息,请参阅 ``fluid.BuildStrategy`` 。 默认None。 + - **exec_strategy** (ExecutionStrategy) - exec_strategy用于选择执行图的方式,例如使用多少线程,每次清理临时变量之前进行的迭代次数。 有关更多信息,请参阅 ``fluid.ExecutionStrategy`` 。 默认None。 + - **share_vars_from** (CompiledProgram) - 如果有,此CompiledProgram将共享来自share_vars_from的变量。 share_vars_from指定的Program必须由此CompiledProgram之前的Executor运行,以便vars准备就绪。 + +返回: self + +.. py:method:: with_inference_optimize(config) + +添加预测优化。 + +参数: + - **config** - 用于创建预测器的NativeConfig或AnalysisConfig的实例 + +返回: self @@ -1512,56 +1565,6 @@ release_memory - - - - - - - - - - - -.. _cn_api_fluid_Scope: - -Scope -------------------------------- - -.. py:class:: paddle.fluid.scope(scope) - -(作用域)Scope为变量名的联合。所有变量都属于Scope。 - -从本地作用域中可以拉取到其双亲作用域的变量。 - -要想运行一个网络,需要指明它运行所在的域,确切的说: exe.Run(&scope) 。 - -一个网络可以在不同域上运行,并且更新该域的各类变量。 - -在作用域上创建一个变量,并在域中获取。 - -**代码示例** - -.. code-block:: python - - # create tensor from a scope and set value to it. - param = scope.var('Param').get_tensor() - param_array = np.full((height, row_numel), 5.0).astype("float32") - param.set(param_array, place) - - -.. py:method:: drop_kids(self: paddle.fluid.core.Scope) → None -.. py:method:: find_var(self: paddle.fluid.core.Scope, arg0: unicode) → paddle.fluid.core.Variable -.. py:method:: new_scope(self: paddle.fluid.core.Scope) → paddle.fluid.core.Scope -.. py:method:: var(self: paddle.fluid.core.Scope, arg0: unicode) → paddle.fluid.core.Variable - - - - - - - - .. _cn_api_fluid_scope_guard: scope_guard diff --git a/doc/fluid/api_cn/gen_index.py b/doc/fluid/api_cn/gen_index.py index 9e77c1d19..860866b02 100644 --- a/doc/fluid/api_cn/gen_index.py +++ b/doc/fluid/api_cn/gen_index.py @@ -10,7 +10,7 @@ API Reference ============= .. toctree:: - + :maxdepth: 1 ''') file_object.write(' ../api_guides/index.rst'+'\n') diff --git a/doc/fluid/api_cn/index_cn.rst b/doc/fluid/api_cn/index_cn.rst index 2b0266f6e..5686f640f 100644 --- a/doc/fluid/api_cn/index_cn.rst +++ b/doc/fluid/api_cn/index_cn.rst @@ -3,7 +3,7 @@ API ===== .. toctree:: - + :maxdepth: 1 ../api_guides/index.rst fluid_cn.rst diff --git a/doc/fluid/api_cn/initializer_cn.rst b/doc/fluid/api_cn/initializer_cn.rst index 98bd68c54..9815d4365 100644 --- a/doc/fluid/api_cn/initializer_cn.rst +++ b/doc/fluid/api_cn/initializer_cn.rst @@ -6,7 +6,7 @@ .. _cn_api_fluid_initializer_Bilinear: Bilinear ->>>>>>>>>>> +------------------------------- .. py:attribute:: paddle.fluid.initializer.Bilinear @@ -16,7 +16,7 @@ Bilinear .. _cn_api_fluid_initializer_BilinearInitializer: BilinearInitializer ->>>>>>>>>>>>>>>>>>>>> +------------------------------- .. py:class:: paddle.fluid.initializer.BilinearInitializer @@ -49,7 +49,7 @@ num_filters = C和groups = C 表示这是按通道转置的卷积函数。滤波 .. _cn_api_fluid_initializer_Constant: Constant ->>>>>>>>>> +------------------------------- .. py:attribute:: paddle.fluid.initializer.Constant @@ -59,7 +59,7 @@ Constant .. _cn_api_fluid_initializer_ConstantInitializer: ConstantInitializer ->>>>>>>>>>>> +------------------------------- .. py:class:: paddle.fluid.initializer.ConstantInitializer(value=0.0, force_cpu=False) @@ -84,7 +84,7 @@ ConstantInitializer .. _cn_api_fluid_initializer_force_init_on_cpu: force_init_on_cpu ->>>>>>>>>>>>>>>>>>> +------------------------------- .. py:function:: paddle.fluid.initializer.force_init_on_cpu() @@ -114,7 +114,7 @@ force_init_on_cpu .. _cn_api_fluid_initializer_init_on_cpu: init_on_cpu ->>>>>>>>>>>> +------------------------------- .. py:function:: paddle.fluid.initializer.init_on_cpu(*args, **kwds) @@ -135,7 +135,7 @@ init_on_cpu .. _cn_api_fluid_initializer_MSRA: MSRA ->>>>>> +------------------------------- .. py:attribute:: paddle.fluid.initializer.MSRA @@ -144,7 +144,7 @@ MSRA .. _cn_api_fluid_initializer_MSRAInitializer: MSRAInitializer ->>>>>>>>>>>>>>>>> +------------------------------- .. py:class:: paddle.fluid.initializer.MSRAInitializer(uniform=True, fan_in=None, seed=0) @@ -189,7 +189,7 @@ MSRAInitializer .. _cn_api_fluid_initializer_Normal: Normal ->>>>>>>> +------------------------------- .. py:attribute:: paddle.fluid.initializer.Normal @@ -199,7 +199,7 @@ Normal .. _cn_api_fluid_initializer_NormalInitializer: NormalInitializer ->>>>>>>>>>>> +------------------------------- .. py:class:: paddle.fluid.initializer.NormalInitializer(loc=0.0, scale=1.0, seed=0) @@ -218,15 +218,30 @@ NormalInitializer param_attr=fluid.initializer.Normal(loc=0.0, scale=2.0) +.. _cn_api_fluid_initializer_NumpyArrayInitializer: +NumpyArrayInitializer +------------------------------- +.. py:class:: paddle.fluid.initializer.NumpyArrayInitializer(value) +使用Numpy型数组来初始化参数变量。 + +参数: + - **value** (numpy) - 用于初始化变量的一个Numpy型数组。 + +**代码示例** + +.. code-block:: python + + fc = fluid.layers.fc(input=x, size=10, + param_attr=fluid.initializer.NumpyArrayInitializer(numpy.array([1,2]))) .. _cn_api_fluid_initializer_TruncatedNormal: TruncatedNormal ->>>>>>>>>>>>>>>>> +------------------------------- .. py:attribute:: paddle.fluid.initializer.TruncatedNormal @@ -236,7 +251,7 @@ TruncatedNormal .. _cn_api_fluid_initializer_TruncatedNormalInitializer: TruncatedNormalInitializer ->>>>>>>>>>>> +------------------------------- .. py:class:: paddle.fluid.initializer.TruncatedNormalInitializer(loc=0.0, scale=1.0, seed=0) @@ -265,7 +280,7 @@ Random Truncated Normal(高斯)分布初始化器 .. _cn_api_fluid_initializer_Uniform: Uniform ->>>>>>>>> +------------------------------- .. py:attribute:: paddle.fluid.initializer.Uniform @@ -276,7 +291,7 @@ Uniform .. _cn_api_fluid_initializer_UniformInitializer: UniformInitializer ->>>>>>>>>>>> +------------------------------- .. py:class:: paddle.fluid.initializer.UniformInitializer(low=-1.0, high=1.0, seed=0) @@ -305,7 +320,7 @@ UniformInitializer .. _cn_api_fluid_initializer_Xavier: Xavier ->>>>>>>>> +------------------------------- .. py:attribute:: paddle.fluid.initializer.Xavier @@ -319,7 +334,8 @@ Xavier .. _cn_api_fluid_initializer_XavierInitializer: XavierInitializer ->>>>>>>>>>>>>>>>>>> +------------------------------- + .. py:class:: paddle.fluid.initializer.XavierInitializer(uniform=True, fan_in=None, fan_out=None, seed=0) 该类实现Xavier权重初始化方法( Xavier weight initializer),Xavier权重初始化方法出自Xavier Glorot和Yoshua Bengio的论文 `Understanding the difficulty of training deep feedforward neural networks `_ diff --git a/doc/fluid/api_cn/layers_cn.rst b/doc/fluid/api_cn/layers_cn.rst index f77c667c2..2e47ff1be 100644 --- a/doc/fluid/api_cn/layers_cn.rst +++ b/doc/fluid/api_cn/layers_cn.rst @@ -4,7 +4,7 @@ fluid.layers ============ - control_flow +control_flow ============ @@ -1282,6 +1282,151 @@ shuffle nn ============ +.. _cn_api_fluid_layers_adaptive_pool2d: + +adaptive_pool2d +------------------------------- + +.. py:function:: paddle.fluid.layers.adaptive_pool2d(input, pool_size, pool_type='max', require_index=False, name=None) + +pooling2d操作根据输入 ``input`` , ``pool_size`` , ``pool_type`` 参数计算输出。 输入(X)和输出(Out)采用NCHW格式,其中N是批大小batch size,C是通道数,H是feature(特征)的高度,W是feature(特征)的宽度。 参数 ``pool_size`` 由两个元素构成, 这两个元素分别代表高度和宽度。 输出(Out)的H和W维与 ``pool_size`` 大小相同。 + + +对于平均adaptive pool2d: + +.. math:: + + hstart &= floor(i * H_{in} / H_{out}) + + hend &= ceil((i + 1) * H_{in} / H_{out}) + + wstart &= floor(j * W_{in} / W_{out}) + + wend &= ceil((j + 1) * W_{in} / W_{out}) + + Output(i ,j) &= \frac{sum(Input[hstart:hend, wstart:wend])}{(hend - hstart) * (wend - wstart)} + +参数: + - **input** (Variable) - 池化操作的输入张量。 输入张量的格式为NCHW,其中N是batch大小,C是通道数,H是特征的高度,W是特征的宽度。 + - **pool_size** (int | list | tuple) - 池化核大小。 如果池化核大小是元组或列表,则它必须包含两个整数(pool_size_Height,pool_size_Width)。 + - **pool_type** (string)- 池化类型,可输入“max”代表max-pooling,或者“avg”代表average-pooling。 + - **require_index** (bool) - 如果为true,则输出中带有最大池化点所在的索引。 如果pool_type为avg,该项不可被设置为true。 + - **name** (str | None) - 此层的名称(可选)。 如果设置为None,则将自动命名该层。 + + +返回: 池化结果 + +返回类型: Variable + + +抛出异常: + + - ``ValueError`` – ``pool_type`` 不是 ‘max’ 或 ‘avg’ + - ``ValueError`` – 当 ``pool_type`` 是 ‘avg’ 时,错误地设置 ‘require_index’ 为true . + - ``ValueError`` – ``pool_size`` 应为一个长度为2的列表或元组 + +.. code-block:: python + + # 假设输入形为[N, C, H, W], `pool_size` 为 [m, n], + # 输出形为 [N, C, m, n], adaptive pool 将输入的 H 和 W 纬度 + # 平均分割为 m * n 个栅格(grid) ,然后为每个栅格进行池化得到输出 + # adaptive average pool 进行如下操作 + # + # for i in range(m): + # for j in range(n): + # hstart = floor(i * H / m) + # hend = ceil((i + 1) * H / m) + # wstart = floor(i * W / n) + # wend = ceil((i + 1) * W / n) + # output[:, :, i, j] = avg(input[:, :, hstart: hend, wstart: wend]) + # + data = fluid.layers.data( + name='data', shape=[3, 32, 32], dtype='float32') + pool_out = fluid.layers.adaptive_pool2d( + input=data, + pool_size=[3, 3], + pool_type='avg') + + + + +.. _cn_api_fluid_layers_adaptive_pool3d: + +adaptive_pool3d +------------------------------- + +.. py:function:: paddle.fluid.layers.adaptive_pool3d(input, pool_size, pool_type='max', require_index=False, name=None) + +pooling3d操作根据输入 ``input`` ,``pool_size`` , ``pool_type`` 参数计算输出。 输入(X)和输出(输出)采用NCDHW格式,其中N是批大小batch size,C是通道数,D是特征(feature)的深度,H是特征的高度,W是特征的宽度。 参数 ``pool_size`` 由三个元素组成。 这三个元素分别代表深度,高度和宽度。输出(Out)的D,H,W维与 ``pool_size`` 相同。 + + +对于平均adaptive pool3d: + +.. math:: + + dstart &= floor(i * D_{in} / D_{out}) + + dend &= ceil((i + 1) * D_{in} / D_{out}) + + hstart &= floor(j * H_{in} / H_{out}) + + hend &= ceil((j + 1) * H_{in} / H_{out}) + + wstart &= floor(k * W_{in} / W_{out}) + + wend &= ceil((k + 1) * W_{in} / W_{out}) + + Output(i ,j, k) &= \frac{sum(Input[dstart:dend, hstart:hend, wstart:wend])}{(dend - dstart) * (hend - hstart) * (wend - wstart)} + + + +参数: + - **input** (Variable) - 池化操作的输入张量。 输入张量的格式为NCDHW,其中N是batch大小,C是通道数,D为特征的深度,H是特征的高度,W是特征的宽度。 + - **pool_size** (int | list | tuple) - 池化核大小。 如果池化核大小是元组或列表,则它必须包含三个整数(Depth, Height, Width)。 + - **pool_type** (string)- 池化类型,可输入“max”代表max-pooling,或者“avg”代表average-pooling。 + - **require_index** (bool) - 如果为true,则输出中带有最大池化点所在的索引。 如果pool_type为avg,该项不可被设置为true。 + - **name** (str | None) - 此层的名称(可选)。 如果设置为None,则将自动命名该层。 + + +返回: 池化结果 + +返回类型: Variable + + +抛出异常: + + - ``ValueError`` – ``pool_type`` 不是 ‘max’ 或 ‘avg’ + - ``ValueError`` – 当 ``pool_type`` 是 ‘avg’ 时,错误地设置 ‘require_index’ 为true . + - ``ValueError`` – ``pool_size`` 应为一个长度为3的列表或元组 + +.. code-block:: python + + # 假设输入形为[N, C, D, H, W], `pool_size` 为 [l, m, n], + # 输出形为 [N, C, l, m, n], adaptive pool 将输入的D, H 和 W 纬度 + # 平均分割为 l * m * n 个栅格(grid) ,然后为每个栅格进行池化得到输出 + # adaptive average pool 进行如下操作 + # + # for i in range(l): + # for j in range(m): + # for k in range(n): + # dstart = floor(i * D / l) + # dend = ceil((i + 1) * D / l) + # hstart = floor(j * H / m) + # hend = ceil((j + 1) * H / m) + # wstart = floor(k * W / n) + # wend = ceil((k + 1) * W / n) + # output[:, :, i, j, k] = + # avg(input[:, :, dstart:dend, hstart: hend, wstart: wend]) + # + data = fluid.layers.data( + name='data', shape=[3, 32, 32], dtype='float32') + pool_out, mask = fluid.layers.adaptive_pool3d( + input=data, + pool_size=[3, 3, 3], + pool_type='avg') + + + .. _cn_api_fluid_layers_add_position_encoding: @@ -1700,7 +1845,36 @@ bilinear_tensor_product +.. _cn_api_fluid_layers_bpr_loss: + +bpr_loss +------------------------------- + +.. py:function:: paddle.fluid.layers.bpr_loss(input, label, name=None) + + +Bayesian Personalized Ranking Loss Operator. (贝叶斯个性化排序损失计算) + +该算子属于pairwise的排序类型,其标签是期望物品。在某次会话中某一给定点的损失值由下式计算而得: + +.. math:: + + Y[i] = -\frac{1}{N_{i}-1} * \sum_{0\le j`_ + +参数: + - **input** (Variable|list): 一个形为[N x D]的2-D tensor , 其中 N 为批大小batch size ,D 为种类的数量。该输入为logits而非概率。 + - **label** (Variable|list): 2-D tensor 类型的真实值, 形为[N x 1] + - **name** (str|None): (可选)该层的命名。 如果为None, 则自动为该层命名。 默认为None. + +返回: 形为[N x 1]的2D张量,即bpr损失 + +**代码示例:** + +.. code-block:: python + cost = fluid.layers.bpr_loss(input=predict, label=label) @@ -2563,6 +2737,57 @@ ctc_greedy_decoder +.. _cn_api_fluid_layers_data_norm: + +data_norm +------------------------------- + +.. py:function:: paddle.fluid.layers.data_norm(input, act=None, epsilon=1e-05, param_attr=None, data_layout='NCHW', in_place=False, use_mkldnn=False, name=None, moving_mean_name=None, moving_variance_name=None, do_model_average_for_mean_and_var=False) + +**数据正则化层** + +可用作conv2d和fully_connected操作的正则化函数。 此层所需的数据格式为以下之一: + +1. NHWC [batch, in_height, in_width, in_channels] +2. NCHW [batch, in_channels, in_height, in_width] + +:math:`input` 为一个mini-batch上的特征: + +.. math:: + \mu_{\beta} &\gets \frac{1}{m} \sum_{i=1}^{m} x_i \qquad &//\ + \ mini-batch\ mean \\ + \sigma_{\beta}^{2} &\gets \frac{1}{m} \sum_{i=1}^{m}(x_i - \ + \mu_{\beta})^2 \qquad &//\ mini-batch\ variance \\ + \hat{x_i} &\gets \frac{x_i - \mu_\beta} {\sqrt{\ + \sigma_{\beta}^{2} + \epsilon}} \qquad &//\ normalize \\ + y_i &\gets \gamma \hat{x_i} + \beta \qquad &//\ scale\ and\ shift + +参数: + - **input** (variable) - 输入变量,它是一个LoDTensor。 + - **act** (string,默认None) - 激活函数类型,线性| relu | prelu | ... + - **epsilon** (float,默认1e-05) - + - **param_attr** (ParamAttr) - 参数比例的参数属性。 + - **data_layout** (string,默认NCHW) - NCHW | NHWC + - **in_place** (bool,默认值False) - 使data_norm的输入和输出复用同一块内存。 + - **use_mkldnn** (bool,默认为false) - 是否使用mkldnn + - **name** (string,默认None) - 此层的名称(可选)。 如果设置为None,则将自动命名该层。 + - **moving_mean_name** (string,Default None) - 存储全局Mean的moving_mean的名称。 + - **moving_variance_name** (string,默认None) - 存储全局Variance的moving_variance的名称。 + - **do_model_average_for_mean_and_var** (bool,默认值为false) - 是否为mean和variance进行模型平均。 + +返回: 张量变量,是对输入数据进行正则化后的结果。 + +返回类型: Variable + +**代码示例** + +.. code-block:: python + + data = fluid.layers.data(input=x, size=200, param_attr='fc1.w') + hidden2 = fluid.layers.data_norm(input=hidden1) + + + @@ -4143,7 +4368,43 @@ hsigmoid可以把时间复杂度 :math:`O(N)` 优化到 :math:`O(logN)` ,其中 +.. _cn_api_fluid_layers_huber_loss: + +huber_loss +------------------------------- + +.. py:function:: paddle.fluid.layers.huber_loss(input, label, delta) + +Huber损失是更具鲁棒性的损失函数。 huber损失可以评估输入对标签的合适度。 与MSE损失不同,Huber损失可更为稳健地处理异常值。 + +当输入和标签之间的距离大于delta时: + +.. math:: + huber\_loss = delta * (label - input) - 0.5 * delta * delta + +当输入和标签之间的距离小于delta时: + +.. math:: + huber\_loss = 0.5 * (label - input) * (label - input) + + +参数: + - **input** (Variable) - 此输入是前一个算子计算得到的概率。 第一个维度是批大小batch_size,最后一个维度是1。 + - **label** (Variable) - 第一个维度为批量大小batch_size且最后一个维度为1的真实值 + - **delta** (float) - huber loss的参数,用于控制异常值的范围 + +返回: 形为[batch_size, 1]的huber loss. + +返回类型: huber_loss (Variable) + + + +**代码示例** + +.. code-block:: python + predictions = fluid.layers.softmax(x) + loss = fluid.layers.huber_loss(input=predictions, label=label, 1.0) @@ -5954,11 +6215,117 @@ prelu 返回类型: 变量(Variable) - - +.. _cn_api_fluid_layers_psroi_pool: + +psroi_pool +------------------------------- + +.. py:function:: paddle.fluid.layers.psroi_pool(input, rois, output_channels, spatial_scale, pooled_height, pooled_width, name=None) + +PSROIPool运算 + +区分位置的感兴趣区域池化方法(Position sensitive region of interest pooling,也称为PSROIPooling)是对输入的 "感兴趣区域"(RoI)执行按位置的average池化,并将N个按位置评分图(score map)和一个由num_rois个感兴趣区域所组成的列表作为输入。 + +用于R-FCN的PSROIPooling。 有关更多详细信息,请参阅 https://arxiv.org/abs/1605.06409。 + +参数: + - **input** (Variable) - (Tensor),PSROIPoolOp的输入。 输入张量的格式是NCHW。 其中N是批大小batch_size,C是输入通道的数量,H是输入特征图的高度,W是特征图宽度 + - **rois** (Variable) - 要进行池化的RoI(感兴趣区域)。 + - **output_channels** (integer) - (int),输出特征图的通道数。 对于共C个种类的对象分类任务,output_channels应该是(C + 1),该情况仅适用于分类任务。 + - **spatial_scale** (float) - (float,default 1.0),乘法空间比例因子,用于将ROI坐标从其输入比例转换为池化使用的比例。默认值:1.0 + - **pooled_height** (integer) - (int,默认值1),池化输出的高度。默认值:1 + - **pooled_width** (integer) - (int,默认值1),池化输出的宽度。默认值:1 + - **name** (str,default None) - 此层的名称。 + +返回: (Tensor),PSROIPoolOp的输出是形为 (num_rois,output_channels,pooled_h,pooled_w) 的4-D Tensor。 + +返回类型: 变量(Variable) + +**代码示例:** + +.. code-block:: python + + pool_out = fluid.layers.psroi_pool(input=x, rois=rois, 490, 1.0, 7, 7) + + + + + +.. _cn_api_fluid_layers_py_func: + +py_func +------------------------------- + +.. py:function:: paddle.fluid.layers.py_func(func, x, out, backward_func=None, skip_vars_in_backward_input=None) + +PyFunc运算。 + +用户可以使用 ``py_func`` 在Python端注册operator。 ``func`` 的输入 ``x`` 是LoDTensor,输出可以是numpy数组或LoDTensor。 Paddle将在前向部分调用注册的 ``func`` ,并在反向部分调用 ``backward_func`` (如果 ``backward_func`` 不是None)。 + +在调用此函数之前,应正确设置 ``out`` 的数据类型和形状。 但是,``out`` 和 ``x`` 对应梯度的数据类型和形状将自动推断而出。 + +``backward_func`` 的输入顺序为:前向输入x,前向输出 ``out`` 和反向输入 ``out`` 的梯度。 如果 ``out`` 的某些变量没有梯度,则输入张量在Python端将为None。 + +如果in的某些变量没有梯度,则用户应返回None。 + +此功能还可用于调试正在运行的网络,可以通过添加没有输出的py_func运算,并在func中打印输入x。 + +参数: + - **func** (callable) - 前向Python函数。 + - **x** (Variable|list(Variable)|tuple(Variable)) - func的输入。 + - **out** (Variable|list(Variable)|tuple(Variable)) - func的输出。 Paddle无法自动推断out的形状和数据类型。 应事先创建 ``out`` 。 + - **backward_func** (callable|None) - 反向Python函数。 None意味着没有反向计算。 默认None。 + - **skip_vars_in_backward_input** (Variable|list(Variable)|tuple(Variable)) - backward_func输入中不需要的变量。 这些变量必须是x和out中的一个。 如果设置,这些变量将不是backward_func的输入,仅在backward_func不是None时有用。 默认None。 + +返回: 传入的 ``out`` + +返回类型: out (Variable|list(Variable)|tuple(Variable)) + +**代码示例**: + +.. code-block:: python + + import paddle.fluid as fluid + import six + + def create_tmp_var(name, dtype, shape): + return fluid.default_main_program().current_block().create_var( + name=name, dtype=dtype, shape=shape) + + # Paddle C++ op提供的tanh激活函数 + # 此处仅采用tanh作为示例展示py_func的使用方法 + def tanh(x): + return np.tanh(x) + + # 跳过前向输入x + def tanh_grad(y, dy): + return np.array(dy) * (1 - np.square(np.array(y))) + + def debug_func(x): + print(x) + + def simple_net(img, label): + hidden = img + for idx in six.moves.range(4): + hidden = fluid.layers.fc(hidden, size=200) + new_hidden = create_tmp_var(name='hidden_{}'.format(idx), + dtype=hidden.dtype, shape=hidden.shape) + + # 用户自定义的前向反向计算 + hidden = fluid.layers.py_func(func=tanh, x=hidden, + out=new_hidden, backward_func=tanh_grad, + skip_vars_in_backward_input=hidden) + + # 用户自定义的调试层,可以打印出变量细则 + fluid.layers.py_func(func=debug_func, x=hidden, out=None) + + prediction = fluid.layers.fc(hidden, size=10, act='softmax') + loss = fluid.layers.cross_entropy(input=prediction, label=label) + return fluid.layers.mean(loss) + @@ -7711,6 +8078,73 @@ shape算子 +.. _cn_api_fluid_layers_shuffle_channel: + +shuffle_channel +------------------------------- + +.. py:function:: paddle.fluid.layers.shuffle_channel(x, group, name=None) + +**Shuffle Channel 运算(通道重排运算)** + +该运算符将输入 ``x`` 的通道混洗重排。 它将每个组中的输入通道分成 ``group`` 个子组,并通过逐个从每个子组中选择元素来获得新的顺序。 + +请参阅 https://arxiv.org/pdf/1707.01083.pdf + +:: + + 输入一个形为 (N, C, H, W) 的4-D tensor: + + input.shape = (1, 4, 2, 2) + input.data =[[[[0.1, 0.2], + [0.2, 0.3]], + + [[0.3, 0.4], + [0.4, 0.5]], + + [[0.5, 0.6], + [0.6, 0.7]], + + [[0.7, 0.8], + [0.8, 0.9]]]] + + 指定组数 group: 2 + 可得到与输入同形的输出 4-D tensor: + + out.shape = (1, 4, 2, 2) + out.data = [[[[0.1, 0.2], + [0.2, 0.3]], + + [[0.5, 0.6], + [0.6, 0.7]], + + [[0.3, 0.4], + [0.4, 0.5]], + + [[0.7, 0.8], + [0.8, 0.9]]]] + +参数: + - **x** (Variable) – 输入张量变量。 应是形状为[N,C,H,W]的4-D张量 + - **group** (int) – 表示子组的数目,它应该整除通道数。 + +返回:通道混洗结果是一个张量变量,其形状和类型与输入相同。 + +返回类型:输出(Variable) + + +**代码示例:** + +.. code-block:: python + + input = fluid.layers.data(name='input', shape=[4,2,2], dtype='float32') + out = fluid.layers.shuffle_channel(x=input, group=2) + + + + + + @@ -8424,7 +8858,37 @@ Swish 激活函数 y = fluid.layers.swish(x, beta=2.0) +.. _cn_api_fluid_layers_teacher_student_sigmoid_loss: +teacher_student_sigmoid_loss +----------------------------------- + +.. py:function:: paddle.fluid.layers.teacher_student_sigmoid_loss(input, label, soft_max_up_bound=15.0, soft_max_lower_bound=-15.0) + +**Teacher Student Log Loss Layer(教师--学生对数损失层)** + +此图层接受输入预测和目标标签,并返回teacher_student损失。 + +.. math:: + + loss = max(x, 0) - x * z + log(1 + exp(-abs(x))) + max(x, 0) - x * z' + log(1 + exp(-abs(x))) + + +参数: + - **input** (Variable|list) – 形状为[N x 1]的二维张量,其中N是批大小batch size。 该输入是由前一个运算计算而得的概率。 + - **label** (Variable|list) – 具有形状[N x 1]的二维张量的真实值,其中N是批大小batch_size。 + - **soft_max_up_bound** (float) – 若input > soft_max_up_bound, 输入会被向下限制。默认为15.0 + - **soft_max_lower_bound** (float) – 若input < soft_max_lower_bound, 输入将会被向上限制。默认为-15.0 + +返回:具有形状[N x 1]的2-D张量,teacher_student_sigmoid_loss。 + +返回类型:变量 + +**代码示例**: + +.. code-block:: python + + cost = fluid.layers.teacher_student_sigmoid_loss(input=similarity, label=label) @@ -8522,6 +8986,61 @@ transpose +.. _cn_api_fluid_layers_tree_conv: + +tree_conv +------------------------------- + +.. py:function:: paddle.fluid.layers.tree_conv(nodes_vector, edge_set, output_size, num_filters=1, max_depth=2, act='tanh', param_attr=None, bias_attr=None, name=None) + +基于树结构的卷积Tree-Based Convolution运算。 + +基于树的卷积是基于树的卷积神经网络(TBCNN,Tree-Based Convolution Neural Network)的一部分,它用于对树结构进行分类,例如抽象语法树。 Tree-Based Convolution提出了一种称为连续二叉树的数据结构,它将多路(multiway)树视为二叉树。 提出基于树的卷积论文: https://arxiv.org/abs/1409.5718v1 + +参数: + - **nodes_vector** (Variable) – (Tensor) 树上每个节点的特征向量(vector)。特征向量的形状必须为[max_tree_node_size,feature_size] + - **edge_set** (Variable) – (Tensor) 树的边。边必须带方向。边集的形状必须是[max_tree_node_size,2] + - **output_size** (int) – 输出特征宽度 + - **num_filters** (int) – filter数量,默认值1 + - **max_depth** (int) – filter的最大深度,默认值2 + - **act** (str) – 激活函数,默认 tanh + - **param_attr** (ParamAttr) – filter的参数属性,默认None + - **bias_attr** (ParamAttr) – 此层bias的参数属性,默认None + - **name** (str) – 此层的名称(可选)。如果设置为None,则将自动命名层,默认为None + + +返回: (Tensor)子树的特征向量。输出张量的形状是[max_tree_node_size,output_size,num_filters]。输出张量可以是下一个树卷积层的新特征向量 + +返回类型:out(Variable) + +**代码示例**: + +.. code-block:: python + + nodes_vector = layers.data(name='vectors', shape=[None, 10, 5], dtype='float32) + # batch size为None, 10代表数据集最大节点大小max_node_size,5表示向量宽度 + edge_set = layers.data(name='edge_set', shape=[None, 10, 2], dtype='float32') + # None 代表batch size, 10 代表数据集的最大节点大小max_node_size, 2 代表每条边连接两个节点 + # 边必须为有向边 + out_vector = layers.tree_conv(nodes_vector, edge_set, 6, 1, 2, 'tanh', + ParamAttr(initializer=Constant(1.0), ParamAttr(initializer=Constant(1.0)) + # 输出的形会是[None, 10, 6, 1], + # None 代表batch size, 10数据集的最大节点大小max_node_size, 6 代表输出大小output size, 1 代表 1 个filter + out_vector = layers.reshape(out_vector, shape=[None, 10, 6]) + # reshape之后, 输出张量output tensor为下一个树卷积的nodes_vector + out_vector_2 = layers.tree_conv(out_vector, edge_set, 3, 4, 2, 'tanh', + ParamAttr(initializer=Constant(1.0), ParamAttr(initializer=Constant(1.0)) + # 输出tensor也可以用来池化(论文中称为global pooling) + pooled = layers.reduce_max(out_vector, dims=2) # global 池化 + + + + + + + + + @@ -10272,7 +10791,49 @@ bipartite_match +.. _cn_api_fluid_layers_box_clip: + +box_clip +------------------------------- + +.. py:function:: paddle.fluid.layers.box_clip(input, im_info, name=None) + +将box框剪切为 ``im_info`` 给出的大小。对于每个输入框,公式如下: + +:: + + xmin = max(min(xmin, im_w - 1), 0) + ymin = max(min(ymin, im_h - 1), 0) + xmax = max(min(xmax, im_w - 1), 0) + ymax = max(min(ymax, im_h - 1), 0) + +其中im_w和im_h是从im_info计算的: + +:: + + im_h = round(height / scale) + im_w = round(weight / scale) + + +参数: + - **input (variable)** – 输入框,最后一个维度为4 + - **im_info (variable)** – 具有(高度height,宽度width,比例scale)排列的形为[N,3]的图像的信息。高度和宽度是输入大小,比例是输入大小和原始大小的比率 + - **name (str)** – 该层的名称。 为可选项 + +返回:剪切后的tensor + +返回类型: Variable + + +**代码示例** + +.. code-block:: python + boxes = fluid.layers.data( + name='data', shape=[8, 4], dtype='float32', lod_level=1) + im_info = fluid.layers.data(name='im_info', shape=[3]) + out = fluid.layers.box_clip( + input=boxes, im_info=im_info, inplace=True) @@ -10546,7 +11107,84 @@ Detection Output Layer for Single Shot Multibox Detector(SSD) +.. _cn_api_fluid_layers_generate_mask_labels: + +generate_mask_labels +------------------------------- + +.. py:function:: paddle.fluid.layers.generate_mask_labels(im_info, gt_classes, is_crowd, gt_segms, rois, labels_int32, num_classes, resolution) +**为Mask-RCNN生成mask标签** + +对于给定的 RoI (Regions of Interest) 和相应的标签,该运算符可以对前景RoI进行采样。 该mask branch对每个前景RoI还具有 :math:`K*M^{2}` 维输出目标,用于编码分辨率为M×M的K个二进制mask,K个种类中的各种类分别对应一个这样的二进制mask。 此mask输出目标用于计算掩码分支的损失。 + +请注意groud-truth(真实值,下简称GT)分段的数据格式。假设分段如下, 第一个实例有两个GT对象。 第二个实例有一个GT对象,该对象有两个GT分段。 + + +:: + + #[ + # [[[229.14, 370.9, 229.14, 370.9, ...]], + # [[343.7, 139.85, 349.01, 138.46, ...]]], # 第0个实例对象 + # [[[500.0, 390.62, ...],[115.48, 187.86, ...]]] # 第1个实例对象 + #] + + batch_masks = [] + for semgs in batch_semgs: + gt_masks = [] + for semg in semgs: + gt_segm = [] + for polys in semg: + gt_segm.append(np.array(polys).reshape(-1, 2)) + gt_masks.append(gt_segm) + batch_masks.append(gt_masks) + + + place = fluid.CPUPlace() + feeder = fluid.DataFeeder(place=place, feed_list=feeds) + feeder.feed(batch_masks) + + +参数: + - **im_info** (Variable) – 具有形状[N,3]的2-D张量。 N是批量大小,其每个元素是图像的[高度,宽度,比例],对应第二维中的3。图像比例是 :math:`\frac{target\_size}{original\_size}` 。 + - **gt_classes** (Variable) – 形为[M,1]的2-D LoDTensor。 M是真实值的总数,其每个元素都是一个类标签,对应第二维中的1。 + - **is_crowd** (Variable) – 一个形为 ``gt_classes`` 的2-D LoDTensor,每个元素都是一个标志,指示一个groundtruth是否为crowd(群)。 + - **gt_segms** (Variable) – 这个输入是一个形状为[S,2]的2D LoDTensor,它的LoD级别为3。通常用户不需要理解LoD,但用户应该在Reader中返回正确的数据格式。LoD [0]表示每个实例中GT对象的数目。 LoD [1]表示每个对象的分段数。 LoD [2]表示每个分段的多边形(polygon)数。S为多边形坐标点的总数。每个元素是(x,y)坐标点。 + - **rois** (Variable) – 形为[R,4]的2-D LoDTensor。 R是RoI的总数,其中每个元素是在原始图像范围内具有(xmin,ymin,xmax,ymax)格式的边界框(bounding box)。 + - **labels_int32** (Variable) – 形为[R,1]且类型为int32的2-D LoDTensor。 R与rois中的R含义相同。每个元素都反映了RoI的一个类标签。 + - **num_classes** (int) – 种类数目 + - **resolution** (int) – mask预测的分辨率 + +返回: + - 形为[P,4]的2D LoDTensor。 P是采样出的RoI总数。每个元素都是在原始图像大小范围内具有[xmin,ymin,xmax,ymax]格式的边界框(bounding box)。 + - mask_rois_has_mask_int32(Variable):形状为[P,1]的2D LoDTensor,其中每个元素为对于输入的RoI进行输出的mask RoI 索引 + - mask_int32(Variable):形状为[P,K * M * M]的2D LoDTensor,K为种类数,M为mask预测的分辨率,每个元素都是二进制目标mask值。 + +返回类型:mask_rois (Variable) + +**代码示例**: + +.. code-block:: python + + im_info = fluid.layers.data(name="im_info", shape=[3], + dtype="float32") + gt_classes = fluid.layers.data(name="gt_classes", shape=[1], + dtype="float32", lod_level=1) + is_crowd = fluid.layers.data(name="is_crowd", shape=[1], + dtype="float32", lod_level=1) + gt_masks = fluid.layers.data(name="gt_masks", shape=[2], + dtype="float32", lod_level=3) + # rois, labels_int32 可以是 + # fluid.layers.generate_proposal_labels 的输出 + mask_rois, mask_index, mask_int32 = fluid.layers.generate_mask_labels( + im_info=im_info, + gt_classes=gt_classes, + is_crowd=is_crowd, + gt_segms=gt_masks, + rois=rois, + labels_int32=labels_int32, + num_classes=81, + resolution=14) @@ -10738,9 +11376,62 @@ multi_box_head +.. _cn_api_fluid_layers_multiclass_nms: +multiclass_nms +------------------------------- +.. py:function:: paddle.fluid.layers.multiclass_nms(bboxes, scores, score_threshold, nms_top_k, keep_top_k, nms_threshold=0.3, normalized=True, nms_eta=1.0, background_label=0, name=None) +**多分类NMS** + +该运算用于对边界框(bounding box)和评分进行多类非最大抑制(NMS)。 + +在NMS中,如果提供 ``score_threshold`` 阈值,则此运算符贪婪地选择具有高于 ``score_threshold`` 的高分数的检测边界框(bounding box)的子集,然后如果nms_top_k大于-1,则选择最大的nms_top_k置信度分数。 接着,该运算符基于 ``nms_threshold`` 和 ``nms_eta`` 参数,通过自适应阈值NMS移去与已经选择的框具有高IOU(intersection over union)重叠的框。 + +在NMS步骤后,如果keep_top_k大于-1,则每个图像最多保留keep_top_k个总bbox数。 + + +参数: + - **bboxes** (Variable) – 支持两种类型的bbox(bounding box): + + 1. (Tensor)具有形[N,M,4]或[8 16 24 32]的3-D张量表示M个边界bbox的预测位置, N是批大小batch size。当边界框(bounding box)大小等于4时,每个边界框有四个坐标值,布局为[xmin,ymin,xmax,ymax]。 + 2. (LoDTensor)形状为[M,C,4] M的三维张量是边界框的数量,C是种类数量 + + - **scores** (Variable) – 支持两种类型的分数: + + 1. (tensor)具有形状[N,C,M]的3-D张量表示预测的置信度。 N是批量大小 batch size,C是种类数目,M是边界框bounding box的数量。对于每个类别,存在对应于M个边界框的总M个分数。请注意,M等于bboxes的第二维。 + 2. (LoDTensor)具有形状[M,C]的2-D LoDTensor。 M是bbox的数量,C是种类数目。在这种情况下,输入bboxes应该是形为[M,C,4]的第二种情况。 + + - **background_label** (int) – 背景标签(类别)的索引,背景标签(类别)将被忽略。如果设置为-1,则将考虑所有类别。默认值:0 + - **score_threshold** (float) – 过滤掉低置信度分数的边界框的阈值。如果没有提供,请考虑所有边界框。 + - **nms_top_k** (int) – 根据通过score_threshold的过滤后而得的检测(detection)的置信度,所需要保留的最大检测数。 + - **nms_threshold** (float) – 在NMS中使用的阈值。默认值:0.3 。 + - **nms_eta** (float) – 在NMS中使用的阈值。默认值:1.0 。 + - **keep_top_k** (int) – NMS步骤后每个图像要保留的总bbox数。 -1表示在NMS步骤之后保留所有bbox。 + - **normalized** (bool) – 检测是否已经经过正则化。默认值:True 。 + - **name** (str) – 多类nms op(此op)的名称,用于自定义op在网络中的命名。默认值:None 。 + +返回:形为[No,6]的2-D LoDTensor,表示检测(detections)结果。每行有6个值:[标签label,置信度confidence,xmin,ymin,xmax,ymax]。或形为[No,10]的2-D LoDTensor,用来表示检测结果。 每行有10个值:[标签label,置信度confidence,x1,y1,x2,y2,x3,y3,x4,y4]。 No是检测的总数。 如果对所有图像都没有检测到的box,则lod将设置为{1},而Out仅包含一个值-1。 (1.3版本之后,当未检测到box时,lod从{0}更改为{1}) + +返回类型:Out + +**代码示例** + +.. code-block:: python + + boxes = fluid.layers.data(name='bboxes', shape=[81, 4], + dtype='float32', lod_level=1) + scores = fluid.layers.data(name='scores', shape=[81], + dtype='float32', lod_level=1) + out = fluid.layers.multiclass_nms(bboxes=boxes, + scores=scores, + background_label=0, + score_threshold=0.5, + nms_top_k=400, + nms_threshold=0.3, + keep_top_k=200, + normalized=False) @@ -11085,7 +11776,90 @@ target_assign gt, matched_indices, mismatch_value=0) +.. _cn_api_fluid_layers_yolov3_loss: + +yolov3_loss +------------------------------- + +.. py:function:: paddle.fluid.layers.yolov3_loss(x, gtbox, gtlabel, anchors, anchor_mask, class_num, ignore_thresh, downsample_ratio, name=None) + +该运算通过给定的预测结果和真实框生成yolov3损失。 + +之前的网络的输出形状为[N,C,H,W],而H和W应该相同,用来指定网格(grid)大小。每个网格点预测给定的数目的边界框(bounding boxes),这个给定的数字是由 ``anchors`` 指定的,我们将它记为S。在第二维(表示通道的维度)中,C的值应为S *(class_num + 5),class_num是源数据集的对象种类数(如coco中为80),另外,除了存储4个边界框位置坐标x,y,w,h,还包括边界框以及每个anchor框的one-hot关键字的置信度得分。 + +假设有四个表征位置的坐标为 :math:`t_x, t_y, t_w, t_h` ,那么边界框的预测将会如下定义: + + $$ + b_x = \\sigma(t_x) + c_x + $$ + $$ + b_y = \\sigma(t_y) + c_y + $$ + $$ + b_w = p_w e^{t_w} + $$ + $$ + b_h = p_h e^{t_h} + $$ + +在上面的等式中, :math:`c_x, c_y` 是当前网格的左上角, :math:`p_w, p_h` 由anchors指定。 +至于置信度得分,它是anchor框和真实框之间的IoU的逻辑回归值,anchor框的得分最高为1,此时该anchor框对应着最大IoU。 +如果anchor框之间的IoU大于忽略阀值ignore_thresh,则该anchor框的置信度评分损失将会被忽略。 +          +因此,yolov3损失包括三个主要部分,框位置损失,置信度评分损失,分类损失。L2损失用于 +框坐标(w,h),同时,sigmoid交叉熵损失用于框坐标(x,y),置信度评分损失和分类损失。 +          +每个真实框在所有anchor中找到最匹配的anchor,预测各anchor框都将会产生所有三种损失的计算,但是没有匹配GT box(ground truth box真实框)的anchor的预测只会产生目标损失。 + +为了权衡大框(box)和小(box)之间的框坐标损失,框坐标损失将与比例权重相乘而得。即: + + $$ + weight_{box} = 2.0 - t_w * t_h + $$ + +最后的loss值将如下计算: + + $$ + loss = (loss_{xy} + loss_{wh}) * weight_{box} + loss_{conf} + loss_{class} + $$ + + +参数: + - **x** (Variable) – YOLOv3损失运算的输入张量,这是一个形状为[N,C,H,W]的四维张量。H和W应该相同,第二维(C)存储框的位置信息,以及每个anchor box的置信度得分和one-hot分类 + - **gtbox** (Variable) – 真实框,应该是[N,B,4]的形状。第三维用来承载x、y、w、h,x、y、w、h应该是输入图像相对值。 N是batch size,B是图像中所含有的的最多的box数目 + - **gtlabel** (Variable) – 真实框的类id,应该形为[N,B]。 + - **anchors** (list|tuple) – 指定anchor框的宽度和高度,它们将逐对进行解析 + - **anchor_mask** (list|tuple) – 当前YOLOv3损失计算中使用的anchor的mask索引 + - **class_num** (int) – 要预测的类数 + - **ignore_thresh** (float) – 一定条件下忽略某框置信度损失的忽略阈值 + - **downsample_ratio** (int) – 从网络输入到YOLOv3 loss输入的下采样率,因此应为第一,第二和第三个YOLOv3损失运算设置32,16,8 + - **name** (string) – yolov3损失层的命名 + + +返回: 具有形状[1]的1-D张量,yolov3损失的值 + +返回类型: 变量(Variable) + +抛出异常: + - ``TypeError`` – yolov3_loss的输入x必须是Variable + - ``TypeError`` – 输入yolov3_loss的gtbox必须是Variable + - ``TypeError`` – 输入yolov3_loss的gtlabel必须是Variable + - ``TypeError`` – 输入yolov3_loss的anchors必须是list或tuple + - ``TypeError`` – 输入yolov3_loss的class_num必须是整数integer类型 + - ``TypeError`` – 输入yolov3_loss的ignore_thresh必须是一个浮点数float类型 + +**代码示例** + +.. code-block:: python + x = fluid.layers.data(name='x', shape=[255, 13, 13], dtype='float32') + gtbox = fluid.layers.data(name='gtbox', shape=[6, 5], dtype='float32') + gtlabel = fluid.layers.data(name='gtlabel', shape=[6, 1], dtype='int32') + anchors = [10, 13, 16, 30, 33, 23, 30, 61, 62, 45, 59, 119, 116, 90, 156, 198, 373, 326] + anchor_mask = [0, 1, 2] + loss = fluid.layers.yolov3_loss(x=x, gtbox=gtbox, gtlabel=gtlabel, anchors=anchors, + anchor_mask=anchor_mask, class_num=80, + ignore_thresh=0.7, downsample_ratio=32) diff --git a/doc/fluid/beginners_guide/install/FAQ.md b/doc/fluid/beginners_guide/install/FAQ.md index 97455a1f7..595dc4443 100644 --- a/doc/fluid/beginners_guide/install/FAQ.md +++ b/doc/fluid/beginners_guide/install/FAQ.md @@ -1,26 +1,33 @@ -*** - - + # **FAQ** -- CentOS6下如何编译python2.7为共享库? - + +- 报错“nccl.h找不到” + + > 请[安装nccl2](https://developer.nvidia.com/nccl/nccl-download) + +- 报错`Cannot uninstall 'six'.` + + > 此问题可能与系统中已有Python有关,请使用`pip install paddlepaddle --ignore-installed six`(CPU)或`pip install paddlepaddle --ignore-installed six`(GPU)解决 + +- CentOS6下如何编译python2.7为共享库? + > 使用以下指令: - - ./configure --prefix=/usr/local/python2.7 --enable-shared - make && make install + + ./configure --prefix=/usr/local/python2.7 --enable-shared + make && make install - Ubuntu18.04下libidn11找不到? - + > 使用以下指令: - - apt install libidn11 + + apt install libidn11 - Ubuntu编译时出现大量的代码段不能识别? - + > 这可能是由于cmake版本不匹配造成的,请在gcc的安装目录下使用以下指令: - + apt install gcc-4.8 g++-4.8 cp gcc gcc.bak cp g++ g++.bak @@ -28,46 +35,21 @@ rm g++ ln -s gcc-4.8 gcc ln -s g++-4.8 g++ - +- 遇到paddlepaddle.whl is not a supported wheel on this platform? + > 出现这个问题的主要原因是,没有找到和当前系统匹配的paddlepaddle安装包。 请检查Python版本是否为2.7系列。另外最新的pip官方源中的安装包默认是manylinux1标准, 需要使用最新的pip (>9.0.0) 才可以安装。您可以执行以下指令更新您的pip: -- 遇到paddlepaddle*.whl is not a supported wheel on this platform? - - > 出现这个问题的主要原因是,没有找到和当前系统匹配的paddlepaddle安装包。 请检查Python版本是否为2.7系列。另外最新的pip官方源中的安装包默认是manylinux1标准, 需要使用最新的pip (>9.0.0) 才可以安装。您可以执行以下指令更新您的pip: - - pip install --upgrade pip - 或者 - - python -c "import pip; print(pip.pep425tags.get_supported())" + pip install --upgrade pip + 或者 + + python -c "import pip; print(pip.pep425tags.get_supported())" > 如果系统支持的是 linux_x86_64 而安装包是 manylinux1_x86_64 ,需要升级pip版本到最新; 如果系统支持 manylinux1_x86_64 而安装包 (本地)是 linux_x86_64, 可以重命名这个whl包为 manylinux1_x86_64 再安装。 - 使用Docker编译出现问题? - - > 请参照GitHub上[Issue12079](https://github.com/PaddlePaddle/Paddle/issues/12079) - -- 什么是 Docker? - - > 如果您没有听说 Docker,可以把它想象为一个类似 virtualenv 的系统,但是虚拟的不仅仅是 Python 的运行环境。 - -- Docker 还是虚拟机? - - > 有人用虚拟机来类比 Docker。需要强调的是:Docker 不会虚拟任何硬件,Docker container 里运行的编译工具实际上都是在本机的 CPU 和操作系统上直接运行的,性能和把编译工具安装在本机运行一样。 -- 为什么用 Docker? - - > 把工具和配置都安装在一个 Docker image 里可以标准化编译环境。这样如果遇到问题,其他人可以复现问题以便帮助。 - 另外,对于习惯使用Windows和MacOS的开发者来说,使用Docker就不用配置交叉编译环境了。 - -- 可以选择不用Docker吗? - - > 当然可以。大家可以用把开发工具安装进入 Docker image 一样的方式,把这些工具安装到本机。这篇文档介绍基于 Docker 的开发流程,是因为这个流程比其他方法都更简便。 - -- 学习 Docker 有多难? - - > 理解 Docker 并不难,大概花十分钟看一下[这篇文章](https://zhuanlan.zhihu.com/p/19902938)。 - 这可以帮您省掉花一小时安装和配置各种开发工具,以及切换机器时需要新安装的辛苦。别忘了 PaddlePaddle 更新可能导致需要新的开发工具。更别提简化问题复现带来的好处了。 + > 请参照GitHub上[Issue12079](https://github.com/PaddlePaddle/Paddle/issues/12079) - 可以用 IDE 吗? @@ -81,10 +63,6 @@ > 是的。我们的 Docker image 运行一个 [Bash 脚本](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/paddle/scripts/paddle_build.sh)。这个脚本调用`make -j$(nproc)` 来启动和 CPU 核一样多的进程来并行编译。 -- Docker 需要 sudo? - - > 如果用自己的电脑开发,自然也就有管理员权限(sudo)了。如果用公用的电脑开发,需要请管理员安装和配置好 Docker。此外,PaddlePaddle 项目在努力开始支持其他不需要 sudo 的集装箱技术,比如 rkt。 - - 在 Windows/MacOS 上编译很慢? > Docker 在 Windows 和 MacOS 都可以运行。不过实际上是运行在一个 Linux 虚拟机上。可能需要注意给这个虚拟机多分配一些 CPU 和内存,以保证编译高效。具体做法请参考[issue627](https://github.com/PaddlePaddle/Paddle/issues/627)。 @@ -94,24 +72,24 @@ > 本文中的例子里,`docker run` 命令里都用了 `--rm` 参数,这样保证运行结束之后的 containers 不会保留在磁盘上。可以用 `docker ps -a` 命令看到停止后但是没有删除的 containers。`docker build` 命令有时候会产生一些中间结果,是没有名字的 images,也会占用磁盘。可以参考 [这篇文章](https://zaiste.net/posts/removing_docker_containers) 来清理这些内容。 - 在DockerToolbox下使用book时`http://localhost:8888/`无法打开? - + > 需要将localhost替换成虚拟机ip,一般需要在浏览器中输入:`http://192.168.99.100:8888/` - pip install gpu版本的PaddlePaddle后运行出现SegmentFault如下: - + @ 0x7f6c8d214436 paddle::platform::EnforceNotMet::EnforceNotMet() - - @ 0x7f6c8dfed666 paddle::platform::GetCUDADeviceCount() - + + @ 0x7f6c8dfed666 paddle::platform::GetCUDADeviceCount() + @ 0x7f6c8d2b93b6 paddle::framework::InitDevices() - - + + > 出现这个问题原因主要是由于您的显卡驱动低于对应CUDA版本的要求,请保证您的显卡驱动支持所使用的CUDA版本 - - -- MacOS下安装PaddlePaddle后import paddle.fluid出现`Fatal Python error: PyThreadState_Get: no current thread running`错误 + + +- MacOS下安装PaddlePaddle后import paddle.fluid出现`Fatal Python error: PyThreadState_Get: no current thread running`错误 - For Python2.7.x (install by brew): 请使用`export LD_LIBRARY_PATH=/usr/local/Cellar/python@2/2.7.15_1/Frameworks/Python.framework/Versions/2.7 && export DYLD_LIBRARY_PATH=/usr/local/Cellar/python@2/2.7.15_1/Frameworks/Python.framework/Versions/2.7` - For Python2.7.x (install by Python.org): 请使用`export LD_LIBRARY_PATH=/Library/Frameworks/Python.framework/Versions/2.7 && export DYLD_LIBRARY_PATH=/Library/Frameworks/Python.framework/Versions/2.7` @@ -120,11 +98,11 @@ - MACOS下使用自定义的openblas 详见issue: - + > [ISSUE 13217](https://github.com/PaddlePaddle/Paddle/issues/13721) - 已经安装swig但是仍旧出现swig找不到的问题 详见issue: - + > [ISSUE 13759](https://github.com/PaddlePaddle/Paddle/issues/13759) - 出现 “target pattern contain no '%'.”的问题 详见issue: diff --git a/doc/fluid/beginners_guide/install/Tables.md b/doc/fluid/beginners_guide/install/Tables.md index 6ef975c29..1620a711e 100644 --- a/doc/fluid/beginners_guide/install/Tables.md +++ b/doc/fluid/beginners_guide/install/Tables.md @@ -324,40 +324,7 @@ PaddePaddle通过编译时指定路径来实现引用各种BLAS/CUDA/cuDNN库。 您可以在 [Release History](https://pypi.org/project/paddlepaddle-gpu/#history) 中找到PaddlePaddle-gpu的各个发行版本。 *** - -

-## **安装镜像表及简介** -

- - - - - - - - - - - - - - - - - - - - - - - - - -
版本号 版本说明
hub.baidubce.com/paddlepaddle/paddle:latest 最新的预先安装好PaddlePaddle CPU版本的镜像
hub.baidubce.com/paddlepaddle/paddle:latest-dev 最新的PaddlePaddle的开发环境
hub.baidubce.com/paddlepaddle/paddle:[Version] 将version换成具体的版本,历史版本的预安装好PaddlePaddle的镜像
hub.baidubce.com/paddlepaddle/paddle:latest-gpu 最新的预先安装好PaddlePaddle GPU版本的镜像
-

- -您可以在 [DockerHub](https://hub.docker.com/r/paddlepaddle/paddle/tags/) 中找到PaddlePaddle的各个发行的版本的docker镜像。 *** @@ -381,81 +348,82 @@ PaddePaddle通过编译时指定路径来实现引用各种BLAS/CUDA/cuDNN库。 cpu-noavx-mkl - - paddlepaddle-1.2.0-cp27-cp27mu-linux_x86_64.whl - - paddlepaddle-1.2.0-cp27-cp27m-linux_x86_64.whl - - paddlepaddle-1.2.0-cp35-cp35m-linux_x86_64.whl - - paddlepaddle-1.2.0-cp36-cp36m-linux_x86_64.whl - - paddlepaddle-1.2.0-cp37-cp37m-linux_x86_64.whl + + paddlepaddle-1.3.0-cp27-cp27mu-linux_x86_64.whl + + paddlepaddle-1.3.0-cp27-cp27m-linux_x86_64.whl + + paddlepaddle-1.3.0-cp35-cp35m-linux_x86_64.whl + + paddlepaddle-1.3.0-cp36-cp36m-linux_x86_64.whl + + paddlepaddle-1.3.0-cp37-cp37m-linux_x86_64.whl cpu_avx_mkl - - paddlepaddle-1.2.0-cp27-cp27mu-linux_x86_64.whl - - paddlepaddle-1.2.0-cp27-cp27m-linux_x86_64.whl - - paddlepaddle-1.2.0-cp35-cp35m-linux_x86_64.whl - - paddlepaddle-1.2.0-cp36-cp36m-linux_x86_64.whl - - paddlepaddle-1.2.0-cp37-cp37m-linux_x86_64.whl + + paddlepaddle-1.3.0-cp27-cp27mu-linux_x86_64.whl + + paddlepaddle-1.3.0-cp27-cp27m-linux_x86_64.whl + + paddlepaddle-1.3.0-cp35-cp35m-linux_x86_64.whl + + paddlepaddle-1.3.0-cp36-cp36m-linux_x86_64.whl + + paddlepaddle-1.3.0-cp37-cp37m-linux_x86_64.whl cpu_avx_openblas - - paddlepaddle-1.2.0-cp27-cp27mu-linux_x86_64.whl - paddlepaddle-1.2.0-cp27-cp27m-linux_x86_64.whl - - paddlepaddle-1.2.0-cp35-cp35m-linux_x86_64.whl - - paddlepaddle-1.2.0-cp36-cp36m-linux_x86_64.whl - - paddlepaddle-1.2.0-cp37-cp37m-linux_x86_64.whl + + paddlepaddle-1.3.0-cp27-cp27mu-linux_x86_64.whl + + paddlepaddle-1.3.0-cp27-cp27m-linux_x86_64.whl + + paddlepaddle-1.3.0-cp35-cp35m-linux_x86_64.whl + + paddlepaddle-1.3.0-cp36-cp36m-linux_x86_64.whl + + paddlepaddle-1.3.0-cp37-cp37m-linux_x86_64.whl cuda8.0_cudnn5_avx_mkl - paddlepaddle_gpu-1.2.0-cp27-cp27mu-linux_x86_64.whl - paddlepaddle_gpu-1.2.0-cp27-cp27m-linux_x86_64.whl - paddlepaddle_gpu-1.2.0-cp35-cp35m-linux_x86_64.whl - - paddlepaddle_gpu-1.2.0-cp36-cp36m-linux_x86_64.whl - - paddlepaddle_gpu-1.2.0-cp37-cp37m-linux_x86_64.whl + paddlepaddle_gpu-1.3.0-cp27-cp27mu-linux_x86_64.whl + paddlepaddle_gpu-1.3.0-cp27-cp27m-linux_x86_64.whl + paddlepaddle_gpu-1.3.0-cp35-cp35m-linux_x86_64.whl + + paddlepaddle_gpu-1.3.0-cp36-cp36m-linux_x86_64.whl + + paddlepaddle_gpu-1.3.0-cp37-cp37m-linux_x86_64.whl cuda8.0_cudnn7_noavx_mkl - paddlepaddle_gpu-1.2.0-cp27-cp27mu-linux_x86_64.whl - paddlepaddle_gpu-1.2.0-cp27-cp27m-linux_x86_64.whl - paddlepaddle_gpu-1.2.0-cp35-cp35m-linux_x86_64.whl - - paddlepaddle_gpu-1.2.0-cp36-cp36m-linux_x86_64.whl - - paddlepaddle_gpu-1.2.0-cp37-cp37m-linux_x86_64.whl + paddlepaddle_gpu-1.3.0-cp27-cp27mu-linux_x86_64.whl + paddlepaddle_gpu-1.3.0-cp27-cp27m-linux_x86_64.whl + paddlepaddle_gpu-1.3.0-cp35-cp35m-linux_x86_64.whl + + paddlepaddle_gpu-1.3.0-cp36-cp36m-linux_x86_64.whl + + paddlepaddle_gpu-1.3.0-cp37-cp37m-linux_x86_64.whl cuda8.0_cudnn7_avx_mkl - paddlepaddle_gpu-1.2.0.post87-cp27-cp27mu-linux_x86_64.whl - paddlepaddle_gpu-1.2.0.post87-cp27-cp27m-linux_x86_64.whl - paddlepaddle_gpu-1.2.0.post87-cp35-cp35m-linux_x86_64.whl - - paddlepaddle_gpu-1.2.0.post87-cp36-cp36m-linux_x86_64.whl - - paddlepaddle_gpu-1.2.0.post87-cp37-cp37m-linux_x86_64.whl + paddlepaddle_gpu-1.3.0.post87-cp27-cp27mu-linux_x86_64.whl + paddlepaddle_gpu-1.3.0.post87-cp27-cp27m-linux_x86_64.whl + paddlepaddle_gpu-1.3.0.post87-cp35-cp35m-linux_x86_64.whl + + paddlepaddle_gpu-1.3.0.post87-cp36-cp36m-linux_x86_64.whl + + paddlepaddle_gpu-1.3.0.post87-cp37-cp37m-linux_x86_64.whl cuda9.0_cudnn7_avx_mkl - paddlepaddle_gpu-1.2.0-cp27-cp27mu-linux_x86_64.whl - paddlepaddle_gpu-1.2.0-cp27-cp27m-linux_x86_64.whl - paddlepaddle_gpu-1.2.0-cp35-cp35m-linux_x86_64.whl - - paddlepaddle_gpu-1.2.0-cp36-cp36m-linux_x86_64.whl - - paddlepaddle_gpu-1.2.0-cp37-cp37m-linux_x86_64.whl + paddlepaddle_gpu-1.3.0-cp27-cp27mu-linux_x86_64.whl + paddlepaddle_gpu-1.3.0-cp27-cp27m-linux_x86_64.whl + paddlepaddle_gpu-1.3.0-cp35-cp35m-linux_x86_64.whl + + paddlepaddle_gpu-1.3.0-cp36-cp36m-linux_x86_64.whl + + paddlepaddle_gpu-1.3.0-cp37-cp37m-linux_x86_64.whl @@ -479,75 +447,75 @@ PaddePaddle通过编译时指定路径来实现引用各种BLAS/CUDA/cuDNN库。 cpu-noavx-mkl - + paddlepaddle-latest-cp27-cp27mu-linux_x86_64.whl - + paddlepaddle-latest-cp27-cp27m-linux_x86_64.whl - + paddlepaddle-latest-cp35-cp35m-linux_x86_64.whl - + paddlepaddle-latest-cp36-cp36m-linux_x86_64.whl - + paddlepaddle-latest-cp37-cp37m-linux_x86_64.whl cpu_avx_mkl - + paddlepaddle-latest-cp27-cp27mu-linux_x86_64.whl - + paddlepaddle-latest-cp27-cp27m-linux_x86_64.whl - + paddlepaddle-latest-cp35-cp35m-linux_x86_64.whl - + paddlepaddle-latest-cp36-cp36m-linux_x86_64.whl - + paddlepaddle-latest-cp37-cp37m-linux_x86_64.whl cpu_avx_openblas - + paddlepaddle-latest-cp27-cp27mu-linux_x86_64.whl - paddlepaddle-latest-cp27-cp27m-linux_x86_64.whl - + paddlepaddle-latest-cp27-cp27m-linux_x86_64.whl + paddlepaddle-latest-cp35-cp35m-linux_x86_64.whl - + paddlepaddle-latest-cp36-cp36m-linux_x86_64.whl - + paddlepaddle-latest-cp37-cp37m-linux_x86_64.whl cuda8.0_cudnn5_avx_mkl - paddlepaddle_gpu-latest-cp27-cp27mu-linux_x86_64.whl - paddlepaddle_gpu-latest-cp27-cp27m-linux_x86_64.whl - paddlepaddle_gpu-latest-cp35-cp35m-linux_x86_64.whl - paddlepaddle_gpu-latest-cp36-cp36m-linux_x86_64.whl - paddlepaddle_gpu-latest-cp37-cp37m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp27-cp27mu-linux_x86_64.whl + paddlepaddle_gpu-latest-cp27-cp27m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp35-cp35m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp36-cp36m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp37-cp37m-linux_x86_64.whl cuda8.0_cudnn7_noavx_mkl - paddlepaddle_gpu-latest-cp27-cp27mu-linux_x86_64.whl - paddlepaddle_gpu-latest-cp27-cp27m-linux_x86_64.whl - paddlepaddle_gpu-latest-cp35-cp35m-linux_x86_64.whl - + paddlepaddle_gpu-latest-cp27-cp27mu-linux_x86_64.whl + paddlepaddle_gpu-latest-cp27-cp27m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp35-cp35m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp36-cp36m-linux_x86_64.whl - + paddlepaddle_gpu-latest-cp37-cp37m-linux_x86_64.whl cuda8.0_cudnn7_avx_mkl - paddlepaddle_gpu-latest-cp27-cp27mu-linux_x86_64.whl - paddlepaddle_gpu-latest-cp27-cp27m-linux_x86_64.whl - paddlepaddle_gpu-latest-cp35-cp35m-linux_x86_64.whl - paddlepaddle_gpu-latest-cp36-cp36m-linux_x86_64.whl - paddlepaddle_gpu-latest-cp37-cp37m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp27-cp27mu-linux_x86_64.whl + paddlepaddle_gpu-latest-cp27-cp27m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp35-cp35m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp36-cp36m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp37-cp37m-linux_x86_64.whl cuda9.0_cudnn7_avx_mkl - paddlepaddle_gpu-latest-cp27-cp27mu-linux_x86_64.whl - paddlepaddle_gpu-latest-cp27-cp27m-linux_x86_64.whl - paddlepaddle_gpu-latest-cp35-cp35m-linux_x86_64.whl - paddlepaddle_gpu-latest-cp36-cp36m-linux_x86_64.whl - paddlepaddle_gpu-latest-cp37-cp37m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp27-cp27mu-linux_x86_64.whl + paddlepaddle_gpu-latest-cp27-cp27m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp35-cp35m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp36-cp36m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp37-cp37m-linux_x86_64.whl diff --git a/doc/fluid/beginners_guide/install/compile/compile_CentOS.md b/doc/fluid/beginners_guide/install/compile/compile_CentOS.md index dee7be403..d6f2b19bf 100644 --- a/doc/fluid/beginners_guide/install/compile/compile_CentOS.md +++ b/doc/fluid/beginners_guide/install/compile/compile_CentOS.md @@ -1,42 +1,35 @@ -*** # **CentOS下从源码编译** -本说明将介绍如何在*64位台式机或笔记本电脑*以及CentOS系统下编译PaddlePaddle,我们支持的Ubuntu系统需满足以下要求: +## 环境准备 -* CentOS 7 / 6(这涉及到相关工具是否能被正常安装) +* *64位操作系统* +* *CentOS 6 / 7* +* *Python 2.7/3.5/3.6/3.7* +* *pip或pip3 >= 9.0.1* -## 确定要编译的版本 -* **仅支持CPU的PaddlePaddle**。 +## 选择CPU/GPU - +* 目前仅支持在CentOS环境下编译安装CPU版本的PaddlePaddle -## 选择如何编译 -我们在CentOS的系统下提供2种编译方式: +## 安装步骤 -* Docker源码编译(不支持CentOS 6 / 7的GPU版本)(该镜像已经包含python2.7、python3.6、python3.7环境) -* 直接本机源码编译(不支持CentOS 6的全部版本以及CentOS 7的GPU版本) +在CentOS的系统下有2种编译方式: -我们更加推荐**使用Docker进行编译**,因为我们在把工具和配置都安装在一个 Docker image 里。这样如果遇到问题,其他人可以复现问题以便帮助。另外,对于习惯使用Windows和MacOS的开发者来说,使用Docker就不用配置交叉编译环境了。需要强调的是:Docker 不会虚拟任何硬件,Docker container 里运行的编译工具实际上都是在本机的 CPU 和操作系统上直接运行的,性能和把编译工具安装在本机运行一样。 - - - -同样对于那些出于各种原因不能够安装Docker的用户我们也提供了可以从**本机直接源码编译**的方法,但是由于在本机上的情况更加复杂,因此我们只支持特定的系统。 +* Docker源码编译 +* 本机源码编译(不支持CentOS 6) - - -

### ***使用Docker编译*** -为了更好的使用Docker并避免发生问题,我们推荐使用**最高版本的Docker**,关于**安装和使用Docker**的细节请参阅Docker[官方文档](https://docs.docker.com/install/)。 +[Docker](https://docs.docker.com/install/)是一个开源的应用容器引擎。使用Docker,既可以将PaddlePaddle的安装&使用与系统环境隔离,也可以与主机共享GPU、网络等资源 + +使用Docker编译PaddlePaddle,您需要: +- 在本地主机上[安装Docker](https://hub.docker.com/search/?type=edition&offering=community) - +- 如需在Linux开启GPU支持,请[安装nvidia-docker](https://github.com/NVIDIA/nvidia-docker) -当您已经**正确安装Docker**后你就可以开始**使用Docker编译PaddlePaddle**啦: +请您按照以下步骤安装: 1. 请首先选择您希望储存PaddlePaddle的路径,然后在该路径下使用以下命令将PaddlePaddle的源码从github克隆到本地当前目录下名为Paddle的文件夹中: @@ -44,27 +37,36 @@ 2. 进入Paddle目录下: `cd Paddle` -3. 利用我们提供的镜像(使用该命令您可以不必提前下载镜像): +3. 创建并进入已配置好编译环境的Docker容器: `docker run --name paddle-test -v $PWD:/paddle --network=host -it hub.baidubce.com/paddlepaddle/paddle:latest-dev /bin/bash` > --name paddle-test为您创建的Docker容器命名为paddle-test,-v $PWD:/paddle 将当前目录挂载到Docker容器中的/paddle目录下(Linux中PWD变量会展开为当前路径的[绝对路径](https://baike.baidu.com/item/绝对路径/481185)),-it 与宿主机保持交互状态,`hub.baidubce.com/paddlepaddle/paddle` 使用名为`hub.baidubce.com/paddlepaddle/paddle:latest-dev`的镜像创建Docker容器,/bin/bash 进入容器后启动/bin/bash命令。 -4. 进入Docker后进入paddle目录下:`cd paddle` +4. 进入Docker后进入paddle目录下: + + `cd paddle` 5. 切换到较稳定版本下进行编译: - `git checkout v1.1` + `git checkout [分支名]` + + 例如: + + `git checkout release/1.2` + + 注意:python3.6、python3.7版本从release/1.2分支开始支持 6. 创建并进入/paddle/build路径下: `mkdir -p /paddle/build && cd /paddle/build` -7. 使用以下命令安装相关依赖:(For Python3:请选择您希望用的python版本对应的pip,如pip3.5、pip3.6) +7. 使用以下命令安装相关依赖: For Python2: pip install protobuf==3.1.0 For Python3: pip3.5 install protobuf==3.1.0 + 注意:以上用Python3.5命令来举例,如您的Python版本为3.6/3.7,请将上述命令中的Python3.5改成Python3.6/Python3.7 > 安装protobuf 3.1.0。 @@ -75,7 +77,7 @@ 8. 执行cmake: >具体编译选项含义请参见[编译选项表](../Tables.html/#Compile) - >请注意修改参数`-DPY_VERSION`为您希望编译使用的python版本, 如以下命令中`-DPY_VERSION=3.5`表示python版本为3.5.x + >请注意修改参数`-DPY_VERSION`为您希望编译使用的python版本, 例如`-DPY_VERSION=3.5`表示python版本为3.5.x * 对于需要编译**CPU版本PaddlePaddle**的用户: @@ -91,35 +93,23 @@ 10. 编译成功后进入`/paddle/build/python/dist`目录下找到生成的`.whl`包: `cd /paddle/build/python/dist` -11. 在当前机器或目标机器安装编译好的`.whl`包:(For Python3:请选择您希望用的python版本对应的pip,如pip3.5、pip3.6) +11. 在当前机器或目标机器安装编译好的`.whl`包: For Python2: pip install (whl包的名字) For Python3: pip3.5 install (whl包的名字) + 注意:以上涉及Python3的命令,用Python3.5来举例,如您的Python版本为3.6/3.7,请将上述命令中的Python3.5改成Python3.6/Python3.7 -至此您已经成功使用Docker安装PaddlePaddle,您只需要进入Docker容器后运行PaddlePaddle即可,更多Docker使用请参见[Docker官方文档](https://docs.docker.com)。 - -> 注:PaddlePaddle Docker镜像为了减小体积,默认没有安装`vim`,您可以在容器中执行 `apt-get install -y vim` 安装后,在容器中编辑代码。 - -恭喜您,现在您已经完成使用Docker编译PaddlePaddle的过程。 - - - +恭喜,至此您已完成PaddlePaddle的编译安装。您只需要进入Docker容器后运行PaddlePaddle,即可开始使用。更多Docker使用请参见[Docker官方文档](https://docs.docker.com) +> 注:PaddlePaddle Docker镜像为了减小体积,默认没有安装`vim`,您可以在容器中执行 `apt-get install -y vim` 来安装 - - -

### ***本机编译*** -**请严格按照以下指令顺序执行** - - - 1. 检查您的计算机和操作系统是否符合我们支持的编译标准: `uname -m && cat /etc/*release` -2. 更新`yum`的源: `yum update`, 并添加必要的yum源:`yum install -y epel-release`, 并提前安装openCV +2. 更新`yum`的源: `yum update`, 并添加必要的yum源:`yum install -y epel-release`, 并提前安装[OpenCV](https://opencv.org/releases.html) 3. 安装必要的工具`bzip2`以及`make`: `yum install -y bzip2` , `yum install -y make` @@ -159,7 +149,7 @@ 5. 进入虚环境:`workon paddle-venv` -6. **执行编译前**请您确认在虚环境中安装有[编译依赖表](../Tables.html/#third_party)中提到的相关依赖: +6. **执行编译前**请您确认在虚环境中安装有[编译依赖表](../Tables.html/#third_party)中提到的相关依赖: * 这里特别提供`patchELF`的安装方法,其他的依赖可以使用`yum install`或者`pip install`/`pip3 install` 后跟依赖名称和版本安装: @@ -172,7 +162,11 @@ - `cd Paddle` -8. 切换到较稳定release分支下进行编译(从1.2分支开始支持python3.6及3.7版本): +8. 切换到较稳定release分支下进行编译: + + `git checkout [分支名]` + + 例如: `git checkout release/1.2` @@ -182,7 +176,7 @@ 10. 执行cmake: - >具体编译选项含义请参见[编译选项表](../Tables.html/#Compile) + >具体编译选项含义请参见[编译选项表](../Tables.html/#Compile) * 对于需要编译**CPU版本PaddlePaddle**的用户: @@ -203,16 +197,14 @@ `pip install (whl包的名字)`或`pip3 install (whl包的名字)` -恭喜您,现在您已经完成使本机编译PaddlePaddle的过程了。 +恭喜,至此您已完成PaddlePaddle的编译安装 - - -

## ***验证安装*** -安装完成后您可以使用:`python` 进入Python解释器,然后使用`import paddle.fluid` 验证是否安装成功。 +安装完成后您可以使用:`python` 或 `python3` 进入Python解释器,然后使用`import paddle.fluid` 验证是否安装成功。 -

## ***如何卸载*** -请使用以下命令卸载PaddlePaddle(使用docker安装PaddlePaddle的用户请进入包含PaddlePaddle的容器中使用以下命令,请使用对应版本pip): +请使用以下命令卸载PaddlePaddle: * ***CPU版本的PaddlePaddle***: `pip uninstall paddlepaddle` 或 `pip3 uninstall paddlepaddle` + +使用Docker安装PaddlePaddle的用户,请进入包含PaddlePaddle的容器中使用上述命令,注意使用对应版本的pip diff --git a/doc/fluid/beginners_guide/install/compile/compile_MacOS.md b/doc/fluid/beginners_guide/install/compile/compile_MacOS.md index d85d19694..1ca671b86 100644 --- a/doc/fluid/beginners_guide/install/compile/compile_MacOS.md +++ b/doc/fluid/beginners_guide/install/compile/compile_MacOS.md @@ -1,48 +1,34 @@ -*** # **MacOS下从源码编译** -本说明将介绍如何在*64位台式机或笔记本电脑*以及MacOS系统下编译PaddlePaddle,我们支持的MacOS系统需满足#以下要求: +## 环境准备 -* MacOS 10.12/10.13/10.14(这涉及到相关工具是否能被正常安装) +* *64位操作系统* +* *MacOS 10.12/10.13/10.14* +* *Python 2.7/3.5/3.6/3.7* +* *pip或pip3 >= 9.0.1* -## 确定要编译的版本 -* **仅支持CPU的PaddlePaddle**。 - - - -## 选择如何编译 -在MacOS 10.12/10.13/10.14 的系统下我们提供2种编译方式: - - -* Docker源码编译 (该镜像已经包含python2.7、python3.6、python3.7环境) -* 直接本机源码编译 - - - - -我们更加推荐**使用Docker进行编译**,因为我们在把工具和配置都安装在一个 Docker image 里。这样如果遇到问题,其他人可以复现问题以便帮助。另外,对于习惯使用Windows和MacOS的开发者来说,使用Docker就不用配置交叉编译环境了。需要强调的是:Docker 不会虚拟任何硬件,Docker container 里运行的编译工具实际上都是在本机的 CPU 和操作系统上直接运行的,性能和把编译工具安装在本机运行一样。 - -同样对于那些出于各种原因不能够安装Docker的用户我们也提供了可以从**本机直接源码编译**的方法,但是由于在本机上的情况更加复杂,因此我们只支持特定的系统。 +## 选择CPU/GPU +* 目前仅支持在MacOS环境下编译安装CPU版本的PaddlePaddle +## 安装步骤 +在MacOS系统下有2种编译方式: +* Docker源码编译 +* 本机源码编译 - - - -

### ***使用Docker编译*** -为了更好的使用Docker并避免发生问题,我们推荐使用**最高版本的Docker**,关于**安装和使用Docker**的细节请参阅Docker[官方文档](https://docs.docker.com/install/)。 +[Docker](https://docs.docker.com/install/)是一个开源的应用容器引擎。使用Docker,既可以将PaddlePaddle的安装&使用与系统环境隔离,也可以与主机共享GPU、网络等资源 + +使用Docker编译PaddlePaddle,您需要: -> 请注意,在MacOS系统下登陆docker需要使用您的dockerID进行登录,否则将出现`Authenticate Failed`错误。 +- 在本地主机上[安装Docker](https://hub.docker.com/search/?type=edition&offering=community) +- 使用Docker ID登陆Docker,以避免出现`Authenticate Failed`错误 -当您已经**正确安装Docker**后你就可以开始**使用Docker编译PaddlePaddle**啦: +请您按照以下步骤安装: 1. 进入Mac的终端 @@ -52,27 +38,36 @@ 3. 进入Paddle目录下: `cd Paddle` -4. 利用我们提供的镜像(使用该命令您可以不必提前下载镜像): +4. 创建并进入满足编译环境的Docker容器: `docker run --name paddle-test -v $PWD:/paddle --network=host -it hub.baidubce.com/paddlepaddle/paddle:latest-dev /bin/bash` > --name paddle-test为您创建的Docker容器命名为paddle-test,-v $PWD:/paddle 将当前目录挂载到Docker容器中的/paddle目录下(Linux中PWD变量会展开为当前路径的[绝对路径](https://baike.baidu.com/item/绝对路径/481185)),-it 与宿主机保持交互状态,`hub.baidubce.com/paddlepaddle/paddle:latest-dev` 使用名为`hub.baidubce.com/paddlepaddle/paddle:latest-dev`的镜像创建Docker容器,/bin/bash 进入容器后启动/bin/bash命令。 -5. 进入Docker后进入paddle目录下:`cd paddle` +5. 进入Docker后进入paddle目录下: + + `cd paddle` 6. 切换到较稳定版本下进行编译: - `git checkout v1.1` + `git checkout [分支名]` + + 例如: + + `git checkout release/1.2` + + 注意:python3.6、python3.7版本从release/1.2分支开始支持 7. 创建并进入/paddle/build路径下: `mkdir -p /paddle/build && cd /paddle/build` -8. 使用以下命令安装相关依赖:(For Python3:请选择您希望用的python版本对应的pip,如pip3.5、pip3.6) +8. 使用以下命令安装相关依赖: For Python2: pip install protobuf==3.1.0 For Python3: pip3.5 install protobuf==3.1.0 + 注意:以上用Python3.5命令来举例,如您的Python版本为3.6/3.7,请将上述命令中的Python3.5改成Python3.6/Python3.7 > 安装protobuf 3.1.0。 @@ -82,18 +77,14 @@ 9. 执行cmake: - >具体编译选项含义请参见[编译选项表](../Tables.html/#Compile) - >请注意修改参数`-DPY_VERSION`为您希望编译使用的python版本, 如以下命令中`-DPY_VERSION=3.5`表示python版本为3.5.x - + >具体编译选项含义请参见[编译选项表](../Tables.html/#Compile) + >请注意修改参数`-DPY_VERSION`为您希望编译使用的python版本, 例如`-DPY_VERSION=3.5`表示python版本为3.5.x * 对于需要编译**CPU版本PaddlePaddle**的用户: `cmake .. -DPY_VERSION=3.5 -DWITH_FLUID_ONLY=ON -DWITH_GPU=OFF -DWITH_TESTING=OFF -DCMAKE_BUILD_TYPE=Release` - > 我们目前不支持CentOS下GPU版本PaddlePaddle的编译 - - - + > 我们目前不支持MacOS下GPU版本PaddlePaddle的编译 10. 执行编译: @@ -103,30 +94,28 @@ 11. 编译成功后进入`/paddle/build/python/dist`目录下找到生成的`.whl`包: `cd /paddle/build/python/dist` -12. 在当前机器或目标机器安装编译好的`.whl`包:(For Python3:请选择您希望用的python版本对应的pip,如pip3.5、pip3.6) +12. 在当前机器或目标机器安装编译好的`.whl`包: For Python2: pip install (whl包的名字) For Python3: pip3.5 install (whl包的名字) + 注意:以上涉及Python3的命令,用Python3.5来举例,如您的Python版本为3.6/3.7,请将上述命令中的Python3.5改成Python3.6/Python3.7 -至此您已经成功使用Docker安装PaddlePaddle,您只需要进入Docker容器后运行PaddlePaddle即可,更多Docker使用请参见[Docker官方文档](https://docs.docker.com)。 - -> 注:PaddlePaddle Docker镜像为了减小体积,默认没有安装`vim`,您可以在容器中执行 `apt-get install -y vim` 安装后,在容器中编辑代码。 - -恭喜您,现在您已经完成使用Docker编译PaddlePaddle的过程。 +恭喜,至此您已完成PaddlePaddle的编译安装。您只需要进入Docker容器后运行PaddlePaddle,即可开始使用。更多Docker使用请参见[Docker官方文档](https://docs.docker.com) +> 注:PaddlePaddle Docker镜像为了减小体积,默认没有安装`vim`,您可以在容器中执行 `apt-get install -y vim` 来安装 +

### ***本机编译*** **请严格按照以下指令顺序执行** +1. 检查您的计算机和操作系统是否符合我们支持的编译标准: `uname -m` 并且在`关于本机`中查看系统版本。并提前安装[OpenCV](https://opencv.org/releases.html) -1. 检查您的计算机和操作系统是否符合我们支持的编译标准: `uname -m` 并且在`关于本机`中查看系统版本。并提前安装openCV。 +2. 安装Python以及pip: -2. 安装python以及pip: - - > **请不要使用MacOS中自带python**,我们强烈建议您使用[Homebrew](https://brew.sh)安装python(对于**Python3**请使用python[官方下载](https://www.python.org/downloads/mac-osx/)python3.5.x、python3.6.x、python3.7.x), pip以及其他的依赖,这会大大降低您安装编译的难度。 + > **请不要使用MacOS中自带Python**,我们强烈建议您使用[Homebrew](https://brew.sh)安装python(对于**Python3**请使用python[官方下载](https://www.python.org/downloads/mac-osx/)python3.5.x、python3.6.x、python3.7.x), pip以及其他的依赖,这将会使您高效编译。 For python2: brew install python@2 For python3: 使用Python官网安装 @@ -155,9 +144,6 @@ - g. (可选)如果您是在MacOS 10.14上编译PaddlePaddle,请保证您已经安装了[对应版本](http://developer.apple.com/download)的Xcode。 - - - 5. **执行编译前**请您确认您的环境中安装有[编译依赖表](../Tables.html/#third_party)中提到的相关依赖,否则我们强烈推荐使用`Homebrew`安装相关依赖。 > MacOS下如果您未自行修改或安装过“编译依赖表”中提到的依赖,则仅需要使用`pip`安装`numpy,protobuf,wheel`,使用`homebrew`安装`wget,swig`,另外安装`cmake`即可 @@ -171,24 +157,29 @@ - b. 如果您不想使用系统默认的blas而希望使用自己安装的OPENBLAS请参见[FAQ](../FAQ.html/#OPENBLAS) - 6. 将PaddlePaddle的源码clone在当下目录下的Paddle的文件夹中,并进入Padde目录下: - `git clone https://github.com/PaddlePaddle/Paddle.git` - `cd Paddle` -7. 切换到较稳定release分支下进行编译:(注意,python3.6、python3.7版本是从1.2分支开始支持) +7. 切换到较稳定release分支下进行编译: + + `git checkout [分支名]` + + 例如: `git checkout release/1.2` + 注意:python3.6、python3.7版本从release/1.2分支开始支持 + 8. 并且请创建并进入一个叫build的目录下: `mkdir build && cd build` 9. 执行cmake: - >具体编译选项含义请参见[编译选项表](../Tables.html/#Compile) + >具体编译选项含义请参见[编译选项表](../Tables.html/#Compile) * 对于需要编译**CPU版本PaddlePaddle**的用户: @@ -197,7 +188,6 @@ -DPYTHON_LIBRARY=${PYTHON_LIBRARY} -DWITH_FLUID_ONLY=ON -DWITH_GPU=OFF -DWITH_TESTING=OFF -DCMAKE_BUILD_TYPE=Release >`-DPY_VERSION=3.5`请修改为安装环境的Python版本 - 10. 使用以下命令来编译: `make -j4` @@ -210,17 +200,14 @@ > 如果您的电脑上安装有多个python环境以及pip请参见[FAQ](../Tables.html/#MACPRO) -恭喜您,现在您已经完成使用本机编译PaddlePaddle的过程了。 - +恭喜,至此您已完成PaddlePaddle的编译安装 - - -

## ***验证安装*** -安装完成后您可以使用:`python` 进入Python解释器,然后使用`import paddle.fluid` 验证是否安装成功。 +安装完成后您可以使用:`python` 或 `python3` 进入Python解释器,然后使用`import paddle.fluid` 验证是否安装成功。 -

## ***如何卸载*** -请使用以下命令卸载PaddlePaddle(使用docker安装PaddlePaddle的用户请进入包含PaddlePaddle的容器中使用以下命令,请使用相应版本的pip): +请使用以下命令卸载PaddlePaddle * ***CPU版本的PaddlePaddle***: `pip uninstall paddlepaddle` 或 `pip3 uninstall paddlepaddle` + +使用Docker安装PaddlePaddle的用户,请进入包含PaddlePaddle的容器中使用上述命令,注意使用对应版本的pip diff --git a/doc/fluid/beginners_guide/install/compile/compile_Ubuntu.md b/doc/fluid/beginners_guide/install/compile/compile_Ubuntu.md index bdd28ac3f..c5df79010 100644 --- a/doc/fluid/beginners_guide/install/compile/compile_Ubuntu.md +++ b/doc/fluid/beginners_guide/install/compile/compile_Ubuntu.md @@ -1,44 +1,41 @@ -*** - # **Ubuntu下从源码编译** -本说明将介绍如何在*64位台式机或笔记本电脑*以及Ubuntu系统下编译PaddlePaddle,我们支持的Ubuntu系统需满足以下要求: - -* Ubuntu 14.04/16.04/18.04(这涉及到相关工具是否能被正常安装) - -## 确定要编译的版本 -* **仅支持CPU的PaddlePaddle**,如果您的系统没有 NVIDIA® GPU,则必须安装此版本。而此版本较GPU版本更加容易安 -因此即使您的计算机上拥有GPU我们也推荐您先安装CPU版本的PaddlePaddle来检测您本地的环境是否适合。 +## 环境准备 -* **支持GPU的PaddlePaddle**,为了使得PaddlePaddle程序运行的更加迅速,我们通常使用GPU对PaddlePaddle程序进行加速,但安装GPU版本的PaddlePaddle需要先拥有满足以下条件的NVIDIA® GPU(具体安装流程和配置请务必参见NVIDIA官方文档:[For CUDA](https://docs.nvidia.com/cuda/cuda-installation-guide-linux/),[For cuDNN](https://docs.nvidia.com/deeplearning/sdk/cudnn-install/)) - * *CUDA 工具包9.0配合cuDNN v7* - * *CUDA 工具包8.0配合cuDNN v7* - * *GPU运算能力超过1.0的硬件设备* +* *64位操作系统* +* *Ubuntu 14.04 /16.04 /18.04* +* *Python 2.7/3.5/3.6/3.7* +* *pip或pip3 >= 9.0.1* -## 选择如何编译 -在Ubuntu的系统下我们提供2种编译方式: +## 选择CPU/GPU -* Docker源码编译 (该镜像已经包含python2.7、python3.6、python3.7环境) -* 直接本机源码编译(不支持ubuntu18.04下GPU版本) +* 如果您的计算机没有 NVIDIA® GPU,请编译CPU版的PaddlePaddle -我们更加推荐**使用Docker进行编译**,因为我们在把工具和配置都安装在一个 Docker image 里。这样如果遇到问题,其他人可以复现问题以便帮助。另外,对于习惯使用Windows和MacOS的开发者来说,使用Docker就不用配置交叉编译环境了。有人用虚拟机来类比 Docker。需要强调的是:Docker 不会虚拟任何硬件,Docker container 里运行的编译工具实际上都是在本机的 CPU 和操作系统上直接运行的,性能和把编译工具安装在本机运行一样。 +* 如果您的计算机有NVIDIA® GPU,并且满足以下条件,推荐编译GPU版的PaddlePaddle + * *CUDA 工具包9.0配合cuDNN v7* + * *CUDA 工具包8.0配合cuDNN v7* + * *CUDA 工具包8.0配合cuDNN v5* + * *GPU运算能力超过1.0的硬件设备* +## 安装步骤 +在Ubuntu的系统下有2种编译方式: -我们也提供了可以从**本机直接源码编译**的方法,但是由于在本机上的情况更加复杂,我们只对特定系统提供了支持。 +* Docker源码编译(暂不支持Ubuntu18.04下GPU版本) +* 本机源码编译 +### 用Docker编译 -

-### ***使用Docker编译*** -为了更好的使用Docker并避免发生问题,我们推荐使用**最高版本的Docker**,关于**安装和使用Docker**的细节请参阅Docker[官方文档](https://docs.docker.com/install/) +[Docker](https://docs.docker.com/install/)是一个开源的应用容器引擎。使用Docker,既可以将PaddlePaddle的安装&使用与系统环境隔离,也可以与主机共享GPU、网络等资源 +使用Docker编译PaddlePaddle,您需要: -> 请注意,要安装和使用支持 GPU 的PaddlePaddle版本,您必须先安装[nvidia-docker](https://github.com/NVIDIA/nvidia-docker) +- 在本地主机上[安装Docker](https://hub.docker.com/search/?type=edition&offering=community) +- 如需在Linux开启GPU支持,请[安装nvidia-docker](https://github.com/NVIDIA/nvidia-docker) - -当您已经**正确安装Docker**后你就可以开始**使用Docker编译PaddlePaddle**: +请您按照以下步骤安装: 1. 请首先选择您希望储存PaddlePaddle的路径,然后在该路径下使用以下命令将PaddlePaddle的源码从github克隆到本地当前目录下名为Paddle的文件夹中: @@ -46,47 +43,58 @@ 2. 进入Paddle目录下: `cd Paddle` -3. 利用我们提供的镜像(使用该命令您可以不必提前下载镜像): +3. 创建并进入满足编译环境的Docker容器: `docker run --name paddle-test -v $PWD:/paddle --network=host -it hub.baidubce.com/paddlepaddle/paddle:latest-dev /bin/bash` > --name paddle-test为您创建的Docker容器命名为paddle-test,-v $PWD:/paddle 将当前目录挂载到Docker容器中的/paddle目录下(Linux中PWD变量会展开为当前路径的[绝对路径](https://baike.baidu.com/item/绝对路径/481185)),-it 与宿主机保持交互状态,`hub.baidubce.com/paddlepaddle/paddle:latest-dev` 使用名为`hub.baidubce.com/paddlepaddle/paddle:latest-dev`的镜像创建Docker容器,/bin/bash 进入容器后启动/bin/bash命令。 -4. 进入Docker后进入paddle目录下:`cd paddle` +4. 进入Docker后进入paddle目录下: + + `cd paddle` + +5. 切换到较稳定release分支下进行编译: -5. 切换到较稳定release分支下进行编译:(注意,python3.6、python3.7版本是从1.2分支开始支持) + `git checkout [分支名]` + + 例如: `git checkout release/1.2` + 注意:python3.6、python3.7版本从release/1.2分支开始支持 + 6. 创建并进入/paddle/build路径下: `mkdir -p /paddle/build && cd /paddle/build` -7. 使用以下命令安装相关依赖:(For Python3:请选择您希望用的python版本对应的pip,如pip3.5、pip3.6) +7. 使用以下命令安装相关依赖: For Python2: pip install protobuf==3.1.0 For Python3: pip3.5 install protobuf==3.1.0 + 注意:以上用Python3.5命令来举例,如您的Python版本为3.6/3.7,请将上述命令中的Python3.5改成Python3.6/Python3.7 + > 安装protobuf 3.1.0。 `apt install patchelf` - > 安装patchelf,PatchELF 是一个小而实用的程序,用于修改ELF可执行文件的动态链接器和RPATH。 + > 安装patchelf + 这是一个小而实用的程序,用于修改ELF可执行文件的动态链接器和RPATH 8. 执行cmake: - >具体编译选项含义请参见[编译选项表](../Tables.html/#Compile) - >请注意修改参数`-DPY_VERSION`为您希望编译使用的python版本, 如以下命令中`-DPY_VERSION=3.5`表示python版本为3.5.x + >具体编译选项含义请参见[编译选项表](../Tables.html/#Compile) - * 对于需要编译**CPU版本PaddlePaddle**的用户: + >请注意修改参数`-DPY_VERSION`为您希望编译使用的python版本, 例如`-DPY_VERSION=3.5`表示python版本为3.5.x + + * 编译**CPU版本PaddlePaddle**: `cmake .. -DPY_VERSION=3.5 -DWITH_FLUID_ONLY=ON -DWITH_GPU=OFF -DWITH_TESTING=OFF -DCMAKE_BUILD_TYPE=Release` - * 对于需要编译**GPU版本PaddlePaddle**的用户: + * 编译**GPU版本PaddlePaddle**: `cmake .. -DPY_VERSION=3.5 -DWITH_FLUID_ONLY=ON -DWITH_GPU=ON -DWITH_TESTING=OFF -DCMAKE_BUILD_TYPE=Release` - 9. 执行编译: `make -j$(nproc)` @@ -95,42 +103,37 @@ 10. 编译成功后进入`/paddle/build/python/dist`目录下找到生成的`.whl`包: `cd /paddle/build/python/dist` -11. 在当前机器或目标机器安装编译好的`.whl`包:(For Python3:请选择您希望用的python版本对应的pip,如pip3.5、pip3.6) +11. 在当前机器或目标机器安装编译好的`.whl`包: For Python2: pip install (whl包的名字) For Python3: pip3.5 install (whl包的名字) + 注意:以上涉及Python3的命令,用Python3.5来举例,如您的Python版本为3.6/3.7,请将上述命令中的Python3.5改成Python3.6/Python3.7 -至此您已经成功使用Docker安装PaddlePaddle,您只需要进入Docker容器后运行PaddlePaddle即可,更多Docker使用请参见[Docker官方文档](https://docs.docker.com)。 - -> 注:PaddlePaddle Docker镜像为了减小体积,默认没有安装`vim`,您可以在容器中执行 `apt-get install -y vim` 安装后,在容器中编辑代码。 +恭喜,至此您已完成PaddlePaddle的编译安装。您只需要进入Docker容器后运行PaddlePaddle,即可开始使用。更多Docker使用请参见[Docker官方文档](https://docs.docker.com) -恭喜您,现在您已经完成使用Docker编译PaddlePaddle的过程。 +> 注:PaddlePaddle Docker镜像为了减小体积,默认没有安装`vim`,您可以在容器中执行 `apt-get install -y vim` 来安装。 - -

### ***本机编译*** -**请严格按照以下指令顺序执行** - 1. 检查您的计算机和操作系统是否符合我们支持的编译标准: `uname -m && cat /etc/*release` -2. 更新`apt`的源: `apt update`, 并提前安装openCV +2. 更新`apt`的源: `apt update`, 并提前安装[OpenCV](https://opencv.org/releases.html) 3. 我们支持使用virtualenv进行编译安装,首先请使用以下命令创建一个名为`paddle-venv`的虚环境: - * a. 安装Python-dev:(请安装与当前环境python版本匹配的python3.x-dev) + * a. 安装Python-dev: For Python2: apt install python-dev For Python3: apt install python3.5-dev - * b. 安装pip: (请保证拥有9.0.1及以上版本的pip):(请注意修改对应python3的版本) + * b. 安装pip: (请保证拥有9.0.1及以上版本的pip): For Python2: apt install python-pip For Python3: apt-get udpate && apt-get install -y software-properties-common && add-apt-repository ppa:deadsnakes/ppa && apt install curl && curl https://bootstrap.pypa.io/get-pip.py -o - | python3.5 && easy_install pip - * c. 安装虚环境`virtualenv`以及`virtualenvwrapper`并创建名为`paddle-venv`的虚环境:(请注意修改python版本) + * c. 安装虚环境`virtualenv`以及`virtualenvwrapper`并创建名为`paddle-venv`的虚环境: 1. `apt install virtualenv` 或 `pip install virtualenv` 或 `pip3 install virtualenv` 2. `apt install virtualenvwrapper` 或 `pip install virtualenvwrapper` 或 `pip3 install virtualenvwrapper` @@ -140,9 +143,11 @@ 6. 按照`virtualenvwrapper.sh`中的描述,安装`virtualwrapper` 7. 创建名为`paddle-venv`的虚环境: `mkvirtualenv paddle-venv` + 注意:以上涉及Python3的命令,用Python3.5来举例,如您的Python版本为3.6/3.7,请将上述命令中的Python3.5改成Python3.6/Python3.7 + 4. 进入虚环境:`workon paddle-venv` -5. **执行编译前**请您确认在虚环境中安装有[编译依赖表](../Tables.html/#third_party)中提到的相关依赖: +5. **执行编译前**请您确认在虚环境中安装有[编译依赖表](../Tables.html/#third_party)中提到的相关依赖: * 这里特别提供`patchELF`的安装方法,其他的依赖可以使用`apt install`或者`pip install` 后跟依赖名称和版本安装: @@ -158,7 +163,11 @@ 6. 切换到较稳定release分支下进行编译,将中括号以及其中的内容替换为**目标分支名**: - `git checkout [name of target branch]` + `git checkout [分支名]` + + 例如: + + `git checkout release/1.2` 7. 并且请创建并进入一个叫build的目录下: @@ -166,9 +175,9 @@ 8. 执行cmake: - >具体编译选项含义请参见[编译选项表](../Tables.html/#Compile) + >具体编译选项含义请参见[编译选项表](../Tables.html/#Compile) - * 对于需要编译**CPU版本PaddlePaddle**的用户:(*For Python3: 请给PY_VERSION参数配置正确的python版本*) + * 对于需要编译**CPU版本PaddlePaddle**的用户: For Python2: cmake .. -DWITH_FLUID_ONLY=ON -DWITH_GPU=OFF -DWITH_TESTING=OFF -DCMAKE_BUILD_TYPE=Release For Python3: cmake .. -DPY_VERSION=3.5 -DWITH_FLUID_ONLY=ON -DWITH_GPU=OFF -DWITH_TESTING=OFF -DCMAKE_BUILD_TYPE=Release @@ -182,10 +191,10 @@ 2. 如果您已经正确安装了`nccl2`,就可以开始cmake了:(*For Python3: 请给PY_VERSION参数配置正确的python版本*) - For Python2: cmake .. -DWITH_FLUID_ONLY=ON -DWITH_GPU=ON -DWITH_TESTING=OFF -DCMAKE_BUILD_TYPE=Release - For Python3: cmake .. -DPY_VERSION=3.5 -DWITH_FLUID_ONLY=ON -DWITH_GPU=ON -DWITH_TESTING=OFF -DCMAKE_BUILD_TYPE=Release - - >`-DPY_VERSION=3.5`请修改为安装环境的Python版本 + For Python2: cmake .. -DWITH_FLUID_ONLY=ON -DWITH_GPU=ON -DWITH_TESTING=OFF -DCMAKE_BUILD_TYPE=Release + For Python3: cmake .. -DPY_VERSION=3.5 -DWITH_FLUID_ONLY=ON -DWITH_GPU=ON -DWITH_TESTING=OFF -DCMAKE_BUILD_TYPE=Release + + 注意:以上涉及Python3的命令,用Python3.5来举例,如您的Python版本为3.6/3.7,请将上述命令中的Python3.5改成Python3.6/Python3.7 9. 使用以下命令来编译: @@ -197,17 +206,16 @@ `pip install (whl包的名字)`或`pip3 install (whl包的名字)` -恭喜您,现在您已经完成使本机编译PaddlePaddle的过程了。 +恭喜,至此您已完成PaddlePaddle的编译安装 -

## ***验证安装*** 安装完成后您可以使用:`python` 或 `python3` 进入Python解释器,然后使用`import paddle.fluid` 验证是否安装成功。 -

## ***如何卸载*** -请使用以下命令卸载PaddlePaddle(使用docker安装PaddlePaddle的用户请进入包含PaddlePaddle的容器中使用以下命令,请使用对应版本的pip): +请使用以下命令卸载PaddlePaddle: * ***CPU版本的PaddlePaddle***: `pip uninstall paddlepaddle` 或 `pip3 uninstall paddlepaddle` * ***GPU版本的PaddlePaddle***: `pip uninstall paddlepaddle-gpu` 或 `pip3 uninstall paddlepaddle-gpu` +使用Docker安装PaddlePaddle的用户,请进入包含PaddlePaddle的容器中使用上述命令,注意使用对应版本的pip diff --git a/doc/fluid/beginners_guide/install/compile/compile_Windows.md b/doc/fluid/beginners_guide/install/compile/compile_Windows.md index 6205563fc..3454e15dc 100644 --- a/doc/fluid/beginners_guide/install/compile/compile_Windows.md +++ b/doc/fluid/beginners_guide/install/compile/compile_Windows.md @@ -1,85 +1,81 @@ -*** # **Windows下从源码编译** -本说明将介绍如何在*64位台式机或笔记本电脑*以及Windows 10系统下编译PaddlePaddle,我们支持的Windows系统需满足以下要求: +## 环境准备 -* Windows 10 家庭版/专业版/企业版 -* Visual Studio 2015 Update3 +* *64位操作系统* +* *Windows 10 家庭版/专业版/企业版* +* *Python 2.7/3.5/3.6/3.7* +* *pip或pip3 >= 9.0.1* +* *Visual Studio 2015 Update3* -## 确定要编译的版本 +## 选择CPU/GPU -* 1.3支持GPU的PaddlePaddle,为了使得PaddlePaddle程序运行的更加迅速,我们通常使用GPU对PaddlePaddle程序进行加速,但安装GPU版本的PaddlePaddle需要先拥有满足以下条件的NVIDIA GPU(具体安装流程和配置请务必参见NVIDIA官方文档:[For CUDA](https://docs.nvidia.com/cuda/cuda-installation-guide-linux/),[For cuDNN](https://docs.nvidia.com/deeplearning/sdk/cudnn-install/)) -* Cuda 工具包8.0配合cuDNN v7 -* GPU运算能力超过1.0的硬件设备 +* 如果您的计算机没有 NVIDIA® GPU,请编译CPU版的PaddlePaddle -## 选择如何编译 -我们在Windows的系统下提供1种编译方式: +* 如果您的计算机有NVIDIA® GPU,并且满足以下条件,推荐编译GPU版的PaddlePaddle + * *CUDA 工具包8.0配合cuDNN v7* + * *GPU运算能力超过1.0的硬件设备* -* 直接本机源码编译 +## 安装步骤 -由于在本机上的情况更加复杂,因此我们只支持特定的系统。 +在Windows的系统下提供1种编译方式: -请注意:当前版本不支持NCCL,分布式等相关功能。 - - +* 直接本机源码编译(暂不支持NCCL,分布式等相关功能) + ### ***本机编译*** -**请严格按照以下指令顺序执行** +1. 安装必要的工具 cmake,git 以及 python : -1. 检查您的计算机和操作系统是否符合我们支持的编译标准 + > cmake 需要3.5 及以上版本, 可在官网[下载](https://cmake.org/download/),并添加到环境变量中。 - * Windows 10 家庭版/专业版/企业版 - - * Visual Studio 2015 Update3 + > python 需要2.7 及以上版本, 可在官网[下载](https://www.python.org/download/releases/2.7/)。 -2. 安装必要的工具 cmake,git 以及 python : + > 需要安装`numpy, protobuf, wheel` 。python2.7下, 请使用`pip`命令; 如果是python3.x, 请使用`pip3`命令。 - > cmake 需要3.5 及以上版本, 可以在官网进行下载,并添加到环境变量中。 [下载地址](https://cmake.org/download/) - - > git可以在官网进行下载,并添加到环境变量中。 [下载地址](https://gitforwindows.org/) - - > python 需要2.7 及以上版本, 同时确保 `numpy, protobuf, wheel` 等模块得到安装 [下载地址](https://www.python.org/download/releases/2.7/) - - > python2.7下, 使用`pip`命令就可以; 如果是python3.x, 则建议使用`pip3`命令来使用pip安装工具。 - * 安装 numpy 包可以通过命令 `pip install numpy` 或 `pip3 install numpy` - + * 安装 protobuf 包可以通过命令 `pip install protobuf` 或 `pip3 install protobuf` - + * 安装 wheel 包可以通过命令 `pip install wheel` 或 `pip3 install wheel` -3. 将PaddlePaddle的源码clone在当下目录下的Paddle的文件夹中,并进入Padde目录下: + > git可以在官网[下载](https://gitforwindows.org/),并添加到环境变量中。 + +2. 将PaddlePaddle的源码clone在当下目录下的Paddle的文件夹中,并进入Padde目录下: - `git clone https://github.com/PaddlePaddle/Paddle.git` - `cd Paddle` -4. 切换到较稳定release分支下进行编译(支持1.3.x及以上版本): +3. 切换到较稳定release分支下进行编译: + + `git checkout [分支名]` + + 例如: - - `git checkout release/x.x.x` + `git checkout release/1.2` -5. 创建名为build的目录并进入: + 注意:python3.6、python3.7版本从release/1.2分支开始支持 + +4. 创建名为build的目录并进入: - `mkdir build` - `cd build` -6. 执行cmake: - - >具体编译选项含义请参见[编译选项表](../Tables.html/#Compile) +5. 执行cmake: + >具体编译选项含义请参见[编译选项表](../Tables.html/#Compile) - * 对于需要编译**CPU版本PaddlePaddle**的用户: + * 编译**CPU版本PaddlePaddle**: For Python2: `cmake .. -G "Visual Studio 14 2015 Win64" -DPYTHON_INCLUDE_DIR=${PYTHON_INCLUDE_DIRS} -DPYTHON_LIBRARY=${PYTHON_LIBRARY} -DPYTHON_EXECUTABLE=${PYTHON_EXECUTABLE} -DWITH_FLUID_ONLY=ON -DWITH_GPU=OFF -DWITH_TESTING=OFF -DCMAKE_BUILD_TYPE=Release` - + For Python3: `cmake .. -G "Visual Studio 14 2015 Win64" -DPY_VERSION=3.5 -DPYTHON_INCLUDE_DIR=${PYTHON_INCLUDE_DIRS} -DPYTHON_LIBRARY=${PYTHON_LIBRARY} -DPYTHON_EXECUTABLE=${PYTHON_EXECUTABLE} -DWITH_FLUID_ONLY=ON -DWITH_GPU=OFF -DWITH_TESTING=OFF -DCMAKE_BUILD_TYPE=Release` - - * 对于需要编译**GPU版本PaddlePaddle**的用户: + * 编译**GPU版本PaddlePaddle**: For Python2: `cmake .. -G "Visual Studio 14 2015 Win64" -DPYTHON_INCLUDE_DIR=${PYTHON_INCLUDE_DIRS} -DPYTHON_LIBRARY=${PYTHON_LIBRARY} @@ -91,24 +87,22 @@ -DPYTHON_EXECUTABLE=${PYTHON_EXECUTABLE} -DWITH_FLUID_ONLY=ON -DWITH_GPU=ON -DWITH_TESTING=OFF -DCMAKE_BUILD_TYPE=Release -DCUDA_TOOLKIT_ROOT_DIR=${CUDA_TOOLKIT_ROOT_DIR}` +6. 部分第三方依赖包(openblas,snappystream)目前需要用户自己提供预编译版本,也可以到 `https://github.com/wopeizl/Paddle_deps` 下载预编译好的文件, 将整个 `third_party` 文件夹放到 `build` 目录下. -7. 部分第三方依赖包(openblas,snappystream)目前需要用户自己提供预编译版本,也可以到 `https://github.com/wopeizl/Paddle_deps` 下载预编译好的文件, 将整个 `third_party` 文件夹放到 `build` 目录下. +7. 使用Blend for Visual Studio 2015 打开 `paddle.sln` 文件,选择平台为 `x64`,配置为 `Release`,先编译third_party模块,然后编译其他模块 -8. 使用Blend for Visual Studio 2015 打开 `paddle.sln` 文件,选择平台为 `x64`,配置为 `Release`,先编译third_party模块,然后编译其他模块 +8. 编译成功后进入 `\paddle\build\python\dist` 目录下找到生成的 `.whl` 包: -9. 编译成功后进入 `\paddle\build\python\dist` 目录下找到生成的 `.whl` 包: - `cd \paddle\build\python\dist` -10. 在当前机器或目标机器安装编译好的 `.whl` 包: +9. 在当前机器或目标机器安装编译好的 `.whl` 包: `pip install (whl包的名字)` 或 `pip3 install (whl包的名字)` -恭喜您,现在您已经完成使本机编译PaddlePaddle的过程了。 - +恭喜,至此您已完成PaddlePaddle的编译安装 ## ***验证安装*** -安装完成后您可以使用:`python` 进入Python解释器,然后使用 `import paddle.fluid`, 如沒有提示错误,则表明安装成功。 +安装完成后您可以使用:`python` 或 `python3`进入Python解释器,然后使用 `import paddle.fluid`, 如沒有提示错误,则表明安装成功。 ## ***如何卸载*** 请使用以下命令卸载PaddlePaddle: @@ -116,3 +110,5 @@ * ***CPU版本的PaddlePaddle***: `pip uninstall paddlepaddle` 或 `pip3 uninstall paddlepaddle` * ***GPU版本的PaddlePaddle***: `pip uninstall paddlepaddle-gpu` 或 `pip3 uninstall paddlepaddle-gpu` + +使用Docker安装PaddlePaddle的用户,请进入包含PaddlePaddle的容器中使用上述命令,注意使用对应版本的pip diff --git a/doc/fluid/beginners_guide/install/compile/fromsource.rst b/doc/fluid/beginners_guide/install/compile/fromsource.rst index 72f5256ce..6af432290 100644 --- a/doc/fluid/beginners_guide/install/compile/fromsource.rst +++ b/doc/fluid/beginners_guide/install/compile/fromsource.rst @@ -2,11 +2,8 @@ **从源码编译** =========================== -您也可以选择源码编译的方式编译安装PaddlePaddle,但由于本机环境的多样性,在编译源码时易出现复杂问题,可能会造成您安装失败。为保证您顺利安装,推荐您优先选择普通安装方式。 - - .. toctree:: - :hidden: + :maxdepth: 1 compile_Ubuntu.md compile_CentOS.md diff --git a/doc/fluid/beginners_guide/install/index_cn.rst b/doc/fluid/beginners_guide/install/index_cn.rst index adfc8adba..6f00b5a9a 100644 --- a/doc/fluid/beginners_guide/install/index_cn.rst +++ b/doc/fluid/beginners_guide/install/index_cn.rst @@ -1,7 +1,7 @@ ========== 安装说明 ========== -本说明将指导您在64位台式机或笔记本电脑上编译和安装PaddlePaddle +本说明将指导您在64位操作系统编译和安装PaddlePaddle PaddlePaddle目前支持的Python版本包括:Python 2.7-3.7 @@ -12,8 +12,7 @@ PaddlePaddle目前支持以下环境: * *MacOS 10.11 / 10.12 / 10.13 / 10.14* * *Windows7 / 8/ 10(专业版/企业版)* - -请确保您的环境满足以上条件,我们默认提供的安装同时需要您的计算机拥有64位操作系统,处理器支持AVX指令集,否则请选择 `多版本whl包安装列表 `_ 中 :code:`no_avx` 的版本 +请确保您的环境满足以上条件,我们默认提供的安装同时需要您的计算机拥有64位操作系统,处理器支持AVX指令集和MKL,如您有其他需求,请参考 `多版本whl包安装列表 `_ - 如果您希望使用 `pip `_ 进行安装PaddlePaddle可以直接使用以下命令: @@ -37,6 +36,7 @@ PaddlePaddle目前支持以下环境: install_CentOS.md install_MacOS.md install_Windows.md + install_Docker.md compile/fromsource.rst FAQ.md Tables.md diff --git a/doc/fluid/beginners_guide/install/install_CentOS.md b/doc/fluid/beginners_guide/install/install_CentOS.md index 6a1a56369..23fe44e87 100644 --- a/doc/fluid/beginners_guide/install/install_CentOS.md +++ b/doc/fluid/beginners_guide/install/install_CentOS.md @@ -1,166 +1,61 @@ -*** - # **CentOS下安装** -本说明将介绍如何在*64位台式机或笔记本电脑*以及CentOS系统下安装PaddlePaddle,我们支持的CentOS系统需满足以下要求: - - - -请注意:在其他系统上的尝试可能会导致安装失败。请确保您的环境满足以上条件,我们默认提供的安装同时需要您的计算机处理器支持AVX指令集,否则请选择[[最新Release安装包列表](./Tables.html/#ciwhls-release)中`no_avx`的版本。 - -CentOS系统下您可以使用`cat /proc/cpuinfo | grep avx`来检测您的处理器是否支持AVX指令集 +## 环境准备 +* *64位操作系统* * *CentOS 6 / 7* +* *Python 2.7/3.5/3.6/3.7* +* *pip或pip3 >= 9.0.1* -## 确定要安装的版本 -* 仅支持CPU的PaddlePaddle。如果您的计算机没有 NVIDIA® GPU,则只能安装此版本。如果您的计算机有GPU, -推荐您先安装CPU版本的PaddlePaddle,来检测您本地的环境是否适合。 - -* 支持GPU的PaddlePaddle,为了使PaddlePaddle程序运行的更加迅速,我们通过GPU对PaddlePaddle程序进行加速,但安装GPU版本的PaddlePaddle需要先拥有满足以下条件的NVIDIA® GPU(具体安装流程和配置请务必参见NVIDIA官方文档:[For CUDA](https://docs.nvidia.com/cuda/cuda-installation-guide-linux/),[For cuDNN](https://docs.nvidia.com/deeplearning/sdk/cudnn-install/)) - * *CUDA 工具包9.0配合cuDNN v7* - * *CUDA 工具包8.0配合cuDNN v7* - * *GPU运算能力超过1.0的硬件设备* - - - -## 选择如何安装 -在CentOS的系统下我们提供4种安装方式: - -* pip安装 -* Docker安装(不支持GPU版本)(镜像中python的版本为2.7) -* 源码编译安装(不支持CentOS 6的所有版本以及CentOS 7的GPU版本) -* Docker源码编译安装(不支持GPU版本)(镜像中的python版本为2.7,3.5,3.6,3.7) - - - - -**使用pip安装**(最便捷的安装方式),我们为您提供pip安装方法,但它更依赖您的本机环境,可能会出现和您本机环境相关的一些问题。 - - -**使用Docker进行安装**(最保险的安装方式),因为我们在把工具和配置都安装在一个 Docker image 里,这样如果遇到问题,其他人可以复现问题以便帮助。另外,对于习惯使用Windows和MacOS的开发者来说,使用Docker就不用配置交叉编译环境了。需要强调的是:Docker 不会虚拟任何硬件,Docker container 里运行的编译工具实际上都是在本机的 CPU 和操作系统上直接运行的,性能和把编译工具安装在本机运行一样。 - - -从[**源码编译安装**](#ct_source)以及[**使用Docker进行源码编译安装**](#ct_docker),这是一种通过将PaddlePaddle源代码编译成为二进制文件,然后在安装这个二进制文件的过程,相比使用我们为您编译过的已经通过测试的二进制文件形式的PaddlePaddle,手动编译更为复杂,我们将在说明的最后详细为您解答。 - - - - -

-### ***使用pip安装PaddlePaddle*** - - -首先,我们使用以下指令来**检测本机的环境**是否适合安装PaddlePaddle: - -`uname -m && cat /etc/*release` - -> 上面的命令将会显示本机的操作系统和位数信息,请确保您的计算机和本教程的要求一致。 - - -其次,您的计算机需要满足以下要求: - -* Python2.7.x (devel),Pip >= 9.0.1 - - > CentOS6需要编译Python2.7成[共享库](./FAQ.html/#FAQ)。 - -* Python3.5+.x (devel),Pip3 >= 9.0.1 - - > 您的CentOS上可能已经安装pip请使用pip -V来确认我们建议使用pip 9.0.1或更高版本来安装。 - - 更新yum的源: `yum update` 并安装拓展源以安装pip: `yum install -y epel-release` - - 使用以下命令安装或升级Python和pip到需要的版本: +### 注意事项 - - For Python2: `sudo yum install python-devel python-pip` - - For Python3: (请参照Python官方流程安装,并注意pip3命令对应的python3版本是否一致,如果有多个python3版本,请指定pip版本如pip3.7,或者将pip3软链到您使用的python版本下) +* 可以使用`uname -m && cat /etc/*release`查看本机的操作系统和位数信息 +* 可以使用`pip -V`(Python版本为2.7)或`pip3 -V`(Python版本为3.5/3.6/3.7),确认pip/pip3版本是否满足要求 +* 默认提供的安装包需要计算机支持AVX指令集和MKL。如果您对机器环境不了解,请下载使用[快速安装脚本](https://fast-install.bj.bcebos.com/fast_install.sh),配套说明请参考[这里](https://github.com/PaddlePaddle/FluidDoc/tree/develop/doc/fluid/beginners_guide/install/install_script.md)。或者您也可以使用`cat /proc/cpuinfo | grep avx`来检测您的处理器是否支持该指令集,如不支持,请在[这里](./Tables.html/#ciwhls-release)下载`no_avx`版本的安装包 - > 即使您的环境中已经有`Python`也需要安装`python develop`套装。 +## 选择CPU/GPU -下面将说明如何安装PaddlePaddle: +* 如果您的计算机没有 NVIDIA® GPU,请安装CPU版本的PaddlePaddle -1. 使用pip install来安装PaddlePaddle: +* 如果您的计算机有NVIDIA® GPU,并且满足以下条件,推荐安装GPU版PaddlePaddle + * *CUDA 工具包9.0配合cuDNN v7* + * *CUDA 工具包8.0配合cuDNN v7* + * *CUDA 工具包8.0配合cuDNN v5* + * *GPU运算能力超过1.0的硬件设备* - * 对于需要**CPU版本PaddlePaddle**的用户:`pip install paddlepaddle` 或 `pip3 install paddlepaddle` +您可参考NVIDIA官方文档了解CUDA和CUDNN的安装流程和配置方法,请见[CUDA](https://docs.nvidia.com/cuda/cuda-installation-guide-linux/),[cuDNN](https://docs.nvidia.com/deeplearning/sdk/cudnn-install/) - * 对于需要**GPU版本PaddlePaddle**的用户: `pip install paddlepaddle-gpu` 或 `pip3 install paddlepaddle-gpu` +## 安装方式 - > 1. 为防止出现nccl.h找不到的问题请首先按照NVIDIA[官方网站](https://developer.nvidia.com/nccl/nccl-download)的指示正确安装nccl2 - > 2. 如果您不规定pypi包版本号,我们默认为您提供支持Cuda 9/cuDNN v7的PaddlePaddle版本。 +CentOS系统下有4种安装方式: - * 对于出现`Cannot uninstall 'six'.`问题的用户,可是由于您的系统中已有的Python安装问题造 成的,请使用`pip install paddlepaddle --ignore-installed six`(CPU)或`pip install paddlepaddle-gpu --ignore-installed six`(GPU)解决。 +* pip安装(推荐) +* [Docker安装](./install_Docker.html) +* [源码编译安装](./compile/compile_CentOS.html/#ct_source) +* [Docker源码编译安装](./compile/compile_CentOS.html/#ct_docker) - * 对于有**其他要求**的用户:`pip install paddlepaddle==[版本号]` 或 `pip3 install paddlepaddle==[版本号]` +这里为您介绍pip安装方式 - > `版本号`参见[最新Release安装包列表](./Tables.html/#whls)或者您如果需要获取并安装**最新的PaddlePaddle开发分支**,可以从[[最新dev安装包列表](./Tables.html/#ciwhls)或者我们的[CI系统](https://paddleci.ngrok.io/project.html?projectId=Manylinux1&tab=projectOverview) 中下载最新的whl安装包和c-api开发包并安装。如需登录,请点击“Log in as guest”。 +## 安装步骤 +* CPU版PaddlePaddle:`pip install paddlepaddle` 或 `pip3 install paddlepaddle` +* GPU版PaddlePaddle:`pip install paddlepaddle-gpu` 或 `pip3 install paddlepaddle-gpu` +您可[验证是否安装成功](#check),如有问题请查看[FAQ](./FAQ.html) +注: +* pip与python版本对应。如果是python2.7, 建议使用`pip`命令; 如果是python3.x, 则建议使用`pip3`命令 +* `pip install paddlepaddle-gpu` 此命令将安装支持CUDA 9.0 cuDNN v7的PaddlePaddle,如您对CUDA或cuDNN版本有不同要求,可用`pip install paddlepaddle==[版本号]`或 `pip3 install paddlepaddle==[版本号]`命令来安装,版本号请见[这里](https://pypi.org/project/paddlepaddle-gpu/#history) +* 默认下载最新稳定版的安装包,如需获取开发版安装包,请参考[这里](./Tables.html/#ciwhls) - -现在您已经完成通过`pip install` 来安装的PaddlePaddle的过程。 - - - -

-### ***使用Docker进行安装*** - - - -为了更好的使用Docker并避免发生问题,我们推荐使用**最高版本的Docker**,关于**安装和使用Docker**的细节请参阅Docker[官方文档](https://docs.docker.com/install/) - - -> 请注意,要安装和使用支持 GPU 的PaddlePaddle版本,您必须先安装[nvidia-docker](https://github.com/NVIDIA/nvidia-docker) - - - - -当您已经**正确安装Docker**后你就可以开始**使用Docker安装PaddlePaddle** - -1. 使用以下指令拉取我们为您预安装好PaddlePaddle的镜像: - - * 对于需要**CPU版本的PaddlePaddle**的用户请使用以下指令拉取我们为您预安装好*PaddlePaddle For CPU*的镜像: - - `docker pull hub.baidubce.com/paddlepaddle/paddle:1.2` - - * 您也可以通过以下指令拉取任意的我们提供的Docker镜像: - - `docker pull hub.baidubce.com/paddlepaddle/paddle:[tag]` - - > (请把[tag]替换为[镜像表](./Tables.html/#dockers)中的内容) - - - -2. 使用以下指令用已经拉取的镜像构建并进入Docker容器: - - `docker run --name [Name of container] -it -v $PWD:/paddle /bin/bash` - - > 上述命令中,--name [Name of container] 设定Docker的名称;-it 参数说明容器已和本机交互式运行; -v $PWD:/paddle 指定将当前路径(Linux中PWD变量会展开为当前路径的[绝对路径](https://baike.baidu.com/item/绝对路径/481185))挂载到容器内部的 /paddle 目录; `` 指定需要使用的image名称,如果您需要使用我们的镜像请使用`hub.baidubce.com/paddlepaddle/paddle:[tag]` 注:tag的意义同第二步,/bin/bash是在Docker中要执行的命令。 - -3. (可选:当您需要第二次进入Docker容器中)使用如下命令使用PaddlePaddle: - - `docker start [Name of container]` - - > 启动之前创建的容器。 - - `docker attach [Name of container]` - - > 进入启动的容器。 - -至此您已经成功使用Docker安装PaddlePaddle,您只需要进入Docker容器后运行PaddlePaddle即可,更多Docker使用请参见[Docker官方文档](https://docs.docker.com)。 - -> 注:PaddlePaddle Docker镜像为了减小体积,默认没有安装`vim`,您可以在容器中执行 `apt-get install -y vim` 安装后,在容器中编辑代码。 - - -

+ ## ***验证安装*** -安装完成后您可以使用:`python` 或 `python3` 进入Python解释器,然后使用`import paddle.fluid` 验证是否安装成功。 +安装完成后您可以使用命令`python` 或 `python3` 进入python解释器,然后使用`import paddle.fluid` 验证是否安装成功。 -

## ***如何卸载*** -请使用以下命令卸载PaddlePaddle(使用docker安装PaddlePaddle的用户请进入包含PaddlePaddle的容器中使用以下命令,请使用相应版本的pip): +请使用以下命令卸载PaddlePaddle: * ***CPU版本的PaddlePaddle***: `pip uninstall paddlepaddle` 或 `pip3 uninstall paddlepaddle` * ***GPU版本的PaddlePaddle***: `pip uninstall paddlepaddle-gpu` 或 `pip3 uninstall paddlepaddle-gpu` - - diff --git a/doc/fluid/beginners_guide/install/install_Docker.md b/doc/fluid/beginners_guide/install/install_Docker.md new file mode 100644 index 000000000..530ff54ab --- /dev/null +++ b/doc/fluid/beginners_guide/install/install_Docker.md @@ -0,0 +1,89 @@ +# **使用Docker安装** + +[Docker](https://docs.docker.com/install/)是一个开源的应用容器引擎。使用Docker,既可以将PaddlePaddle的安装&使用与系统环境隔离,也可以与主机共享GPU、网络等资源 + +## 环境准备 + +- 在本地主机上[安装Docker](https://hub.docker.com/search/?type=edition&offering=community) + +- 如需在Linux开启GPU支持,请[安装nvidia-docker](https://github.com/NVIDIA/nvidia-docker) + +## 安装步骤 + +1. 拉取PaddlePaddle镜像 + + * CPU版的PaddlePaddle: `docker pull hub.baidubce.com/paddlepaddle/paddle:[版本号]` + + * GPU版的PaddlePaddle: `docker pull hub.baidubce.com/paddlepaddle/paddle:[版本号]-gpu-cuda9.0-cudnn7` + + 在`:`后请您填写PaddlePaddle版本号,例如1.2,更多请见[镜像简介](#dockers) + +2. 构建、进入Docker容器 + + `docker run --name [Name of container] -it -v $PWD:/paddle /bin/bash` + + > 上述命令中,各项参数分别指: --name [Name of container] 设定Docker的名称;-it 参数说明容器已和本机交互式运行; -v $PWD:/paddle 指定将当前路径(Linux中PWD变量会展开为当前路径的绝对路径)挂载到容器内部的 /paddle 目录; `` 指定需要使用的image名称,您可以通过`docker images`命令查看;/bin/bash是在Docker中要执行的命令 + +至此,您已经成功使用Docker安装PaddlePaddle,更多Docker使用请参见[Docker官方文档](https://docs.docker.com) + + +

+### **镜像简介** +

+ + + + + + + + + + + + + + + + + + + + + + + + + +
版本名称 版本说明
hub.baidubce.com/paddlepaddle/paddle:latest 最新的预先安装好PaddlePaddle CPU版本的镜像
hub.baidubce.com/paddlepaddle/paddle:[Version] 将version换成具体的版本,历史版本的预安装好PaddlePaddle的镜像
hub.baidubce.com/paddlepaddle/paddle:latest-gpu 最新的预先安装好PaddlePaddle GPU版本的镜像
hub.baidubce.com/paddlepaddle/paddle:latest-dev 最新的PaddlePaddle的开发环境
+

+ +您可以在 [DockerHub](https://hub.docker.com/r/paddlepaddle/paddle/tags/) 中找到PaddlePaddle的各个发行的版本的docker镜像。 + +### 注意事项 + +* 镜像中Python版本为2.7 +* PaddlePaddle Docker镜像为了减小体积,默认没有安装`vim`,您可以在容器中执行 `apt-get install -y vim` 安装后,在容器中编辑代码 + +### 补充说明 + +* 当您需要第二次进入Docker容器中,使用如下命令: +``` + #启动之前创建的容器 + docker start [Name of container] + + #进入启动的容器 + docker attach [Name of container] +``` +* 如您是Docker新手,您可以参考互联网上的资料学习,例如[Docker教程](http://www.runoob.com/docker/docker-hello-world.html) + +## 如何卸载 + +请您进入Docker容器后,执行如下命令 + +* ***CPU版本的PaddlePaddle***: `pip uninstall paddlepaddle` 或 `pip3 uninstall paddlepaddle` + +* ***GPU版本的PaddlePaddle***: `pip uninstall paddlepaddle-gpu` 或 `pip3 uninstall paddlepaddle-gpu` + +或通过`docker rm [Name of container]`来直接删除Docker容器 + diff --git a/doc/fluid/beginners_guide/install/install_MacOS.md b/doc/fluid/beginners_guide/install/install_MacOS.md index 50280990a..cffb5386a 100644 --- a/doc/fluid/beginners_guide/install/install_MacOS.md +++ b/doc/fluid/beginners_guide/install/install_MacOS.md @@ -1,129 +1,50 @@ -*** - # **MacOS下安装** -本说明将介绍如何在*64位台式机或笔记本电脑*以及MacOS系统下安装PaddlePaddle,我们支持的MacOS系统需满足以下要求。 - -请注意:在其他系统上的尝试可能会导致安装失败。 - -* MacOS 10.11/10.12/10.13/10.14 - -## 确定要安装的版本 - -* 仅支持CPU的PaddlePaddle。 - - - -## 选择如何安装 -在MacOS的系统下我们提供3种安装方式: - -* pip安装(不支持GPU版本)(python3下不支持分布式) -* Docker安装(不支持GPU版本)(镜像中python的版本为2.7) -* Docker源码编译安装(不支持GPU版本)(镜像中的python版本为2.7,3.5,3.6,3.7) - - -**使用pip安装**(最便捷的安装方式),我们为您提供pip安装方法,但它更依赖您的本机环境,可能会出现和您本机环境相关的一些问题。 - - -**使用Docker进行安装**(最保险的安装方式),因为我们在把工具和配置都安装在一个 Docker image 里,这样如果遇到问题,其他人可以复现问题以便帮助。另外,对于习惯使用Windows和MacOS的开发者来说,使用Docker就不用配置交叉编译环境了。需要强调的是:Docker 不会虚拟任何硬件,Docker container 里运行的编译工具实际上都是在本机的 CPU 和操作系统上直接运行的,性能和把编译工具安装在本机运行一样。 - - - -

-### ***使用pip安装*** - -由于在MacOS中的Python情况差别较大我们暂不提供快速安装的命令,请您按照以下步骤进行安装 - -首先,**检查您的计算机和操作系统**是否符合我们支持的编译标准: `uname -m` 并且在`关于本机`中查看系统版本。 - -其次,您的计算机需要满足以下要求: - -> **请不要使用MacOS中自带python**,对于**Python2**,建议您使用[Homebrew](https://brew.sh)或[Python.org](https://www.python.org/ftp/python/2.7.15/python-2.7.15-macosx10.9.pkg)提供的python2.7.15;对于**Python3**,请使用[Python.org](https://www.python.org/downloads/mac-osx/)提供的python3.5.x、python3.6.x或python3.7.x。 - - For python2: brew install python@2 或 使用Python官方下载的python2.7.15 - For python3: 使用Python官方下载的python3.5.x、python3.6.x或python3.7.x - -* Python2.7.x,Pip >= 9.0.1 -* Python3.5.x,Pip3 >= 9.0.1 -* Python3.6.x,Pip3 >= 9.0.1 -* Python3.7.x,Pip3 >= 9.0.1 - - > 注: 您的MacOS上可能已经安装pip请使用pip -V来确认我们建议使用pip 9.0.1或更高版本来安装。 - -下面将说明如何安装PaddlePaddle: - - -1. 使用pip install来安装PaddlePaddle: - - * 对于需要**CPU版本PaddlePaddle**的用户:`pip install paddlepaddle` 或 `pip3 install paddlepaddle` - - * 对于有**其他要求**的用户:`pip install paddlepaddle==[版本号]` 或 `pip3 install paddlepaddle==[版本号]` - - > `版本号`参见[最新Release安装包列表](./Tables.html/#ciwhls-release)或者您如果需要获取并安装**最新的PaddlePaddle开发分支**,可以从[CI系统](https://paddleci.ngrok.io/project.html?projectId=Manylinux1&tab=projectOverview) 中下载最新的whl安装包和c-api开发包并安装。如需登录,请点击“Log in as guest”。 - - - - -现在您已经完成通过`pip install` 来安装的PaddlePaddle的过程。 - - - - -

-### ***使用Docker安装*** - - - -为了更好的使用Docker并避免发生问题,我们推荐使用**最高版本的Docker**,关于**安装和使用Docker**的细节请参阅Docker[官方文档](https://docs.docker.com/install/)。 - -> 请注意,在MacOS系统下登陆docker需要使用您的dockerID进行登录,否则将出现`Authenticate Failed`错误。 - -如果已经**正确安装Docker**,即可以开始**使用Docker安装PaddlePaddle** - -1. 使用以下指令拉取我们为您预安装好PaddlePaddle的镜像: - - * 对于需要**CPU版本的PaddlePaddle**的用户请使用以下指令拉取我们为您预安装好*PaddlePaddle For CPU*的镜像: - - `docker pull hub.baidubce.com/paddlepaddle/paddle:1.2` - - * 您也可以通过以下指令拉取任意的我们提供的Docker镜像: - - `docker pull hub.baidubce.com/paddlepaddle/paddle:[tag]` - - > (请把[tag]替换为[镜像表](./Tables.html/#dockers)中的内容) +## 环境准备 -2. 使用以下指令用已经拉取的镜像构建并进入Docker容器: +* *64位操作系统* +* *MacOS 10.11/10.12/10.13/10.14* +* *Python 2.7/3.5/3.6/3.7* +* *pip或pip3 >= 9.0.1* - `docker run --name [Name of container] -it -v $PWD:/paddle /bin/bash` +### 注意事项 - > 上述命令中,--name [Name of container] 设定Docker的名称;-it 参数说明容器已和本机交互式运行; -v $PWD:/paddle 指定将当前路径(Linux中PWD变量会展开为当前路径的[绝对路径](https://baike.baidu.com/item/绝对路径/481185))挂载到容器内部的 /paddle 目录; `` 指定需要使用的image名称,如果您需要使用我们的镜像请使用`hub.baidubce.com/paddlepaddle/paddle:[tag]` 注:tag的意义同第二步;/bin/bash是在Docker中要执行的命令。 +* 可以使用`pip -V`(Python版本为2.7)或`pip3 -V`(Python版本为3.5/3.6/3.7),确认pip/pip3版本是否满足要求 +* 默认提供的安装包需要计算机支持AVX指令集 -3. (可选:当您需要第二次进入Docker容器中)使用如下命令使用PaddlePaddle: +## 选择CPU/GPU - `docker start [Name of container]` +* 目前在MacOS环境仅支持CPU版PaddlePaddle - > 启动之前创建的容器。 +## 安装方式 - `docker attach [Name of container]` +MacOS系统下有4种安装方式: - > 进入启动的容器。 +* pip安装(推荐) +* [Docker安装](./install_Docker.html) +* [源码编译安装](./compile/compile_MacOS.html/#mac_source) +* [Docker源码编译安装](./compile/compile_MacOS.html/#mac_docker) +这里为您介绍pip安装方式 -至此您已经成功使用Docker安装PaddlePaddle,您只需要进入Docker容器后运行PaddlePaddle即可,更多Docker使用请参见[Docker官方文档](https://docs.docker.com)。 +## 安装步骤 -> 注:PaddlePaddle Docker镜像为了减小体积,默认没有安装`vim`,您可以在容器中执行 `apt-get install -y vim` 安装后,在容器中编辑代码。 +* CPU版PaddlePaddle:`pip install paddlepaddle` 或 `pip3 install paddlepaddle` - +您可[验证是否安装成功](#check),如有问题请查看[FAQ](./FAQ.html) +注: +* pip与python版本对应。如果是python2.7, 建议使用`pip`命令; 如果是python3.x, 则建议使用`pip3`命令 +* 默认下载最新稳定版的安装包,如需获取开发版安装包,请参考[这里](./Tables.html/#ciwhls) +* 使用MacOS中自带Python可能会导致安装失败。对于**Python2**,建议您使用[Homebrew](https://brew.sh)或[Python.org](https://www.python.org/ftp/python/2.7.15/python-2.7.15-macosx10.9.pkg)提供的python2.7.15;对于**Python3**,请使用[Python.org](https://www.python.org/downloads/mac-osx/)提供的python3.5.x、python3.6.x或python3.7.x。 -

-## ***验证安装*** + +## 验证安装 安装完成后您可以使用:`python` 或 `python3` 进入python解释器,然后使用`import paddle.fluid` 验证是否安装成功。 -

-## ***如何卸载*** -请使用以下命令卸载PaddlePaddle(使用docker安装PaddlePaddle的用户请进入包含PaddlePaddle的容器中使用以下命令,请使用相应版本的pip): +## 如何卸载 -* ***CPU版本的PaddlePaddle***: `pip uninstall paddlepaddle` 或 `pip3 uninstall paddlepaddle` +请使用以下命令卸载PaddlePaddle: +* `pip uninstall paddlepaddle` 或 `pip3 uninstall paddlepaddle` diff --git a/doc/fluid/beginners_guide/install/install_Ubuntu.md b/doc/fluid/beginners_guide/install/install_Ubuntu.md index 8dc394687..17c668946 100644 --- a/doc/fluid/beginners_guide/install/install_Ubuntu.md +++ b/doc/fluid/beginners_guide/install/install_Ubuntu.md @@ -1,167 +1,61 @@ -*** - # **Ubuntu下安装** -本说明将介绍如何在*64位台式机或笔记本电脑*以及Ubuntu系统下安装PaddlePaddle,我们支持的Ubuntu系统需满足以下要求: - - - -请注意:在其他系统上的尝试可能会导致安装失败。请确保您的环境满足以上条件,我们默认提供的安装同时需要您的计算机处理器支持AVX指令集,否则请选择[最新Release安装包列表](./Tables.html/#ciwhls-release)中`no_avx`的版本。 - -Ubuntu系统下您可以使用`cat /proc/cpuinfo | grep avx`来检测您的处理器是否支持AVX指令集 +## 环境准备 +* *64位操作系统* * *Ubuntu 14.04 /16.04 /18.04* +* *Python 2.7/3.5/3.6/3.7* +* *pip或pip3 >= 9.0.1* -## 确定要安装的版本 - -* 仅支持CPU的PaddlePaddle。如果您的计算机没有 NVIDIA® GPU,则只能安装此版本。如果您的计算机有GPU, -也推荐您先安装CPU版本的PaddlePaddle,来检测您本地的环境是否适合。 - -* 支持GPU的PaddlePaddle。为了使PaddlePaddle程序运行更加迅速,我们通过GPU对PaddlePaddle程序进行加速,但安装GPU版本的PaddlePaddle需要先拥有满足以下条件的NVIDIA® GPU(具体安装流程和配置请务必参见NVIDIA官方文档:[For CUDA](https://docs.nvidia.com/cuda/cuda-installation-guide-linux/),[For cuDNN](https://docs.nvidia.com/deeplearning/sdk/cudnn-install/)) - * *CUDA 工具包9.0配合cuDNN v7* - * *CUDA 工具包8.0配合cuDNN v7* - * *GPU运算能力超过1.0的硬件设备* - - - -## 选择如何安装 -在Ubuntu的系统下我们提供4种安装方式: - -* pip安装 -* Docker安装(镜像中python的版本为2.7) -* 源码编译安装 -* Docker源码编译安装(镜像中的python版本为2.7,3.5,3.6,3.7) - - - -**使用pip安装**(最便捷的安装方式),我们为您提供pip安装方法,但它更依赖您的本机环境,可能会出现和您本机环境相关的一些问题。 - -**使用Docker进行安装**(最保险的安装方式),因为我们在把工具和配置都安装在一个 Docker image 里,这样如果遇到问题,其他人可以复现问题以便帮助。另外,对于习惯使用Windows和MacOS的开发者来说,使用Docker就不用配置交叉编译环境了。需要强调的是:Docker 不会虚拟任何硬件,Docker container 里运行的编译工具实际上都是在本机的 CPU 和操作系统上直接运行的,性能和把编译工具安装在本机运行一样。 - - - -从[**源码编译安装**](#ubt_source)以及[**使用Docker进行源码编译安装**](#ubt_docker),这是一种通过将PaddlePaddle源代码编译成为二进制文件,然后在安装这个二进制文件的过程,相比使用我们为您编译过的已经通过测试的二进制文件形式的PaddlePaddle,手动编译更为复杂,我们将在说明的最后详细为您解答。 - - - -

-### ***使用pip安装*** - - -首先,我们使用以下指令来**检测本机的环境**是否适合安装PaddlePaddle: - - uname -m && cat /etc/*release - -> 上面的命令将会显示本机的操作系统和位数信息,请确保您的计算机和本教程的要求一致。 - - -其次,您的电脑需要满足以下任一要求: - -* Python2.7.x (dev),Pip >= 9.0.1 -* Python3.5+.x (dev),Pip3 >= 9.0.1 - -> 您的Ubuntu上可能已经安装pip请使用pip -V或pip3 -V来确认我们建议使用pip 9.0.1或更高版本来安装 - - 更新apt的源: `apt update` - -使用以下命令安装或升级Python和pip到需要的版本:(python3.6、python3.7安装pip和dev在不同Ubuntu版本下差别较大,不一一描述) - - - For python2: `sudo apt install python-dev python-pip` - - For python3.5:`sudo apt install python3.5-dev` and `curl https://bootstrap.pypa.io/get-pip.py -o - | python3.5 && easy_install pip` - - For python3.6、python3.7: 我们默认您应准备好python3.6(3.7)以及对应版本的dev和pip3 -> 即使您的环境中已经有Python2或Python3也需要安装Python-dev或Python3.5(3.6、3.7)-dev。 +### 注意事项 -现在,让我们来安装PaddlePaddle: +* 可以使用`uname -m && cat /etc/*release`查看本机的操作系统和位数信息 +* 可以使用`pip -V`(Python版本为2.7)或`pip3 -V`(Python版本为3.5/3.6/3.7),确认pip/pip3版本是否满足要求 +* 默认提供的安装包需要计算机支持AVX指令集和MKL。如果您对机器环境不了解,请下载使用[快速安装脚本](https://fast-install.bj.bcebos.com/fast_install.sh),配套说明请参考[这里](https://github.com/PaddlePaddle/FluidDoc/tree/develop/doc/fluid/beginners_guide/install/install_script.md)。或者您也可以使用`cat /proc/cpuinfo | grep avx`来检测您的处理器是否支持该指令集,如不支持,请在[这里](./Tables.html/#ciwhls-release)下载`no_avx`版本的安装包 -1. 使用pip install来安装PaddlePaddle +## 选择CPU/GPU - * 对于需要**CPU版本PaddlePaddle**的用户:`pip install paddlepaddle` 或 `pip3 install paddlepaddle` +* 如果您的计算机没有 NVIDIA® GPU,请安装CPU版的PaddlePaddle - * 对于需要**GPU版本PaddlePaddle**的用户:`pip install paddlepaddle-gpu` 或 `pip3 install paddlepaddle-gpu` +* 如果您的计算机有 NVIDIA® GPU,并且满足以下条件,推荐安装GPU版的PaddlePaddle + * *CUDA 工具包9.0配合cuDNN v7* + * *CUDA 工具包8.0配合cuDNN v7* + * *CUDA 工具包8.0配合cuDNN v5* + * *GPU运算能力超过1.0的硬件设备* - > 1. 为防止出现nccl.h找不到的问题请首先按照以下命令安装nccl2(这里提供的是ubuntu 16.04,CUDA9,cuDNN v7下nccl2的安装指令),更多版本的安装信息请参考NVIDIA[官方网站](https://developer.nvidia.com/nccl/nccl-download): - i. `wget http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1604/x86_64/nvidia-machine-learning-repo-ubuntu1604_1.0.0-1_amd64.deb` - ii. `dpkg -i nvidia-machine-learning-repo-ubuntu1604_1.0.0-1_amd64.deb` - iii. `sudo apt-get install -y libnccl2=2.2.13-1+cuda9.0 libnccl-dev=2.2.13-1+cuda9.0` +您可参考NVIDIA官方文档了解CUDA和CUDNN的安装流程和配置方法,请见[CUDA](https://docs.nvidia.com/cuda/cuda-installation-guide-linux/),[cuDNN](https://docs.nvidia.com/deeplearning/sdk/cudnn-install/) - > 2. 如果您不规定pypi包版本号,我们默认为您提供支持Cuda 9/cuDNN v7的PaddlePaddle版本。 +## 安装方式 - * 对于出现`Cannot uninstall 'six'.`问题的用户,可是由于您的系统中已有的Python安装问题造成的,请使用`pip install paddlepaddle --ignore-installed six`(CPU)或`pip install paddlepaddle --ignore-installed six`(GPU)解决。 +Ubuntu系统下有4种安装方式: - * 对于有**其他要求**的用户:`pip install paddlepaddle==[版本号]` 或 `pip3 install paddlepaddle==[版本号]` +* pip安装(推荐) +* [Docker安装](./install_Docker.html) +* [源码编译安装](./compile/compile_Ubuntu.html/#ubt_source) +* [Docker源码编译安装](./compile/compile_Ubuntu.html/#ubt_docker) - > `版本号`参见[最新Release安装包列表](./Tables.html/#whls)或者您如果需要获取并安装**最新的PaddlePaddle开发分支**,可以从[最新dev安装包列表](./Tables.html/#ciwhls)或者我们的[CI系统](https://paddleci.ngrok.io/project.html?projectId=Manylinux1&tab=projectOverview) 中下载最新的whl安装包和c-api开发包并安装。如需登录,请点击“Log in as guest”。 +这里为您介绍pip安装方式 +## 安装步骤 +* CPU版PaddlePaddle:`pip install paddlepaddle` 或 `pip3 install paddlepaddle` +* GPU版PaddlePaddle:`pip install paddlepaddle-gpu` 或 `pip3 install paddlepaddle-gpu` +您可[验证是否安装成功](#check),如有问题请查看[FAQ](./FAQ.html) +注: -现在您已经完成使用`pip install` 来安装的PaddlePaddle的过程。 +* pip与python版本对应。如果是python2.7, 建议使用`pip`命令; 如果是python3.x, 则建议使用`pip3`命令 +* `pip install paddlepaddle-gpu` 此命令将安装支持CUDA 9.0 cuDNN v7的PaddlePaddle,如您对CUDA或cuDNN版本有不同要求,可用`pip install paddlepaddle==[版本号]`或 `pip3 install paddlepaddle==[版本号]`命令来安装,版本号请见[这里](https://pypi.org/project/paddlepaddle-gpu/#history) +* 默认下载最新稳定版的安装包,如需获取开发版安装包,请参考[这里](./Tables.html/#ciwhls) + +## 验证安装 +安装完成后您可以使用命令`python` 或 `python3` 进入python解释器,然后使用`import paddle.fluid` 验证是否安装成功。 -

-### ***使用Docker安装*** - - - -为了更好的使用Docker并避免发生问题,我们推荐使用**最高版本的Docker**,关于**安装和使用Docker**的细节请参阅Docker[官方文档](https://docs.docker.com/install/)。 - - - -> 请注意,要安装和使用支持 GPU 的PaddlePaddle版本,您必须先安装[nvidia-docker](https://github.com/NVIDIA/nvidia-docker) - - - -如果已经**正确安装Docker**,即可以开始**使用Docker安装PaddlePaddle** - -1. 使用以下指令拉取我们为您预安装好PaddlePaddle的镜像: - - * 对于需要**CPU版本的PaddlePaddle**的用户请使用以下指令拉取我们为您预安装好*PaddlePaddle For CPU*的镜像: - - `docker pull hub.baidubce.com/paddlepaddle/paddle:1.2` - - * 对于需要**GPU版本的PaddlePaddle**的用户请使用以下指令拉取我们为您预安装好*PaddlePaddle For GPU*的镜像: - - `docker pull hub.baidubce.com/paddlepaddle/paddle:1.2-gpu-cuda9.0-cudnn7` - - * 您也可以通过以下指令拉取任意的我们提供的Docker镜像: - - `docker pull hub.baidubce.com/paddlepaddle/paddle:[tag]` - - > (请把[tag]替换为[镜像表](./Tables.html/#dockers)中的内容) - -2. 使用以下指令用已经拉取的镜像构建并进入Docker容器: - - `docker run --name [Name of container] -it -v $PWD:/paddle /bin/bash` - - > 上述命令中,--name [Name of container] 设定Docker的名称;-it 参数说明容器已和本机交互式运行; -v $PWD:/paddle 指定将当前路径(Linux中PWD变量会展开为当前路径的绝对路径)挂载到容器内部的 /paddle 目录; `` 指定需要使用的image名称,如果您需要使用我们的镜像请使用`hub.baidubce.com/paddlepaddle/paddle:[tag]` 注:tag的意义同第二步;/bin/bash是在Docker中要执行的命令。 - -3. (可选:当您需要第二次进入Docker容器中)使用如下命令使用PaddlePaddle: - - `docker start [Name of container]` - - > 启动之前创建的容器。 - - `docker attach [Name of container]` - - > 进入启动的容器。 - -至此您已经成功使用Docker安装PaddlePaddle,您只需要进入Docker容器后运行PaddlePaddle即可,更多Docker使用请参见[Docker官方文档](https://docs.docker.com)。 - -> 注:PaddlePaddle Docker镜像为了减小体积,默认没有安装`vim`,您可以在容器中执行 `apt-get install -y vim` 安装后,在容器中编辑代码。 - - - - -

-## ***验证安装*** -安装完成后您可以使用:`python` 或 `python3` 进入python解释器,然后使用`import paddle.fluid` 验证是否安装成功。 - -

-## ***如何卸载*** -请使用以下命令卸载PaddlePaddle(使用docker安装PaddlePaddle的用户请进入包含PaddlePaddle的容器中使用以下命令,请使用相应版本的pip): +## 如何卸载 +请使用以下命令卸载PaddlePaddle: * ***CPU版本的PaddlePaddle***: `pip uninstall paddlepaddle` 或 `pip3 uninstall paddlepaddle` * ***GPU版本的PaddlePaddle***: `pip uninstall paddlepaddle-gpu` 或 `pip3 uninstall paddlepaddle-gpu` - diff --git a/doc/fluid/beginners_guide/install/install_Windows.md b/doc/fluid/beginners_guide/install/install_Windows.md index 49496c9f8..8ef5a6be7 100644 --- a/doc/fluid/beginners_guide/install/install_Windows.md +++ b/doc/fluid/beginners_guide/install/install_Windows.md @@ -1,45 +1,55 @@ -*** - # **Windows下安装** -本文将介绍如何在Windows系统下安装PaddlePaddle,您的计算机需要满足以下要求: - -* *64位台式机或笔记本电脑* +## 环境准备 +* *64位操作系统* * *Windows 7/8 ,Windows 10 专业版/企业版* +* *Python 2.7/3.5/3.6/3.7* +* *pip或pip3 >= 9.0.1* -注: +### 注意事项 +* 默认提供的安装包需要计算机支持AVX指令集和MKL * 当前版本暂不支持NCCL,分布式等相关功能 -## 安装步骤 +## 选择CPU/GPU -### ***使用pip安装*** +* 如果您的计算机没有 NVIDIA® GPU,请安装CPU版的PaddlePaddle -* 对Python版本的要求 +* 如果您的计算机有 NVIDIA® GPU,并且满足以下条件,推荐安装GPU版的PaddlePaddle + * *CUDA 工具包8.0配合cuDNN v7* + * *GPU运算能力超过1.0的硬件设备* -我们支持[Python官方提供](https://www.python.org/downloads/)的Python2.7.15,Python3.5.x,Python3.6.x,Python3.7.x +您可参考NVIDIA官方文档了解CUDA和CUDNN的安装流程和配置方法,请见[CUDA](https://docs.nvidia.com/cuda/cuda-installation-guide-linux/),[cuDNN](https://docs.nvidia.com/deeplearning/sdk/cudnn-install/) -* 对pip版本的要求 +## 安装方式 -您的pip或pip3版本号需不低于9.0.1。pip与python版本是对应的, 如果是python2.7, 建议使用`pip`命令; 如果是python3.x, 则建议使用`pip3`命令。 +Windows系统下有3种安装方式: -* 开始安装 +* pip安装(推荐) +* [Docker安装](./install_Docker.html) +* [源码编译安装](./compile/compile_Windows.html/#win_source) -* ***CPU版本的PaddlePaddle***: -执行如下命令:`pip install paddlepaddle`(python2.7) 或 `pip3 install paddlepaddle`(python3.x) 安装PaddlePaddle +这里为您介绍pip安装方式 -* ***GPU版本的PaddlePaddle***: -执行如下命令:`pip install paddlepaddle-gpu`(python2.7) 或 `pip3 install paddlepaddle-gpu`(python3.x) 安装PaddlePaddle +## 安装步骤 -## ***验证安装*** -安装完成后您可以使用 `python` 或 `python3` 进入python解释器,然后使用`import paddle.fluid` 验证是否安装成功。 +* CPU版PaddlePaddle:`pip install paddlepaddle` 或 `pip3 install paddlepaddle` +* GPU版PaddlePaddle:`pip install paddlepaddle-gpu` 或 `pip3 install paddlepaddle-gpu` -## ***如何卸载*** +您可[验证是否安装成功](#check),如有问题请查看[FAQ](./FAQ.html) + +注: + +* pip与python版本对应。如果是python2.7, 建议使用`pip`命令; 如果是python3.x, 则建议使用`pip3`命令 +* `pip install paddlepaddle-gpu` 此命令将安装支持CUDA 8.0 cuDNN v7的PaddlePaddle,目前windows环境下暂不支持其他版本的CUDA和cuDNN。 + + +## 验证安装 +安装完成后您可以使用 `python` 或 `python3` 进入python解释器,然后使用`import paddle.fluid` 验证是否安装成功。 -* ***CPU版本的PaddlePaddle***: -请使用以下命令:`pip uninstall paddlepaddle` 或 `pip3 uninstall paddlepaddle` 卸载PaddlePaddle +## 如何卸载 -* ***GPU版本的PaddlePaddle***: -请使用以下命令:`pip uninstall paddlepaddle-gpu` 或 `pip3 uninstall paddlepaddle-gpu` 卸载PaddlePaddle +* ***CPU版本的PaddlePaddle***: `pip uninstall paddlepaddle` 或 `pip3 uninstall paddlepaddle` +* ***GPU版本的PaddlePaddle***: `pip uninstall paddlepaddle-gpu` 或 `pip3 uninstall paddlepaddle-gpu` diff --git a/doc/fluid/beginners_guide/install/install_script.md b/doc/fluid/beginners_guide/install/install_script.md new file mode 100644 index 000000000..4823b5907 --- /dev/null +++ b/doc/fluid/beginners_guide/install/install_script.md @@ -0,0 +1,53 @@ +# 辅助安装脚本 + +## 使用方法 + +下载脚本至本地后,使用命令`/bin/bash fast_install.sh`启动脚本 + +### Ubuntu和CentOS + +脚本会执行以下几步: + +1. GPU检测 + + 检测您的机器是否含有我们支持的GPU,如果有,会安装GPU版本的PaddlePaddle,否则会安装CPU版本。 + (PaddlePaddle目前支持NVIDIA[官网](https://developer.nvidia.com/cuda-gpus#collapseOne)列出的,算力7.0以下的GPU和v100系列的GPU) + +2. CUDA,cuDNN检测 + + 检测您的机器是否安装我们支持的CUDA,cuDNN,具体地: + + 1. 在`/usr/local/` 及其子目录下寻找 `cuda/cuda8/cuda9` 目录下的`version.txt`文件(通常如果您以默认方式安装了CUDA)。 如果提示未找到CUDA请使用命令`find / -name version.txt`找到您所需要的CUDA目录下的“version.txt”路径,然后按照提示输入。 + 2. 在`/usr` 及其子目录下寻找文件 `cudnn.h` , 如果您的cuDNN未安装在默认路径请使用命令`find / -name cudnn.h`寻找您希望使用的cuDNN版本的`cudnn.h`路径并按提示输入 + + 如果未找到相应文件,则会安装CPU版本的PaddlePaddle + +3. 选择数学库 +脚本默认会为您安装支持[MKL](https://software.intel.com/en-us/mkl)数学库的PaddlePaddle,如果您的机器不支持`MKL`,请选择安装支持[OPENBLAS](https://www.openblas.net)的PaddlePaddle + +4. 选择PaddlePaddle版本 +我们为您提供2种版本:开发版和稳定版,推荐您选择测试验证过的稳定版 + +5. 选择Python版本 +脚本默认会使用您机器中的Python,您也可以输入您希望使用的Python的路径 + +6. 检查[AVX](https://zh.wikipedia.org/zh-hans/AVX指令集)指令集 + +7. 使用[Python virtualenv](https://virtualenv.pypa.io/en/latest/) +脚本也支持按您的需求创建Python的虚拟环境 + +以上检查完成后就会为您安装对应您系统的PaddlePaddle了,安装一般需要1~2分钟会根据您的网络来决定,请您耐心等待。 + + +### MacOS + +脚本会执行以下几步: + +1. 选择PaddlePaddle版本 +我们为您提供2种版本:开发版和稳定版,推荐您选择测试验证过的稳定版 + +2. 检查Python版本 +由于MacOS自带的Python通常依赖于系统环境,因此我们不支持MacOS自带的Python环境,请重新从Python.org安装Python,然后根据提示输入您希望使用的Python的路径 + +3. 检查是否支持[AVX](https://zh.wikipedia.org/zh-hans/AVX指令集)指令集 + -- GitLab