From 0d020394a2ed98d12a361f116f977a0a83081e45 Mon Sep 17 00:00:00 2001 From: Cheerego <35982308+shanyi15@users.noreply.github.com> Date: Fri, 22 Feb 2019 17:36:32 +0800 Subject: [PATCH] thorough clean for doc (#644) (#645) * thorough clean * delete_DS_Store --- .../deploy/anakin/anakin_arm_benchmark.md | 56 - .../deploy/anakin/anakin_example.md | 38 - .../deploy/anakin/anakin_gpu_benchmark.md | 154 -- .../deploy/anakin/anakin_parser_design.md | 92 - .../deploy/anakin/anakin_run_on_arm.md | 193 -- .../deploy/anakin/anakin_tutorial.md | 645 ------ .../deploy/anakin/convert_paddle_to_anakin.md | 73 - .../deploy/anakin/how_to_add_anakin_op.md | 405 ---- .../how_to_support_new_device_in_anakin.md | 459 ----- .../advanced_usage/deploy/anakin/index_cn.rst | 29 - .../deploy/anakin/install_anakin.md | 76 - .../deploy/anakin/run_anakin_on_arm.md | 185 -- .../development/profiling/benchmark.rst | 120 -- .../profiling/gpu_profiling_cn.rst | 239 --- .../development/write_docs_cn.md | 204 +- .../basics/learning_materials.md | 54 - .../basics/learning_materials_en.md | 72 - doc/fluid/beginners_guide/index.rst | 5 - doc/fluid/beginners_guide/index_en.rst | 7 +- .../build_from_source_cn.rst | 225 -- .../build_from_source_en.rst | 237 --- .../build_and_install/docker_install_cn.rst | 146 -- .../build_and_install/docker_install_en.rst | 153 -- doc/fluid/build_and_install/index_cn.rst | 56 - doc/fluid/build_and_install/index_en.rst | 56 - doc/fluid/build_and_install/paddleci.png | Bin 40242 -> 0 bytes .../build_and_install/pip_install_cn.rst | 105 - .../build_and_install/pip_install_en.rst | 123 -- doc/fluid/dev/api_doc_std_cn.md | 221 -- doc/fluid/dev/api_doc_std_en.md | 227 --- doc/fluid/dev/ci_build_whl.png | Bin 287162 -> 0 bytes doc/fluid/dev/contribute_to_paddle_cn.md | 1 - doc/fluid/dev/contribute_to_paddle_en.md | 1 - doc/fluid/dev/index_cn.rst | 17 - doc/fluid/dev/index_en.rst | 14 - doc/fluid/dev/name_convention.md | 65 - doc/fluid/dev/new_op_cn.md | 452 ---- doc/fluid/dev/new_op_kernel.md | 121 -- doc/fluid/dev/op_markdown_format.md | 64 - doc/fluid/dev/releasing_process_cn.md | 195 -- doc/fluid/dev/releasing_process_en.md | 228 --- doc/fluid/dev/src/fc.py | 81 - doc/fluid/dev/support_new_device.md | 240 --- doc/fluid/dev/use_eigen_cn.md | 146 -- doc/fluid/dev/use_eigen_en.md | 146 -- doc/fluid/dev/versioning_en.md | 66 - doc/fluid/dev/write_docs_cn.md | 1 - doc/fluid/dev/write_docs_cn.rst | 1 - doc/fluid/dev/write_docs_en.rst | 1 - doc/fluid/faq/faq.rst | 12 - doc/fluid/faq/index_cn.rst | 9 - doc/fluid/faq/index_en.rst | 2 - .../Developer's_Guide_to_Paddle_Fluid.md | 1814 ----------------- doc/fluid/getstarted/concepts/index_cn.rst | 4 - doc/fluid/getstarted/concepts/index_en.rst | 4 - .../getstarted/concepts/reader/README.md | 206 -- .../concepts/save_model/model_format.md | 76 - doc/fluid/getstarted/index_cn.rst | 20 - doc/fluid/getstarted/index_en.rst | 19 - doc/fluid/getstarted/quickstart_cn.rst | 45 - doc/fluid/getstarted/quickstart_en.rst | 49 - .../howto/cluster/fluid_cluster_train_cn.md | 181 -- .../howto/cluster/fluid_cluster_train_en.md | 153 -- doc/fluid/howto/cluster/fluid_recordio.md | 127 -- .../howto/cluster/nccl2_rdma_training.md | 110 - doc/fluid/howto/index_cn.rst | 8 - doc/fluid/howto/index_en.rst | 7 - .../inference/build_and_install_lib_cn.rst | 97 - doc/fluid/howto/inference/index_cn.rst | 8 - .../inference_support_in_fluid_cn.md | 304 --- .../howto/optimization/benchmark/index_cn.rst | 8 - .../howto/optimization/benchmark/index_en.rst | 8 - doc/fluid/howto/optimization/index_cn.rst | 9 - doc/fluid/howto/optimization/index_en.rst | 9 - doc/fluid/howto/optimization/pprof_1.png | Bin 352710 -> 0 bytes doc/fluid/howto/optimization/pprof_2.png | Bin 194000 -> 0 bytes doc/fluid/howto/optimization/timeline.jpeg | Bin 70606 -> 0 bytes doc/fluid/howto/optimization/tracing.jpeg | Bin 30668 -> 0 bytes doc/fluid/howto/performance/error_clip.md | 92 - .../howto/performance/images/profiler.png | Bin 51116 -> 0 bytes doc/fluid/howto/performance/profiler.md | 116 -- .../images/multigpu_allreduce.graffle | Bin 5489 -> 0 bytes .../third_party/images/multigpu_allreduce.png | Bin 110982 -> 0 bytes .../images/multigpu_before_convert.graffle | Bin 3056 -> 0 bytes .../images/multigpu_before_convert.png | Bin 33557 -> 0 bytes doc/fluid/howto/third_party/mkldnn_fluid.md | 149 -- doc/fluid/howto/third_party/paddle_nccl.md | 65 - doc/fluid/index_en.rst | 3 +- doc/fluid/overview.md | 25 - doc/fluid/read_source.md | 67 - 90 files changed, 205 insertions(+), 10096 deletions(-) delete mode 100644 doc/fluid/advanced_usage/deploy/anakin/anakin_arm_benchmark.md delete mode 100644 doc/fluid/advanced_usage/deploy/anakin/anakin_example.md delete mode 100644 doc/fluid/advanced_usage/deploy/anakin/anakin_gpu_benchmark.md delete mode 100644 doc/fluid/advanced_usage/deploy/anakin/anakin_parser_design.md delete mode 100644 doc/fluid/advanced_usage/deploy/anakin/anakin_run_on_arm.md delete mode 100644 doc/fluid/advanced_usage/deploy/anakin/anakin_tutorial.md delete mode 100644 doc/fluid/advanced_usage/deploy/anakin/convert_paddle_to_anakin.md delete mode 100644 doc/fluid/advanced_usage/deploy/anakin/how_to_add_anakin_op.md delete mode 100644 doc/fluid/advanced_usage/deploy/anakin/how_to_support_new_device_in_anakin.md delete mode 100644 doc/fluid/advanced_usage/deploy/anakin/index_cn.rst delete mode 100644 doc/fluid/advanced_usage/deploy/anakin/install_anakin.md delete mode 100644 doc/fluid/advanced_usage/deploy/anakin/run_anakin_on_arm.md delete mode 100644 doc/fluid/advanced_usage/development/profiling/benchmark.rst delete mode 100644 doc/fluid/advanced_usage/development/profiling/gpu_profiling_cn.rst mode change 120000 => 100644 doc/fluid/advanced_usage/development/write_docs_cn.md delete mode 100644 doc/fluid/beginners_guide/basics/learning_materials.md delete mode 100644 doc/fluid/beginners_guide/basics/learning_materials_en.md delete mode 100644 doc/fluid/build_and_install/build_from_source_cn.rst delete mode 100644 doc/fluid/build_and_install/build_from_source_en.rst delete mode 100644 doc/fluid/build_and_install/docker_install_cn.rst delete mode 100644 doc/fluid/build_and_install/docker_install_en.rst delete mode 100644 doc/fluid/build_and_install/index_cn.rst delete mode 100644 doc/fluid/build_and_install/index_en.rst delete mode 100644 doc/fluid/build_and_install/paddleci.png delete mode 100644 doc/fluid/build_and_install/pip_install_cn.rst delete mode 100644 doc/fluid/build_and_install/pip_install_en.rst delete mode 100644 doc/fluid/dev/api_doc_std_cn.md delete mode 100644 doc/fluid/dev/api_doc_std_en.md delete mode 100644 doc/fluid/dev/ci_build_whl.png delete mode 120000 doc/fluid/dev/contribute_to_paddle_cn.md delete mode 120000 doc/fluid/dev/contribute_to_paddle_en.md delete mode 100644 doc/fluid/dev/index_cn.rst delete mode 100644 doc/fluid/dev/index_en.rst delete mode 100644 doc/fluid/dev/name_convention.md delete mode 100644 doc/fluid/dev/new_op_cn.md delete mode 100644 doc/fluid/dev/new_op_kernel.md delete mode 100644 doc/fluid/dev/op_markdown_format.md delete mode 100644 doc/fluid/dev/releasing_process_cn.md delete mode 100644 doc/fluid/dev/releasing_process_en.md delete mode 100644 doc/fluid/dev/src/fc.py delete mode 100644 doc/fluid/dev/support_new_device.md delete mode 100644 doc/fluid/dev/use_eigen_cn.md delete mode 100644 doc/fluid/dev/use_eigen_en.md delete mode 100644 doc/fluid/dev/versioning_en.md delete mode 120000 doc/fluid/dev/write_docs_cn.md delete mode 120000 doc/fluid/dev/write_docs_cn.rst delete mode 100644 doc/fluid/dev/write_docs_en.rst delete mode 100644 doc/fluid/faq/faq.rst delete mode 100644 doc/fluid/faq/index_cn.rst delete mode 100644 doc/fluid/faq/index_en.rst delete mode 100644 doc/fluid/getstarted/Developer's_Guide_to_Paddle_Fluid.md delete mode 100644 doc/fluid/getstarted/concepts/index_cn.rst delete mode 100644 doc/fluid/getstarted/concepts/index_en.rst delete mode 100644 doc/fluid/getstarted/concepts/reader/README.md delete mode 100644 doc/fluid/getstarted/concepts/save_model/model_format.md delete mode 100644 doc/fluid/getstarted/index_cn.rst delete mode 100644 doc/fluid/getstarted/index_en.rst delete mode 100644 doc/fluid/getstarted/quickstart_cn.rst delete mode 100644 doc/fluid/getstarted/quickstart_en.rst delete mode 100644 doc/fluid/howto/cluster/fluid_cluster_train_cn.md delete mode 100644 doc/fluid/howto/cluster/fluid_cluster_train_en.md delete mode 100644 doc/fluid/howto/cluster/fluid_recordio.md delete mode 100644 doc/fluid/howto/cluster/nccl2_rdma_training.md delete mode 100644 doc/fluid/howto/index_cn.rst delete mode 100644 doc/fluid/howto/index_en.rst delete mode 100644 doc/fluid/howto/inference/build_and_install_lib_cn.rst delete mode 100644 doc/fluid/howto/inference/index_cn.rst delete mode 100644 doc/fluid/howto/inference/inference_support_in_fluid_cn.md delete mode 100644 doc/fluid/howto/optimization/benchmark/index_cn.rst delete mode 100644 doc/fluid/howto/optimization/benchmark/index_en.rst delete mode 100644 doc/fluid/howto/optimization/index_cn.rst delete mode 100644 doc/fluid/howto/optimization/index_en.rst delete mode 100644 doc/fluid/howto/optimization/pprof_1.png delete mode 100644 doc/fluid/howto/optimization/pprof_2.png delete mode 100644 doc/fluid/howto/optimization/timeline.jpeg delete mode 100644 doc/fluid/howto/optimization/tracing.jpeg delete mode 100644 doc/fluid/howto/performance/error_clip.md delete mode 100644 doc/fluid/howto/performance/images/profiler.png delete mode 100644 doc/fluid/howto/performance/profiler.md delete mode 100644 doc/fluid/howto/third_party/images/multigpu_allreduce.graffle delete mode 100644 doc/fluid/howto/third_party/images/multigpu_allreduce.png delete mode 100644 doc/fluid/howto/third_party/images/multigpu_before_convert.graffle delete mode 100644 doc/fluid/howto/third_party/images/multigpu_before_convert.png delete mode 100644 doc/fluid/howto/third_party/mkldnn_fluid.md delete mode 100644 doc/fluid/howto/third_party/paddle_nccl.md delete mode 100644 doc/fluid/overview.md delete mode 100644 doc/fluid/read_source.md diff --git a/doc/fluid/advanced_usage/deploy/anakin/anakin_arm_benchmark.md b/doc/fluid/advanced_usage/deploy/anakin/anakin_arm_benchmark.md deleted file mode 100644 index e8701b2b5..000000000 --- a/doc/fluid/advanced_usage/deploy/anakin/anakin_arm_benchmark.md +++ /dev/null @@ -1,56 +0,0 @@ -# Anakin ARM 性能测试 - -## 测试环境和参数: -+ 测试模型Mobilenetv1, mobilenetv2, mobilenet-ssd -+ 采用android ndk交叉编译,gcc 4.9,enable neon, ABI: armveabi-v7a with neon -mfloat-abi=softfp -+ 测试平台 - - 荣耀v9(root): 处理器:麒麟960, 4 big cores in 2.36GHz, 4 little cores in 1.8GHz - - nubia z17:处理器:高通835, 4 big cores in 2.36GHz, 4 little cores in 1.9GHz - - 360 N5:处理器:高通653, 4 big cores in 1.8GHz, 4 little cores in 1.4GHz -+ 多线程:openmp -+ 时间:warmup10次,运行10次取均值 -+ ncnn版本:来源于github的master branch中commits ID:307a77f04be29875f40d337cfff6df747df09de6(msg:convert LogisticRegressionOutput)版本 -+ TFlite版本:来源于github的master branch中commits ID:65c05bc2ac19f51f7027e66350bc71652662125c(msg:Removed unneeded file copy that was causing failure in Pi builds)版本 - -在BenchMark中本文将使用**`ncnn`**、**`TFlite`**和**`Anakin`**进行性能对比分析 - -## BenchMark model - -> 注意在性能测试之前,请先将测试model通过[External Converter](#10003)转换为Anakin model -> 对这些model,本文在ARM上进行多线程的单batch size测试。 - -- [Mobilenet v1](#11) *caffe model 可以在[这儿](https://github.com/shicai/MobileNet-Caffe)下载* -- [Mobilenet v2](#22) *caffe model 可以在[这儿](https://github.com/shicai/MobileNet-Caffe)下载* -- [mobilenet-ssd](#33) *caffe model 可以在[这儿](https://github.com/chuanqi305/MobileNet-SSD)下载* - -### mobilenetv1 - - |platform | Anakin (1) | Anakin (2) | Anakin (4) | ncnn (1) | ncnn (2) | ncnn (4) | TFlite (1) | TFlite (2) | TFlite (4)| - |:---: | :---: | :---: | :---:| :---:| :---:| :---:| :---:| :---:| :---:| - |麒麟960|107.7ms|61.1ms|38.2ms|152.8ms|85.2ms|51.9ms|152.6ms|nan|nan| - |高通835|105.7ms|63.1ms|~~46.8ms~~|152.7ms|87.0ms|~~92.7ms~~|146.9ms|nan|nan| - |高通653|120.3ms|64.2ms|46.6ms|202.5ms|117.6ms|84.8ms|158.6ms|nan|nan| - -### mobilenetv2 - - |platform | Anakin (1) | Anakin (2) | Anakin (4) | ncnn (1) | ncnn (2) | ncnn (4) | TFlite (1) | TFlite (2) | TFlite (4)| - |:---: | :---: | :---: | :---:| :---:| :---:| :---:| :---:| :---:| :---:| - |麒麟960|93.1ms|53.9ms|34.8ms|144.4ms|84.3ms|55.3ms|100.6ms|nan|nan| - |高通835|93.0ms|55.6ms|41.1ms|139.1ms|88.4ms|58.1ms|95.2ms|nan|nan| - |高通653|106.6ms|64.2ms|48.0ms|199.9ms|125.1ms|98.9ms|108.5ms|nan|nan| - -### mobilenet-ssd - - |platform | Anakin (1) | Anakin (2) | Anakin (4) | ncnn (1) | ncnn (2) | ncnn (4) | TFlite (1) | TFlite (2) | TFlite (4)| - |:---: | :---: | :---: | :---:| :---:| :---:| :---:| :---:| :---:| :---:| - |麒麟960|213.9ms|120.5ms|74.5ms|307.9ms|166.5ms|104.2ms|nan|nan|nan| - |高通835|213.0ms|125.7ms|~~98.4ms~~|292.9ms|177.9ms|~~167.8ms~~|nan|nan|nan| - |高通653|236.0ms|129.6ms|96.0ms|377.7ms|228.9ms|165.0ms|nan|nan|nan - -## How to run those Benchmark models? - - 1. 首先, 使用[External Converter](./convert_paddle_to_anakin.html)对caffe model 进行转换 - 2. 然后将转换后的Anakin model和编译好的benchmark_arm 二进制文件通过'adb push'命令上传至测试机 - 3. 接着在测试机含有Anakin model的目录中运行'./benchmark_arm ./ anakin_model.anakin.bin 1 10 10 1' 命令 - 4. 最后,终端显示器上将会打印该模型的运行时间 - 5. 其中运行命令的参数个数和含义可以通过运行'./benchmark_arm'看到 diff --git a/doc/fluid/advanced_usage/deploy/anakin/anakin_example.md b/doc/fluid/advanced_usage/deploy/anakin/anakin_example.md deleted file mode 100644 index 3cd684982..000000000 --- a/doc/fluid/advanced_usage/deploy/anakin/anakin_example.md +++ /dev/null @@ -1,38 +0,0 @@ -# Anakin 运行模型示例 - -Anakin目前只支持NCHW的格式 - -示例文件在test/framework/net下 - -## 在NV的GPU上运行CNN模型 - -示例文件为打开example_nv_cnn_net.cpp,整体流程如下: - -- 将模型的的path设置为anakin模型的路径,初始化NV平台的图对象。 anakin模型可以通过转换器转化caffe或Paddle的模型得到 -- 根据模型设置网络图的输入尺寸,进行图优化 -- 根据优化后的网络图初始化网络执行器 -- 取出网络的输入tensor,将数据拷贝到输入tensor -- 运行推导 -- 取出网络的输出tensor - -以NV平台为例演示Anakin框架的使用方法,注意编译时需要打开GPU编译开关 - -## 在X86上运行RNN模型 - -示例文件为example_x86_rnn_net.cpp - -整体流程与在NV的GPU上运行CNN模型相似,不同之处如下: - -- 使用X86标识初始化图对象和网络执行器对象 -- rnn模型的输入尺寸是可变的,初始化图时的输入维度是维度的最大值,输入维度N代表总的词的个数。还需要设置输入tensor的seq_offset来标示这些词是如何划分为句子的,如{0,5,12}表示共有12个词,其中第0到第4个词是第一句话,第5到第11个词是第二句话 - -以X86平台为例演示Anakin框架的使用方法,注意编译时需要打开X86编译开关 - -## 在NV的GPU上使用Anakin的线程池运行CNN模型 - -示例文件为example_nv_cnn_net_multi_thread.cpp ,示例使用worker的同步预测接口 - -整体流程与在NV的GPU上运行CNN模型相似,不同之处如下: - -- 用模型地址和线程池大小初始化worker对象 -- 将输入tensor注入任务队列,获得输出tensor diff --git a/doc/fluid/advanced_usage/deploy/anakin/anakin_gpu_benchmark.md b/doc/fluid/advanced_usage/deploy/anakin/anakin_gpu_benchmark.md deleted file mode 100644 index 159286481..000000000 --- a/doc/fluid/advanced_usage/deploy/anakin/anakin_gpu_benchmark.md +++ /dev/null @@ -1,154 +0,0 @@ -# Anakin GPU 性能测试 - -## 环境: - -> CPU: `12-core Intel(R) Xeon(R) CPU E5-2620 v2 @2.10GHz` -> GPU: `Tesla P4` -> cuDNN: `v7` - - -## anakin 对比对象: - -**`Anakin`** 将与高性能的推理引擎 **`NVIDIA TensorRT 3`** 进行比较 - -## Benchmark Model - -> 注意在性能测试之前,请先将测试model通过 `External Converter` 工具转换为Anakin model -> 对这些model,本文在GPU上进行单线程单GPU卡的性能测试。 - -- [Vgg16](#1) *caffe model 可以在[这儿](https://gist.github.com/jimmie33/27c1c0a7736ba66c2395)下载* -- [Yolo](#2) *caffe model 可以在[这儿](https://github.com/hojel/caffe-yolo-model)下载* -- [Resnet50](#3) *caffe model 可以在[这儿](https://github.com/KaimingHe/deep-residual-networks#models)下载* -- [Resnet101](#4) *caffe model 可以在[这儿](https://github.com/KaimingHe/deep-residual-networks#models)下载* -- [Mobilenet v1](#5) *caffe model 可以在[这儿](https://github.com/shicai/MobileNet-Caffe)下载* -- [Mobilenet v2](#6) *caffe model 可以在[这儿](https://github.com/shicai/MobileNet-Caffe)下载* -- [RNN](#7) *暂不支持* - -### VGG16 - -- Latency (`ms`) of different batch - -| BatchSize | TensorRT | Anakin | -| --- | --- | --- | -| 1 | 8.53945 | 8.18737 | -| 2 | 14.2269 | 13.8976 | -| 4 | 24.2803 | 21.7976 | -| 8 | 45.6003 | 40.319 | - -- GPU Memory Used (`MB`) - -| BatchSize | TensorRT | Anakin | -| --- | --- | --- | -| 1 | 1053.88 | 762.73 | -| 2 | 1055.71 | 762.41 | -| 4 | 1003.22 | 832.75 | -| 8 | 1108.77 | 926.9 | - - -### Yolo - -- Latency (`ms`) of different batch - -| BatchSize | TensorRT | Anakin | -| --- | --- | --- | -| 1 | 8.41606| 7.07977 | -| 2 | 16.6588| 15.2216 | -| 4 | 31.9955| 30.5102 | -| 8 | 66.1107 | 64.3658 | - -- GPU Memory Used (`MB`) - -| BatchSize | TensorRT | Anakin | -| --- | --- | --- | -| 1 | 1054.71 | 299.8 | -| 2 | 951.51 | 347.47 | -| 4 | 846.9 | 438.47 | -| 8 | 1042.31 | 515.15 | - -### Resnet50 - -- Latency (`ms`) of different batch - -| BatchSize | TensorRT | Anakin | -| --- | --- | --- | -| 1 | 4.10063 | 3.33845 | -| 2 | 6.10941 | 5.54814 | -| 4 | 9.90233 | 10.2763 | -| 8 | 17.3287 | 20.0783 | - -- GPU Memory Used (`MB`) - -| BatchSize | TensorRT | Anakin | -| --- | --- | --- | -| 1 | 1059.15 | 299.86 | -| 2 | 1077.8 | 340.78 | -| 4 | 903.04 | 395 | -| 8 | 832.53 | 508.86 | - -### Resnet101 - -- Latency (`ms`) of different batch - -| BatchSize | TensorRT | Anakin | -| --- | --- | --- | -| 1 | 7.29828 | 5.672 | -| 2 | 11.2037 | 9.42352 | -| 4 | 17.9306 | 18.0936 | -| 8 | 31.4804 | 35.7439 | - -- GPU Memory Used (`MB)` - -| BatchSize | TensorRT | Anakin | -| --- | --- | --- | -| 1 | 1161.94 | 429.22 | -| 2 | 1190.92 | 531.92 | -| 4 | 994.11 | 549.7 | -| 8 | 945.47 | 653.06 | - -### MobileNet V1 - -- Latency (`ms`) of different batch - -| BatchSize | TensorRT | Anakin | -| --- | --- | --- | -| 1 | 1.52692 | 1.39282 | -| 2 | 1.98091 | 2.05788 | -| 4 | 3.2705 | 4.03476 | -| 8 | 5.15652 | 7.06651 | - -- GPU Memory Used (`MB`) - -| BatchSize | TensorRT | Anakin | -| --- | --- | --- | -| 1 | 1144.35 | 99.6 | -| 2 | 1160.03 | 199.75 | -| 4 | 1098 | 184.33 | -| 8 | 990.71 | 232.11 | - -### MobileNet V2 - -- Latency (`ms`) of different batch - -| BatchSize | TensorRT | Anakin | -| --- | --- | --- | -| 1 | 1.95961 | 1.78249 | -| 2 | 2.8709 | 3.01144 | -| 4 | 4.46131 | 5.43946 | -| 8 | 7.161 | 10.2081 | - -- GPU Memory Used (`MB`) - -| BatchSize | TensorRT | Anakin | -| --- | --- | --- | -| 1 | 1154.69 | 195.25 | -| 2 | 1187.25 | 227.6 | -| 4 | 1053 | 241.75 | -| 8 | 1062.48 | 352.18 | - - -## How to run those Benchmark models - -1. 首先, 使用[External Converter](./convert_paddle_to_anakin.html)对caffe model 进行转换 -2. 然后跳转至 *source_root/benchmark/CNN* 目录下,使用 'mkdir ./models'创建存放模型的目录,并将转换好的Anakin模型放在该目录下 -3. 运行脚本 `sh run.sh`,运行结束后,该模型的运行时间将会显示到终端上 -4. 如果你想获取每层OP的运行时间,你只用将 CMakeLists.txt 中的`ENABLE_OP_TIMER` 设置为 `YES` 即可 diff --git a/doc/fluid/advanced_usage/deploy/anakin/anakin_parser_design.md b/doc/fluid/advanced_usage/deploy/anakin/anakin_parser_design.md deleted file mode 100644 index e2ec0c68d..000000000 --- a/doc/fluid/advanced_usage/deploy/anakin/anakin_parser_design.md +++ /dev/null @@ -1,92 +0,0 @@ -# Parser的编写指南 - - Parser是一种网络框架转换工具,将其他框架如Caffe、TensorFlow的网络结构转换为Anakin网络结构图,然后对转换后的Anakin图进行预测处理 - - 本文主要介绍Parser功能的框架结构和根据已有的网络框架改写Parser,以解析得到Anakin框架图,进行Anakin预测 - - 下文称Anakin为AK,运算操作为OP,本文参考TensorFlow的Parser编写,参考代码目录为tools/external_converter_v2/parser/tensorflow - -## Parser的功能和执行流程 - - Parser功能是将其他深度学习框架(如Caffe,TensorFlow,ONNX)的模型转换为AK的模型 - - 对AK的作用是屏蔽不同框架间的差异,这种差异包括模型存储、OP的定义、图差异 - - 因此Parser的执行流程是: - - - 将源框架的模型载入Parser - - 将原框架的图解析为AK中的OP节点和OP节点的连接关系 - - 进行OP定义的转换和图优化 - - 将符合AK标准的图写入protobuf - -## Parser的目录结构 - - Parser工具在tools/external_converter_v2/parser目录下 - - Parser的目录主要包含3部分: - - - Parser的运行配置文件包括 config.py, config.yaml, converter.py, 用户只用执行converter.py,Parser就会按照config.yaml中的声明去解析模型 - - Parser的公共定义,包括operations,pbs,proto三个目录。Parser的公共工具函数 graph*.py logger.py utils.py - - 各个框架对应的Parser,其目录的命名方式为框架名,如Caffe, TensorFlow - -## Parser的编写流程 - -### 1、声明你的Parser - - - 在config.yaml中填写你的Parser运行的必要信息,包括ProtoPath和SavePath等。OPTIONS/Framework改为你的Parser的类型,TARGET下填写对应的参数列表 - - 添加你的Parser目录,如TensorFlow,导出你的Parser符号。注意,Parser的框架默认调用你的Parser类中的__call__方法来执行解析,这个方法需要返回填写完毕的GraphProtoIO对象 - - 在config.py中Configuration下__init__函数中增加对你的Parser的调用,将yaml中读取的配置信息传给你的Parser,此处调用你的Parser中的__init__方法 - -### 2、添加你的Parser主体 - - 可以参考parser_tf.py - - - 你需要在Parser主体构造时获取模型路径,input,ouput名字等解析必须的信息 - - 在__call__中返回填写好的GraphProtoIO对象,该对象为填写protobuf的辅助工具 - - 建议Parser的解析过程分成三部分,先将原框架的模型载入并转换为一种便于修改的中间的图形式;对中间图修改使得图满足AK的要求;将满足要求的中间图利用NodeProtoIO和GraphProtoIO这两个辅助类填入protobuf,具体细节可以参考parser_tf - -### 3、读取原始模型,并将模型转换为中间类型 - - 可以参考parse_tf_2_med.py - - - 这一步与原始框架结合紧密,你可能需要import原始框架的工具函数来完成模型的裁剪、固定、加载等操作 - - 大部分的框架都是使用tensor来连接OP的,但AK中是OP直接相连,这点需要注意 - - AK的shape默认是4维的,有的参数的shape不足4维,需要Parser补全 - -### 4、对中间类型的图进行优化 - - 可以参考med_graph.py - - - 由于AK不支持普通OP多输出的情况,需要在多输出的OP后面补上Splite类型的OP节点 - - 对于Convlution后接Batchnorm这种可以合并又不会导致OP定义改变的情况,需要Parser在这一步做掉 - - AK规定所有的输入类型OP的名字必须是input_x这种命名方式,其中x为从0开始的数字 - -### 5、将中间类型的图以GraphProtoIO的方式保存 - - 可以参考parse_med_2_ak.py 和 parser_tf.py - - - 你首先需要构造Node节点,Node节点的名字是OP的名字(如conv2d_1_a_0),Node节点中OP成员变量的名字是Node节点的类型(如Convlution) - - Node节点需要按照输入的顺序用Node的add_in方法填写输入Node的名字,add_out方法按顺序填写输出Node的名字 - - 通过调用GraphProtoIO的add_node方法将构造好的Node的__call__方法的返回值作为参数,将Node节点加入AK的graph中 - - 调用GraphProtoIO的add_in_edge和add_out_edge完成AK图中OP间关系的构建。如果Node中的in和out填写正确,你也可以通过调用GraphProtoIO的format_edge_from_nodes方法完成这个工作 - - AK的模型需要Parser给出输出Node的名字,使用GraphProtoIO的add_out方法填写输出Node的名字 - -### 6、检查模型解析的正确性 - - - 默认的config.yaml配置会在解析结束后启动一个web服务器展示解析后的AK模型图,你需要对比原框架的模型图进行验证。这里最容易出现的错误是边关系的错误,表现为图非常乱,你需要逐条边地检查错误;第二个容易出错的地方是参数漏填,需要你检查OP中的属性 - - 将解析后的模型放入AK中执行,使用相同的输入,原框架与AK有相同的输出。若果输出不一致可以开启AK的DEBUG模式,在net.cpp中将没层的输出打印;如果AK在解析阶段陷入死循环,大概率是边的关系出错 - -## 如何添加新OP - - - 需要在AK代码中加入该OP的实现,包括对应设备Saber的OP,Saber单测和Framework中的OP - - 根据Framework的OP在ops.py中添加Parser公共的OP定义 - - 从原框架的模型中解析出该OP的节点,并在AK的graph中填入该OP节点 - -## AK模型与其他框架模型的不同之处 - - + AK模型与caffe的模型相似,因此与其他模型有很多不同的地方,需要Parser在解析过程中处理掉 - + 最大的不同是与PaddlePaddle或TensorFlow的模型中OP粒度很细,而AK的模型中OP的粒度很粗(目的是为了节省访存开销)。这会导致解析这些框架的模型时存在大量的合并操作 - + 其次是OP的行为不同,如TensorFlow中Pooling默认都是exclusive的,而AK中是inclusive的。TensorFlow的Padding,如果是奇数pad,则在右方和下方多pad,而AK是在左方和上方多Pad - + AK默认的布局是NCHW,如果其他框架的OP是其他形式的,需要在Parser中做weights的布局转换,并处理reshape的问题 - + AK中有的weights是需要预先做布局转换的(如GRU,LSTM),AK中也支持同一OP的不同算法,如(GRU,Pooling) - diff --git a/doc/fluid/advanced_usage/deploy/anakin/anakin_run_on_arm.md b/doc/fluid/advanced_usage/deploy/anakin/anakin_run_on_arm.md deleted file mode 100644 index cdebd4ae0..000000000 --- a/doc/fluid/advanced_usage/deploy/anakin/anakin_run_on_arm.md +++ /dev/null @@ -1,193 +0,0 @@ -## ARM 源码编译 Anakin ## - -目前Anakin支持ARM Android平台,采用Android NDK交叉编译工具链,已在mac os和centos上编译和测试通过。 - -### 安装概览 ### - -* [系统需求](#0001) -* [安装第三方依赖](#0002) -* [Anakin源码编译](#0003) -* [验证安装](#0004) - - -### 1. 系统需求 ### - -* 宿主机: linux, mac -* cmake 3.8.2+ -* Android NDK r14, Linux 版本[从这里下载](https://dl.google.com/android/repository/android-ndk-r14b-linux-x86_64.zip) - -### 2. 安装第三方依赖 ### - -- 2.1 protobuf3.4.0 - - 源码从这里[下载](https://github.com/google/protobuf/releases/tag/v3.4.0) - - - 2.1.1 为宿主机编译protobuf - - ```bash - $ tar -xzf protobuf-3.4.0.tar.gz - $ cd protobuf-3.4.0 - $ ./autogen.sh - $ ./configure - $ make - $ make check - $ make install - ``` - - 上述 $make install 执行后,可在 `/usr/local/include/google` 找到 libprotobuf 所需的头文件,将整个google文件夹拷贝至Anakin/third-party/arm-android/protobuf/下, 然后将已经生成文件清除。 - - 如有问题,请点[这里](https://github.com/google/protobuf/blob/v3.4.0/src/README.md)。 - - ```bash - $ make distclean - ``` - - - 2.1.1 交叉编译Android`armeabi-v7a`的protobuf,注意设置ANDROID_NDK的路径,以及ARCH_ABI、HOSTOSN的值 - - ```bash - - $ export ANDROID_NDK=your_ndk_path - $ ARCH_ABI="arm-linux-androideabi-4.9" - $ HOSTOSN="darwin-x86_64" - $ export SYSROOT=$ANDROID_NDK/platforms/android-9/arch-arm - $ export PREBUILT=$ANDROID_NDK/toolchains/$ARCH_ABI - $ export LDFLAGS="--sysroot=$SYSROOT" - $ export LD="$ANDROID_NDK/toolchains/$ARCH_ABI/prebuilt/$HOSTOSN/arm-linux-androideabi/bin/ld $LDFLAGS" - $ export LIBS="-llog $ANDROID_NDK/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/libgnustl_static.a" - $ export CPPFLAGS="" - $ export INCLUDES="-I$ANDROID_NDK/sources/cxx-stl/gnu-libstdc++/4.9/include/ -I$ANDROID_NDK/platforms/android-9/arch-arm/usr/include/ -I$ANDROID_NDK/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include/" - $ export CXXFLAGS="-march=armv7-a -mfloat-abi=softfp -DGOOGLE_PROTOBUF_NO_RTTI --sysroot=$SYSROOT" - $ export CCFLAGS="$CXXFLAGS" - $ export CXX="$PREBUILT/prebuilt/$HOSTOSN/bin/arm-linux-androideabi-g++ $CXXFLAGS" - $ export CC="$CXX" - $ export RANLIB="$ANDROID_NDK/toolchains/$ARCH_ABI/prebuilt/$HOSTOSN/bin/arm-linux-androideabi-ranlib" - $ ./autogen.sh - $ ./configure --host=arm-linux-androideabi --with-sysroot=$SYSROOT --enable-cross-compile --with-protoc=protoc --disable-shared CXX="$CXX" CC="$CC" LD="$LD" - $ make - ``` - - 编译生成 *.a 静态库,若希望编译*.so 动态链接库 ,请在./configure参数中改--disable-shared为--disable-static --enable-shared - - 生成文件在`src/.libs/`下,将生成的文件拷贝至`Anakin/third-party/arm-android/protobuf/lib`下 - - 在[cmake](../../cmake/find_modules.cmake)中更新`ARM_RPOTO_ROOT`的路径。 - - ```cmake - set(ARM_RPOTO_ROOT "${CMAKE_SOURCE_DIR}/third-party/arm-android/protobuf") - ``` - -- 2.2 opencv 2.4.3+(optional) - - Anakin只在examples示例中使用opencv - - Android系统的opencv从[这里下载](https://opencv.org/releases.html) - - 解压后将 `3rdparty/libs/armeabi-v7a`中的库文件拷贝到`libs/armeabi-v7a` - - 在[cmake](../../cmake/find_modules.cmake)中搜索`anakin_find_opencv` - - 并设置 `include_directories` 和 `LINK_DIRECTORIES`为自己安装的库的路径 - - ```cmake - include_directories(${CMAKE_SOURCE_DIR}/third-party/arm-android/opencv/sdk/native/jni/include/) - LINK_DIRECTORIES(${CMAKE_SOURCE_DIR}/third-party/arm-android/opencv/sdk/native/libs/armeabi-v7a/) - ``` - -### 3. Anakin源码编译 ### - -#### 编译Android版本 - -克隆[源码](https://github.com/PaddlePaddle/Anakin/tree/arm) - -```bash - cd your_dir - git clone https://github.com/PaddlePaddle/Anakin.git - cd Anakin - git fetch origin arm - git checkout arm -``` - -修改`android_build.sh` - - - 修改NDK路径 - - ```bash - #modify "your_ndk_path" to your NDK path - export ANDROID_NDK=your_ndk_path - ``` - - - 修改ARM 处理器架构 - - 对于32位ARM处理器, 将ANDROID_ABI 设置为 `armeabi-v7a with NEON` - 对于64位ARM处理器, 可以将ANDROID_ABI 设置为 `armeabi-v7a with NEON`或者`arm64-v8a` - 目前我们只支持 `armeabi-v7a with NEON`;`arm64-v8a` 还在开发中 - - ```bash - -DANDROID_ABI="armeabi-v7a with NEON" - ``` - -- 设置Android API - - 根据Android系统的版本设置API level, 例如API Level 21 -> Android 5.0.1 - - ```bash - -DANDROID_NATIVE_API_LEVEL=21 - ``` - -- 选择编译静态库或动态库 - - 设置`BUILD_SHARED=NO`编译静态库 - 设置`BUILD_SHARED=YES`编译动态库 - - ```bash - -DBUILD_SHARED=NO - ``` - -- OpenMP多线程支持 - - 设置`USE_OPENMP=YES`开启OpenMP多线程 - - ```bash - -DUSE_OPENMP=YES - ``` - -- 编译单测文件 - - 设置`BUILD_WITH_UNIT_TEST=YES`将会编译单测文件 - - ```bash - -DBUILD_WITH_UNIT_TEST=YES - ``` - -- 编译示例文件 - - 设置`BUILD_EXAMPLES=YES`将会编译示例文件 - ```bash - -DBUILD_EXAMPLES=YES - ``` - -- 开启opencv - - 如果使用opencv,设置`USE_OPENCV=YES` - - ```bash - -DUSE_OPENCV=YES - ``` - -- 开始编译 - - 运行脚本 `android_build.sh` 将自动编译Anakin - - ```bash - ./android_build.sh - ``` - -### 4. 验证安装 ### - -编译好的库会放在目录`${Anakin_root}/output`下; - -编译好的单测文件会放在`${Anakin_root}/output/unit_test`目录下; - -编译好的示例文件会放在`${Anakin_root}/output/examples`目录下。 - -对于Android系统,打开设备的调试模式,通过ADB可以访问的目录是`data/local/tmp`,通过ADB push将测试文件、模型和数据发送到设备目录, 运行测试文件。 diff --git a/doc/fluid/advanced_usage/deploy/anakin/anakin_tutorial.md b/doc/fluid/advanced_usage/deploy/anakin/anakin_tutorial.md deleted file mode 100644 index 1658aae63..000000000 --- a/doc/fluid/advanced_usage/deploy/anakin/anakin_tutorial.md +++ /dev/null @@ -1,645 +0,0 @@ -# Anakin 使用教程 ## - -本教程将会简略的介绍Anakin的工作原理,一些基本的Anakin API,以及如何调用这些API。 - -## 内容 ### - -- [Anakin的工作原理](#principle) -- [Anakin APIs](#api) -- [示例代码](#example) - -## Anakin的工作原理 ### - -![Anakin_principle](../pics/anakin_fm_ch.png) - -用Anakin来进行前向计算主要分为三个步骤: - - - 将外部模型通过[Anakin Parser](./convert_paddle_to_anakin.html)解析为Anakin模型 - 在使用Anakin之前,用户必须将所有其他模型转换成Anakin模型,我们提供了转换脚本,用户可通过[Anakin Parser](./convert_paddle_to_anakin.html)进行模型转换。 - - 生成Anakin计算图 - 加载Anakin模型生成原始计算图,然后需要对原始计算图进行优化。你只需要调用相应的API优化即可。 - - 执行计算图 - Anakin会选择不同硬件平台执行计算图。 - - -## Anakin APIs ### - -### Tensor #### - -`Tensor`提供基础的数据操作和管理,为ops提供统一的数据接口。`Tensor`包含以下几个属性: - -- Buffer - 数据存储区 -- Shape - 数据的维度信息 -- Event - 用于异步计算的同步 - -`Tensor`类包含三个`Shape`对象, 分别是`_shape`, `_valid_shape`和 `offset` - - - `_shape`为`tensor`真正空间信息 - - `_valid_shape`表示当前`tensor`使用的空间信息 - - `tensor`使用的空间信息 - - `_offset`表示当前`tensor`数据指针相对于真正数据空间的信息 - -`Tensor`不同维度与分别与数学中的向量、矩阵等相对应如下表所示 - -Dimentions | Math entity | -:----: | :----: -1 | vector -2 | matrix -3 | 3-tensor -n | n-tensor - -#### 声明tensor对象 - -`Tensor`接受三个模板参数: - - -```c++ - template - class Tensor .../* Inherit other class */{ - //some implements - ... - }; -``` - -TargetType是平台类型,如X86,GPU等等,在Anakin内部有相应的标识与之对应;datatype是普通的数据类型,在Anakin内部也有相应的标志与之对应 - -[LayOutType](#layout)是数据分布类型,如batch x channel x height x width [NxCxHxW], 在Anakin内部用一个struct来标识 - -Anakin中数据类型与基本数据类型的对应如下: - - 1. TargetType - - Anakin TargetType | platform - :----: | :----: - NV | NVIDIA GPU - ARM | ARM - AMD | AMD GPU - X86 | X86 - NVHX86 | NVIDIA GPU with Pinned Memory - - 2. DataType - - Anakin DataType | C++ | Description - :---: | :---: | :---: - AK_HALF | short | fp16 - AK_FLOAT | float | fp32 - AK_DOUBLE | double | fp64 - AK_INT8 | char | int8 - AK_INT16 | short | int16 - AK_INT32 | int | int32 - AK_INT64 | long | int64 - AK_UINT8 | unsigned char | uint8 - AK_UINT16 | unsigned short | uint8 - AK_UINT32 | unsigned int | uint32 - AK_STRING | std::string | / - AK_BOOL | bool | / - AK_SHAPE | / | Anakin Shape - AK_TENSOR | / | Anakin Tensor - - 3. LayOutType - - Anakin LayOutType ( Tensor LayOut ) | Tensor Dimention | Tensor Support | Op Support - :---: | :---: | :---: | :---: - W | 1-D | YES | NO - HW | 2-D | YES | NO - WH | 2-D | YES | NO - NW | 2-D | YES | YES - NHW | 3-D | YES |YES - NCHW ( default ) | 4-D | YES | YES - NHWC | 4-D | YES | NO - NCHW_C4 | 5-D | YES | YES - - 理论上,Anakin支持申明1维以上的tensor,但是对于Anakin中的Op来说,只支持NW、NHW、NCHW、NCHW_C4这四种LayOut,其中NCHW是默认的LayOuteType,NCHW_C4是专门针对于int8这种数据类型的。 - - 例子 - - 下面的代码将展示如何使用tensor, 我们建议先看看这些示例。 - - 要想获得更多关于tensor的信息, 请参考 *soure_path/core/tensor.h* - - > 1. 使用shape对象初始化tensor - - ```c++ - //create a null tensor. A null tensor holds for nothing. - //tensor's buffer is resident at CPU and its datatype is AK_FLOAT. - //tensor's Layout is NCHW(default) - Tensor mytensor; - - //1. using shape object to create a tensor. - Shape shape1(NUM); //1-D shape. NUM is the number of dimention. - Tensor mytensor1(shape1); //1-D tensor. - - // A 4-D shape - Shape shape2(N, C, H, W); // batch x channel x height x width - ``` - - >`注意:Shape的维度必须和tensor的`[LayoutType](#layout)`相同,比如Shape(N,C,H,W), 那么Tensor的 LayoutType必须是NCHW,否则会出错。如下列代码所示` - - ```c++ - // A 4-D tensor. - Tensor mytensor2(shape2); //right - - //A 4-D tensor which is resident at GPU and its datatype is AK_INT8 - Tensor mytensor3(shape2); //right - - Tensor mytensor4(shape2); //wrong!! shape's dimetion must be equal to tensor's Layout. - Tensor mytensor5(shape2); //wrong!!!! - - ``` - - > 2. 使用现有的数据和shape初始化tensor - - ```c++ - - /** - * A construtor of Tensor. - * data_ptr is a pointer to any data type of data - * TargetType is type of a platform [Anakin TargetType] - * id : device id - * shape: a Anakin shape - */ - Tensor(Dtype* data_ptr, TargetType_t target, int id, Shape shape); - - //using existing data feed to a tensor - Tensor mytensor(data_ptr, TargetType, device_id, shape); //shape must has dimention (N, C, H, W). - - ``` - - > 3. 使用tensor初始化tensor - - ```c++ - Tensor tensor(exist_tensor); - ``` - - > 提示: 你可以用` typedef Tensor Tensor4d_X86 `方便定义tensor - -#### 填充tensor数据区 - -填充数据区得看你申明tensor的方式, 下面展示了如何填充tensor的数据区。 - -首先来看看tensor的四种声明方式: - -```c++ - 1. Tensor mytensor; - 2. Tensor mytensor1(shape1); - 3. Tensor mytensor(data_ptr, TargetType, device_id, shape); - 4. Tensor tensor(exist_tensor); -``` - -相关的声明方式的数据填充方法如下: - -- 声明一个空的tensor,此时没有为其分配内存,所以,我们需要手动的为其分配内存。 - -```c++ - - //parama shape - mytensor.re_alloc(Shape shape); - - //Get writable pointer to mytensor. - //parama index (int): where you start to write. - //Dtype is your data type such int, float or double. - Dtype *p = mytensor.mutable_data(index/*=0*/); - //write data to mytensor - for(int i = 0; i < mytensor.size(); i++){ - p[i] = 1.0f; - } - //do something ... -``` - -- 这种声明方式会自动分配内存 - -```c++ - //Get writable pointer to mytensor. - //parama index (int): where you start to write. - //Dtype is your data type such int, float or double. - Dtype *p = mytensor1.mutable_data(index/*=0*/); - //write data to mytensor - for(int i = 0; i < mytensor.size(); i++){ - p[i] = 1.0f; - } - //do something ... -``` - -- 在该种声明方式中,我们仍不需要手动为其分配内存。但在构造函数内部是否为其分配内存,得依情况而定。如果data_ptr和申明的 - tensor都在都一个目标平台上,那么该tensor就会与data_ptr共享内存空间,相反,如果他们不在同一个平台上(如data_ptr在X86上,而 - tensor在GPU上),那么此时tensor就会开辟一个新的内存空间,并将data_ptr所指向的数据拷贝到tensor的buffer中。 - -```c++ - //Get writable pointer to mytensor. - //parama index (int): where you start to write. - //Dtype is your data type such int, float or double. - Dtype *p = mytensor.mutable_data(index/*=0*/); - //write data to mytensor - for(int i = 0; i < mytensor.size(); i++){ - p[i] = 1.0f; - } - //do something ... -``` - -- 该种方式仍不需要手动分配内存 - -```c++ - //Get writable pointer to mytensor. - //parama index (int): where you start to write. - //Dtype is your data type such int, float or double. - Dtype *p = mytensor.mutable_data(index/*=0*/); - //write data to mytensor - for(int i = 0; i < mytensor.size(); i++){ - p[i] = 1.0f; - } - //do something ... -``` - -- 另外,你还可以获取一个tensor的可读指针,示例如下: - -```c++ - //Get read-only pointer to mytensor. - //parama index (int): where you start to read. - //Dtype is your data type such int, float or double. - Dtype *p = mytensor.data(index/*=0*/); - //do something ... -``` - -如果想更详细的了解tensor,请查阅*soure_path/saber/core/tensor.h* - -#### 获取tensor的shape - -```c++ - //some declarations - // ... - Shape shape = mytensor.shape(); - - //Get a first dimetion size of tesor, if it has. - int d1 = shape[0]; - - //Get a second dimention size of tensor, if it has. - int d2 = shape[1]; - - ... - - //Get a n-th dimention size of tensor, if it has. - int dn = shape[n-1]; - - - //Get a tensor's dimention - int dims = mytensor.dims(); - - //Get the size of tensor. - //size = d1 x d2 x ... x dn. - int size = mytensor.size(); - - //Get the size of tensor at interval [Di, Dj) - // form i-th dimention to j-th dimention, but not including the j-th dimention. - // which means di x (di+1) x ... x (dj -1) - int size = mytensor.count(start, end); -``` - -#### 设置tensor的shape - -我们可以用tensor的成员函数set_shape来设置tensor的shape。 下面是set_shape的定义 - -```c++ - /** - * \brief set a tensor's shape - * \param valid_shape [a Shape object] - * \param shape [a Shape object] - * \param offset [a Shape object] - * \return the status of this operation, that means whether it success * or not. - */ - SaberStatus set_shape(Shape valid_shape, Shape shape = Shape::zero(TensorAPI::layout_dims::value), Shape offset = Shape::minusone(TensorAPI::layout_dims::value)); -``` - -这个成员函数只设置tensor的shape。这些shape对象(valid_shape, shape, offset)的[LayOutType](#layout)必须和当前的tensor的相应三个shape对象的LayOutType相同,如果不同就会出错,返回SaberInvalidValue。 如果相同,那么将成功设置tensor的shape。 - -```c++ - - // some declarations - // ... - //valid_shape, shape , offset are Shape object; - //All these Shape object's LayOutType must be equal to mytensor's. - mytensor.set_shape(valid_shape, shape, offset); - -``` - -#### 重置 tensor的shape - -```c++ - //some declarations - Shape shape, valid_shape, offset; - - //do some initializations - ... - mytensor.reshape(valid_shape, shape, offset); -``` - -注意: Reshape操作仍然需要shape的[LayOutType](#layout) 与tensor的相同 - -### Graph ### - -`Graph`类负责加载Anakin模型生成计算图、对图进行优化、存储模型等操作。 - -#### 图的声明 - -与`Tensor`一样,graph也接受三个模板参数。 - -```c++ - - template - class Graph ... /* inherit other class*/{ - - //some implements - ... - - }; -``` - -前面已经介绍过[TargetType](#target)和[DataType](#datatype)是Anakin内部自定义数据类型。[TargetType](#target)表示平台类型 (如NV、X86), [DataType](#datatype)是Anakin基本数据类型与C++/C中的基本数据类型相对应。 [Precision](#precision)为op所支持的精度类型, 稍后我们在介绍它。 - -```c++ - - //Create a empty graph object. - Graph graph = Graph tmp(); - - //Create a pointer to a empty graph. - Graph *graph = new Graph(); - - //Create a pointer to a empty graph. - auto graph = new Graph(); - -``` - -#### 加载 Anakin 模型 - -```c++ - //some declarations - ... - auto graph = new Graph(); - std::string model_path = "the/path/to/where/your/models/are"; - const char *model_path1 = "the/path/to/where/your/models/are"; - - //Loading Anakin model to generate a compute graph. - auto status = graph->load(model_path); - - //Or this way. - auto status = graph->load(model_path1); - //Check whether load operation success. - if(!status){ - std::cout << "error" << endl; - //do something... - } - -``` - -#### 优化计算图 - -```c++ - //some declarations - ... - //Load graph. - ... - //According to the ops of loaded graph, optimize compute graph. - graph->Optimize(); - -``` - -> 注意: 第一次加载原始图,必须要优化。 - -#### 保存模型 - -你可以在任何时候保存模型, 特别的, 你可以保存一个优化的模型,这样,下次再加载模型时,就不必进行优化操作。 - -```c++ - //some declarations - ... - //Load graph. - ... - // save a model - //save_model_path: the path to where your model is. - auto status = graph->save(save_model_path); - - //Checking - if(!status){ - cout << "error" << endl; - //do somethin... - } -``` - -#### 重新设置计算图里的tensor的shape - -```c++ - //some declarations - ... - //Load graph. - ... - vector shape{10, 256, 256, 10}; - //input_name : std::string. - //Reshape a tensor named input_name. - graph->Reshape(input_name, shape);//Note: shape is a vector, not a Shape object. -``` - -#### 设置 batch size - -`Graph` 支持重新设置batch size的大小。 - -```c++ - //some declarations - ... - //Load graph. - ... - //input_name : std::string. - //Reset a tensor named input_name. - int new_batch_size = 4; - graph->ResetBatchSize(input_name, new_batch_size); -``` - -### Net ### - - -`Net` 是计算图的执行器。你可以通过Net对象获得输入和输出 -#### Creating a graph executor - -`Net`接受四个模板参数。 - - -```c++ - template - class Net{ - //some implements - ... - - }; -``` -由于有些Op可能支持多种精度,我们可以通过Precision来指定。OpRunType表示同步或异步类型,异步是默认类型。OpRunType::SYNC表示同步,在GPU上只有单个流;OpRunType::ASYNC表示异步,在GPU上有多个流并以异步方式执行。实际上,Precision和OpRunType都是enum class, 详细设计请参考*source_root/framework/core/types.h*. - - -1. Precision - - Precision | Op support - :---: | :---: - Precision::INT4 | NO - Precision::INT8 | NO - Precision::FP16 | NO - Precision::FP32 | YES - Precision::FP64 | NO - -现在Op的精度只支持FP32, 但在将来我们会支持剩下的Precision. - -2. OpRunType - - OpRunType | Sync/Aync |Description - :---: | :---: | :---: - OpRunType::SYNC | Synchronization | single-stream on GPU - OpRunType::ASYNC | Asynchronization | multi-stream on GPU - -用graph对象创建一个执行器 - -```c++ - //some declarations - ... - //Create a pointer to a graph. - auto graph = new Graph(); - //do something... - ... - - //create a executor - Net executor(*graph); - -``` - -#### 获取输入输出tensor - -获取输入输出tensor,并填充输入tensor的buffer。如果想要获取输入和输出tensor,那么必须指定输入的名字,如"input_0", "input_1", "input_2", ..., 必须传入如上字符串才能够获得输入tensor。另外,如果想知道input_i对应哪个输入,你需要去dash board查看,如何使用dash board请看[Anakin Parser](./convert_paddle_to_anakin.html)。请看如下示例代码 - -```c++ - //some declaratinos - ... - - //create a executor - //TargetType is NV [NVIDIA GPU] - Net executor(*graph); - - //Get the first input tensor. - //The following tensors(tensor_in0, tensor_in2 ...) are resident at GPU. - //Note: Member function get_in returns an pointer to tensor. - Tensor* tensor_in0 = executor.get_in("input_0"); - - //If you have multiple input tensors - //You just type this code below. - Tensor* tensor_in1 = executor.get_in("input_1"); - ... - auto tensor_inn = executor.get_in("input_n"); -``` - -当得到输入tensor之后,就可以填充它的数据区了。 - -```c++ - //This tensor is resident at GPU. - auto tensor_d_in = executor.get_in("input_0"); - - //If we want to feed above tensor, we must feed the tensor which is resident at host. And then copy the host tensor to the device's one. - - //using Tensor4d = Tensor; - Tensor4d tensor_h_in; //host tensor; - //Tensor tensor_h_in; - - //Allocate memory for host tensor. - tensor_h_in.re_alloc(tensor_d_in->valid_shape()); - //Get a writable pointer to tensor. - float *h_data = tensor_h_in.mutable_data(); - - //Feed your tensor. - /** example - for(int i = 0; i < tensor_h_in.size(); i++){ - h_data[i] = 1.0f; - } - */ - //Copy host tensor's data to device tensor. - tensor_d_in->copy_from(tensor_h_in); - - // And then -``` - -类似的,我们可以利用成员函数get_out来获得输出tensor。但与获得输入tensor不同的是, 我们需要指定输入tensor结点的名字,这个可以从dash board中看到,请从[Anakin Parser](./convert_paddle_to_anakin.html)中查看dash board的使用方法。假如有个输出结点叫pred_out, 那么我们可以通过如下代码获得相应的输出tensor: - -```c++ - //Note: this tensor are resident at GPU. - Tensor* tensor_out_d = executor.get_out("pred_out"); - -``` - -#### Executing graph - -当一切准备就绪后,我们就可以执行真正的计算了! -```c++ - executor.prediction(); -``` - -## 示例代码 ## - -下面的例子展示了如何调用Anakin。 - -在这儿之前, 请确保你已经有了Anakin模型。如果还没有,那么请使用[Anakin Parser](./convert_paddle_to_anakin.html)转换你的模型。 - -### Single-thread - -单线程例子在 *`source_root/test/framework/net/net_exec_test.cpp`* - -```c++ - - std::string model_path = "your_Anakin_models/xxxxx.anakin.bin"; - // Create an empty graph object. - auto graph = new Graph(); - // Load Anakin model. - auto status = graph->load(model_path); - if(!status ) { - LOG(FATAL) << " [ERROR] " << status.info(); - } - // Reshape - graph->Reshape("input_0", {10, 384, 960, 10}); - // You must optimize graph for the first time. - graph->Optimize(); - // Create a executer. - Net net_executer(*graph); - - //Get your input tensors through some specific string such as "input_0", "input_1", and - //so on. - //And then, feed the input tensor. - //If you don't know Which input do these specific string ("input_0", "input_1") correspond with, you can launch dash board to find out. - auto d_tensor_in_p = net_executer.get_in("input_0"); - Tensor4d h_tensor_in; - auto valid_shape_in = d_tensor_in_p->valid_shape(); - for (int i=0; icopy_from(h_tensor_in); - - //Do inference. - net_executer.prediction(); - - //Get result tensor through the name of output node. - //And also, you need to see the dash board again to find out how many output nodes are and remember their name. - - //For example, you've got a output node named obj_pre_out - //Then, you can get an output tensor. - auto d_tensor_out_0_p = net_executer.get_out("obj_pred_out"); //get_out returns a pointer to output tensor. - auto d_tensor_out_1_p = net_executer.get_out("lc_pred_out"); //get_out returns a pointer to output tensor. - //...... - // do something else ... - //... - //save model. - //You might not optimize the graph when you load the saved model again. - std::string save_model_path = model_path + std::string(".saved"); - auto status = graph->save(save_model_path); - if (!status ) { - LOG(FATAL) << " [ERROR] " << status.info(); - } - -``` diff --git a/doc/fluid/advanced_usage/deploy/anakin/convert_paddle_to_anakin.md b/doc/fluid/advanced_usage/deploy/anakin/convert_paddle_to_anakin.md deleted file mode 100644 index 8a3587540..000000000 --- a/doc/fluid/advanced_usage/deploy/anakin/convert_paddle_to_anakin.md +++ /dev/null @@ -1,73 +0,0 @@ -# 模型转换指南 - -Anakin 支持不同框架的模型预测。但由于格式的差别,Anakin 需要您预先转换模型, 本文档介绍如何转换模型。 - -## 简介 - -Anakin 模型转换器输入支持 Caffe 和 Paddle 两种格式的预测模型,模型包含网络结构(model 或 prototxt)和权重参数(param 或 caffemodel)。 - -模型转换的输出是一个 bin 文件,它作为 Anakin 框架的 graph 参数导入。 - -您还可以使用模型转换器的 launch board 功能生成网络结构的 HTML 预览。 - - -## 系统要求 - -- python 2.7+ -- pyyaml -- flask -- protobuf 3.5+ - - -## 用法 - -### 1、环境 -转换器所需的依赖标注于*系统要求*一节。 - -### 2、配置 -您需要对 *config.yaml* 文件进行修改以告知您的需求。工程中给出了 *config.yaml* 示例,下面作进一步说明。 - -#### config.yaml -```bash -OPTIONS: - Framework: CAFFE # 依框架类型填写 CAFFE 或 Paddle - SavePath: ./output # 转换结束后模型的保存位置 - ResultName: googlenet # 输出模型的名字 - Config: - LaunchBoard: ON # 是否生成网络结构预览页面 - Server: - ip: 0.0.0.0 - port: 8888 # 从一个可用端口访问预览页面 - OptimizedGraph: # 当您使用了 Anakin 框架的 Optimized 功能时,才应该打开此项 - enable: OFF - path: /path/to/anakin_optimized_anakin_model/googlenet.anakin.bin.saved - LOGGER: - LogToPath: ./log/ # 生成日志的路径 - WithColor: ON - -TARGET: - CAFFE: - # 当 Framework 为 CAFFE 时需填写 - ProtoPaths: - - /path/to/caffe/src/caffe/proto/caffe.proto - PrototxtPath: /path/to/your/googlenet.prototxt - ModelPath: /path/to/your/googlenet.caffemodel - - Paddle: - # 当 Framework 为 Paddle 时需填写 - Debug: NULL - ProtoPaths: - - / - PrototxtPath: /path/to/paddle/inference_model - ModelPath: /path/to/paddle/inference_model - # ... -``` - -### 3、转换 -在完成配置文件的修改后,您只需执行 ```python converter.py``` 就可以进行模型转换了。 - - -### 4、预览 -最后一步,就是在浏览器中查看转换结果!网址是在 *config.yaml* 中配置的,例如 http://0.0.0.0:8888 。 - -> 注意:若您使用了默认的 IP 地址 0.0.0.0,请在预览时使用真实的服务器地址 real_ip:port 替代它。 diff --git a/doc/fluid/advanced_usage/deploy/anakin/how_to_add_anakin_op.md b/doc/fluid/advanced_usage/deploy/anakin/how_to_add_anakin_op.md deleted file mode 100644 index f2783eb9f..000000000 --- a/doc/fluid/advanced_usage/deploy/anakin/how_to_add_anakin_op.md +++ /dev/null @@ -1,405 +0,0 @@ -# 如何增加新的Operator - -## 基本概念 - -简单介绍下几个同Operator相关的基本概念,详情请参考设计文档。 - -```framework```: 上层的逻辑代码,负责从parser中获取参数及weights,添加op时主要修改framework/operator目录下的内容。 - -```saber```: 底层的实现代码,Anakin通过saber封装了不同的backends,不同的实现(impl)分别特化出自己的实现,外层framework通过不同的template进入各自的impl完成调用。各个op的parameter放在saber/saber_funcs_param.h文件中,增加op主要修改saber/funcs下的内容。 - -saber的文件结构: -* saber/funcs下的是各个funcs的外部接口,这一层的op与具体的设备实现无关,只与各op完成的功能有关。由于跟实现(impl)无关,本层文件明均不带impl。 -* saber/funcs/impl下是各个op的impl声明,特定设备需要完成该层声明的特化版本,如saber/funcs/impl/x86实现了上一层impl声明的x86特化版本,saber/funcs/impl/cuda实现了上一层impl声明的NV特化版本。当增加新的backends时需要特化出新的实现。本层代码同实现相关,均带有```impl_```前缀。 -* saber/funcs/impl/cuda/base/cuda_c内有cuda```.cu```扩展名的文件,添加cuda的kernel需要在该文件目录下添加。 -* saber/funcs/impl/cuda/base/sass 内有不同架构的汇编代码编译的静态库。 - -### 涉及到的基类及各个类之前的关系 - -简单介绍相关的基类 - -* ```anakin::Operator```: framework的operator基类,位于framework/core/operator/operator.h - -* ```anakin::saber::BaseFunc```: saber对外的op接口基类,提供统一的对外接口,位于saber/funcs/base.h。BaseFunc的```compute_output_shape```接口只根据input的shape和param的参数计算输出的shape,并通过```tensor```的```set_shape```接口(只设置shape,不分配空间)设置到output中。```operator()```接口为各个op的计算接口。 - -* ```ankain::saber::ImplBase```: saber设备实现的op的接口,所有设备相关实现的基类。位于saber/funcs/impl/impl_base.h。实现版本中这里分为两类,一类以```vender_```为前缀,带有```vender_```代码意为使用第三方库来实现该op,如cudnn的conv,或mkl的conv等等,这类op的性能我们难以调优,因此单独列为一类。另一类是带有源码的saber实现,这些实现都带有```saber_```为前缀,此类实现带有源码,能够通过后续优化不断提升性能,实现起名时需要注意这一点。 - -## 添加operator - -添加一个新的op需要以下几步: - -1. 添加saber的param -2. 定义saber的Operator类 -3. 定义新的impl声明 -3. 完成新的impl实现 -4. 增加framework的实现或特化 - -接下来就针对这几步,以一个简单例子为例介绍实现。 - -例如我们要添加新的Mul op。给出计算公式如下:$$Out = alpha \dot X * Y$$ - -### 为operator增加param - -涉及到的文件:```saber/saber_funcs_param.h```。如果之前已经存在需要添加的op的param,这一步可以跳过。 -这里```XXXParam```是一个```struct```。包含一个无参数的构造函数,含参数的构造函数,复制构造函数,```operator=()```及```operator==()```。 -``` -template // 能够获得target, datatype, layout -struct MulParam{ - MulParam() - : alpha(0) - {} - MulParam(float alpha_in) - : alpha(alpha_in) - {} - MulParam(const MulParam& right) - : alpha(right.alpha) - {} - MulParam &operator=(const MulParam &right) { - alpha = right.alpha; - } - bool operator==(const MulParam &right) { - return alpha == right.alpha; - } - float alpha; -}; -``` - -### 定义Operator类 -涉及到的文件:```saber/funcs/mul.h```。如果之前定义过该op的类,这里需要修改输入的impl定义头文件。 -下面给出一个相对完整的定义结构供参考。 -``` -//不同的设备需要包含对应的operator实现.[详见](#impl) -#ifdef NVIDIA_GPU -#include "saber/funcs/impl/cuda/saber_mul.h" -#include "saber/funcs/impl/cuda/vender_mul.h" -#endif -//如果一个设备现在还没有对应的operator实现,需要包含声明。[详见](#declare) -#ifdef USE_X86_PLACE -#include "saber/funcs/impl/impl_mul.h" -#endif -namespace anakin { -namespace saber { -template -class Mul : public BaseFunc< - Tensor, - Tensor, - Tensor, - ImplBase, MulParam> { -public: - using BaseFunc< - Tensor, - Tensor, - Tensor, - ImplBase, MulParam>::BaseFunc; - Mul() = default; - typedef Tensor InDataTensor; - typedef Tensor OutDataTensor; - typedef Tensor OpTensor; - typedef MulParam Param_t; - typedef std::vector Input_v; - typedef std::vector Output_v; - typedef std::vector Shape_v; - - virtual SaberStatus compute_output_shape(const Input_v &input, - Output_v &output, Param_t ¶m) override { - //计算输出的shape, - Shape output_shape = (input[0]->valid_shape()); - /* code */ - return output[0]->set_shape(output_shape); - } - virtual SaberStatus init_impl(ImplEnum implenum) override { - // 不同设备均使用此init_impl, 此接口创建对应impl的实现。 - switch (implenum) { - case VENDER_IMPL: - this->_impl.push_back(new VenderMul ); - return SaberSuccess; - case SABER_IMPL: - this->_impl.push_back(new SaberMul ); - return SaberSuccess; - default: - return SaberUnImplError; - } - } -private: - virtual void pick_best_static() override { - if (true) // some condition? - this->_best_impl = this->_impl[0]; - } - virtual void pick_best_specify(ImplEnum implenum) override { - this->_best_impl = this->_impl[0]; - } -}; -} // namespace saber -} // namespace anakin -``` - -### 为operator增加新的impl声明 - -涉及的文件:```saber/funcs/impl/impl_mul.h```。不同的设备都特化同一个声明,特化版本放在对应的文件夹下,这里的声明就是给出所有设备的统一声明。下面给出一个参考。 -``` -#include "saber/funcs/impl/impl_macro.h" -namespace anakin{ -namespace saber{ -DEFINE_OP_CLASS(Mul, MulParam); // 第一个参数是op的名字,第二个是对应param的名字 -} -} -``` - -### 完成新的operator特定后端实现 - -涉及的文件:```saber/funcs/impl/xxx/vender_mul.h```或```saber/funcs/impl/xxx/saber_mul.h``` -这里```xxx```指代特定的一种设备。```vender```是指的使用第三方库实现的op,```saber```指的源码实现的op。这里以cuda的vender实现为例,简单介绍一下特化出的函数的几个基本接口。 - -``` -// include 对应的声明 -#include "saber/funcs/impl/impl_mul.h" - -namespace anakin{ -namespace saber{ -template -class VenderMul : - public ImplBase< - Tensor, - Tensor, - Tensor, - MulParam > > -{ -public: - typedef Tensor DataTensor_in; - typedef Tensor DataTensor_out; - typedef Tensor OpTensor; - typedef typename DataTensor_in::Dtype InDataType; - typedef typename DataTensor_out::Dtype OutDataType; - typedef typename OpTensor::Dtype OpDataType; - VenderMul(){} - ~VenderMul() {} - - virtual SaberStatus init(const std::vector& inputs, - std::vector& outputs, - MulParam& param, Context& ctx) { - this->_ctx = ctx; - create(inputs, outputs, param, ctx); - } - - virtual SaberStatus create(const std::vector& inputs, - std::vector& outputs, - MulParam& param, Context& ctx) { - // set内部参数 - } - - virtual SaberStatus dispatch(const std::vector& inputs, - std::vector& outputs, - MulParam& param) { - // dispatch kernel. - } - -private: -}; -} -} -``` -```init```和```create```的区别:```init```接口是第一次初始化op的时候进入的接口,此函数只在第一次初始化op时调用,这个接口一般放一些只需要执行一次的代码,如malloc或者create之类的函数。```create```函数除了第一次init执行外,在输入发生变化或者param发生变化时会再次触发,create一般放置set函数,设置内部变量,当input发生变化时这里执行一些同input或weights直接相关的代码。但create因为触发位置在网络内,如果```create```函数执行了一些严重耗时的操作,这里会拖慢整个op的执行时间,需要慎重选择操作放置的位置。 -### 添加framework的特化 - -涉及的文件:```framework/operators/mul.h```和```framework/operators/mul.cpp```。 -这里简单介绍下如果添加或修改framework内的operator - -``` -#include "framework/core/base.h" -#include "framework/core/data_types.h" -#include "framework/core/operator/operator.h" -#include "utils/logger/logger.h" -#include "saber/funcs/mul.h" // 需要包对应的saber头文件 -namespace anakin { -namespace ops { -template -class MulHelper; - -template -class Mul : public Operator { -public: - Mul() {} - /// forward impl - virtual void operator() (OpContext &ctx, - const std::vector >& ins, - std::vector >& outs) { - LOG(ERROR) << "Not Impl Yet Operator power::type>().type_info()<<">"; - } - friend class MulHelper; -}; -template -class MulHelper : public OperatorHelper { -public: - MulHelper() = default; - ~MulHelper(); - Status InitParam() override; - - Status Init(OpContext &ctx, - const std::vector >& ins, - std::vector >& outs) override; - Status InferShape(const std::vector >& ins, - std::vector >& outs) override; - -public: - saber::MulParam> _param_mul; - saber::Mul _funcs_mul; -}; -} -} /* namespace anakin */ -``` -对应的```.cpp```文件如下: -``` -#include "framework/operators/mul.h" - -namespace anakin { -namespace ops { - -#ifdef USE_CUDA -template<> -void Mul::operator()( - OpContext& ctx, - const std::vector >& ins, - std::vector >& outs) { - auto* impl = - static_cast*>(this->_helper); - auto& param = - static_cast*>(this->_helper)->_param_mul; - impl->_funcs_mul(ins, outs, param, ctx); -} -#endif - -template -Status MulHelper::InitParam() { - auto alpha = GET_PARAMETER(float, alpha); - MulParam> param_mul(alpha); - _param_mul = param_mul; - return Status::OK(); -} - -template -Status MulHelper::Init(OpContext& ctx, - const std::vector >& ins, - std::vector >& outs) { - - SABER_CHECK(_funcs_mul.init(ins, outs, _param_mul, SPECIFY, VENDER_IMPL, ctx)); - return Status::OK(); -} - -template -Status MulHelper::InferShape(const - std::vector >& ins, - std::vector >& outs) { - SABER_CHECK(_funcs_mul.compute_output_shape(ins, outs, _param_mul)); - return Status::OK(); -} - -#ifdef USE_CUDA -template class MulHelper; -#endif -#ifdef USE_ARM_PLACE -template class MulHelper; -#endif -// register helper -#ifdef USE_CUDA -ANAKIN_REGISTER_OP_HELPER(Mul, MulHelper, NV, AK_FLOAT, Precision::FP32); -#endif -#ifdef USE_ARM_PLACE -ANAKIN_REGISTER_OP_HELPER(Mul, MulHelper, ARM, AK_FLOAT, Precision::FP32); -#endif -//! register op -ANAKIN_REGISTER_OP(Mul) -.Doc("Mul operator") -#ifdef USE_CUDA -.__alias__("mul") -#endif -#ifdef USE_ARM_PLACE -.__alias__("mul") -#endif -.num_in(1) -.num_out(1) -.Args("alpha", " alpha of Mul "); //注册 - -} /* namespace ops */ - -} /* namespace anakin */ -``` - -## 实现单元测试 -涉及的文件:```test/saber/xxx/test_saber_funcs_mul_xxx.cpp``` -在对应的test下需要添加新的单元测试 - -``` -TEST(TestSaberFuncNV, test_depthwise_conv) { - - // init tensors and some param. - - // start Reshape & doInfer - Context ctx1(0, 1, 1); - - // create param - MulParam > param(alpha); - - std::vector*> input; - std::vector*> output; - - // create saber op - Mul mul; - - // compute output shape - mul.compute_output_shape(input, output, param); - - // re_alloc output tensors memory based on output shape - output[0]->re_alloc(output[0]->shape()); - - // init saber op(calling init and create) - mul.init(input, output, param, SPECIFY, VENDER_IMPL, ctx1); - - // call operator() - mul(input, output, param, ctx1); - - // cuda specified, record events - cudaStream_t cuda_stream = ctx1.get_compute_stream(); - output[0]->record_event(cuda_stream); - output_dev.sync(); - - // param changed - param.alpha = 2.0; - // auto calling saber op(create and dispatch) - mul(input, output, param, ctx1); - - cudaDeviceSynchronize(); - CUDA_CHECK(cudaPeekAtLastError()); -} - -int main(int argc, const char** argv){ - anakin::saber::Env::env_init(); - - // initial logger - //logger::init(argv[0]); - InitTest(); - RUN_ALL_TESTS(argv[0]); - return 0; -} - -``` -## 调试及注意事项 - -一个op需要有对外的op接口和内部实现,由于存在saber/funcs/impl的非特化版本声明,当有op在某种设备下没有对应实现时,也能够编译,但此时是没有任何实现的空实现, diff --git a/doc/fluid/advanced_usage/deploy/anakin/how_to_support_new_device_in_anakin.md b/doc/fluid/advanced_usage/deploy/anakin/how_to_support_new_device_in_anakin.md deleted file mode 100644 index da2c64cf4..000000000 --- a/doc/fluid/advanced_usage/deploy/anakin/how_to_support_new_device_in_anakin.md +++ /dev/null @@ -1,459 +0,0 @@ -# 如何支持一个新的设备 - -## 概览 - -添加一个新的设备需要以下3个步骤: - -* [在`CMakeList`中添加设备的支持](#0001) -* [在`saber`中添加设备的实现](#0002) -* [在`framework`中添加设备的具体化或实例化](#0003) - -假设新设备的名称为`TNEW`, 以下将以这个设备名称进行演示。 - -## 在`CMakeList`中添加设备的支持 ## - -* 修改根目录`CMakeList.txt` -```cmake -#select the plantform to build -anakin_option(USE_GPU_PLACE "Select the build mode for GPU place." NO) -anakin_option(USE_X86_PLACE "Select the build mode for X86 place." NO) -anakin_option(USE_ARM_PLACE "Select the build mode for ARM place." NO) -anakin_option(USE_TNEW_PLACE "Select the build mode for ARM place." YES) -``` - -* 修改`saber/CMakeList.txt` - -根据新增设备的目录完善`saber`目录下的`CMakeList.txt`。 -```cmake -if(USE_TNEW_PLACE) - anakin_fetch_files_with_suffix(${ANAKIN_SABER}/core/impl/tnew "cpp" ANAKIN_SABER_BASE_SRC) - anakin_fetch_files_with_suffix(${ANAKIN_SABER}/funcs/impl/tnew "cpp" ANAKIN_SABER_BASE_SRC) -endif() -``` - -* 修改`test/CMakeList.txt` - -新增设备的单测文件放在`test/saber/tnew`目录下,修改`test`目录下的`CMakeList.txt`。 -```cmake -if(USE_TNEW_PLACE) - anakin_fetch_files_with_suffix(${ANAKIN_UNIT_TEST}/saber/tnew "cpp" ANAKIN_TEST_CASE_SRC) -endif() -``` - -* 修改`cmake/anakin_config.h.in` -```c++ -// plantform to use -#cmakedefine USE_GPU_PLACE - -#cmakedefine USE_X86_PLACE - -#cmakedefine USE_ARM_PLACE - -#cmakedefine USE_TNEW_PLACE -``` - -* 其他依赖和编译选项 -修改`cmake`目录下的`compiler_options.cmake`和`find_modules.cmake` - - -## 在`saber`中添加设备的实现 ## -`saber`是`Anakin`的基础计算库,对外提供设备无关的统一的API,设备相关的实现都会封装到`TargetWrapper`中。 - -### 在`saber/saber_types.h`中添加设备 - -```c++ -enum TargetTypeEnum { - eINVALID = -1, - eNV = 1, - eAMD = 2, - eARM = 3, - eX86 = 4, - eNVHX86 = 5, - eTNEW = 6 -}; - -typedef TargetType NV; -typedef TargetType ARM; -typedef TargetType AMD; -typedef TargetType X86; -typedef TargetType TNEW; - -``` - -### 在`saber/core`中添加设备的实现 - -1. 在`target_traits.h`中添加新设备 - -* 增加设备类型 -```c++ -struct __cuda_device{}; -struct __arm_device{}; -struct __amd_device{}; -struct __x86_device{}; -struct __tnew_device{}; -``` - -* `TargetTypeTraits`模板具体化 -```c++ -template <> -struct TargetTypeTraits { - typedef __xxx_target target_category;//根据实际设备是host端还是device端进行选择 - typedef __tnew_device target_type; -}; -``` - -2. 在`data_traits.h`中特化`DataTrait`模板类 - -如果设备需要特殊的数据类型,则特化出设备的`DataTrait`类的实现,例如opencl数据类型的实现如下: -```c++ -#ifdef USE_OPENCL -struct ClMem{ - ClMem(){ - dmem = nullptr; - offset = 0; - } - - ClMem(cl_mem* mem_in, int offset_in = 0) { - dmem = mem_in; - offset = offset_in; - } - - ClMem(ClMem& right) { - dmem = right.dmem; - offset = right.offset; - } - - ClMem& operator=(ClMem& right) { - this->dmem = right.dmem; - this->offset = right.offset; - return *this; - } - - ClMem& operator+(int offset_in) { - this->offset += offset_in; - return *this; - } - - int offset{0}; - cl_mem* dmem; -}; - -template <> -struct DataTrait { - typedef ClMem Dtype; - typedef float dtype; -}; - -template <> -struct DataTrait { - typedef ClMem Dtype; - typedef double dtype; -}; - -template <> -struct DataTrait { - typedef ClMem Dtype; - typedef char dtype; -}; -#endif //use_opencl -``` - -3. 在`target_wrapper.h`中特化`TargetWrapper`模板类 - -特化`TargetWrapper`模板类,在`target_wrapper.h`中声明函数,具体如下: -```c++ -template <> -struct TargetWrapper { //根据TNEW的具体类型修改__xxx_target,__host_target或者__device_target - - typedef xxx_event event_t; //根据设备实现xxx_event - typedef xxx_stream stream_t; //根据设备实现xxx_stream - - static void get_device_count(int& count); - - static void set_device(int id); - - //We should add strategy to avoid malloc directly - static void mem_alloc(void** ptr, size_t n); - - static void mem_free(void* ptr); - - static void mem_set(void* ptr, int value, size_t n); - - static void create_event(event_t& event, bool flag = false); - - static void create_stream(stream_t& stream); - - static void create_stream_with_flag(stream_t& stream, unsigned int flag); - - static void create_stream_with_priority(stream_t& stream, unsigned int flag, int priority); - - static void destroy_stream(stream_t& stream); - - static void destroy_event(event_t& event); - - static void record_event(event_t& event, stream_t stream); - - static void query_event(event_t& event); - - static void sync_event(event_t& event); - - static void sync_stream(event_t& event, stream_t& stream); - - static void sync_memcpy(void* dst, int dst_id, const void* src, int src_id, \ - size_t count, __DtoD); - - static void async_memcpy(void* dst, int dst_id, const void* src, int src_id, \ - size_t count, stream_t& stream, __DtoD); - - static void sync_memcpy(void* dst, int dst_id, const void* src, int src_id, \ - size_t count, __HtoD); - - static void async_memcpy(void* dst, int dst_id, const void* src, int src_id, \ - size_t count, stream_t& stream, __HtoD); - - static void sync_memcpy(void* dst, int dst_id, const void* src, int src_id, \ - size_t count, __DtoH); - - static void async_memcpy(void* dst, int dst_id, const void* src, int src_id, \ - size_t count, stream_t& stream, __DtoH); - - static void sync_memcpy_p2p(void* dst, int dst_dev, const void* src, \ - int src_dev, size_t count); - - static void async_memcpy_p2p(void* dst, int dst_dev, const void* src, \ - int src_dev, size_t count, stream_t& stream); - - static int get_device_id(); -}; - -``` - -4. 在`impl/`目录下添加设备目录和实现 - -在`saber/core/impl`目录下添加设备目录`tnew`。 -* 实现`TargetWrapper`结构体中各函数的定义。 -如果`TargetWrapper`的实现与默认的模板类一致,则不用特化出该类。 - -```c++ -typedef TargetWrapper TNEW_API; -void TNEW_API::get_device_count(int &count) { - // add implementation -} - -void TNEW_API::set_device(int id){ - // add implementation -} - -void TNEW_API::mem_alloc(void** ptr, size_t n){ - // add implementation -} - -void TNEW_API::mem_free(void* ptr){ - if(ptr != nullptr){ - // add implementation - } -} -... - -``` - -* 特化实现`device.h`中的`Device` - -```c++ -template <> -void Device::create_stream() { - // add implementation -} - -template <> -void Device::get_info() { - - // add implementation -} - -``` - -### 在`saber/funcs`中实现设备相关的op - -参考[如何增加新的Operator](./how_to_add_anakin_op.html) - - -## 在`framework`中添加设备的具体化或实例化 ## - -### `framework/core` - -* `net.cpp`中添加实例化 - -```c++ -#ifdef USE_TNEW_PLACE -template class Net; -template class Net; -#endif -``` - -* `operator_func.cpp`中添加实例化 - -```c++ -#ifdef USE_TNEW_PLACE -template class OperatorFunc; -#endif -``` - -* `worker.cpp`中添加实例化 - -```c++ -#ifdef USE_TNEW_PLACE -template class Worker; -template class Worker; -#endif -``` - -* `operator_attr.cpp`中添加实例化 - -```c++ -template -OpAttrWarpper& OpAttrWarpper::__alias__(const std::string& op_name); -template -OpAttrWarpper& OpAttrWarpper::__alias__(const std::string& op_name); -template -OpAttrWarpper& OpAttrWarpper::__alias__(const std::string& op_name); -``` - -* `parameter.h`中添加设备的实现 - -```c++ -#ifdef USE_TNEW_PLACE -template -class PBlock { -public: - typedef Tensor4d::type> type; - - PBlock() { - _inner_tensor = std::make_shared(); - } - ... -} -#endif //TNEW -``` - -* `type_traits_extend.h`中添加设备的实现 - -```c++ -template<> -struct target_host { - typedef saber::X86 type; //根据TNEW选择正确的host type -}; -``` - -### `framework/graph` - -* `graph.cpp`中添加实例化 - -```c++ - #ifdef USE_TNEW_PLACE - template class Graph; - template class Graph; - template class Graph; - #endif -``` - -### `framework/model_parser` - -* `parser.cpp`中添加实例化 - -```c++ - #ifdef USE_TNEW_PLACE - template - Status load(graph::Graph* graph, - const char* model_path); - template - Status load(graph::Graph* graph, - const char* model_path); - template - Status load(graph::Graph* graph, - const char* model_path); - - template - Status save(graph::Graph* graph, - std::string& model_path); - template - Status save(graph::Graph* graph, - std::string& model_path); - template - Status save(graph::Graph* graph, - std::string& model_path); - - template - Status load(graph::Graph* graph, - std::string& model_path); - template - Status load(graph::Graph* graph, - std::string& model_path); - template - Status load(graph::Graph* graph, - std::string& model_path); - - template - Status save(graph::Graph* graph, - const char* model_path); - template - Status save(graph::Graph* graph, - const char* model_path); - template - Status save(graph::Graph* graph, - const char* model_path); - #endif -``` - -* `model_io.cpp`中添加实例化 - -```c++ -#ifdef USE_TNEW_PLACE -template class NodeIO; -template class NodeIO; -template class NodeIO; -#endif -``` - -### `framework/operators` - -为`framework/operators`目录下所有op添加实例化或具体化 -以`activation.cpp`为例,实例化如下: - -```c++ -#ifdef USE_TNEW_PLACE -INSTANCE_ACTIVATION(TNEW, AK_FLOAT, Precision::FP32); -INSTANCE_ACTIVATION(TNEW, AK_FLOAT, Precision::FP16); -INSTANCE_ACTIVATION(TNEW, AK_FLOAT, Precision::INT8); -template class ActivationHelper; -ANAKIN_REGISTER_OP_HELPER(Activation, ActivationHelper, TNEW, AK_FLOAT, Precision::FP32); -#endif -``` - -如果TNEW设备函数的实现与现有模板实现不一致,可以特化实现如下(以init()为例): -```c++ -#ifdef USE_TNEW_PLACE -INSTANCE_ACTIVATION(TNEW, AK_FLOAT, Precision::FP32); -INSTANCE_ACTIVATION(TNEW, AK_FLOAT, Precision::FP16); -INSTANCE_ACTIVATION(TNEW, AK_FLOAT, Precision::INT8); -template <> -Status ActivationHelper::Init(OpContext &ctx,\ - const std::vector >& ins, \ - std::vector >& outs) { - SABER_CHECK(_funcs_activation.init(ins, outs, _param_activation, SPECIFY, SABER_IMPL, ctx)); //在这里选择实现方式 - return Status::OK(); -} -ANAKIN_REGISTER_OP_HELPER(Activation, ActivationHelper, TNEW, AK_FLOAT, Precision::FP32); -#endif -``` - -在`ANAKIN_REGISTER_OP(Activation)`中添加TNEW的注册 - -```c++ -#ifdef USE_TNEW_PLACE -.__alias__("activation") -#endif -``` - -## 注意事项 -不要修改`Tensor`/`Buffer`/`Env`/`Context`这些类函数的接口和实现 diff --git a/doc/fluid/advanced_usage/deploy/anakin/index_cn.rst b/doc/fluid/advanced_usage/deploy/anakin/index_cn.rst deleted file mode 100644 index 3027bd541..000000000 --- a/doc/fluid/advanced_usage/deploy/anakin/index_cn.rst +++ /dev/null @@ -1,29 +0,0 @@ -Anakin 预测引擎 -####################### - - -使用文档 -~~~~~~~ - -.. toctree:: - :maxdepth: 1 - - install_anakin.md - convert_paddle_to_anakin.md - anakin_tutorial.md - anakin_run_on_arm.md - anakin_example.md - int8_design_anakin.md - anakin_gpu_benchmark.md - anakin_arm_benchmark.md - - -开发文档 -~~~~~~~ - -.. toctree:: - :maxdepth: 1 - - how_to_add_anakin_op.md - how_to_support_new_device_in_anakin.md - anakin_parser_design.md diff --git a/doc/fluid/advanced_usage/deploy/anakin/install_anakin.md b/doc/fluid/advanced_usage/deploy/anakin/install_anakin.md deleted file mode 100644 index 0b44a6be3..000000000 --- a/doc/fluid/advanced_usage/deploy/anakin/install_anakin.md +++ /dev/null @@ -1,76 +0,0 @@ -## 源码编译安装Anakin ## - -我们已经在CentOS 7.3上成功的安装和测试了Anakin,对于其他操作系统,我们将很快支持。 - -### 安装概览 ### - -* [在CentOS上安装 Anakin]() -* [在Ubuntu上安装 Anakin]() -* [在ARM上安装 Anakin](./anakin_run_on_arm.html) -* [验证安装]() - - -### 在CentOS上安装 Anakin ### -#### 1. 系统要求 #### - -* make 3.82+ -* cmake 2.8.12+ -* gcc 4.8.2+ -* g++ 4.8.2+ - -#### 2. 编译CPU版Anakin #### - -暂时不支持 - -#### 3. 编译支持NVIDIA GPU的Anakin #### - -- 3.1. 安装依赖 - - - 3.1.1 protobuf - - ``` - > git clone https://github.com/google/protobuf - > cd protobuf - > git submodule update --init --recursive - > ./autogen.sh - > ./configure --prefix=/path/to/your/insall_dir - > make - > make check - > make install - > sudo ldconfig - ``` - - 如安装protobuf遇到任何问题,请访问[这里](https://github.com/google/protobuf/blob/master/src/README.md) - -- 3.2 CUDA Toolkit - - - [CUDA 8.0](https://developer.nvidia.com/cuda-zone) or higher, 具体信息参见[NVIDIA's documentation](https://docs.nvidia.com/cuda/cuda-installation-guide-linux/). - - [cuDNN v7](https://developer.nvidia.com/cudnn), 具体信息参见[NVIDIA's documentation](https://docs.nvidia.com/cuda/cuda-installation-guide-linux/). - -- 3.3 编译Anakin - - ``` - > git clone https:/xxxxx - > cd anakin - > mkdir build - > camke .. - > make - ``` - -#### 4. 编译支持AMD GPU的Anakin #### - -暂时还不支持 - - -### 在Ubuntu上安装 Anakin ### - -暂时还不支持 - - -### 在ARM上安装 Anakin ### - -请参考[ARM安装文档](./anakin_run_on_arm.html) - -### 验证安装 ### - -安装完成后,如果没有报错信息,你可以通过运行 `output/unit_test`路径下的单测示例验证是否编译成功。 diff --git a/doc/fluid/advanced_usage/deploy/anakin/run_anakin_on_arm.md b/doc/fluid/advanced_usage/deploy/anakin/run_anakin_on_arm.md deleted file mode 100644 index f61beca7e..000000000 --- a/doc/fluid/advanced_usage/deploy/anakin/run_anakin_on_arm.md +++ /dev/null @@ -1,185 +0,0 @@ -## ARM 源码编译 Anakin ## - -目前Anakin支持ARM Android平台,采用Android NDK交叉编译工具链,已在mac os和centos上编译和测试通过。 - -### 安装概览 ### - -* [系统需求](#0001) -* [安装第三方依赖](#0002) -* [Anakin源码编译](#0003) -* [验证安装](#0004) - - -### 1. 系统需求 ### - -* 宿主机: linux, mac -* cmake 3.8.2+ -* Android NDK r14, Linux 版本[从这里下载](https://dl.google.com/android/repository/android-ndk-r14b-linux-x86_64.zip) - -### 2. 安装第三方依赖 ### - -- 2.1 protobuf3.4.0 - - 源码从这里[下载](https://github.com/google/protobuf/releases/tag/v3.4.0) - - - 2.1.1 为宿主机编译protobuf - -```bash - $ tar -xzf protobuf-3.4.0.tar.gz - $ cd protobuf-3.4.0 - $ ./autogen.sh - $ ./configure - $ make - $ make check - $ make install -``` - -上述 $make install 执行后,可在 /usr/local/include/google 找到 libprotobuf 所需的头文件,将整个google文件夹拷贝至Anakin/third-party/arm-android/protobuf/下 - -如有问题,请点[这里](https://github.com/google/protobuf/blob/v3.4.0/src/README.md),然后将已经生成文件清除。 - -```bash - $ make distclean -``` - - - 2.1.1 交叉编译Android`armeabi-v7a`的protobuf,注意设置ANDROID_NDK的路径,以及ARCH_ABI、HOSTOSN的值 - - ```bash - - $ export ANDROID_NDK=your_ndk_path - $ ARCH_ABI="arm-linux-androideabi-4.9" - $ HOSTOSN="darwin-x86_64" - $ export SYSROOT=$ANDROID_NDK/platforms/android-9/arch-arm - $ export PREBUILT=$ANDROID_NDK/toolchains/$ARCH_ABI - $ export LDFLAGS="--sysroot=$SYSROOT" - $ export LD="$ANDROID_NDK/toolchains/$ARCH_ABI/prebuilt/$HOSTOSN/arm-linux-androideabi/bin/ld $LDFLAGS" - $ export LIBS="-llog $ANDROID_NDK/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/libgnustl_static.a" - $ export CPPFLAGS="" - $ export INCLUDES="-I$ANDROID_NDK/sources/cxx-stl/gnu-libstdc++/4.9/include/ -I$ANDROID_NDK/platforms/android-9/arch-arm/usr/include/ -I$ANDROID_NDK/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include/" - $ export CXXFLAGS="-march=armv7-a -mfloat-abi=softfp -DGOOGLE_PROTOBUF_NO_RTTI --sysroot=$SYSROOT" - $ export CCFLAGS="$CXXFLAGS" - $ export CXX="$PREBUILT/prebuilt/$HOSTOSN/bin/arm-linux-androideabi-g++ $CXXFLAGS" - $ export CC="$CXX" - $ export RANLIB="$ANDROID_NDK/toolchains/$ARCH_ABI/prebuilt/$HOSTOSN/bin/arm-linux-androideabi-ranlib" - $ ./autogen.sh - $ ./configure --host=arm-linux-androideabi --with-sysroot=$SYSROOT --enable-cross-compile --with-protoc=protoc --disable-shared CXX="$CXX" CC="$CC" LD="$LD" - $ make -``` - -编译生成 *.a 静态库,若希望编译*.so 动态链接库 ,请在./configure参数中改--disable-shared为--disable-static --enable-shared。 -生成文件在src/.libs/下,将生成的文件拷贝至Anakin/third-party/arm-android/protobuf/lib下。 -在[cmake](../../cmake/find_modules.cmake)中更新`ARM_RPOTO_ROOT`的路径。 - -```cmake - set(ARM_RPOTO_ROOT "${CMAKE_SOURCE_DIR}/third-party/arm-android/protobuf") -``` - -- 2.2 opencv 2.4.3+(optional) - - Anakin只在examples示例中使用opencv - Android系统的opencv从[这里下载](https://opencv.org/releases.html) - 解压后将 `3rdparty/libs/armeabi-v7a`中的库文件拷贝到`libs/armeabi-v7a` - 在[cmake](../../cmake/find_modules.cmake)中搜索`anakin_find_opencv`, - 并设置 `include_directories` 和 `LINK_DIRECTORIES`为自己安装的库的路径。 - - ```cmake - include_directories(${CMAKE_SOURCE_DIR}/third-party/arm-android/opencv/sdk/native/jni/include/) - LINK_DIRECTORIES(${CMAKE_SOURCE_DIR}/third-party/arm-android/opencv/sdk/native/libs/armeabi-v7a/) - ``` -### 3. Anakin源码编译 ### - -#### 编译Android版本 - - 克隆[源码](https://github.com/PaddlePaddle/Anakin/tree/arm) - -```bash - cd your_dir - git clone https://github.com/PaddlePaddle/Anakin.git - cd Anakin - git fetch origin arm - git checkout arm - ``` - - 修改`android_build.sh` - -- 修改NDK路径 - - ```bash - #modify "your_ndk_path" to your NDK path - export ANDROID_NDK=your_ndk_path - ``` - -- 修改ARM 处理器架构 - - 对于32位ARM处理器, 将ANDROID_ABI 设置为 `armeabi-v7a with NEON`, - 对于64位ARM处理器, 可以将ANDROID_ABI 设置为 `armeabi-v7a with NEON`或者`arm64-v8a`。 - 目前我们只支持 `armeabi-v7a with NEON`;`arm64-v8a` 还在开发中。 - - ```bash - -DANDROID_ABI="armeabi-v7a with NEON" - ``` - -- 设置Android API - - 根据Android系统的版本设置API level, 例如API Level 21 -> Android 5.0.1 - ```bash - -DANDROID_NATIVE_API_LEVEL=21 - ``` - -- 选择编译静态库或动态库 - - 设置`BUILD_SHARED=NO`编译静态库 - 设置`BUILD_SHARED=YES`编译动态库 - - ```bash - -DBUILD_SHARED=NO - ``` -- OpenMP多线程支持 - - 设置`USE_OPENMP=YES`开启OpenMP多线程 - - ```bash - -DUSE_OPENMP=YES - ``` - -- 编译单测文件 - - 设置`BUILD_WITH_UNIT_TEST=YES`将会编译单测文件 - - ```bash - -DBUILD_WITH_UNIT_TEST=YES - ``` - -- 编译示例文件 - - 设置`BUILD_EXAMPLES=YES`将会编译示例文件 - - ```bash - -DBUILD_EXAMPLES=YES - ``` - -- 开启opencv - - 如果使用opencv,设置`USE_OPENCV=YES` - - ```bash - -DUSE_OPENCV=YES - ``` - -- 开始编译 - - 运行脚本 `android_build.sh` 将自动编译Anakin - - ```bash - ./android_build.sh - ``` - -### 4. 验证安装 ### - - 编译好的库会放在目录`${Anakin_root}/output`下 - - 编译好的单测文件会放在`${Anakin_root}/output/unit_test`目录下 - - 编译好的示例文件会放在`${Anakin_root}/output/examples`目录下 - - 对于Android系统,打开设备的调试模式,通过ADB可以访问的目录是`data/local/tmp`,通过ADB push将测试文件、模型和数据发送到设备目录,运行测试文件。 diff --git a/doc/fluid/advanced_usage/development/profiling/benchmark.rst b/doc/fluid/advanced_usage/development/profiling/benchmark.rst deleted file mode 100644 index 7854263bf..000000000 --- a/doc/fluid/advanced_usage/development/profiling/benchmark.rst +++ /dev/null @@ -1,120 +0,0 @@ -################# -如何进行基准测试 -################# - -本文介绍如何给深度学习框架做基准测试。基准测试主要包含验证模型的精度和性能两方面,下文包含搭建测试环境,选择基准测试模型,验证测试结果等几方面内容。 - -验证深度学习框架,可分为训练和测试两个阶段, 验证指标略有不同,本文只介绍训练阶段的指标验证。训练阶段关注的是模型训练集上的精度,训练集是完备的,因此关注大batch\_size下的训练速度,关注吞吐量,例如图像模型常用的batch\_size=128, 多卡情况下会加大;预测阶段关注的是在测试集上的精度,线上服务测试数据不能提前收集,因此关注小batch\_size下的预测速度,关注延迟,例如预测服务常用的batch\_size=1, 4等。 - -`Fluid `__ 是PaddlePaddle从0.11.0版本开始引入的设计,本文的基准测试在该版本上完成。 - - -环境搭建 -"""""""""""" - -基准测试中模型精度和硬件、框架无关,由模型结构和数据共同决定;性能方面由测试硬件和框架性能决定。框架基准测试为了对比框架之间的差异,控制硬件环境,系统库等版本一致。下文中的对比实验都在相同的硬件条件和系统环境条件下进行. - - -不同架构的GPU卡性能差异巨大,在验证模型在GPU上训练性能时,可使用NVIDIA提供的工具:code `nvidia-smi` 检验当前使用的GPU型号,如果测试多卡训练性能,需确认硬件连接是 `nvlink `__ 或 `PCIe `__ 。 同样地,CPU型号会极大影响模型在CPU上的训练性能。可读取`/proc/cpuinfo`中的参数,确认当前正在使用的CPU型号。 - -下载GPU对应的Cuda Tool Kit和 Cudnn,或者使用NVIDIA官方发布的nvidia-docker镜像 `nvidia-docker `__, 镜像内包含了Cuda和Cudnn,本文采用这种方式。 Cuda Tool Kit包含了GPU代码使用到的基础库,影响在此基础上编译出的Fluid二进制运行性能。 - -准备好Cuda环境后,从github上的下载Paddle并源码编译,会生成对应的最适合当前GPU的sm\_arch二进制\ `sm\_arch `__\ 。另外,cudnn对卷积类任务影响巨大,在基准测试中需要小版本一致,例如Cudnn7.0.2与Cudnn7.1.4在Resnet上有5%以上差异。 - - -选择基准模型 -"""""""""""" - -对框架做基准测试,需要覆盖不同训练任务和不同大小的模型,本文中选取了图像和NLP的最为常用的5个模型。 - -============ ============ ================= ============ -任务种类 模型名称 网络结构 数据集 -============ ============ ================= ============ -图像分类 mnist Lenet mnist -图像分类 VGG VGG-16 Flowers102 -图像分类 Resnet Resnet-50 Flowers102 -文本分类 Stacked-LSTM Stacked-LSTM IMDB -机器翻译 seq-seq Stacked-LSTM wmt14 -============ ============ ================= ============ - -其中mnist, VGG, Resnet属于CNN模型, stacked-lstm, seq2seq代表RNN模型。 -`benchmark `__ -基准模型测试脚本中,均跳过了前几个batch的训练过程,原因是加载数据和分配显存受系统当前运行情况影响,会导致统计性能不准确。运行完若干个轮次后,统计对应指标。 - - -基准模型的数据的选择方面,数据量大且验证效果多的公开数据集为首选。图像模型VGG和resnet, 本文选择了 `flowers102 `__ ,图像大小预处理为和Imagenet相同大小,因此性能可直接对比 -NLP模型的公开且影响力大数据集较少,seq2seq模型选择了wmt14数据,stacked-lstm模型中选择了 `imdb `__ 数据。 - - -注意,图像模型每条样本大小相同,图像经过变换后大小一致,因此经过的计算路径基本相同,计算速度和显存占用波动较小,可以从若干个batch的数据中采样得到当前的训练性能数据。而NLP模型由于样本长度不定,计算路径和显存占用也不相同,因此只能完整运行若干个轮次后,统计速度和显存消耗。 -显存分配是特别耗时的操作,因此Fluid默认会占用所有可用显存空间形成显存池,用以加速计算过程中的显存分配。如果需要统计模型真实显存消耗,可设置环境变量`FLAGS_fraction_of_gpu_memory_to_use=0.0`,观察最大显存开销。 - - -测试过程 -"""""""""""" - -- CPU 单机单线程测试 - -测试CPU上单线程的性能,先设置CUDA的环境变量为空,``CUDA_VISIBLE_DEVICES=``,并通过环境变量关闭OpenMP和MKL的多线程 ``OMP_NUM_THREADS=1``, ``MKL_NUM_THREADS=1;``。 -然后代码中设置为使用CPUPlace,如果使用Paddle代码库中的脚本,只需要命令行参数传入 use_gpu=False即可。 - -.. code-block:: python - - >>> import paddle.fluid as fluid - >>> place = fluid.CPUPlace() - -.. code:: bash - - docker run -it --name CASE_NAME --security-opt seccomp=unconfined -v $PWD/benchmark:/benchmark paddlepaddle/paddle:latest-dev /bin/bash - - -- GPU 单机单卡测试 - -本教程使用了Cuda8, Cudnn7.0.1。来源为:code `nvidia/cuda:8.0-cudnn7-devel-ubuntu16.04` - -.. code:: bash - - nvidia-docker run -it --name CASE_NAME --security-opt seccomp=unconfined -v $PWD/benchmark:/benchmark -v /usr/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu paddlepaddle/paddle:latest-dev /bin/bash -在单卡上测试,设置CUDA的环境变量使用一块GPU,``CUDA_VISIBLE_DEVICES=0`` -然后代码中设置为使用CUDAPlace,如果使用Paddle代码库中的脚本,只需要命令行参数传入 use_gpu=True即可。 - -.. code-block:: python - - >>> import paddle.fluid as fluid - >>> place = fluid.CUDAPlace(0) // 0 指第0块GPU - - -测试结果 -"""""""""""" - -本教程对比相同环境下的Fluid0.12.0和TensorFlow1.4.0的性能表现。 -硬件环境为 CPU: Intel(R) Xeon(R) CPU E5-2660 v4 @ 2.00GHz, GPU: TITAN X(Pascal) 12G x 1, Nvidia-Driver 384.90。 -系统环境为Ubuntu 16.04.3 LTS, 本文中采用了docker环境,系统版本为nvidia-docker17.05.0-ce。 -测试的Fluid版本为\ `v.0.12.0 `__ 。 -TensorFlow版本为\ `v.1.4.0-rc1 `__ 。 -使用的脚本和配置见\ `benchmark `__ 。 -图表中统计单位为samples/秒。 - -- CPU 单机单线程测试结果 - - ================ ==================== =================== - Speed Fluid CPU TensorFlow CPU - ================ ==================== =================== - mnist 1298.75 samples/s 637.57 samples/s - VGG-16 0.4147 images/s 0.1229 images/s - Resnet-50 1.6935 images/s 0.3657 images/s - Stacked-LSTM 472.3225 words/s 48.2293words/s - Seq2Seq 217.1655 words/s 28.6164 words/s - ================ ==================== =================== - -- GPU 单机单卡测试结果 - - =============== ===================== ================= - Speed Fluid GPU TensorFlow GPU - =============== ===================== ================= - mnist 19710.90 samples/s 15576.3 samples/s - VGG-16 59.83327 images/s 40.9967 images/s - Resnet-50 105.84412 97.8923 images/s - Stacked-LSTM 1319.99315 1608.2526 words/s - Seq2Seq 7147.89081 6845.1161 words/s - =============== ===================== ================= diff --git a/doc/fluid/advanced_usage/development/profiling/gpu_profiling_cn.rst b/doc/fluid/advanced_usage/development/profiling/gpu_profiling_cn.rst deleted file mode 100644 index 481fc9166..000000000 --- a/doc/fluid/advanced_usage/development/profiling/gpu_profiling_cn.rst +++ /dev/null @@ -1,239 +0,0 @@ -============ -GPU性能调优 -============ - -.. contents:: - -此教程将向您分步介绍如何使用内置的定时工具、 **nvprof** 或 **nvvp** 来运行性能分析和调优。 - -- 什么是性能分析? -- 为什么需要性能分析? -- 如何进行性能分析? -- 性能分析工具介绍 -- 详细教程 -- 性能分析小技巧 - -什么是性能分析? -================ -在软件工程的范畴里,性能分析(Profiling)是一个动态程序分析的术语,它可以指测量一个程序的空间(内存)复杂度或时间复杂度, -也可以说是某些特定指令的使用情况,或者是函数调用的频率和耗时等。通常情况下,分析得到的信息用于协助进行程序的优化。 - -简单来说,性能分析工具是用于给应用程序的性能做定量分析的。如果想很好的理解程序的行为,那程序分析工具是必不可少的利器。简单的性能分析,可以告诉您某个操作到底花了多长时间?而更深入的分析,甚至能解释为什么某个操作花了很长时间? - -为什么需要性能分析? -============================ -训练好一个深层神经网络通常要耗费非常长的时间,所以性能也就逐步变成了深度学习领域最重要的指标。 -而优化性能的首要任务,是需要了解哪些步骤拖慢了整体。 -如果某一块根本就不怎么耗时,那也就不需要急着优化性能啦! - -如何进行性能分析? -======================== -为了达到性能最优,您可以采用下面五个步骤: - -- 对代码进行性能分析 -- 找到运行慢的部分 -- 找到运行慢的原因 -- 修改成更快的版本 -- 再次对代码进行性能分析 - -Usually, processor has two key performance limits include float point throughput and -memory throughput. For GPU, it also need more parallelism to fulfill its potential. -This is why they can be so fast. - -通常情况下,处理器有两个关键性能限制:一个是浮点计算量,另一个是内存操作量。 -GPU则还需要高并行性,才能发挥其全部能力。这正是它们速度快的原因。 - -性能分析工具介绍 -====================== -就通常的GPU性能分析来说,市面上已经有NVIDIA或第三方提供的众多工具。 - -**nvprof** 是Nvidia性能分析工具, **nvvp** 则是带GUI的Nvidia可视化性能分析工具。 -在这个教程中,我们主要会介绍nvprof和nvvp。 - -:code:`test_GpuProfiler` from :code:`paddle/legacy/math/tests` directory will be used to evaluate -above profilers. - -:code:`paddle/legacy/math/test` 目录中的 :code:`test_GpuProfiler` 就是用于展示上述分析工具的用法。 - -.. literalinclude:: ../../../../paddle/legacy/math/tests/test_GpuProfiler.cpp - :language: c++ - :lines: 137-151 - :linenos: - -上述的代码片段包含了两种方法,您可以任意使用一个或两个来对感兴趣的代码段做性能分析。 - -1. :code:`REGISTER_TIMER_INFO` 是一个内置的定时器封装,可以用来计算CPU函数或cuda内核的时间消耗。 -2. :code:`REGISTER_GPU_PROFILER` 是 :code:`cudaProfilerStart` 和 :code:`cudaProfilerStop` 的通用包装对象,避免当CPU版本的PaddlePaddle调用它们时程序崩溃。 -3. :code:`REGISTER_GPU_PROFILER` 是一个封装对象,封装了 :code:`cudaProfilerStart` 和 :code:`cudaProfileStop` 两个操作;同时其内部实现可以避免纯CPU版本PaddlePaddle在执行本语句时发生崩溃。 - -您会在接下来的部分中获得更多的细节介绍。 - -详细教程 -============ - -内置定时器 ------------- - -如果想要启用PaddlePaddle的内置定时器,您首先需要在相关代码段中加入 :code:`REGISTER_TIMER_INFO`。 -接下来就可以使用 :code:`printStatus` 或者 :code:`printAllStatus` 函数来将信息输出到界面中。 -下面举个简单的例子: - -1. 加入 :code:`REGISTER_TIMER_INFO` 和 :code:`printAllStatus` 函数(如高亮部分)。 - - .. literalinclude:: ../../../../paddle/legacy/math/tests/test_GpuProfiler.cpp - :language: c++ - :lines: 137-151 - :emphasize-lines: 8-12,14 - :linenos: - -2. cmake配置中将 **WITH_TIMER** 打开,重新编译PaddlePaddle。 - - .. code-block:: bash - - cmake .. -DWITH_TIMER=ON - make - -3. 执行您的代码,并观察结果(如高亮部分)。 - - .. code-block:: bash - :emphasize-lines: 1,12-15 - - > ./paddle/legacy/math/tests/test_GpuProfiler - I1117 11:13:42.313065 2522362816 Util.cpp:155] commandline: ./paddle/legacy/math/tests/test_GpuProfiler - I1117 11:13:42.845065 2522362816 Util.cpp:130] Calling runInitFunctions - I1117 11:13:42.845208 2522362816 Util.cpp:143] Call runInitFunctions done. - [==========] Running 1 test from 1 test case. - [----------] Global test environment set-up. - [----------] 1 test from Profiler - [ RUN ] Profiler.BilinearFwdBwd - I1117 11:13:42.845310 2522362816 test_GpuProfiler.cpp:114] Enable GPU Profiler Stat: [testBilinearFwdBwd] "numSamples = 10, channels = 16, im - gSizeX = 64, imgSizeY = 64" - I1117 11:13:42.850154 2522362816 ThreadLocal.cpp:37] thread use undeterministic rand seed:20659751 - I1117 11:13:42.981501 2522362816 Stat.cpp:130] ======= StatSet: [GlobalStatInfo] status ====== - I1117 11:13:42.981539 2522362816 Stat.cpp:133] Stat=testBilinearFwdBwd total=136.141 avg=136.141 max=136.141 min=136.141 count=1 - I1117 11:13:42.981572 2522362816 Stat.cpp:141] ======= BarrierStatSet status ====== - I1117 11:13:42.981575 2522362816 Stat.cpp:154] -------------------------------------------------- - [ OK ] Profiler.BilinearFwdBwd (136 ms) - [----------] 1 test from Profiler (136 ms total) - - [----------] Global test environment tear-down - [==========] 1 test from 1 test case ran. (136 ms total) - [ PASSED ] 1 test. - -nvprof 工具 ----------------- - -要使用命令行分析工具 **nvprof**,您按如下步骤操作即可: - -1. 将 :code:`REGISTER_GPU_PROFILER` 函数加到代码中(参考强调部分)。 - - .. literalinclude:: ../../../../paddle/legacy/math/tests/test_GpuProfiler.cpp - :language: c++ - :lines: 137-151 - :emphasize-lines: 6-7 - :linenos: - -2. cmake中将 **WITH_PROFILER** 配置打开,重新编译PaddlePaddle。 - - .. code-block:: bash - - cmake .. -DWITH_PROFILER=ON - make - -3. 使用 **nvprof** 来分析执行文件。 - - .. code-block:: bash - - nvprof ./paddle/legacy/math/tests/test_GpuProfiler - -然后,您就能获得如下的分析结果: - -.. code-block:: bash - - ==78544== Profiling application: ./paddle/legacy/math/tests/test_GpuProfiler - ==78544== Profiling result: - Time(%) Time Calls Avg Min Max Name - 27.60% 9.6305ms 5 1.9261ms 3.4560us 6.4035ms [CUDA memcpy HtoD] - 26.07% 9.0957ms 1 9.0957ms 9.0957ms 9.0957ms KeBilinearInterpBw - 23.78% 8.2977ms 1 8.2977ms 8.2977ms 8.2977ms KeBilinearInterpFw - 22.55% 7.8661ms 2 3.9330ms 1.5798ms 6.2863ms [CUDA memcpy DtoH] - - ==78544== API calls: - Time(%) Time Calls Avg Min Max Name - 46.85% 682.28ms 8 85.285ms 12.639us 682.03ms cudaStreamCreateWithFlags - 39.83% 580.00ms 4 145.00ms 302ns 550.27ms cudaFree - 9.82% 143.03ms 9 15.892ms 8.7090us 142.78ms cudaStreamCreate - 1.23% 17.983ms 7 2.5690ms 23.210us 6.4563ms cudaMemcpy - 1.23% 17.849ms 2 8.9247ms 8.4726ms 9.3768ms cudaStreamSynchronize - 0.66% 9.5969ms 7 1.3710ms 288.43us 2.4279ms cudaHostAlloc - 0.13% 1.9530ms 11 177.54us 7.6810us 591.06us cudaMalloc - 0.07% 1.0424ms 8 130.30us 1.6970us 453.72us cudaGetDevice - 0.04% 527.90us 40 13.197us 525ns 253.99us cudaEventCreateWithFlags - 0.03% 435.73us 348 1.2520us 124ns 42.704us cuDeviceGetAttribute - 0.03% 419.36us 1 419.36us 419.36us 419.36us cudaGetDeviceCount - 0.02% 260.75us 2 130.38us 129.32us 131.43us cudaGetDeviceProperties - 0.02% 222.32us 2 111.16us 106.94us 115.39us cudaLaunch - 0.01% 214.06us 4 53.514us 28.586us 77.655us cuDeviceGetName - 0.01% 115.45us 4 28.861us 9.8250us 44.526us cuDeviceTotalMem - 0.01% 83.988us 4 20.997us 578ns 77.760us cudaSetDevice - 0.00% 38.918us 1 38.918us 38.918us 38.918us cudaEventCreate - 0.00% 34.573us 31 1.1150us 279ns 12.784us cudaDeviceGetAttribute - 0.00% 17.767us 1 17.767us 17.767us 17.767us cudaProfilerStart - 0.00% 15.228us 2 7.6140us 3.5460us 11.682us cudaConfigureCall - 0.00% 14.536us 2 7.2680us 1.1490us 13.387us cudaGetLastError - 0.00% 8.6080us 26 331ns 173ns 783ns cudaSetupArgument - 0.00% 5.5470us 6 924ns 215ns 2.6780us cuDeviceGet - 0.00% 5.4090us 6 901ns 328ns 3.3320us cuDeviceGetCount - 0.00% 4.1770us 3 1.3920us 1.0630us 1.8300us cuDriverGetVersion - 0.00% 3.4650us 3 1.1550us 1.0810us 1.2680us cuInit - 0.00% 830ns 1 830ns 830ns 830ns cudaRuntimeGetVersion - - -nvvp 工具 --------------- - -如果想使用可视化的分析器 **nvvp**,您可以导入 :code:`nvprof -o ...` 的输出,或者从工具的界面里运行您的应用。 - -**备注: nvvp 也支持CPU的性能分析** (需在nvvp界面中选上才能开启) - -.. image:: nvvp1.png - :align: center - :scale: 33% - -从内核函数的角度, **nvvp** 可以精确说明一个长耗时操作的具体原因。 -同时,如下图所示, **nvvp** 的内核block使用情况、寄存器使用情况和共享内存使用情况能让我们对GPU的整体使用有更好的理解。 - - -.. image:: nvvp2.png - :align: center - :scale: 33% - -而从应用的角度, **nvvp** 可以帮您提供一些定位性能瓶颈的建议。 -例如,下图中就展示了一些关于内存数据迁徙和计算资源利用率的建议,为您做性能调优提供了方向。 - -.. image:: nvvp3.png - :align: center - :scale: 33% - -.. image:: nvvp4.png - :align: center - :scale: 33% - -性能分析小技巧 -================== - -- 开始阶段,从 **nvprof** 和 **nvvp** 的输出信息入手是个不错的选择。 -- 接下来可以考虑下时间线的分析。 -- 如果真想挖掘内核深处的某个秘密,您最好先确认:这一块的耗时比例真的太高,值得深入分析。 -- 可能的情况下,试着让输出的分析数据和理论值对应。 - - 1) 例如,如果我知道内核花了10ms来移动1GB数据,那我会期望分析工具统计到速度是100GB/s。 - 2) 若有不一致之处,很有可能实际应用就是没有按照您的预期情况运行。 -- 了解您的硬件:如果您的GPU理论可以达到6 TFLOPs(6万亿次浮点运算每秒),而当前已经有5.5 TFLOPs了,那估计这里的潜力就没啥好挖的了…… - -性能分析是性能优化的关键一步。有的时候简简单单的改变就能在性能上产生明显的优化效果! -当然,具体情况因人而异。 - -参考资料 -=========== -Jeremy Appleyard, `GPU Profiling for Deep Learning `_, 2015 diff --git a/doc/fluid/advanced_usage/development/write_docs_cn.md b/doc/fluid/advanced_usage/development/write_docs_cn.md deleted file mode 120000 index ea03c90b5..000000000 --- a/doc/fluid/advanced_usage/development/write_docs_cn.md +++ /dev/null @@ -1 +0,0 @@ -../../dev/write_docs_cn.md \ No newline at end of file diff --git a/doc/fluid/advanced_usage/development/write_docs_cn.md b/doc/fluid/advanced_usage/development/write_docs_cn.md new file mode 100644 index 000000000..aeeabdec8 --- /dev/null +++ b/doc/fluid/advanced_usage/development/write_docs_cn.md @@ -0,0 +1,203 @@ +# 如何贡献文档 + +PaddlePaddle非常欢迎您贡献文档。如果您撰写/翻译的文档满足我们的要求,您的文档将会呈现在paddlapaddle.org网站和Github上供PaddlePaddle的用户阅读。 + +Paddle的文档主要分为以下几个模块: + +- 新手入门:包括安装说明、深度学习基础知识、学习资料等,旨在帮助用户快速安装和入门; + +- 使用指南:包括数据准备、网络配置、训练、Debug、预测部署和模型库文档,旨在为用户提供PaddlePaddle基本用法讲解; + +- 进阶使用:包括服务器端和移动端部署、如何贡献代码/文档、如何性能调优等,旨在满足开发者的需求; + +我们的文档支持[reStructured Text](http://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html)和[Markdown](https://guides.github.com/features/mastering-markdown/) (GitHub风格)格式的内容贡献。 + +撰写文档完成后,您可以使用预览工具查看文档在官网显示的效果,以验证您的文档是否能够在官网正确显示。 + + +## 如何使用预览工具 + +如果您正在修改代码文档(即API),并在Docker容器中使用PaddlePaddle,请在您相应的docker容器中执行下列步骤。因为API的文档生成器依赖于PaddlePaddle。 + +如果您只改进了文本/媒体内容(不需要安装或构建PaddlePaddle),或者正在主机上构建PaddlePaddle,请继续在主机上执行下列步骤。 + +### 1. Clone你希望更新或测试的相关仓库: + +首先下载完整的文档存储仓库,其中`--recurse-submodules`会同步更新FluidDoc中的submodule(所有的submodule均在`FluidDoc/external`中),以保证所有文档可以正常显示: + +``` +git clone --recurse-submodules https://github.com/PaddlePaddle/FluidDoc +``` + +其他可拉取的存储库有: + + +``` +git clone https://github.com/PaddlePaddle/book.git +git clone https://github.com/PaddlePaddle/models.git +git clone https://github.com/PaddlePaddle/Mobile.git + +``` + +您可以将这些本地副本放在电脑的任意目录下,稍后我们会在启动 PaddlePaddle.org时指定这些仓库的位置。 + +### 2. 在新目录下拉取 PaddlePaddle.org 并安装其依赖项 + +在此之前,请确认您的操作系统安装了python的依赖项 + +以ubuntu系统为例,运行: + +``` +sudo apt-get update && apt-get install -y python-dev build-essential +``` + +然后: + +``` +git clone https://github.com/PaddlePaddle/PaddlePaddle.org.git +cd PaddlePaddle.org/portal +# To install in a virtual environment. +# virtualenv venv; source venv/bin/activate +pip install -r requirements.txt +``` + +**可选项**:如果你希望实现中英网站转换,以改善PaddlePaddle.org,请安装[GNU gettext](https://www.gnu.org/software/gettext/) + +### 3. 在本地运行 PaddlePaddle.org + +添加您希望加载和构建内容的目录列表(选项包括:--paddle,--book,--models,--mobile) + +运行: + +``` +./runserver --paddle +``` + +**注意:** ``为第一步中paddle副本在您本机的存储地址。 + +如果您需要处理依赖于`book`、`models`或`mobile`存储库内容的文档,您可以添加一个或多个可选项: + +``` +./runserver --paddle \ + --book /external/book \ + --models /external/models \ + --mobile /external/mobile +``` +然后:打开浏览器并导航到http://localhost:8000。 + +>*网站可能需要几秒钟才能成功加载,因为构建需要一定的时间* + +>*如果您是在docker环境下运行的这些步骤,请检查ip确保可以将端口8000映射到您的主机* + +## 贡献新文档或更新API + +所有内容都应该以[Markdown](https://guides.github.com/features/mastering-markdown/) (GitHub风格)的形式编写(尽管在文档中有一些使用.rst格式的遗留内容)。 + + +在完成安装步骤后,您还需要完成下列操作: + + - 在你开始写作之前,我们建议你回顾一下这些关于贡献内容的指南 + + --- + + **贡献新文档** + + + - 创建一个新的` .md` 文件或者在您当前操作的仓库中修改已存在的文章 + - 将新增的文档名,添加到对应的index文件中 + + --- + + **贡献或修改Python API** + + + 在编译代码的docker容器内,或主机的对应位置: + + - 运行脚本 `paddle/scripts/paddle_build.sh`(在 Paddle repo 下) + + ```bash + # 编译paddle的python库 + cd Paddle + ./paddle/scripts/paddle_docker_build.sh gen_doc_lib full + cd .. + ``` + + - 运行预览工具 + + ``` + # 在编译paddle的对应docker镜像中运行预览工具 + + docker run -it -v /Users/xxxx/workspace/paddlepaddle_workplace:/workplace -p 8000:8000 [images_id] /bin/bash + ``` + + > 其中`/Users/xxxx/workspace/paddlepaddle_workplace`请替换成您本机的paddle工作环境,`/workplace`请替换成您相应的 docker 下的工作环境,这一映射会保证我们同时完成编译python库、修改FluidDoc和使用预览工具。 + + > [images_id]为docker中您使用的paddlepaddle的镜像id。 + + - 设置环境变量 + + ``` + # 在docker环境中 + # 设置环境变量`PYTHONPATH`使预览工具可以找到 paddle 的 python 库 + export PYTHONPATH=/workplace/Paddle/build/python/ + ``` + + - 清理旧文件 + + ``` + # 清除历史生成的文件,如果是第一次使用预览工具可以跳过这一步 + rm -rf /workplace/FluidDoc/doc/fluid/menu.json /workplace/FluidDoc/doc/fluid/api/menu.json /tmp/docs/ /tmp/api/ + ``` + + - 启动预览工具 + + ``` + cd /workplace/PaddlePaddle.org/portal + pip install -r requirements.txt + ./runserver --paddle /workplace/FluidDoc/ + ``` + +--- + + **预览修改** + + + + 打开浏览器并导航到http://localhost:8000。 + + 在要更新的页面上,单击右上角的Refresh Content + + 进入使用文档单元后,API部分并不包含内容,希望预览API文档需要点击API目录,几分钟后您将看到生成的 API reference。 + + +## 提交修改 + +如果您希望修改代码,请在`Paddle`仓库下参考[如何贡献代码](../development/contribute_to_paddle.html)执行操作。 + +如果您仅修改文档: + + - 修改的内容在`doc`文件夹内,您只需要在`FluidDoc`仓库下提交`PR` + + - 修改的内容在`external`文件夹内: + + 1.在您修改的仓库下提交PR。这是因为:`FluidDoc`仓库只是一个包装器,将其他仓库的链接(git术语的“submodule”)集合在了一起。 + + 2.当您的修改被认可后,更新FluidDoc中对应的`submodule`到源仓库最新的commit-id。 + + > 例如,您更新了book仓库中的develop分支下的文档: + + + > - 进入`FluidDoc/external/book`目录 + > - 更新 commit-id 到最新的提交:`git pull origin develop` + > - 在`FluidDoc`中提交你的修改 + + 3.在`FluidDoc`仓库下为您的修改提交PR + +提交修改与PR的步骤可以参考[如何贡献代码](../development/contribute_to_paddle.html) + +## 帮助改进预览工具 + +我们非常欢迎您对平台和支持内容的各个方面做出贡献,以便更好地呈现这些内容。您可以Fork或Clone这个存储库,或者提出问题并提供反馈,以及在issues上提交bug信息。详细内容请参考[开发指南](https://github.com/PaddlePaddle/PaddlePaddle.org/blob/develop/DEVELOPING.md)。 + +## 版权和许可 +PaddlePaddle.org在Apache-2.0的许可下提供。 diff --git a/doc/fluid/beginners_guide/basics/learning_materials.md b/doc/fluid/beginners_guide/basics/learning_materials.md deleted file mode 100644 index a27499c6e..000000000 --- a/doc/fluid/beginners_guide/basics/learning_materials.md +++ /dev/null @@ -1,54 +0,0 @@ -# 学习资料 - -## 要读的第一本书 -基础理论习得的最直接来源就是书本。按机器学习理论、深度学习理论、编程语言三方面划分,这里推荐如下书籍辅助您。 - - -### 机器学习理论 - -在开启深度学习之前,您需要先行掌握机器学习的理论。深度学习是机器学习中的一个分支,两者内在的理论基础存在强关联。 -机器学习理论的书籍教材比较多,这里推荐一本易懂易学的书籍,可以重点关注神经网络部分。 - -书名:《机器学习》(周志华著,清华大学出版社,2016年版) - -### 深度学习理论 - -打好机器学习的理论功底后,您可以开始钻研深度学习的理论。通常深度学习理论会给人留下抽象难懂的印象,且和数学结合紧密。 -为了让您能够顺利入门,这里推荐一份易学易用的教材,无论深度学习理论还是数学理论即可一本搞定。 - -书名:《Deep Learning(深度学习)》(Goodfellow, Bengio, Courville合著,赵申剑、黎彧君、符天凡和李凯合译,人民邮电出版社,2017年版) -此书电子版在Github上已经开源,详情可参考此链接 [《深度学习》](https://github.com/exacity/deeplearningbook-chinese) - -### 编程语言 - -Python方向:这里推荐您学习Python,一方面各大主流深度学习框架的主力支撑编程语言均为Python;另一方面,对比其他语言,Python较为简单易学。 -Python的教材种类较多,这里推荐一本实操和理论性都兼顾的教材,只要完成书中52个习题,跑代码然后发现问题解决,就能逐步上手。 - -书名:《“笨办法”学Python》(Zed Shaw著,王巍巍译,人民邮电出版社,2014年11月版) - - -C++方向:C++语言在底层框架中使用较多,您逐步掌握开源框架的基本操作后,在更高阶的框架应用中会用到这个技能点。 -同前面提到的Python一样,学习C++时需要多上手操作。这里推荐迅速上手C++的书籍,不但能够学习功能和结构,还提供了解决方案的示例。 - -书名:《Essential C++》【美】李普曼(Lippman,S.B.)著,侯捷译,电子工业出版社2013年8月版 - - - -## 要看的视频公开课 - -在学习一门新技术的同时,除了看书,如果有老师面对面教授,可以更快更好的学会知识。相比于线下授课,视频公开课能够在省钱省力的同时,达到易学易掌握的效果。 -目前深度学习的课程多是公开免费的,通过学习您可以更轻松的理解深度学习中的抽象理论,并在实操方面不绕弯路。 -综合课程生动性、可操作性、紧凑性、连续性这些特点,这里推荐如下课程,同步附上网址,便于您查找学习。 - -### 理论知识详解视频课 -[机器学习](http://open.163.com/special/opencourse/machinelearning.html) 斯坦福大学教授吴恩达公开课程,包含相关算法的详细讲解。 - -[AI技术](https://ai.baidu.com/paddlepaddle/player?id=13) 百度推出的“AI核心技术掌握”课程,每节课在20-30分钟左右,从AI技术到深度学习进行全面细致的解读。 - -[深度学习](http://speech.ee.ntu.edu.tw/~tlkagk/courses_ML17_2.html) 台湾李宏毅教授的在线课程,其中是英文课程,会结合国外的科研成果,但也适合新手入门和理解深度学习。 - -[编程语言](https://ai.baidu.com/paddlepaddle/openCourses) Python操作课程,从基础到进阶操作都提供详细说明,每节课时长20分钟左右。 - -### PaddlePaddle实操视频课 -掌握好理论基础,具备编程能力后,您可以开始使用PaddlePaddle Fluid进行实操,从初阶开始学习,向着中高阶努力。 -目前已有PaddlePaddle官方视频公开课在官网呈现,内含PaddlePaddle实战、PaddlePaddle应用场景和机器学习模型讲解课程,帮助开发者从零开始使用PaddlePaddle,从简单场景逐步过渡到工业级应用。[点击这里](http://ai.baidu.com/paddlepaddle/openCourses)您即可开始视频课的学习之旅。 diff --git a/doc/fluid/beginners_guide/basics/learning_materials_en.md b/doc/fluid/beginners_guide/basics/learning_materials_en.md deleted file mode 100644 index ef870c9ab..000000000 --- a/doc/fluid/beginners_guide/basics/learning_materials_en.md +++ /dev/null @@ -1,72 +0,0 @@ -# Learning Materials - -## The first book to start your journey - -Books are the most direct resources to pick up the rationale of a subject. We recommend the following books for you which are categorized into machine learning theory, deep learning theory and programming languages. - -### Books for Machine Learning Theory - -Machine learning theory is a prerequisite to deep learning. Deep learning, one of the branches of machine learning, has a theoretical basis strongly relevant to machine learning. -There have been various textbooks nowadays, from which we select an easier one for you. Please pay more attention to the chapters involving Neural Networks in the textbook. - -book:《Machine Learning》(Zhihua Zhou,Tsinghua University Express, 2016) - -### Books for Deep Learning Theory - -Having consolidated your basis of machine learning, it is time to dive into deep learning. -It's commonplace that deep learning theory leaves an obscure and abstract impression on learners, and tightly connects with mathematics. -To help you smoothly get started with deep learning, we recommend the following easy-to-go textbook, which features a good explanation of both deep learning theory and its related mathematic basis. - - -book:《Deep Learning》(Goodfellow, Bengio, Courville) - - -### Books for Programming Languages - -Python: - -Python is our recommended programming language. On the one hand, Python is the main supportive language of mainstream deep learning frameworks; On the other hand, Python is easier than other languages for beginners. -Python textbooks abounds in the market, and what lies here is a textbook that ingeniously balanced theoretical knowledge with practical operations. Through resolving the 52 questions in the book, running your answer code, and addressing the problems occurred in this process, you can gradually get the hang of Python. - - -Book:《Learn Python the Hard Way》(Zed Shaw) - - -C++: - -C++ is adopted widely in low level part of frameworks. After you have gradually mastered basic operations of an open-source framework, programming in C++ is an important skill in the more advanced operations of a framework. -C++ also requires frequent practical exercises like Python mentioned above. -The book lying here is a quick-to-start textbook with introduction to functions and structures, and examples of resolutions. - - -Book:《Essential C++》(Lippman,S.B.) - - - -## Open Lectures - -Besides textbooks, face-to-face instructions from teachers would contribute a robust and quick boost to your learning of new technology. Compared with on-campus lectures, open video lectures can not only make your learning simpler, but also save your time and energy. - -Currently, the courses about deep learning are mostly free and public. These courses will facilitate you to comprehend abstract theory embedded in deep learning in a more effortless way, and direct you straightly towards practical applications. Regards to the vitality, operability, continuity, and compactness, we recommend the following courses and their corresponding links are attached afterwards to exempt your time from searching. - -### Lectures Aimed at Theory Analysis - -[Machine Learning](http://open.163.com/special/opencourse/machinelearning.html) : Delivered by Andrew Ng, Stanford University. This series of lectures encompasses detailed analysis on relevant algorithms. - -[Deep Learning](http://speech.ee.ntu.edu.tw/~tlkagk/courses_ML17_2.html) : An online English course delivered by Prof. Hung-yi Lee. It is combined with the abroad research contributions, and at the same time it is suitable for novices to get started and understand deep learning. - -The following are several lectures delivered in Chinese: - -[AI tech](https://ai.baidu.com/paddlepaddle/player?id=13) : The course named "Master Core AI Technology" organized by Baidu deciphers AI technology to Deep Learning in a comprehensive and fine-grained way. Each lesson lasts for 20 - 30 minutes. - - -[Programming Languages](https://ai.baidu.com/paddlepaddle/openCourses) Python tutorials,with 20 minutes each lesson, illustrates from the basis to advanced usage. - -### PaddlePaddle Hands-on Training - -Having equipped with a firm grasp of theory basis and programming ability, you can now commence a practical adventure to PaddlePaddle Fluid, and grow up from a beginner level to a medium or high level. - -Our official open courses are presented on the official site. The courses embrace PaddlePaddle practical operations, scenarios applied with PaddlePaddle, and introduction to PaddlePaddle machine learning models. Developers can take full advantage of our official courses to start PaddlePaddle from scratch and gradually move to industrial application. - -[Click Here](http://ai.baidu.com/paddlepaddle/openCourses) to embark on your sailing in our official deep learning video lectures. - diff --git a/doc/fluid/beginners_guide/index.rst b/doc/fluid/beginners_guide/index.rst index 5cade329f..a01ae5c40 100644 --- a/doc/fluid/beginners_guide/index.rst +++ b/doc/fluid/beginners_guide/index.rst @@ -10,10 +10,6 @@ PaddlePaddle (PArallel Distributed Deep LEarning)是一个易用、高效、灵 - `安装说明 <../beginners_guide/install/index_cn.html>`_:我们支持在Ubuntu/CentOS/Windows/MacOS环境上的安装 -如果您初次接触深度学习,在学习PaddlePaddle之前建议您先阅读以下资料: - - - `学习资料 <../beginners_guide/basics/learning_materials.html>`_:推荐机器学习、深度学习和编程语言三个方面的书籍与视频公开课 - 如果您已经具备一定的深度学习基础,第一次使用PaddlePaddle时,可以跟随下列简单的模型案例供您快速上手: - `Fluid编程指南 <../beginners_guide/programming_guide/programming_guide.html>`_:介绍 Fluid 的基本概念和使用方法 @@ -29,5 +25,4 @@ PaddlePaddle (PArallel Distributed Deep LEarning)是一个易用、高效、灵 install/index_cn.rst quick_start/index.rst basics/index.rst - basics/learning_materials.md programming_guide/programming_guide.md diff --git a/doc/fluid/beginners_guide/index_en.rst b/doc/fluid/beginners_guide/index_en.rst index b4aed76cc..3e60ffb58 100644 --- a/doc/fluid/beginners_guide/index_en.rst +++ b/doc/fluid/beginners_guide/index_en.rst @@ -11,22 +11,17 @@ For beginners of PaddlePaddle, the following documentation will tutor you about - `Installation Manuals <../beginners_guide/install/index_en.html>`_ :Installation on Ubuntu/CentOS/Windows/MacOS is supported. -The following resources are recommended for novices in deep learning: - - - `Resources <../beginners_guide/basics/learning_materials_en.html>`_ :Selected books and lectures about machine learning, deep learning and programming languages. - If you have been armed with certain level of deep learning knowledge, and it happens to be the first time to try PaddlePaddle, the following cases of model building will expedite your learning process: - `Programming with Fluid <../beginners_guide/programming_guide/programming_guide_en.html>`_ : Core concepts and basic usage of Fluid - `Quick Start <../beginners_guide/quick_start/index_en.html>`_: Two easy-to-go models, linear regression model and digit recognition model, are in place to speed up your study of training neural networks - - `Deep Learning Basics <../beginners_guide/basics/index_en.html>`_: This section encompasses various fields of fundamental deep learning knowledge, such as image classification, customized recommendation, machine translation, and examples implemented by Fluid are provided. + - `Deep Learning Basics <../beginners_guide/basics/index_en.html>`_: This section encompasses various fields of fundamental deep learning knowledge, such as image classification, customized recommendation, machine translation, and examples implemented by Fluid are provided. .. toctree:: :hidden: install/index_en.rst - basics/learning_materials_en.md programming_guide/programming_guide_en.md diff --git a/doc/fluid/build_and_install/build_from_source_cn.rst b/doc/fluid/build_and_install/build_from_source_cn.rst deleted file mode 100644 index d0dacb104..000000000 --- a/doc/fluid/build_and_install/build_from_source_cn.rst +++ /dev/null @@ -1,225 +0,0 @@ -从源码编译 -====================== - -.. _requirements: - -需要的软硬件 ----------------- - -为了编译PaddlePaddle,我们需要 - -1. 一台电脑,可以装的是 Linux, Windows 或者 MacOS 操作系统 -2. Docker - -不需要依赖其他任何软件了。即便是 Python 和 GCC 都不需要,因为我们会把所有编译工具都安装进一个 Docker 镜像里。 - -.. _build_step: - -编译方法 ----------------- - -PaddlePaddle需要使用Docker环境完成编译,这样可以免去单独安装编译依赖的步骤,可选的不同编译环境Docker镜像 -可以在 `这里 `__ 找到,您也可以 -在 `这里 `__ 找到 paddle_manylinux_devel -镜像的编译以及使用方法。或者参考下述可选步骤,从源码中构建用于编译PaddlePaddle的Docker镜像。 - -如果您选择不使用Docker镜像,则需要在本机安装下面章节列出的 :ref:`编译依赖 <_compile_deps>` 之后才能开始编译的步骤。 - -编译PaddlePaddle,需要执行: - -.. code-block:: bash - - # 1. 获取源码 - git clone https://github.com/PaddlePaddle/Paddle.git - cd Paddle - # 2. 可选步骤:源码中构建用于编译PaddlePaddle的Docker镜像 - docker build -t paddle:dev . - # 3. 执行下面的命令编译CPU-Only的二进制 - docker run -it -v $PWD:/paddle -w /paddle -e "PYTHON_ABI=cp27-cp27mu" -e "WITH_GPU=OFF" -e "WITH_TESTING=OFF" paddlepaddle/paddle_manylinux_devel:cuda8.0_cudnn5 ./paddle/scripts/paddle_build.sh build - # 4. 或者也可以使用为上述可选步骤构建的镜像(必须先执行第2步) - docker run -it -v $PWD:/paddle -w /paddle -e "WITH_GPU=OFF" -e "WITH_TESTING=OFF" paddle:dev ./paddle/scripts/paddle_build.sh build - -注: - -- 上述命令把当前目录(源码树根目录)映射为 container 里的 :code:`/paddle` 目录。 - -- 如果您使用的是 manylinux 的镜像进行编译, 那么您需要通过环境变量 :code:`PYTHON_ABI` 来指定一个 `Python ABI `__. -PaddlePaddle目前支持的 Python ABI 有 :code:`cp27-cp27m` 和 :code:`cp27-cp27mu`. - -编译完成后会在build/python/dist目录下生成输出的whl包,可以选在在当前机器安装也可以拷贝到目标机器安装: - -.. code-block:: bash - - pip install build/python/dist/*.whl - -如果机器中已经安装过PaddlePaddle,有两种方法: - -.. code-block:: bash - - 1. 先卸载之前的版本,再重新安装 - pip uninstall paddlepaddle - pip install build/python/dist/*.whl - - 2. 直接升级到更新的版本 - pip install build/python/dist/*.whl -U - -.. _run_test: - -执行单元测试 ----------------- - -如果您期望在编译完成后立即执行所有的单元测试,可以按照下面的方法: - -设置 :code:`RUN_TEST=ON` 和 :code:`WITH_TESTING=ON` 就会在完成编译之后,立即执行单元测试。 -开启 :code:`WITH_GPU=ON` 可以指定同时执行GPU上的单元测试。 - -.. code-block:: bash - - docker run -it -v $PWD:/paddle -w /paddle -e "WITH_GPU=OFF" -e "WITH_TESTING=ON" -e "RUN_TEST=ON" paddlepaddle/paddle_manylinux_devel:cuda8.0_cudnn5 ./paddle/scripts/paddle_build.sh test - -如果期望执行其中一个单元测试,(比如 :code:`test_sum_op` ): - -.. code-block:: bash - - docker run -it -v $PWD:/paddle -w /paddle -e "WITH_GPU=OFF" -e "WITH_TESTING=ON" -e "RUN_TEST=OFF" paddlepaddle/paddle_manylinux_devel:cuda8.0_cudnn5 /bin/bash - ./paddle/scripts/paddle_build.sh build - cd build - ctest -R test_sum_op -V - -.. _faq_docker: - -常见问题 ----------------- - -- 什么是 Docker? - - 如果您没有听说 Docker,可以把它想象为一个类似 virtualenv 的系统,但是虚拟的不仅仅是 Python 的运行环境。 - -- Docker 还是虚拟机? - - 有人用虚拟机来类比 Docker。需要强调的是:Docker 不会虚拟任何硬件,Docker container 里运行的编译工具实际上都是在本机的 CPU 和操作系统上直接运行的,性能和把编译工具安装在本机运行一样。 - -- 为什么用 Docker? - - 把工具和配置都安装在一个 Docker image 里可以标准化编译环境。这样如果遇到问题,其他人可以复现问题以便帮助。 - - 另外,对于习惯使用Windows和MacOS的开发者来说,使用Docker就不用配置交叉编译环境了。 - -- 我可以选择不用Docker吗? - - 当然可以。大家可以用把开发工具安装进入 Docker image 一样的方式,把这些工具安装到本机。这篇文档介绍基于 Docker 的开发流程,是因为这个流程比其他方法都更简便。 - -- 学习 Docker 有多难? - - 理解 Docker 并不难,大概花十分钟看一下 `如何使用Docker `_ 。这可以帮您省掉花一小时安装和配置各种开发工具,以及切换机器时需要新安装的辛苦。别忘了 PaddlePaddle 更新可能导致需要新的开发工具。更别提简化问题复现带来的好处了。 - -- 我可以用 IDE 吗? - - 当然可以,因为源码就在本机上。IDE 默认调用 make 之类的程序来编译源码,我们只需要配置 IDE 来调用 Docker 命令编译源码即可。 - - 很多 PaddlePaddle 开发者使用 Emacs。他们在自己的 `~/.emacs` 配置文件里加两行 - - .. code-block:: emacs - - (global-set-key "\C-cc" 'compile) - (setq compile-command "docker run --rm -it -v $(git rev-parse --show-toplevel):/paddle paddle:dev") - - 就可以按 `Ctrl-C` 和 `c` 键来启动编译了。 - -- 可以并行编译吗? - - 是的。我们的 Docker image 运行一个 `Paddle编译Bash脚本 `_ 。这个脚本调用 `make -j$(nproc)` 来启动和 CPU 核一样多的进程来并行编译。 - -- Docker 需要 sudo - - 如果用自己的电脑开发,自然也就有管理员权限(sudo)了。如果用公用的电脑开发,需要请管理员安装和配置好 Docker。此外,PaddlePaddle 项目在努力开始支持其他不需要 sudo 的集装箱技术,比如 rkt。 - -- 在 Windows/MacOS 上编译很慢 - - Docker 在 Windows 和 MacOS 都可以运行。不过实际上是运行在一个 Linux 虚拟机上。可能需要注意给这个虚拟机多分配一些 CPU 和内存,以保证编译高效。具体做法请参考 `如何为Windows/Mac计算机上的Docker增加内存和虚拟机 `_ 。 - -- 磁盘不够 - - 本文中的例子里,`docker run` 命令里都用了 `--rm` 参数,这样保证运行结束之后的 containers 不会保留在磁盘上。可以用 `docker ps -a` 命令看到停止后但是没有删除的 containers。`docker build` 命令有时候会产生一些中间结果,是没有名字的 images,也会占用磁盘。可以参考 `如何删除Docker Container `_ 来清理这些内容。 - - -.. _compile_deps: - -附录:编译依赖 ----------------- - -PaddlePaddle编译需要使用到下面的依赖(包含但不限于),其他的依赖软件,会自动在编译时下载。 - -.. csv-table:: PaddlePaddle编译依赖 - :header: "依赖", "版本", "说明" - :widths: 10, 15, 30 - - "CMake", ">=3.2", "" - "GCC", "4.8.2", "推荐使用CentOS的devtools2" - "Python", "2.7.x", "依赖libpython2.7.so" - "pip", ">=9.0", "" - "numpy", "", "" - "SWIG", ">=2.0", "" - "Go", ">=1.8", "可选" - - -.. _build_options: - -附录:编译选项 ----------------- - -PaddlePaddle的编译选项,包括生成CPU/GPU二进制文件、链接何种BLAS库等。 -用户可在调用cmake的时候设置它们,详细的cmake使用方法可以参考 -`官方文档 `_ 。 - -在cmake的命令行中,通过使用 ``-D`` 命令设置该类编译选项,例如: - -.. code-block:: bash - - cmake .. -DWITH_GPU=OFF - -.. csv-table:: 编译选项说明 - :header: "选项", "说明", "默认值" - :widths: 1, 7, 2 - - "WITH_GPU", "是否支持GPU", "ON" - "WITH_C_API", "是否仅编译CAPI", "OFF" - "WITH_DOUBLE", "是否使用双精度浮点数", "OFF" - "WITH_DSO", "是否运行时动态加载CUDA动态库,而非静态加载CUDA动态库。", "ON" - "WITH_AVX", "是否编译含有AVX指令集的PaddlePaddle二进制文件", "ON" - "WITH_PYTHON", "是否内嵌PYTHON解释器", "ON" - "WITH_STYLE_CHECK", "是否编译时进行代码风格检查", "ON" - "WITH_TESTING", "是否开启单元测试", "OFF" - "WITH_DOC", "是否编译中英文文档", "OFF" - "WITH_SWIG_PY", "是否编译PYTHON的SWIG接口,该接口可用于预测和定制化训练", "Auto" - "WITH_GOLANG", "是否编译go语言的可容错parameter server", "OFF" - "WITH_MKL", "是否使用MKL数学库,如果为否则是用OpenBLAS", "ON" - -BLAS -+++++ - -PaddlePaddle支持 `MKL `_ 和 -`OpenBlAS `_ 两种BLAS库。默认使用MKL。如果使用MKL并且机器含有AVX2指令集, -还会下载MKL-DNN数学库,详细参考 `mkldnn设计文档 `_ 。 - -如果关闭MKL,则会使用OpenBLAS作为BLAS库。 - -CUDA/cuDNN -+++++++++++ - -PaddlePaddle在编译时/运行时会自动找到系统中安装的CUDA和cuDNN库进行编译和执行。 -使用参数 :code:`-DCUDA_ARCH_NAME=Auto` 可以指定开启自动检测SM架构,加速编译。 - -PaddlePaddle可以使用cuDNN v5.1之后的任何一个版本来编译运行,但尽量请保持编译和运行使用的cuDNN是同一个版本。 -我们推荐使用最新版本的cuDNN。 - -编译选项的设置 -++++++++++++++ - -PaddePaddle通过编译时指定路径来实现引用各种BLAS/CUDA/cuDNN库。cmake编译时,首先在系统路径( :code:`/usr/lib:/usr/local/lib` )中搜索这几个库,同时也会读取相关路径变量来进行搜索。 通过使用 ``-D`` 命令可以设置,例如 - -.. code-block:: bash - - cmake .. -DWITH_GPU=ON -DWITH_TESTING=OFF -DCUDNN_ROOT=/opt/cudnnv5 - -**注意:这几个编译选项的设置,只在第一次cmake的时候有效。如果之后想要重新设置,推荐清理整个编译目录(** :code:`rm -rf` )**后,再指定。** diff --git a/doc/fluid/build_and_install/build_from_source_en.rst b/doc/fluid/build_and_install/build_from_source_en.rst deleted file mode 100644 index 664b68da8..000000000 --- a/doc/fluid/build_and_install/build_from_source_en.rst +++ /dev/null @@ -1,237 +0,0 @@ -Build from Sources -========================== - -.. _requirements: - -Requirements ----------------- - -To build PaddlePaddle, you need - -1. A computer -- Linux, Windows, MacOS. -2. Docker. - -Nothing else. Not even Python and GCC, because you can install all build tools into a Docker image. -We run all the tools by running this image. - -.. _build_step: - -How To Build ----------------- - -You need to use Docker to build PaddlePaddle -to avoid installing dependencies by yourself. We have several pre-built -Docker images `here `_ , -you can also find how to build and use paddle_manylinux_devel Docker image from -`here `__ -Or you can build your own image from source as the optional step below: - -If you don't wish to use docker,you need to install several compile dependencies manually as :ref:`Compile Dependencies <_compile_deps>` shows to start compilation. - -.. code-block:: bash - - # 1. clone the source code - git clone https://github.com/PaddlePaddle/Paddle.git - cd Paddle - # 2. Optional: build development docker image from source - docker build -t paddle:dev . - # 3. Run the following command to build a CPU-Only binaries - docker run -it -v $PWD:/paddle -w /paddle -e "PYTHON_ABI=cp27-cp27mu" -e "WITH_GPU=OFF" -e "WITH_TESTING=OFF" paddlepaddle/paddle_manylinux_devel:cuda8.0_cudnn5 ./paddle/scripts/paddle_build.sh build - # 4. Or, use your built Docker image to build PaddlePaddle (must run step 2) - docker run -it -v $PWD:/paddle -w /paddle -e "WITH_GPU=OFF" -e "WITH_TESTING=OFF" paddle:dev ./paddle/scripts/paddle_build.sh build - -NOTE: - -- The above command try to mount the current working directory (root directory of source code) -into :code:`/paddle` directory inside docker container. - -- You need to pass in the required environment variable :code:`PYTHON_ABI` to specify a `Python ABI `__. -Currently PaddlePaddle supported Python ABIs include :code:`cp27-cp27m` and :code:`cp27-cp27mu` . - -When the compile finishes, you can get the output whl package under -build/python/dist, then you can choose to install the whl on local -machine or copy it to the target machine. - -.. code-block:: bash - - pip install build/python/dist/*.whl - -If the machine has installed PaddlePaddle before, there are two methods: - -.. code-block:: bash - - 1. uninstall and reinstall - pip uninstall paddlepaddle - pip install build/python/dist/*.whl - - 2. upgrade directly - pip install build/python/dist/*.whl -U - -.. _run_test: - -Run Tests ----------------- - -If you wish to run the tests, you may follow the below steps: - -When using Docker, set :code:`RUN_TEST=ON` and :code:`WITH_TESTING=ON` will run test immediately after the build. -Set :code:`WITH_GPU=ON` Can also run tests on GPU. - -.. code-block:: bash - - docker run -it -v $PWD:/paddle -w /paddle -e "WITH_GPU=OFF" -e "WITH_TESTING=ON" -e "RUN_TEST=ON" paddlepaddle/paddle_manylinux_devel:cuda8.0_cudnn5 ./paddle/scripts/paddle_build.sh test - -If you wish to run only one unit test, like :code:`test_sum_op`: - -.. code-block:: bash - - docker run -it -v $PWD:/paddle -w /paddle -e "WITH_GPU=OFF" -e "WITH_TESTING=ON" -e "RUN_TEST=OFF" paddlepaddle/paddle_manylinux_devel:cuda8.0_cudnn5 /bin/bash - ./paddle/scripts/paddle_build.sh build - cd build - ctest -R test_sum_op -V - -.. _faq_docker: - -Frequently Asked Questions ---------------------------- - -- What is Docker? - - If you haven't heard of it, consider it something like Python's virtualenv. - -- Docker or virtual machine? - - Some people compare Docker with VMs, but Docker doesn't virtualize any hardware nor running a guest OS, which means there is no compromise on the performance. - -- Why Docker? - - Using a Docker image of build tools standardizes the building environment, which makes it easier for others to reproduce your problems and to help. - - Also, some build tools don't run on Windows or Mac or BSD, but Docker runs almost everywhere, so developers can use whatever computer they want. - -- Can I choose not to use Docker? - - Sure, you don't have to install build tools into a Docker image; instead, you can install them on your local computer. This document exists because Docker would make the development way easier. - -- How difficult is it to learn Docker? - - It takes you ten minutes to read `an introductory article `_ and saves you more than one hour to install all required build tools, configure them, especially when new versions of PaddlePaddle require some new tools. Not even to mention the time saved when other people trying to reproduce the issue you have. - -- Can I use my favorite IDE? - - Yes, of course. The source code resides on your local computer, and you can edit it using whatever editor you like. - - Many PaddlePaddle developers are using Emacs. They add the following few lines into their `~/.emacs` configure file: - - .. code-block:: emacs - - (global-set-key "\C-cc" 'compile) - (setq compile-command "docker run --rm -it -v $(git rev-parse --show-toplevel):/paddle paddle:dev") - - so they could type `Ctrl-C` and `c` to build PaddlePaddle from source. - -- Does Docker do parallel building? - - Our building Docker image runs a `Bash script `_ , which calls `make -j$(nproc)` to starts as many processes as the number of your CPU cores. - -- Docker requires sudo - - An owner of a computer has the administrative privilege, a.k.a., sudo, and Docker requires this privilege to work properly. If you use a shared computer for development, please ask the administrator to install and configure Docker. We will do our best to support rkt, another container technology that doesn't require sudo. - -- Docker on Windows/MacOS builds slowly - - On Windows and MacOS, Docker containers run in a Linux VM. You might want to give this VM some more memory and CPUs so to make the building efficient. Please refer to `this issue `_ for details. - -- Not enough disk space - - Examples in this article use option `--rm` with the `docker run` command. This option ensures that stopped containers do not exist on hard disks. We can use `docker ps -a` to list all containers, including stopped. Sometimes `docker build` generates some intermediate dangling images, which also take disk space. To clean them, please refer to `this article `_ . - -.. _compile_deps: - -Appendix: Compile Dependencies -------------------------------- - -PaddlePaddle need the following dependencies when compiling, other dependencies -will be downloaded automatically. - -.. csv-table:: PaddlePaddle Compile Dependencies - :header: "Dependency", "Version", "Description" - :widths: 10, 15, 30 - - "CMake", ">=3.2", "" - "GCC", "4.8.2", "Recommend devtools2 for CentOS" - "Python", "2.7.x", "Need libpython2.7.so" - "pip", ">=9.0", "" - "numpy", "", "" - "SWIG", ">=2.0", "" - "Go", ">=1.8", "Optional" - - -.. _build_options: - -Appendix: Build Options -------------------------- - -Build options include whether build binaries for CPU or GPU, which BLAS -library to use etc. You may pass these settings when running cmake. -For detailed cmake tutorial please refer to `here `__ 。 - - -You can add :code:`-D` argument to pass such options, like: - -.. code-block:: bash - - cmake .. -DWITH_GPU=OFF - -.. csv-table:: Bool Type Options - :header: "Option", "Description", "Default" - :widths: 1, 7, 2 - - "WITH_GPU", "Build with GPU support", "ON" - "WITH_C_API", "Build only CAPI", "OFF" - "WITH_DOUBLE", "Build with double precision", "OFF" - "WITH_DSO", "Dynamically load CUDA libraries", "ON" - "WITH_AVX", "Build with AVX support", "ON" - "WITH_PYTHON", "Build with integrated Python interpreter", "ON" - "WITH_STYLE_CHECK", "Check code style when building", "ON" - "WITH_TESTING", "Build unit tests", "OFF" - "WITH_DOC", "Build documentations", "OFF" - "WITH_SWIG_PY", "Build Python SWIG interface for V2 API", "Auto" - "WITH_GOLANG", "Build fault-tolerant parameter server written in go", "OFF" - "WITH_MKL", "Use MKL as BLAS library, else use OpenBLAS", "ON" - - -BLAS -+++++ - -PaddlePaddle supports `MKL `_ and -`OpenBlAS `_ as BLAS library。By default it uses MKL. -If you are using MKL and your machine supports AVX2, MKL-DNN will also be downloaded -and used, for more `details `_ . - -If you choose not to use MKL, then OpenBlAS will be used. - -CUDA/cuDNN -+++++++++++ - -PaddlePaddle will automatically find CUDA and cuDNN when compiling and running. -parameter :code:`-DCUDA_ARCH_NAME=Auto` can be used to detect SM architecture -automatically in order to speed up the build. - -PaddlePaddle can build with any version later than cuDNN v5.1, and we intend to -keep on with latest cuDNN versions. Be sure to run with the same version of cuDNN -you built. - -Pass Compile Options -++++++++++++++++++++++ - -You can pass compile options to use intended BLAS/CUDA/Cudnn libraries. -When running cmake command, it will search system paths like -:code:`/usr/lib:/usr/local/lib` and then search paths that you -passed to cmake, i.e. - -.. code-block:: bash - - cmake .. -DWITH_GPU=ON -DWITH_TESTING=OFF -DCUDNN_ROOT=/opt/cudnnv5 - -**NOTE: These options only take effect when running cmake for the first time, you need to clean the cmake cache or clean the build directory (** :code:`rm -rf` **) if you want to change it.** diff --git a/doc/fluid/build_and_install/docker_install_cn.rst b/doc/fluid/build_and_install/docker_install_cn.rst deleted file mode 100644 index 106c86bac..000000000 --- a/doc/fluid/build_and_install/docker_install_cn.rst +++ /dev/null @@ -1,146 +0,0 @@ -使用Docker安装运行 -================================ - -使用Docker安装和运行PaddlePaddle可以无需考虑依赖环境即可运行。并且也可以在Windows的docker中运行。 -您可以在 `Docker官网 `_ 获得基本的Docker安装和使用方法。 - -如果您在使用Windows,可以参考 -`这篇 `_ -教程,完成在Windows上安装和使用Docker。 - -在了解Docker的基本使用方法之后,即可开始下面的步骤: - -.. _docker_pull: - -获取PaddlePaddle的Docker镜像 ------------------------------- - -执行下面的命令获取最新的PaddlePaddle Docker镜像,版本为cpu_avx_mkl: - - .. code-block:: bash - - docker pull paddlepaddle/paddle - -对于国内用户,我们提供了加速访问的镜像源: - - .. code-block:: bash - - docker pull docker.paddlepaddlehub.com/paddle - -下载GPU版本(cuda8.0_cudnn5_avx_mkl)的Docker镜像: - - .. code-block:: bash - - docker pull paddlepaddle/paddle:latest-gpu - docker pull docker.paddlepaddlehub.com/paddle:latest-gpu - -选择下载使用不同的BLAS库的Docker镜像: - - .. code-block:: bash - - # 默认是使用MKL的镜像 - docker pull paddlepaddle/paddle - # 使用OpenBLAS的镜像 - docker pull paddlepaddle/paddle:latest-openblas - -下载指定版本的Docker镜像,可以从 `DockerHub网站 `_ 获取可选的tag,并执行下面的命令: - - .. code-block:: bash - - docker pull paddlepaddle/paddle:[tag] - # 比如: - docker pull docker.paddlepaddlehub.com/paddle:0.11.0-gpu - -.. _docker_run: - -在Docker中执行PaddlePaddle训练程序 ----------------------------------- - -假设您已经在当前目录(比如在/home/work)编写了一个PaddlePaddle的程序 :code:`train.py` (可以参考 -`PaddlePaddleBook `_ -编写),就可以使用下面的命令开始执行训练: - - .. code-block:: bash - - cd /home/work - docker run -it -v $PWD:/work paddlepaddle/paddle /work/train.py - -上述命令中, :code:`-it` 参数说明容器已交互式运行; :code:`-v $PWD:/work` -指定将当前路径(Linux中$PWD变量会展开为当前路径的绝对路径)挂载到容器内部的 :code:`/work` -目录; :code:`paddlepaddle/paddle` 指定需要使用的容器; 最后 :code:`/work/train.py` -为容器内执行的命令,即运行训练程序。 - -当然,您也可以进入到Docker容器中,以交互式的方式执行或调试您的代码: - - .. code-block:: bash - - docker run -it -v $PWD:/work paddlepaddle/paddle /bin/bash - cd /work - python train.py - -**注:PaddlePaddle Docker镜像为了减小体积,默认没有安装vim,您可以在容器中执行** :code:`apt-get install -y vim` **安装后,在容器中编辑代码。** - -.. _docker_run_book: - -使用Docker启动PaddlePaddle Book教程 ------------------------------------ - -使用Docker可以快速在本地启动一个包含了PaddlePaddle官方Book教程的Jupyter Notebook,可以通过网页浏览。 -PaddlePaddle Book是为用户和开发者制作的一个交互式的Jupyter Notebook。 -如果您想要更深入了解deep learning,PaddlePaddle Book一定是您最好的选择。 -大家可以通过它阅读教程,或者制作和分享带有代码、公式、图表、文字的交互式文档。 - -我们提供可以直接运行PaddlePaddle Book的Docker镜像,直接运行: - - .. code-block:: bash - - docker run -p 8888:8888 paddlepaddle/book - -国内用户可以使用下面的镜像源来加速访问: - - .. code-block:: bash - - docker run -p 8888:8888 docker.paddlepaddlehub.com/book - -然后在浏览器中输入以下网址: - - .. code-block:: text - - http://localhost:8888/ - -就这么简单,享受您的旅程! - -.. _docker_run_gpu: - -使用Docker执行GPU训练 ------------------------------- - -为了保证GPU驱动能够在镜像里面正常运行,我们推荐使用 -`nvidia-docker `_ 来运行镜像。 -请不要忘记提前在物理机上安装GPU最新驱动。 - - .. code-block:: bash - - nvidia-docker run -it -v $PWD:/work paddlepaddle/paddle:latest-gpu /bin/bash - -**注: 如果没有安装nvidia-docker,可以尝试以下的方法,将CUDA库和Linux设备挂载到Docker容器内:** - - .. code-block:: bash - - export CUDA_SO="$(\ls /usr/lib64/libcuda* | xargs -I{} echo '-v {}:{}') $(\ls /usr/lib64/libnvidia* | xargs -I{} echo '-v {}:{}')" - export DEVICES=$(\ls /dev/nvidia* | xargs -I{} echo '--device {}:{}') - docker run ${CUDA_SO} ${DEVICES} -it paddlepaddle/paddle:latest-gpu - -**关于AVX:** - -AVX是一种CPU指令集,可以加速PaddlePaddle的计算。最新的PaddlePaddle Docker镜像默认 -是开启AVX编译的,所以,如果您的电脑不支持AVX,需要单独 -`编译 <./build_from_source_cn.html>`_ PaddlePaddle为no-avx版本。 - -以下指令能检查Linux电脑是否支持AVX: - - .. code-block:: bash - - if cat /proc/cpuinfo | grep -i avx; then echo Yes; else echo No; fi - -如果输出是No,就需要选择使用no-AVX的镜像 diff --git a/doc/fluid/build_and_install/docker_install_en.rst b/doc/fluid/build_and_install/docker_install_en.rst deleted file mode 100644 index 25aecb8d0..000000000 --- a/doc/fluid/build_and_install/docker_install_en.rst +++ /dev/null @@ -1,153 +0,0 @@ -Run in Docker Containers -================================= - -Run PaddlePaddle in Docker container so that you don't need to care about -runtime dependencies, also you can run under Windows system. You can get -tutorials at `here `_ . - -If you are using Windows, please refer to -`this `_ -tutorial to start running docker under windows. - -After you've read above tutorials you may proceed the following steps. - -.. _docker_pull: - -Pull PaddlePaddle Docker Image ------------------------------- - -Run the following command to download the latest Docker images, the version is cpu_avx_mkl: - - .. code-block:: bash - - docker pull paddlepaddle/paddle - -For users in China, we provide a faster mirror: - - .. code-block:: bash - - docker pull docker.paddlepaddlehub.com/paddle - -Download GPU version (cuda8.0_cudnn5_avx_mkl) images: - - .. code-block:: bash - - docker pull paddlepaddle/paddle:latest-gpu - docker pull docker.paddlepaddlehub.com/paddle:latest-gpu - -Choose between different BLAS version: - - .. code-block:: bash - - # image using MKL by default - docker pull paddlepaddle/paddle - # image using OpenBLAS - docker pull paddlepaddle/paddle:latest-openblas - - -If you want to use legacy versions, choose a tag from -`DockerHub `_ -and run: - - .. code-block:: bash - - docker pull paddlepaddle/paddle:[tag] - # i.e. - docker pull docker.paddlepaddlehub.com/paddle:0.11.0-gpu - -.. _docker_run: - -Launch your training program in Docker --------------------------------------- - -Assume that you have already written a PaddlePaddle program -named :code:`train.py` under directory :code:`/home/work` (refer to -`PaddlePaddleBook `_ -for more samples), then run the following command: - - .. code-block:: bash - - cd /home/work - docker run -it -v $PWD:/work paddlepaddle/paddle /work/train.py - -In the above command, :code:`-it` means run the container interactively; -:code:`-v $PWD:/work` means mount the current directory ($PWD will expand -to current absolute path in Linux) under :code:`/work` in the container. -:code:`paddlepaddle/paddle` to specify image to use; finnally -:code:`/work/train.py` is the command to run inside docker. - -Also, you can go into the container shell, run or debug your code -interactively: - - .. code-block:: bash - - docker run -it -v $PWD:/work paddlepaddle/paddle /bin/bash - cd /work - python train.py - -**NOTE: We did not install vim in the default docker image to reduce the image size, you can run** :code:`apt-get install -y vim` **to install it if you need to edit python files.** - -.. _docker_run_book: - -PaddlePaddle Book ------------------- - -You can create a container serving PaddlePaddle Book using Jupyter Notebook in -one minute using Docker. PaddlePaddle Book is an interactive Jupyter Notebook -for users and developers.If you want to -dig deeper into deep learning, PaddlePaddle Book definitely is your best choice. - -We provide a packaged book image, simply issue the command: - - .. code-block:: bash - - docker run -p 8888:8888 paddlepaddle/book - -For users in China, we provide a faster mirror: - - .. code-block:: bash - - docker run -p 8888:8888 docker.paddlepaddlehub.com/book - -Then, you would back and paste the address into the local browser: - - .. code-block:: text - - http://localhost:8888/ - -That's all. Enjoy your journey! - -.. _docker_run_gpu: - -Train with Docker with GPU ------------------------------- - -We recommend using -`nvidia-docker `_ -to run GPU training jobs. Please ensure you have latest -GPU driver installed before move on. - - .. code-block:: bash - - nvidia-docker run -it -v $PWD:/work paddlepaddle/paddle:latest-gpu /bin/bash - -**NOTE: If you don't have nvidia-docker installed, try the following method to mount CUDA libs and devices into the container.** - - .. code-block:: bash - - export CUDA_SO="$(\ls /usr/lib64/libcuda* | xargs -I{} echo '-v {}:{}') $(\ls /usr/lib64/libnvidia* | xargs -I{} echo '-v {}:{}')" - export DEVICES=$(\ls /dev/nvidia* | xargs -I{} echo '--device {}:{}') - docker run ${CUDA_SO} ${DEVICES} -it paddlepaddle/paddle:latest-gpu - -**About AVX:** - -AVX is a kind of CPU instruction can accelerate PaddlePaddle's calculations. -The latest PaddlePaddle Docker image turns AVX on by default, so, if your -computer doesn't support AVX, you'll probably need to -`build <./build_from_source_en.html>`_ with :code:`WITH_AVX=OFF`. - -The following command will tell you whether your computer supports AVX. - - .. code-block:: bash - - if cat /proc/cpuinfo | grep -i avx; then echo Yes; else echo No; fi diff --git a/doc/fluid/build_and_install/index_cn.rst b/doc/fluid/build_and_install/index_cn.rst deleted file mode 100644 index 1a9305ac4..000000000 --- a/doc/fluid/build_and_install/index_cn.rst +++ /dev/null @@ -1,56 +0,0 @@ -安装与编译 -========== - -.. _install_steps: - -PaddlePaddle针对不同的用户群体提供了多种安装方式。 - -专注深度学习模型开发 --------------------- - -PaddlePaddle提供了多种python wheel包,可通过pip一键安装: - -.. toctree:: - :maxdepth: 1 - - pip_install_cn.rst - -这是最便捷的安装方式,请根据机器配置和系统选择对应的安装包。 - -关注底层框架 -------------- - -PaddlePaddle提供了基于Docker的安装方式,请参照以下教程: - -.. toctree:: - :maxdepth: 1 - - docker_install_cn.rst - -我们推荐在Docker中运行PaddlePaddle,该方式具有以下优势: - -- 无需单独安装第三方依赖 -- 方便分享运行时环境,易于问题的复现 - -对于有定制化二进制文件需求的用户,我们同样提供了从源码编译安装PaddlePaddle的方法: - -.. toctree:: - :maxdepth: 1 - - build_from_source_cn.rst - -.. warning:: - - 需要提醒的是,这种安装方式会涉及到一些第三方库的下载、编译及安装,整个安装过程耗时较长。 - - -常见问题汇总 --------------- - -如果在安装过程中遇到了问题,请先尝试在下面的页面寻找答案: - -:ref:`常见问题解答 ` - -如果问题没有得到解决,欢迎向PaddlePaddle社区反馈问题: - -`创建issue `_ diff --git a/doc/fluid/build_and_install/index_en.rst b/doc/fluid/build_and_install/index_en.rst deleted file mode 100644 index 7990bacbd..000000000 --- a/doc/fluid/build_and_install/index_en.rst +++ /dev/null @@ -1,56 +0,0 @@ -install and Compile -====================== - -.. _install_steps: - -PaddlePaddle provides various methods of installation for many different users - -Focus on Deep Learning Model Development ----------------------------------------- - -PaddlePaddle provides lots of packages of python wheel , that pip can install: - -.. toctree:: - :maxdepth: 1 - - pip_install_en.rst - -This is the most convenient way of installation. Please choose the right installation package with machine configure and system. - -Follow the Bottom Frame ------------------------- - -PaddlePaddle also supports installation using Docker. Please refer to the tutorial below: - -.. toctree:: - :maxdepth: 1 - - docker_install_en.rst - -We recommend running PaddlePaddle in Docker. This method has the following advantages: - -- Does not require installation of third-party dependencies. -- Easy to share runtime environment. - -Lastly, users can also compile and install PaddlePaddle from source code. The instructions are below: - -.. toctree:: - :maxdepth: 1 - - build_from_source_en.rst - -.. warning:: - - One caveat with this approach is that developers will have to download, compile and install all third-party dependencies. Thus this process of installation is more time consuming. - - -FAQ ------------ - -For any problems during installation, please refer to the page below for answers: - -:ref:`常见问题解答 ` - -If the problem still persists, you are welcome to seek assistance from the PaddlePaddle community: - -`创建issue `_ diff --git a/doc/fluid/build_and_install/paddleci.png b/doc/fluid/build_and_install/paddleci.png deleted file mode 100644 index 16087ce059aa3c07ce8c927d983eb86351915825..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40242 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 TDaF2yYT()L>EluB9!dQV$m`bb diff --git a/doc/fluid/build_and_install/pip_install_cn.rst b/doc/fluid/build_and_install/pip_install_cn.rst deleted file mode 100644 index 095da19cd..000000000 --- a/doc/fluid/build_and_install/pip_install_cn.rst +++ /dev/null @@ -1,105 +0,0 @@ -使用pip安装 -================================ - -PaddlePaddle可以使用常用的Python包管理工具 -`pip `_ -完成安装,并可以在大多数主流的Linux操作系统以及MacOS上执行。 - -.. _pip_install: - -使用pip安装 ------------------------------- - -执行下面的命令即可在当前机器上安装PaddlePaddle的运行时环境,并自动下载安装依赖软件。 - - .. code-block:: bash - - pip install paddlepaddle - -当前的默认版本为0.12.0,cpu_avx_openblas,您可以通过指定版本号来安装其它版本,例如: - - .. code-block:: bash - - pip install paddlepaddle==0.11.0 - - -如果需要安装支持GPU的版本(cuda8.0_cudnn5_avx_openblas),需要执行: - - .. code-block:: bash - - pip install paddlepaddle-gpu - -当前的默认版本也是0.12.0,PaddlePaddle针对不同需求提供了更多版本的安装包,部分列表如下: - -================================= ======================================== -版本号 版本说明 -================================= ======================================== -paddlepaddle-gpu==0.12.0 使用CUDA 8.0和cuDNN 5编译的0.12.0版本 -paddlepaddle-gpu==0.11.0.post87 使用CUDA 8.0和cuDNN 7编译的0.11.0版本 -paddlepaddle-gpu==0.11.0.post8 使用CUDA 8.0和cuDNN 5编译的0.11.0版本 -paddlepaddle-gpu==0.11.0 使用CUDA 7.5和cuDNN 5编译的0.11.0版本 -================================= ======================================== - -您可以在 `Release History `_ 中找到paddlepaddle-gpu的各个发行版本。 - -如果需要获取并安装最新的(开发分支)PaddlePaddle,可以从我们的CI系统中下载最新的whl安装包和c-api开发包并安装, -您可以从下面的表格中找到需要的版本: - -如果在点击下面链接时出现如下登陆界面,点击“Log in as guest”即可开始下载: - -.. image:: paddleci.png - :scale: 50 % - :align: center - -.. csv-table:: 各个版本最新的whl包 - :header: "版本说明", "cp27-cp27mu", "cp27-cp27m" - :widths: 1, 3, 3 - - "cpu_avx_mkl", "`paddlepaddle-latest-cp27-cp27mu-linux_x86_64.whl `__", "`paddlepaddle-latest-cp27-cp27m-linux_x86_64.whl `__" - "cpu_avx_openblas", "`paddlepaddle-latest-cp27-cp27mu-linux_x86_64.whl `__", "`paddlepaddle-latest-cp27-cp27m-linux_x86_64.whl `__" - "cpu_noavx_openblas", "`paddlepaddle-latest-cp27-cp27mu-linux_x86_64.whl `__", "`paddlepaddle-latest-cp27-cp27m-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 `__" - "cuda8.0_cudnn7_avx_mkl", "`paddlepaddle_gpu-latest-cp27-cp27mu-linux_x86_64.whl `__", "`paddlepaddle_gpu-latest-cp27-cp27m-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 `__" - -.. _pip_dependency: - -运行环境依赖 ------------------------------- - -PaddlePaddle安装包由于不仅仅包含.py程序,而且包含了C++编写的部分,所以我们确保发布的二进制包可以支持主流的Linux操作系统,比如CentOS 6以上,Ubuntu 14.04以上,MacOS 10.12以上。 - -PaddlePaddle发布的安装包会尽量对齐 `manylinux1 `_ 标准,通常使用CentOS 5作为编译环境。但由于CUDA库通常需要CentOS 6以上,而且CentOS 5即将停止维护,所以我们默认使用CentOS 6作为标准编译环境。 - -.. csv-table:: PaddlePaddle环境依赖 - :header: "依赖", "版本", "说明" - :widths: 10, 15, 30 - - "操作系统", "Linux, MacOS", "CentOS 6以上,Ubuntu 14.04以上,MacOS 10.12以上" - "Python", "2.7.x", "暂时不支持Python3" - "libc.so", "GLIBC_2.7", "glibc至少包含GLIBC_2.7以上的符号" - "libstdc++.so", "GLIBCXX_3.4.11, CXXABI_1.3.3", "至少包含GLIBCXX_3.4.11, CXXABI_1.3.3以上的符号" - "libgcc_s.so", "GCC_3.3", "至少包含GCC_3.3以上的符号" - -.. _pip_faq: - -安装常见问题和解决方法 ------------------------------- - -- paddlepaddle*.whl is not a supported wheel on this platform. - - 出现这个问题的主要原因是,没有找到和当前系统匹配的paddlepaddle安装包。请检查Python版本是否为2.7系列。另外最新的pip官方源中的安装包默认是manylinux1标准,需要使用最新的pip (>9.0.0) 才可以安装。可以使用下面的命令更新您的pip: - - .. code-block:: bash - - pip install --upgrade pip - - 如果仍然存在问题,可以执行: - - .. code-block:: bash - - python -c "import pip; print(pip.pep425tags.get_supported())" - - 获取当前系统支持的安装包格式,并检查和需安装的包是否匹配。pypi安装包可以在 `这个 `_ 链接中找到。 - - 如果系统支持的是 linux_x86_64 而安装包是 manylinux1_x86_64 ,需要升级pip版本到最新; 如果系统支持 manylinux1_x86_64 而安装包(本地)是 linux_x86_64 ,可以重命名这个whl包为 manylinux1_x86_64 再安装。 diff --git a/doc/fluid/build_and_install/pip_install_en.rst b/doc/fluid/build_and_install/pip_install_en.rst deleted file mode 100644 index 8406e4aa1..000000000 --- a/doc/fluid/build_and_install/pip_install_en.rst +++ /dev/null @@ -1,123 +0,0 @@ -Install using pip -================================ - -You can use current widely used Python package management -tool `pip `_ -to install PaddlePaddle. This method can be used in -most of current Linux systems or MacOS. - -.. _pip_install: - -Install using pip ------------------------------- - -Run the following command to install PaddlePaddle on the current -machine, it will also download requirements. - - .. code-block:: bash - - pip install paddlepaddle - -the default version is 0.12.0, cpu_avx_openblas, you can specify the versions to satisfy your demands, like: - - .. code-block:: bash - - pip install paddlepaddle==0.11.0 - -If you need to install a GPU-enabled version (cuda8.0_cudnn5_avx_openblas), you need to run: - - .. code-block:: bash - - pip install paddlepaddle-gpu - -The default version is also 0.12.0, PaddlePaddle provides several versions of packages for different needs, as shown in the table: - -================================= ======================================== -版本号 版本说明 -================================= ======================================== -paddlepaddle-gpu==0.12.0 0.12.0 built with CUDA 8.0 and cuDNN 5 -paddlepaddle-gpu==0.11.0.post87 0.11.0 built with CUDA 8.0 and cuDNN 7 -paddlepaddle-gpu==0.11.0.post8 0.11.0 built with CUDA 8.0 and cuDNN 5 -paddlepaddle-gpu==0.11.0 0.11.0 built with CUDA 7.5 and cuDNN 5 -================================= ======================================== - -You can find all versions released of paddlepaddle-gpu in `Release History `_ . - -If you wish to install the latest develop branch PaddlePaddle, -you can download the latest whl package from our CI system. Access -the below links, log in as guest, then click at the "Artifact" -tab, you'll find the download link of whl packages. - -If the links below shows up the login form, just click "Log in as guest" to start the download: - -.. image:: paddleci.png - :scale: 50 % - :align: center - -.. csv-table:: whl package of each version - :header: "version", "cp27-cp27mu", "cp27-cp27m" - :widths: 1, 3, 3 - - "cpu_avx_mkl", "`paddlepaddle-latest-cp27-cp27mu-linux_x86_64.whl `__", "`paddlepaddle-latest-cp27-cp27m-linux_x86_64.whl `__" - "cpu_avx_openblas", "`paddlepaddle-latest-cp27-cp27mu-linux_x86_64.whl `__", "`paddlepaddle-latest-cp27-cp27m-linux_x86_64.whl `__" - "cpu_noavx_openblas", "`paddlepaddle-latest-cp27-cp27mu-linux_x86_64.whl `__", "`paddlepaddle-latest-cp27-cp27m-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 `__" - "cuda8.0_cudnn7_avx_mkl", "`paddlepaddle_gpu-latest-cp27-cp27mu-linux_x86_64.whl `__", "`paddlepaddle_gpu-latest-cp27-cp27m-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 `__" - -.. _pip_dependency: - -Runtime Dependency ------------------------------- - -PaddlePaddle installation packages (whl) does not only contain .py files, -but also binaries built from C++ code. We ensure that PaddlePaddle can -run on current mainline Linux distributions, like CentOS 6, Ubuntu 14.04 -and MacOS 10.12. - -PaddlePaddle whl packages are trying to satisfy -`manylinux1 `_ -standard, which uses CentOS 5 as default build environment. But CUDA libraries -seems only run on CentOS 6 at least, also, CentOS 5 is about to end its lifetime, -so we use CentOS 6 as default build environment. - -.. csv-table:: PaddlePaddle Runtime Deps - :header: "Dependency", "version", "description" - :widths: 10, 15, 30 - - "OS", "Linux, MacOS", "CentOS 6 or later,Ubuntu 14.04 or later,MacOS 10.12 or later" - "Python", "2.7.x", "Currently Python3 is not supported" - "libc.so", "GLIBC_2.7", "glibc at least include GLIBC_2.7 symbols" - "libstdc++.so", "GLIBCXX_3.4.11, CXXABI_1.3.3", "At least include GLIBCXX_3.4.11, CXXABI_1.3.3 symbols" - "libgcc_s.so", "GCC_3.3", "At least include GCC_3.3 symbols" - -.. _pip_faq: - -FAQ ------------------------------- - -- paddlepaddle*.whl is not a supported wheel on this platform. - - The main cause of this issue is that your current platform is - not supported. Please check that you are using Python 2.7 series. - Besides, pypi only supports manylinux1 standard, you'll need to - upgrade your pip to >9.0.0. Then run the below command: - - .. code-block:: bash - - pip install --upgrade pip - - If the problem still exists, run the following command: - - .. code-block:: bash - - python -c "import pip; print(pip.pep425tags.get_supported())" - - Then you'll get supported package suffixes, then check if it matches - the file name of the whl package. You can find default whl package at - `here `_ - - If your system supports linux_x86_64 but the whl package is manylinux1_x86_64, - you'll need to update pip to the latest version; If your system supports - manylinux1_x86_64 but the whl package is linux_x86_64 you can rename the - file to manylinux1_x86_64 suffix and then install. diff --git a/doc/fluid/dev/api_doc_std_cn.md b/doc/fluid/dev/api_doc_std_cn.md deleted file mode 100644 index 7d39b8de1..000000000 --- a/doc/fluid/dev/api_doc_std_cn.md +++ /dev/null @@ -1,221 +0,0 @@ -# API注释撰写标准 - -- [API注释撰写标准](#api) - - [API注释模块](#api) - - [格式及示例](#) - - [完整示例](#) - - -## API注释模块 - -API文档须包含以下几个模块(排列顺序为文档撰写顺序): - -- Python API Definition - - API的代码定义。 - -- Function Description - - API的功能描述。描述该API的含义、作用或对输入所做的操作,及参考文献和对应链接(如果有),必要时给出公式,并解释公式中关键变量的含义。 - -- Args Description - - API参数介绍。按代码定义中的参数顺序逐个介绍,介绍内容包含数据类型、默认值(如果有)、含义等。 - -- Returns - - API返回值介绍。介绍返回值含义,必要时给出对应的形状。若返回值为包含多个参数的tuple,则按顺序逐个介绍各参数。 - -- Raises(如果有) - - 可能抛出的异常或错误及可能的产生原因,当可能抛出多种异常或错误时应分条列出。 - -- Note(如果有) - - 注意事项。当有多条注意事项时,应分条列出。 - -- Examples - - API的使用示例。 - - -## 格式及示例 - -API文档须使用reStructuredText格式撰写,该格式详情请参考[链接](http://sphinx-doc-zh.readthedocs.io/en/latest/rest.html)。API文档各模块的内容格式及示例如下(以下以fc为例进行说明): - -- Python API Definition - - - 格式: - - [Python API Definition] - - - 示例 - - ``` - fc(input, - size, - num_flatten_dims=1, - param_attr=None, - bias_attr=None, - act=None, - name=None, - main_program=None, - startup_program=None) - ``` - -- Function Description - - - 格式 - - 本模块应包含以下内容(排列顺序为文档撰写顺序): - - [Function Description] - - [Formula] - - [Symbols' Descriptions if necessary] - - [References if necessary] - - - 示例 - - [Function Description] - - ``` - **Fully Connected Layer** - - The fully connected layer can take multiple tensors as its inputs. It - creates a variable called weights for each input tensor, which represents - a fully connected weight matrix from each input unit to each output unit. - The fully connected layer multiplies each input tensor with its coresponding - weight to produce an output Tensor. If multiple input tensors are given, - the results of multiple multiplications will be sumed up. If bias_attr is - not None, a bias variable will be created and added to the output. Finally, - if activation is not None, it will be applied to the output as well. - ``` - - [Formula] - - ``` - This process can be formulated as follows: - - .. math:: - - Out = Act({\sum_{i=0}^{N-1}X_iW_i + b}) - ``` - - [Symbols' Descriptions if necessary] - - ``` - In the above equation: - - * :math:`N`: Number of the input. - * :math:`X_i`: The input tensor. - * :math:`W`: The weights created by this layer. - * :math:`b`: The bias parameter created by this layer (if needed). - * :math:`Act`: The activation function. - * :math:`Out`: The output tensor. - ``` - - [References if necessary] - - 因fc没有必要列出的参考文献,故该内容省略。其他情况下需明确给出对应的参考文献和对应连接,以 layer_norm 为例: - - ``` - Refer to `Layer Normalization `_ for more details. - ``` - - -- Args Description - - - 格式 - - \[Arg's Name\][(Data Type, Default Value)][Description] - - - 示例 - - fc的部分参数注释如下: - - ``` - Args: - input (Variable|list of Variable): The input tensor(s) of this layer, and the dimension of - the input tensor(s) is at least 2. - param_attr (ParamAttr|list of ParamAttr, default None): The parameter attribute for learnable - parameters/weights of this layer. - name (str, default None): The name of this layer. - ``` - -- Returns - - - 格式 - - [Name][Shape] - - - 示例 - - ``` - Returns: - A tensor variable storing the transformation result. - ``` - - 当返回值为包含多个参数的tuple时,应按顺序逐个介绍各参数,以dynamic_lstm为例: - - ``` - Returns: - A tuple containing: - The hidden state of LSTM whose shape is (T X D). - The cell state of LSTM whose shape is (T X D). - ``` - -- Raises - - - 格式 - - [Exception Type][Condition] - - - 示例 - - ``` - Raises: - ValueError: If the rank of the input is less than 2. - ``` - -- Note - - - 格式 - - [Note] - - - 示例 - - fc没有注意事项,故该模块省略不写。如有注意事项应明确给出,当有多条注意事项,须分条列出,以scaled\_dot\_product\_attention为例: - - ``` - Note: - 1. When num_heads > 1, three linear projections are learned respectively - to map input queries, keys and values into queries', keys' and values'. - queries', keys' and values' have the same shapes with queries, keys - and values. - 2. When num_heads == 1, scaled_dot_product_attention has no learnable - parameters. - ``` - -- Examples - - - 格式 - - \[Python Code Snipper] - - - 示例 - - ``` - Examples: - .. code-block:: python - - data = fluid.layers.data(name="data", shape=[32, 32], dtype="float32") - fc = fluid.layers.fc(input=data, size=1000, act="tanh") - ``` - -## 完整示例 - -fc 的完整注释见[示例](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/fluid/dev/src/fc.py)。 diff --git a/doc/fluid/dev/api_doc_std_en.md b/doc/fluid/dev/api_doc_std_en.md deleted file mode 100644 index f175b2197..000000000 --- a/doc/fluid/dev/api_doc_std_en.md +++ /dev/null @@ -1,227 +0,0 @@ -# API Doc Standard - -- [API Doc Standard](#api-doc-standard) - - [API Doc Structure](#api-doc-structure) - - [Format and Examples](#format-and-examples) - - [Complete Example](#complete-example) - - -## API Doc Structure - -API Doc should contain the following parts(please write them in order): - -- Python API Definition - - The definition of API - -- Function Description - - Description of API's function. - The description includes: meaning, purpose and operation on input of API, reference and corresponding link(if any), formula(if necessary) and explanations of key variables in the formula. - -- Args Description - - Description of API parameters. - Introduce parameters one by one according to the order in API definition. - The introduction includes: data type, default value(if any), meaning, etc. - -- Returns - - Introduction of API returned value. - Introduce meaning of returned value, provide correspoding format if necessary. - If returned value is a tuple containing multiple parameters, then introduce parameters one by one in order. - -- Raises(if any) - - Abnormality, error that may occur, and possible reasons. If there are more than one possible abnormity or error, they should be listed in order. - -- Note(if any) - - Matters needing attention. If there are more than one matters, they should be listed in order. - -- Examples - - Examples of how to use API. - - -## Format and Examples - -API documentation must obey reStructuredText format, please refer to [here](http://sphinx-doc-zh.readthedocs.io/en/latest/rest.html). -Format and examples of each part of API documantation are as follows: (take fc for example) - -- Python API Definition - - - Format - - [Python API Definition] - - - Example - - ``` - fc(input, - size, - num_flatten_dims=1, - param_attr=None, - bias_attr=None, - act=None, - name=None, - main_program=None, - startup_program=None) - ``` - -- Function Description - - - Format - - This part contains (please write them in order): - - [Function Description] - - [Formula] - - [Symbols' Descriptions if necessary] - - [References if necessary] - - - Example - - [Function Description] - - ``` - **Fully Connected Layer** - - The fully connected layer can take multiple tensors as its inputs. It - creates a variable called weights for each input tensor, which represents - a fully connected weight matrix from each input unit to each output unit. - The fully connected layer multiplies each input tensor with its coresponding - weight to produce an output Tensor. If multiple input tensors are given, - the results of multiple multiplications will be sumed up. If bias_attr is - not None, a bias variable will be created and added to the output. Finally, - if activation is not None, it will be applied to the output as well. - ``` - - [Formula] - - ``` - This process can be formulated as follows: - - .. math:: - - Out = Act({\sum_{i=0}^{N-1}X_iW_i + b}) - ``` - - [Symbols' Descriptions if necessary] - - ``` - In the above equation: - - * :math:`N`: Number of the input. - * :math:`X_i`: The input tensor. - * :math:`W`: The weights created by this layer. - * :math:`b`: The bias parameter created by this layer (if needed). - * :math:`Act`: The activation function. - * :math:`Out`: The output tensor. - ``` - - [References if necessary] - - Since there is no need for reference of fc, we omit them here. Under other circumstances, please provide explicit reference and link, take layer_norm for example: - - ``` - Refer to `Layer Normalization `_ for more details. - ``` - - -- Args Description - - - Format - - \[Arg's Name\][(Data Type, Default Value)][Description] - - - Example - - part of fc parameters are as follows: - - ``` - Args: - input (Variable|list of Variable): The input tensor(s) of this layer, and the dimension of - the input tensor(s) is at least 2. - param_attr (ParamAttr|list of ParamAttr, default None): The parameter attribute for learnable - parameters/weights of this layer. - name (str, default None): The name of this layer. - ``` - -- Returns - - - Format - - [Name][Shape] - - - Example - - ``` - Returns: - A tensor variable storing the transformation result. - ``` - - when returned value contain more than one tuple, please introduce every parameter in order, take dynamic_lstm for example: - - ``` - Returns: - A tuple containing: - The hidden state of LSTM whose shape is (T X D). - The cell state of LSTM whose shape is (T X D). - ``` - -- Raises - - - Format - - [Exception Type][Condition] - - - Example - - ``` - Raises: - ValueError: If the rank of the input is less than 2. - ``` - -- Note - - - Format - - [Note] - - - Example - - there is no Note in fc, so we omit this part. If there is any note, please write clearly. If there are more than one notes, please list them in order. Take scaled\_dot\_product\_attention for example: - - ``` - Note: - 1. When num_heads > 1, three linear projections are learned respectively - to map input queries, keys and values into queries', keys' and values'. - queries', keys' and values' have the same shapes with queries, keys - and values. - 2. When num_heads == 1, scaled_dot_product_attention has no learnable - parameters. - ``` - -- Examples - - - Format - - \[Python Code Snipper] - - - Example - - ``` - Examples: - .. code-block:: python - - data = fluid.layers.data(name="data", shape=[32, 32], dtype="float32") - fc = fluid.layers.fc(input=data, size=1000, act="tanh") - ``` - -## Complete Example - -Complete Example of fc please see [here](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/fluid/dev/src/fc.py)。 diff --git a/doc/fluid/dev/ci_build_whl.png b/doc/fluid/dev/ci_build_whl.png deleted file mode 100644 index 232762b82a9ae3e979a1f38a7beb715c87438f40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 287162 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%0A&-&{?FF24yJ8Go;#1U~d$&ISRCpipW0 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

目标

- - - -- 提高对各类机器学习任务的描述能力:能够描述潜在出现的任意机器学习模型。 -- 代码结构逻辑清晰,各模块充分解耦:内外部贡献者能够专注于自己所需的功能模块,基于框架进行再次开发。 -- 从设计上,留下技术优化的空间和潜力。 -- 代码解耦后降低多设备支持、计算优化等的开发成本。 -- 在统一的设计理念下,实现自动可伸缩,自动容错的分布式计算。 - - - ---- - -## ==2.== Design Overview - ---- - -# Fluid: 系统形态 - -- [编译器式的执行流程,区分编译时和运行时](https://github.com/PaddlePaddle/Fluiddoc/blob/develop/doc/fluid/design/motivation/fluid_compiler.md) -
- -

- -

- ---- - -#### 让我们在Fluid程序实例中,区分编译时和运行时 - ---- -### Fluid 编译时 - - - -- ==**定义前向计算**== - - ```python - x = fluid.layers.data(name='x',shape=[13], dtype='float32') - y_predict = fluid.layers.fc(input=x, size=1, act=None) - y = fluid.layers.data(name='y', shape=[1], dtype='float32') - cost = fluid.layers.square_error_cost(input=y_predict, label=y) - avg_cost = fluid.layers.mean(x=cost) - ``` - -- ==**添加反向、正则、优化**== - ```python - learning_rate = 0.01 - sgd_optimizer = fluid.optimizer.SGD(learning_rate) - sgd_optimizer.minimize(avg_cost) - ``` - - ---- - -### `Program` vs. 计算图 - - - -- 在科学计算领域,计算图是一种描述计算的经典方式。下图展示了从前向计算图(蓝色)开始,通过添加反向(红色)和优化算法相关(绿色)操作,构建出整个计算图的过程: -- -

- -

- - -- Fluid ==使用`Program`而不是计算图==来描述模型和优化过程。`Program`由`Block`、`Operator`和`Variable`构成,相关概念会在后文详细展开。 -- 编译时 Fluid 接受前向计算(这里可以先简单的理解为是一段有序的计算流)`Program`,为这段前向计算按照:前向 -> 反向 -> 梯度 clip -> 正则 -> 优化 的顺序,添加相关 `Operator`和`Variable`到`Program`到完整的计算。 - -
- ---- - -### Fluid 运行时 - - - -- ==**读入数据**== - - ```python - train_reader = paddle.batch( - paddle.reader.shuffle(paddle.dataset.uci_housing.train(), buf_size=500), - batch_size=20) - feeder = fluid.DataFeeder(place=place, feed_list=[x, y]) - ``` -- ==**定义执行程序的设备**== - ```python - place = fluid.CPUPlace() - feeder = fluid.DataFeeder(place=place,feed_list=[x, y]) - ``` - -- ==创建执行器(Executor),执行初始化 `Program`和训练`Program`== - - ```python - exe = fluid.Executor(place) - exe.run(fluid.default_startup_program()) - PASS_NUM = 100 - for pass_id in range(PASS_NUM): - for data in train_reader(): - avg_loss_value, = exe.run(fluid.default_main_program(), - feed=feeder.feed(data), - fetch_list=[avg_cost]) - print(avg_loss_value) - ``` - - ---- - -### 总结:框架做什么?用户做什么? -
- - - - - - - - - - - - - - - - -
构建训练执行训练
-用户:描述前向运算
框架:添加反向运算
框架:添加优化运算
框架:添加内存优化
框架:添加并行/多设备/分布式相关的计算单元 -
-框架:创建Operator(计算)+ Variable(数据)
框架:创建`Block`
框架:内存管理/设备管理
框架:执行计算 -
-
- ---- - -###

总结:编译时

- - -**用户编写一段Python程序,描述模型的前向计算** -1. 创建变量描述 `VarDesc` -1. 创建operators的描述 `OpDesc` -1. 创建operators的属性 -1. 推断变量的类型和形状,进行静态检查:`inferShape` -1. 规划变量的内存复用 -1. 创建反向计算 -1. 添加优化相关的Operators -1. (可选)添加多卡/多机相关的Operator,生成在多卡/多机上运行的程序 - - - ---- - -###

总结:运行时

- - -**执行规划好的计算** -1. 创建`Executor` -1. 为将要执行的一段计算,在层级式的`Scope`空间中创建`Scope` -1. 创建`Block`,依次执行`Block` - -

-
- Figure. 编译时运行时概览 -

- -
- ---- - -## ==3==. 用户如何描述计算? ---- - -### Fluid:==像写程序一样==定义计算 - - -- 顺序执行 - ```python - x = fluid.layers.data(name='x',shape=[13], dtype='float32') - y_predict = fluid.layers.fc(input=x, size=1, act=None) - y = fluid.layers.data(name='y', shape=[1], dtype='float32') - cost = fluid.layers.square_error_cost(input=y_predict, label=y) - ``` - -- 条件分支: [swith](https://github.com/PaddlePaddle/Fluiddoc/blob/develop/doc/fluid/design/execution/switch.md)、[ifelse](https://github.com/PaddlePaddle/Fluiddoc/blob/develop/doc/fluid/design/execution/if_else_op.md) - - ```python - a = fluid.Var(10) - b = fluid.Var(0) - - switch = fluid.switch() - with switch.block(): - with switch.case(fluid.less_equal(a, 10)): - fluid.print("Case 1") - with switch.case(fluid.larger(a, 0)): - fluid.print("Case 2") - with switch.default(): - fluid.print("Case 3") - ``` - ->[A Lisp cond form may be compared to a continued if-then-else as found in many algebraic programming languages](https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node84.html). - - - ---- - -### Fluid: ==像写程序一样==定义计算 - - - -- 循环:[while](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/fluid/tests/book/test_machine_translation.py#L105) - - ```python - d0 = layers.data("d0", shape=[10], dtype='float32') - data_array = layers.array_write(x=d0, i=i) - array_len = layers.fill_constant(shape=[1],dtype='int64', value=3) - - cond = layers.less_than(x=i, y=array_len) - while_op = layers.While(cond=cond) - with while_op.block(): - d = layers.array_read(array=data_array, i=i) - i = layers.increment(x=i, in_place=True) - layers.array_write(result, i=i, array=d) - layers.less_than(x=i, y=array_len, cond=cond) - ``` - -- 完整实例请点查看 [->](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/fluid/tests/unittests/test_while_op.py#L36-L44) -- beam search [->]( https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/fluid/tests/book/test_machine_translation.py#L105) - - - ---- - -####

总结

- - - -1. 用户层提供的描述语法具有完备性、自洽性,有能力支持对复杂计算过程描述 -1. 使用方式和核心概念可以类比编程语言,认知能够直接迁移 -1. 能够支持:定义问题,逐步求解 - - - ---- - -## ==3.== 核心概念 - ---- -### 编译时概念 :==变量和计算的描述== - - - -- `VarDesc` + `TensorDesc` + `OpDesc` -> `BlockDesc` -> `ProgramDesc` - - https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/framework/framework.proto - -- 什么是 Fluid Program - - - 在Fluid中,一个神经网络任务(训练/预测)被描述为一段`Program` - - `Program`包含对`Variable`(数据)和 `Operator`(对数据的操作)的描述 - - `Variable` 和 `Operator` 被组织为多个可以嵌套的`Block`,构成一段完整的`Fluid Program` - - ->编译阶段最终,经过 Transpiler 的执行规划,变换处理,生成使用`protobuf`序列化后的`ProgramDesc`。可以发送给多卡或者网络中的其它计算节点执行 - - - ---- - -### 编译时概念 :==**[Transpiler](https://github.com/PaddlePaddle/Fluiddoc/blob/develop/doc/fluid/design/motivation/fluid_compiler.md)**== - - -1. 接受一段`ProgramDesc`作为输入,生成一段新的`ProgramDesc` - - - *Memory optimization transpiler*:向原始`ProgramDesc` 中插入 `FreeMemoryOps`,在一次迭代优化结束前提前释放内存,使得能够维持较小的 memory footprint - - - *Distributed training transpiler*:将原始的`ProgramDesc`中转化为对应的分布式版本,生成两段新的`ProgramDesc`: - 1. trainer进程执行的`ProgramDesc` - 1. parameter server执行的`ProgramDesc` - -1. ==**WIP**==: 接受一段`ProgramDesc`,生成可直接被`gcc`, `nvcc`, `icc`等编译的代码,编译后得到可执行文件 - - - ---- -### Transplier - -

- -

- ---- - -### 打印 `ProgramDesc` - -

- -

- - - -- `default_startup_program`:创建可学习参数,对参数进行初始化 -- `default_main_program`:由用户定义的模型,包括了前向、反向、优化及所有必要的计算 - - - ---- -### 输出效果 - - - - - - - - - - - - - - -
variable in block 0variable in block 0
-
- ---- - -### 运行时概念 - - - -- 数据相关 - - `Tensor` / `LoDTensor` / `Variable` - - `Scope` - -- 计算相关 - - `Block` - - `Kernel`、`OpWithKernel`、`OpWithoutKernel` - - - - - - - - - - - - - - - - - - - - - - - - - - - -
protobuf messagesC++ class objects
Data[VarDesc](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/framework/framework.proto#L107) -[Variable](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/framework/variable.h#L24) -
Operation[OpDesc](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/framework/framework.proto#L35) -[Operator](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/framework/operator.h#L64) -
BlockBlockDesc -Block -
- -- 执行相关 :`Executor` - -
- ---- -#### Tensor 和 LoD(Level-of-Detail) Tensor - - -- Tensor 是$n$-dimensional arry的推广,LoDTensor是在Tensor基础上附加了序列信息 -- Fluid中输入、输出,网络中的可学习参数全部统一使用LoDTensor(n-dimension array)表示 -- 一个mini-batch输入数据是一个LoDTensor - - 在Fluid中,RNN 处理变长序列无需padding,得益于 `LoDTensor`表示 - - 可以简单将 LoD 理解为:`std::vector>` - - 对非序列数据,LoD 信息为空 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TensorFlowPaddlePaddle
RNNSupport -Support -
recursive RNNSupport -Support -
padding zerosMust -No need -
blob data typeTensor -LODTensor -
- -
- ---- -#### LoD 信息实例 - - - -

- -

- -- 图(a)的LoD 信息 - ```cpp - [0, 5, 8, 10, 14] - ``` -- 图(b)的 LoD 信息 - ```cpp - [[0, 5, 8, 10, 14] /*level=1*/, [0, 2, 3, 5, 7, 8, 10, 13, 14] /*level=2*/] - ``` -
- ---- -#### Tensor, Variable, Scope 之间的关系 - -

- -

- - -1. `Block` 是一个实现层的概念,不在应用层暴露给用户。目前用户无法自行创建并利用`Block`,用户能够感知的只有`Program`这个概念。 -1. 逻辑上,可以将 `Block` 类比为编程语言中的大括号:定义了一段作用域,其中运行一段代码 -1. `Executor`会为每一个`Block`创建一个`Scope`,`Block`是可嵌套的,因此`Scope`也是可嵌套的 - - - ---- -### Executor - - - - - - - - - - - - - - -
接口说明

- -

输入
1. `ProgramDesc`
2. `Scope`
3.`block_id`

解释执行步骤
1. 创建所有 Variables
2. 逐一创建 Operator 并运行 -
- ---- -### Operator/OpWithKernel/Kernel - - -

- -

- -- operator 无状态,Operator的核心是==Run==方法 -- 一个operator可以注册多个kernel -- operator 可以无 kernel:while_op 、ifelse op - -
- ---- -#### Fluid Operator vs. PaddlePaddle layers - - - - - - - - - - - - - - - - - - -
LayerOperator

- -

- -

1. 内部维护状态
2. 包含forward和backward方法
1. 内部无状态
2. 只有Run方法
- -
- ---- - -### ==4.== 内存管理 - ---- -### 目标 - -- 为异构设备提供统一的内存分配、回收接口 -- 最小化管理内存所需的时间,最小化管理开销 -- 减少内存碎片 -- 将内存管理与计算(Operators/Kernels)完全剥离 -- 统一内存管理是内存优化的基础 - ---- - - - -### Memory 接口 - -- 内存管理模块向上层应用逻辑提供三个基础接口: - ```cpp - template - void* Alloc(Place place, size_t size); - - template - void Free(Place place, void* ptr); - - template - size_t Used(Place place); - - struct Usage : public boost::static_visitor { - size_t operator()(const platform::CPUPlace& cpu) const; - size_t operator()(const platform::CUDAPlace& gpu) const; - }; - ``` -- 模板参数 `Place` 指示内存分配发生的设备 -- 实现时,需特化支持的 `Place`, 提供以上三个接口的实现 - - - ---- -### 代码结构 - - - -内存管理模块可以理解为由以下两部分构成: - -1. SystemAllocator:实际从物理设备上分配、释放的内存的接口 -1. BuddyAllocator:内存管理算法 - - - ---- -### System Allocator - - - -- SystemAllocator 是实现物理内存分配、回收的基类 - - 不同设备上的内存分配和回收终将转化为标准接口调用 - - 为不同设备实现MemoryAllocator,继承自SystemAllocator - - ```cpp - class SystemAllocator { - public: - virtual ~SystemAllocator() {} - virtual void* Alloc(size_t& index, size_t size) = 0; - virtual void Free(void* p, size_t size, size_t index) = 0; - virtual bool UseGpu() const = 0; - }; - ``` - - ---- - -### CPU/GPU Allocator - - - -```cpp -class CPUAllocator : public SystemAllocator { - public: - virtual void* Alloc(size_t& index, size_t size); - virtual void Free(void* p, size_t size, size_t index); - virtual bool UseGpu() const; -}; - -#ifdef PADDLE_WITH_CUDA -class GPUAllocator : public SystemAllocator { - public: - virtual void* Alloc(size_t& index, size_t size); - virtual void Free(void* p, size_t size, size_t index); - virtual bool UseGpu() const; - private: - size_t gpu_alloc_size_ = 0; - size_t fallback_alloc_size_ = 0; -}; -#endif -``` -- CPUAllocator和GPUAllocator分别继承自SystemAllocator,分别调用相应的标准库函数实现物理内存的分配和释放。 -- 一旦大块、连续的物理内存分配之后,将通过内存管理算法实现内存的按块分配、回收、重用等。 - - - ---- -### CPU Allocator - - - -- CPU 内存的分配提供两种选项: - 1. non-pinned memory:可分页内存 - 2. pinned memory:页锁定内存 - - 分配过大的页锁定内存有可能因为系统可使用的分页内存减少,影响系统性能,默认CPU下分配的是可分页内存 - -- 通过gflags进行设置一次性分配内存的大小以及是否使用页锁定内存。 - - ```cpp - DEFINE_bool(use_pinned_memory, true, "If set, allocate cpu pinned memory."); - DEFINE_double(fraction_of_cpu_memory_to_use, 1, - "Default use 100% of CPU memory for PaddlePaddle," - "reserve the rest for page tables, etc"); - ``` - - - ---- -### GPU Allocator - - - -- 通过 cudaMalloc 分配GPU显存 -- GPUAllocator::Alloc 首先会计算指定GPU device上的可用显存 - - 如果可用显存小于请求分配大小,调用cudaMalloc进行分配 - - 如果可用显存不足,目前会报错退出。 -- 通过gflags控制GPU下一次性分配显存的大小: - - ```cpp - DEFINE_double(fraction_of_gpu_memory_to_use, 0.92, - "Default use 92% of GPU memory for PaddlePaddle," - "reserve the rest for page tables, etc"); - ``` - - - ---- -#### 内存管理算法: [Buddy Memory Allocation](https://en.wikipedia.org/wiki/Buddy_memory_allocation) - - - -- Memory Arena:一次性分配大块连续内存,之后会基于这块内存进行内存管理:动态分配、释放、重用内存块。 -- 伙伴内存分配: - - 将内存划分为 2 的幂次方个分区,使用 best-fit 方法来分配内存请求。 - - 当释放内存时,检查 buddy 块,查看相邻的内存块是否也已被释放。如果是,将内存块合并,以最小化内存碎片。 - - 分配的内存在物理内存的自然边界对齐,提高内存访问效率。 - - 算法的时间效率高,单使用 best-fit 方法的缘故,会产生一定的内存浪费 - - - ---- - -### Buddy Allocator - - - -- BuddyAllocator 是一个单例,每个设备(如: GPU/CPU(0)/GPU(1)) 拥有一个BuddyAllocator -- BuddyAllocator 内部拥有一个私有成员变量 SystemAllocator -- 当请求的内存超过BuddyAllocator管理的空余内存时,将会调用SystemAllocator去指定的设备上分配物理内存 - - - ---- -### 实例:CPU 下内存管理接口的实现 - - - -- 对上层应用,统一通过BuddyAllocator来实现内存的分配、释放以及用量查询 - ```cpp - template <> - void* Alloc(platform::CPUPlace place, size_t size) { - VLOG(10) << "Allocate " << size << " bytes on " << platform::Place(place); - void* p = GetCPUBuddyAllocator()->Alloc(size); - VLOG(10) << " pointer=" << p; - return p; - } - - template <> - void Free(platform::CPUPlace place, void* p) { - VLOG(10) << "Free pointer=" << p << " on " << platform::Place(place); - GetCPUBuddyAllocator()->Free(p); - } - - template <> - size_t Used(platform::CPUPlace place) { - return GetCPUBuddyAllocator()->Used(); - } - ``` - - ---- -### ==5.== 多设备支持 - ---- -### 多设备支持(一) - - - -- step 1:添加Place类型,由用户实现添加到框架 - - 可以将Place类型理解为一个整数加上一个枚举型,包括:设备号 + 设备类型 - -

- -

-- DeviceContext - - 不同的Place会对应一个相应的DeviceContext,用于组织管理与设备相关的信息 - - 例如,GpuDeviceContext中会管理Cuda stream - - 目前实现中一些特殊的库也会对应有自己的DeviceContext:例如: - ```cpp - class MKLDNNDeviceContext : public CPUDeviceContext {……} - ``` - - 每种设备对应的DeviceContext需要管理的内容不尽相同,视具体需求来实现 - -
- ---- - -### 多设备支持(二) - - - -- step 2: 增加KernelType,为相应的KernelType注册Kernel对象,由用户实现注册给框架 可以按照: - 1. Place 执行设备 - 1. DataType 执行数据类型 FP32/FP64/INT32/INT64 - 1. Memory layout: 运行时 Tensor 在内存中的排布格式 NCHW、 NHWC - 1. 使用的库 - - 来区分Kernel,为同一个operator注册多个 Kernel。 - - ```cpp - struct OpKernelType { - proto::DataType data_type_; - DataLayout data_layout_; - platform::Place place_; - LibraryType library_type_; - } - ``` - - - ---- - -### 多设备支持(三) - - - -step 3: 运行时的 KernelType 推断和Kernel切换,按需要修改Kernel推断和Kernel切换规则 -- Expected Kernel:期待调用的Kernel:由(1)`Place`和计算精度决定;或(2)用户在配置中显示指定使用的计算库,如`cudnn`、`mkldnn`等。 -- Actual Kernel:运行时从`Operator`的输入(`Variable`)可以推断出实际需要的`KernelType` -- 当Expected Kernel和Actual Kernel不一致的时候,框架会插入`data_transformer`或者`data_layerout_transform`等,保证Expected Kernel可以执行,包括: - - CPUPlace -> GPUPlace :跨设备内存复制 - - NCHW -> nChw8c :Layout转换 - - FP32 -> FP16 :精度转换 _**尚未支持**_ - - …… -- 以上过程实现在OperatorWithKernel类的Run方法中 [->](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/framework/operator.cc#L497) - - - ---- -## ==6.== while_op - ---- -### while_op - - - -- 循环执行一段`Program`,直到条件operator判断循环条件不满足时终止循环 -- while_op 的特殊之处: - 1. while_op 没有 kernel - 1. while_op 拥有自己的`Block`,会形成一段嵌套的`Block` - 1. ==while_op 内部创建了一个 Executor,来循环执行`Block`== - -- while_op 输入输出 : LoDTensorArray - ```cpp - namespace paddle { - namespace framework { - using LoDTensorArray = std::vector; - } - } - ``` - - 每一次循环,从原始输入中“切出”一个片段 - - LoDTensorArray 在Python端暴露,是Fluid支持的基础数据结构之一,用户可以直接创建并使用 - - - ---- -### while_op [Run](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/operators/while_op.cc#L42) 方法概览 - - - -```cpp - -void Run(const framework::Scope &scope, - const platform::Place &dev_place) const override { - PADDLE_ENFORCE_NOT_NULL(scope.FindVar(Input(kCondition))); - auto &cond = scope.FindVar(Input(kCondition))->Get(); - PADDLE_ENFORCE_EQ(cond.dims(), paddle::framework::make_ddim({1})); - - framework::Executor executor(dev_place); - auto *block = Attr(kStepBlock); - - auto *program = block->Program(); - auto step_scopes = - scope.FindVar(Output(kStepScopes))->GetMutable(); - - while (cond.data()[0]) { - auto ¤t_scope = scope.NewScope(); - step_scopes->push_back(¤t_scope); - executor.Run(*program, ¤t_scope, block->ID(), - false /*create_local_scope*/); - } -} - -``` - - - ---- -### while_op 的重要应用:Dynamic RNN - ---- - -### 什么是 `dynamicRNN` ? - - -
- -1. 用户可以自定义在一个时间步之内的计算, 框架接受序列输入数据,在其上循环调用用户定义的单步计算 -1. 可学习参数在多个时间步之间共享 -1. `dynamicRNN` 由 `while_op` 实现 -1. 如果`dynamicRNN`中定义了`memory`,将会构成一个循环神经网络,否则其行为就等于在输入序列上循环调用预定义的单步计算 - -
- ---- - -#### `dynamic RNN` 用户接口 - - -

- -

- -- `dynamicRNN` 中的重要元素 - 1. **step input**: `dynamicRNN` 每个时间步的输入 - 1. **step function**: 用户定义的单步计算 - 1. **memory**: 用于形成循环连接 - 1. **external/static memory**:单步计算的每一步都可以全部读取到的外部输入 - -
- ---- - -#### dynamicRNN 中的 Memory - - - -`dynamicRNN`中`memory`的行为非常类似于 C++ 中的引用变量 - - `memory` “指向” 一个operator的输出变量,记作: A - - `memory` 可以被 LoDTensor 初始化(当LoD信息为空时,为非序列,否则为序列),默认`memory`被初始化为零 - - `memory` 在 operator A 前向计算之后,进行前向计算 - - 当 `memory` 的前向计算会 "指向" A 的输出 LoDTensor - - `memory` 的输出可以是另一个 operator 的输入,于是形成了“循环”连接 - - - ---- - -### DynamicRNN 实现细节 - - - -- `while_op` 无法独立构成dynamicRNN,必须和一组相关的 operator 及数据结构配合 - - 依赖的 operators (这里仅列出最重要的,并非全部): - - `lod_rank_table` operator - - `lod_tensor_to_array` operator - - `array_to_lod_tensor` operator - - `shrink_memory` operator - - 依赖的数据结构 - - `TensorArray` - - `LoDRankTable` - -- 在Fluid中,RNN接受变长序列输入,无需填充,以上数据结构和相关的operator配合工作,实现了对变长输入以batch计算 - - - ---- - -### `dynamicRNN` 如何实现 batch 计算 ? - - - -- 问题: - - RNN 可以看作是一个展开的前向网络,前向网络的深度是最长序列的长度 - - 如果不对变长序列进行填充,将它们填充到一样长度,每个mini-batch输入将会不等长,每个样本展开长度不一致,导致前向和反向计算实现困难 - - - ----- -##### 实例 :RNN encoder-decoder with attention - - - -- 以机器翻译的RNN encoder-decoder 模型(涉及了`dynamicRNN`的所有设计要素)为例,下图是 RNN encoder-decoder 的原始输入: -

-
Figure. RNN encoder-decoder 原始batch 输入数据 -

- -- source word sequences 是encoder RNN的输出,是一个LoDTensor -- target word sequences 是look_uptable的输入,是一个LoDTensor -- 上图中一个矩形方块是CPU/GPU内存中一片连续的内存空间,表示一个dense vector - -
- ---- - -### `dynamicRNN` 如何实现 batch 计算 ? - - - -1. 对一个mini batch中不等长样本进行排序,最长样本变成batch中的第一个,最短样本是batch中最后一个 - - `LoDTensor` -> `LoDRankTable` :heavy_plus_sign: `lod_rank_table operaator` - - 可以将`LoDRankTable`理解为对LoDTensor中的多个序列按照长度排序LoDRankTable 存储了排序之后的index - -2. 构建每个时间步的batch输入:随着时间步增加,每个时间步的batch输入可能会逐渐缩小 - - `TensorArray` :heavy_plus_sign: `lod_tensor_to_array` -> `LoDTensor` (without LoD) -3. 每个时间步输出写入一个输出 `LoDTensorArray` -3. `dynamicRNN`循环结束后, 按照`LoDRankTable`中记录的信息对输出`LoDTensorArray`重排序,还原会原始输入顺序 - - `TensorArray` :heavy_plus_sign: `array_to_lod_tensor` -> `LoDTensor` - - - ---- - -### 运行实例 - -

- -

- ---- -### 运行实例 - -

- -

- - - -- 执行到第5~7个batch时,batch size将会缩小 - - - ---- -### 运行实例 - -

- -

- - - -- 第5 ~ 7个batch时RNN的`memory`会发生什么? - - `memory` 指向某个operator的输出Tensor,在该operator前向计算之后,“取回”其计算结果 - - 5 ~ 7时,遇到了序列的结束,==下一个时间步计算不再需要在已经结束的序列上展开== - - 在`dynamicRNN`中`shrink_memory` operator 用来缩小`memory`的batch输入 - - - ---- -### 运行实例:batch 1 ~ 2 - -

-
Figure. 第1、2个batch输入dynamicRNN的batch输入 -

- ---- -### 运行实例:batch 3 ~ 4 - -

-
Figure. 第3、4个batch输入dynamicRNN的batch输入 -

- ---- - -### 运行实例:batch 5 ~ 7 - -

-
Figure. 第5、6、7个batch输入dynamicRNN的batch输入 -

- ---- -### ==7.== Fluid 代码结构 - ---- -### Fluid 代码结构 - - - - - - - - - - - - - - - -
代码结构模块结构
-

- -

-
-

- -

-
- ---- - -### ==8.== 文档总结 - ---- - - -- 设计概览 - - 重构概览 [->](https://github.com/PaddlePaddle/Fluiddoc/blob/develop/doc/design/refactorization.md) - - fluid [->](https://github.com/PaddlePaddle/Fluiddoc/blob/develop/doc/design/fluid.md) - - fluid_compiler [->](https://github.com/PaddlePaddle/Fluiddoc/blob/develop/doc/fluid/design/motivation/fluid_compiler.md) -- 核心概念 - - variable 描述 [->](https://github.com/PaddlePaddle/Fluiddoc/blob/develop/doc/design/var_desc.md) - - Tensor [->](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/framework/tensor.md) - - LoDTensor [->](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/framework/lod_tensor.md) - - TensorArray [->](https://github.com/PaddlePaddle/Fluiddoc/blob/develop/doc/design/tensor_array.md) - - Program [->](https://github.com/PaddlePaddle/Fluiddoc/blob/develop/doc/design/program.md) - - Block [->](https://github.com/PaddlePaddle/Fluiddoc/blob/develop/doc/design/block.md) - - Scope [->](https://github.com/PaddlePaddle/Fluiddoc/blob/develop/doc/design/scope.md) - ---- - -- 重要功能模块 - - backward [->](https://github.com/PaddlePaddle/Fluiddoc/blob/develop/doc/design/backward.md) - - 内存优化 [->](https://github.com/PaddlePaddle/Fluiddoc/blob/develop/doc/design/memory_optimization.md) - - evaluator [->](https://github.com/PaddlePaddle/Fluiddoc/blob/develop/doc/design/executor.md) - - python API [->](https://github.com/PaddlePaddle/Fluiddoc/blob/develop/doc/design/python_api.md) - - regularization [->](https://github.com/PaddlePaddle/Fluiddoc/blob/develop/doc/design/regularization.md) - -- 开发指南 - - 支持新设硬件设备库 [->](https://github.com/PaddlePaddle/Fluiddoc/blob/develop/doc/design/support_new_device.md) - - 添加新的Operator [->](https://github.com/PaddlePaddle/Fluiddoc/blob/develop/doc/howto/dev/new_op_cn.md) - - 添加新的Kernel [->]( -https://github.com/PaddlePaddle/Fluiddoc/blob/develop/doc/howto/dev/new_op_kernel_en.md) - - - ---- - -### ==9.== 开发指南 - ---- - -#### 建议开发环境:使用 Docker 编译和测试 - - - -Docker编译PaddlePaddle源码: [->](http://www.paddlepaddle.org/docs/develop/documentation/fluid/zh/build_and_install/docker_install_cn.html) - -PaddlePaddle 在 Dockerhub 地址:[->]( - https://hub.docker.com/r/paddlepaddle/paddle/tags/) - -1. 获取PaddlePaddle的Docker镜像 - ```bash - docker pull paddlepaddle/paddle:latest-dev - ``` - -1. 启动 docker container - - ```bash - docker run -it -v $PWD/Paddle:/paddle paddlepaddle/paddle:latest-dev /bin/bash - ``` - -1. 进入docker container后,从源码编译,请参考文档 [->]( http://www.paddlepaddle.org/docs/develop/documentation/fluid/zh/build_and_install/build_from_source_cn.html) - - - ---- - -### 一些说明 - - - -1. PaddlePaddle的Docker镜像为了减小体积,默认没有安装vim,可以在容器中执行`apt-get install -y vim`来安装vim。 -1. 开发推荐使用tag为`latest-dev`的镜像,其中打包了所有编译依赖。`latest`及`lastest-gpu`是production镜像,主要用于运行PaddlePaddle程序。 -2. 在Docker中运行GPU程序,推荐使用nvidia-docker,[否则需要将CUDA库和设备挂载到Docker容器内](http://www.paddlepaddle.org/docs/develop/documentation/fluid/zh/build_and_install/docker_install_cn.html)。 - - - ```bash - nvidia-docker run -it -v $PWD/Paddle:/paddle paddlepaddle/paddle:latest-dev /bin/bash - ``` - - - - - ---- - -### [如何贡献](http://www.paddlepaddle.org/docs/develop/documentation/fluid/zh/dev/contribute_to_paddle_cn.html) - - - -- ==提交PullRequest前请务必阅读==: [->](http://www.paddlepaddle.org/docs/develop/documentation/fluid/zh/dev/contribute_to_paddle_cn.html) -- 代码要求 - 1. 代码注释遵守 Doxygen 的样式 - 1. 确保编译器选项 WITH_STYLE_CHECK 已打开,并且编译能通过代码样式检查 - 1. 所有代码必须具有单元测试,且能够通过所有单元测试 -- 使用 `pre-commit` 钩子提交Pull Request - 1. 帮助格式化源代码(C++,Python) - 1. 在提交前自动检查一些基本事宜:如每个文件只有一个 EOL,Git 中不要添加大文件等 - 1. 安装pre-commit,并在PaddlePaddle根目录运行: - ```bash - ➜ pip install pre-commit - ➜ pre-commit install - ``` - - ---- - -### 如何贡献 - - - -1. 开始开发之前请先建立issue。 - - 让其它同学知道某项工作已经有人在进行,以避免多人开发同一功能的情况。 -1. 提交PR必须关联相关的issue。做法请参考:[->](https://help.github.com/articles/closing-issues-using-keywords/) - - 目的:为了在提交的版本中留有记录描述这个PR是为了开发什么样的功能,为了解决什么样的问题。 - - 当PR被merge后,关联的issue会被自动关闭。 -1. PR review 中,reviewer的每条comment都必须回复。 - - 如修改完可直接回复:Done。 - - 目的:review comment 中可能会有(1)询问类型的问题;(2)可以在下一个PR修改的问题;(3)comment意见不合理等。需要明确回复,以便reviewer和其他人有历史可查,便于区分是否已经进行修改,或者准备下一个PR修改,或者意见不合理可以不用进行修改。 - - - ---- - -### ==10.== 添加新的 Operator - ---- - -### 概念简介 - - - -添加一个新的operator,会涉及实现以下C++类的派生类: - -1. `framework::OperatorBase`: Operator(简写,Op)基类。 -1. `framework::OpKernel`: Op计算函数的基类,称作Kernel。 -1. `framework::OperatorWithKernel`:继承自OperatorBase,Op有计算函数,称作有Kernel。 -1. `class OpProtoAndCheckerMaker`:描述该Op的输入、输出、属性、注释,主要用于Python API接口生成 - -依据是否包含kernel,可以将Op分为两种: -1. 包含Kernel的Op:继承自OperatorWithKernel,==绝大多数operator都属于这一类== -1. 不包含kernel的Op,继承自OperatorBase,只有少量Op属于这一类,例如while_op,ifelse_op - -这里主要介绍带Kernel的Op如何编写。 - - - ---- - -#### 添加新的Operator需要修改/添加哪些文件? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
内容定义位置
-OpProtoMake定义 - -`.cc`文件,Backward Op不需要OpProtoMaker -
-Op定义 - -`.cc`文件 -
-Kernel实现 - -CPU、CUDA共享Kernel实现在`.h`文件中,否则,CPU 实现在`.cc`文件中,CUDA 实现在`.cu`文件中。 -
-注册Op - -Op注册实现在`.cc`文件;Kernel注册CPU实现在`.cc`文件中,CUDA实现在`.cu`文件中 -
- -- 添加 Operator 之前请阅读:[Operator 命名规范](https://github.com/PaddlePaddle/Paddle/blob/63cca04cfd488a4dab6d6273fd04a8017ef45932/doc/fluid/dev/name_convention.md)及[Operator Markdown注释规范](https://github.com/PaddlePaddle/Paddle/blob/63cca04cfd488a4dab6d6273fd04a8017ef45932/doc/fluid/dev/op_markdown_format.md)。 -- 实现新的op都添加至目录[paddle/operators](https://github.com/PaddlePaddle/Paddle/tree/develop/paddle/fluid/operators)下,文件命名以`*_op.h`(如有) 、 `*_op.cc` 、`*_op.cu`(如有)结尾。 -- 根据文件名自动构建op和Python端绑定,请务必遵守以上命名,否则需要进一步修改PyBind相关文件及CMakeLists.txt。 -
- ---- - -###### 实现带Kernel的Operator step1: 定义ProtoMaker类 - - - -下面均以[clip_op](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/operators/clip_op.h)为例进行介绍 - -- clip_op计算公式:$Out = \min(\max(X, min), max)$ -- 首先定义`ProtoMaker`来描述该Op的输入、输出,并添加注释(*下面代码段的中注释进行了简化,实现时需按照规范添加注释*): - - ```cpp - template - class ClipOpMaker : public framework::OpProtoAndCheckerMaker { - public: - ClipOpMaker(OpProto* proto, OpAttrChecker* op_checker) - : OpProtoAndCheckerMaker(proto, op_checker) { - AddInput("X","(Tensor)The input of clip op."); - AddOutput("Out", "(Tensor),The output of clip op."); - AddAttr( - "min", "(float),Minimum value."); - AddAttr( - "max", "(float),Maximum value."); - AddComment(R"DOC( - …… - )DOC"); - } - }; - ``` - - - ---- - -###### 实现带Kernel的Operator step2: 定义Operator类 - - - -下面的代码段实现了`clip_op`的定义: - -```cpp -class ClipOp : public framework::OperatorWithKernel { - public: - using framework::OperatorWithKernel::OperatorWithKernel; - - void InferShape(framework::InferShapeContext* ctx) const override { - PADDLE_ENFORCE(ctx->HasInput("X"), - "Input(X) of ClipOp should not be null."); - PADDLE_ENFORCE(ctx->HasOutput("Out"), - "Output(Out) of ClipOp should not be null."); - auto x_dims = ctx->GetInputDim("X"); - auto max = ctx->Attrs().Get("max"); - auto min = ctx->Attrs().Get("min"); - PADDLE_ENFORCE_LT(min, max, "max should be greater than min."); - ctx->SetOutputDim("Out", x_dims); - ctx->ShareLoD("X", /*->*/ "Out"); - } -}; -``` - - ---- - -### Operator 类中需要完成的工作 - - - -1. clip_op 继承自`OperatorWithKernel`, - - ```cpp - using framework::OperatorWithKernel::OperatorWithKernel; - ``` - 表示使用基类`OperatorWithKernel`的构造函数。 - -1. 重写`InferShape`接口。 - - `InferShape` 为const函数,不能修改Op的成员变 - - `InferShape` 的参数为 `const framework::InferShapeContext &ctx`,从中可获取到输入输出以及属性 - - `InferShape` 会被调用两次,一次是编译时(创建op),一次是运行时(调用op的`Run`方法时),需要完成以下功能: - 1. 做检查, 尽早报错:检查输入数据维度、类型等是否合法 - 2. 设置输出Tensor的形状 - -通常`OpProtoMaker`和`Op`类的定义写在`.cc`文件中。 - - - ---- - -### 补充说明 - - - -1. `InferShape`目前支持两种实现方式,二者最后都会生成一个functor注册给OpInfo结构体。 - 1. 继承framework::InferShapeBase,实现为一个functor(参考 [mul_op](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/operators/mul_op.cc#L22)) - 2. override InferShape函数(参考 [clip_op](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/operators/clip_op.cc#L24)) - -1. 什么是`functor` ? - - - 类或结构体仅重载了`()`,一般是可被多个kernel复用的计算函数。 - - - - ```cpp - template - class CrossEntropyFunctor { - public: - void operator()(const platform::CPUDeviceContext& ctx, - framework::Tensor* out, - const framework::Tensor* prob, - const framework::Tensor* labels, const bool softLabel) { - …… - } - }; - ``` - - - - 在 clip_op 内也会看到将一段计算函数抽象为functor的使用法: [->](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/operators/clip_op.h#L27)。 - - - ---- - -###### 实现带Kernel的Operator step3: 定义OpKernel类 - - - -- `ClipKernel`继承自`framework::OpKernel`,带有下面两个模板参数: - 1. `typename DeviceContext`: 表示设备类型,不同设备共享同一个Kernel时,需添加该模板参数。不共享时,需要提供针对不同设备的特化实现。 - 1. `typename T` : 表示支持的数据类型,如`float`, `double`等 - -- 在`ClipKernel`类中重写`Compute`方法 - 1. `Compute`接受输入参数:`const framework::ExecutionContext& context` - - `ExecutionContext` 是从 `Scope`中将运行时Op的输入、输出`Variable`组织在一起,使得Op在调用`Compute`方法时,能够简单地通过名字拿到需要的输入输出`Variable` - - 与`InferShapeContext`相比,`ExecutionContext` 中增加了设备类型 - 1. 在`Compute`函数里实现`OpKernel`的具体计算逻辑 - - - ---- -#### ClipKernel 代码概览 - - - -```cpp -template -class ClipKernel : public framework::OpKernel { - public: - void Compute(const framework::ExecutionContext& context) const override { - auto max = context.Attr("max"); - auto min = context.Attr("min"); - auto* x = context.Input("X"); - auto* out = context.Output("Out"); - T* out_data = out->mutable_data(context.GetPlace()); - const T* x_data = x->data(); - int64_t numel = x->numel(); - Transform trans; - trans(context.template device_context(), x_data, - x_data + numel, out_data, ClipFunctor(min, max)); - } -}; -``` - -- 为了使`OpKernel`的计算过程书写更加简单,并且CPU、CUDA的代码可以复用, Fluid 使用 Eigen 作为基础的矩阵运算库 -- Fluid对Eigen unsupported Tensor提供了一些基本的封装,可以在`Compute`接口中直接调用 - - 关于在PaddlePaddle中如何使用Eigen库,请参考[使用文档](https://github.com/PaddlePaddle/Fluiddoc/blob/develop/doc/fluid/dev/use_eigen_cn.md)。 - - - ---- -###### 实现带Kernel的Operator step4: 实现反向Op - - - -- ==**反向Op没有`ProtoMaker`**==,除此之外定义与实现方式前向Op完全一致,不再赘述 -- 这里仅对反向Op的输入输出进行说明: - 1. 反向Op的输入 - - 前向Op的输出 - - 反向传播过程中传递给当前Op的梯度 - - 需要注意,Fluid中,不区分Cost Op和中间层Op,所有Op都必须正确处理接收到的梯度 - 2. 反向Op的输出 - - 对可学习参数的求导结果 - - 对所有输入的求导结果 - - - - ---- - -###### 实现带Kernel的Operator step5: 注册Op及Kernel - - - -至此Op和Op kernel都已经实现完毕,接下来,需要在`.cc`和`cu`文件中注册op和kernel - -1. 在`.cc`文件中注册前向、反向Op类,注册CPU Kernel。 - - - - ```cpp - namespace ops = paddle::operators; - REGISTER_OP(clip, ops::ClipOp, ops::ClipOpMaker, clip_grad, - ops::ClipOpGrad); - REGISTER_OP_CPU_KERNEL( - clip, ops::ClipKernel); - REGISTER_OP_CPU_KERNEL( - clip_grad, ops::ClipGradKernel); - ``` - - - 在上面的代码片段中: - - 1. `REGISTER_OP` : 注册`ops::ClipOp`类,类型名为`clip`,该类的`ProtoMaker`为`ops::ClipOpMaker`,注册`ops::ClipOpGrad`,类型名为`clip_grad` - 1. `REGISTER_OP_WITHOUT_GRADIENT` : 用于注册没有反向的Op,例如:优化算法相关的Op - 1. `REGISTER_OP_CPU_KERNEL` :注册`ops::ClipKernel`类,并特化模板参数为`paddle::platform::CPUPlace`和`float`类型,同理,注册`ops::ClipGradKernel`类 - - -1. 按照同样方法,在`.cu`文件中注册GPU Kernel - - 如果CUDA Kernel的实现基于Eigen,需在 `.cu`的开始加上宏定义 `#define EIGEN_USE_GPU` - - - ---- - -##### 编译和Python端绑定 - - - -- 运行下面命令可以仅编译新添加的Op: - - ``` - make mul_op - ``` - - 需注意,运行单元测试需要编译整个工程 - -- 如果遵循前文的文件命名规则,构建过程中,会自动为新增的op添加Python端绑定,并链接到生成的lib库中 - - - ---- - -###### 实现带Kernel的Operator step6: 添加前向单测及梯度检测 - - - -- 新增Op的单元测试统一添加至:[python/paddle/v2/fluid/tests/unittests](https://github.com/PaddlePaddle/Paddle/tree/develop/python/paddle/fluid/tests/unittests)目录 -- 前向Operator单测 - - 1. Op单元测试继承自`OpTest`,各项具体的单元测试在`TestClipOp`里完成,所有单测case都以`TestXX`命名 - 1. 单元测试Operator,需要: - 1. 在`setUp`函数定义输入、输出,以及相关的属性参数 - 1. 生成随机的输入数据 - 1. 在Python脚本中实现与前向operator相同的计算逻辑,得到输出值,与operator前向计算的输出进行对比 - 1. 反向梯度检测流程测试框架已经实现,直接调用相应接口`check_grad`即可 - -- `clip_op` 单测代码请参考 [->](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/fluid/tests/unittests/test_clip_op.py),这里不再展开 - - - ---- -#### 编译执行单测 - - - -- `python/paddle/v2/framework/tests` 目录下新增的 `test_*.py` 单元测试会被自动加入工程进行编译 - - - 运行单元测试测时需要编译整个工程,并且编译时需要打开`WITH_TESTING`, 即`cmake paddle_dir -DWITH_TESTING=ON` -- 编译成功后,执行下面的命令来运行单元测试: - - ```bash - make test ARGS="-R test_mul_op -V" - ``` - - 或者: - - ``` - ctest -R test_mul_op - ``` - - ---- - -### 添加Op的一些注意事项 - - - -- 为每个Op创建单独的`*_op.h`(如有)、`*_op.cc`和`*_op.cu`(如有)。不允许一个文件中包含多个Op,将会导致编译出错。 -- 注册Op时的类型名,需要和该Op的名字一样。不允许在`A_op.cc`里面,注册`REGISTER_OP(B, ...)`,会导致单元测试出错。 -- 如果Op没有实现CUDA Kernel,不要创建空的`*_op.cu`,会导致单元测试出错。 -- 如果多个Op依赖一些共用的函数,可以创建非`*_op.*`格式的文件来存放,如`gather.h`文件。 - - - ---- - -### ==10.== 使用相关问题 - ---- - -### 定义前向计算 - - - -- 当在python端执行时: - ```python - import paddle.fluid as fluid - ``` - [`framework.py`](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/fluid/framework.py#L1040)定义了两个全局`Program`: - ```python - # program is a global instance. - _main_program_ = Program() - _startup_program_ = Program() - ``` - -- 前向定义的过程就是不断往`mian_program`中添加Op和Variable -- 如果需要执行一个新的`mian_program`时,可以调用调用: - ```python - def switch_main_program(program): - """ - Switch the main program to a new program. - This funtion returns the previous main program. - """ - …… - ``` - - ---- - -### 自定义参数的初始化 - - - -- 调用`fluid.ParamAttr(……)`接口,自定义参数的初始化 - - ```python - w_param_attrs = ParamAttr(name=None, - initializer=UniformInitializer(low=-1.0, high=1.0, seed=0), - learning_rate=1.0, - regularizer=L1Decay(1.0), - trainable=True, - clip=GradientClipByValue(-1.0, 1.0), - ) - y_predict = fluid.layers.fc(input=x, size=1, param_attr=w_param_attrs) - ``` - -- 补充问题:如何创建 `Variable` - ```python - cur_program = Program() - cur_block = cur_program.current_block() - new_var = cur_block.create_var(name="X", shape=[-1, 16, 16], dtype="float32") - ``` - - - ---- - -### 添加反向Op - - - -- 调用`fluid.backward.append_backward(X)`(`X`是一个Variable),来为一段前向`ProgramDesc`添加反Op - - ```python - data = fluid.layers.data(name="data", shape=(2,3,4)) - out = fluid.layers.fc(input=data,size=128,act=None) - loss = fluid.layers.reduce_sum(out) - fluid.backward.append_backward(loss=loss) - ``` - -- 添加优化相关的Op - ```python - sgd_optimizer = fluid.optimizer.SGD(learning_rate=0.001) - sgd_optimizer.minimize(loss) - ``` - -- 可以随时调用`print(fluid.default_main_program())`来输出当前的`main_program` - -- 当构建完成整个`Program`后,调用下面的接口执行内存优化: - ```python - fluid.memory_optimize(fluid.default_main_program()) - ``` - - _注:内存优化目前仍在持续开发中,有可能不够稳定。_ - - - ---- - -### 总结:编译时执行流程 - - - -- 用户定义前向计算 -- 添加反向Op到`default_main_program` -- 添加 gradient clipping Op 到 -- 添加 regularization Op 到`default_main_program` -- 为指定的优化算法,添加相关的状态 variable of optimizer 到`default_startup_program` - - 状态相关 variable是指如学习率, 历史 momentum, 二阶momentum等 -- 添加初始化 variable 的Op 到 `default_startup_program` -- 为整个网络最后一个op,添加设置其接受到的梯度的Op到`default_main_program` -- 进行内存优化规划 - - - ---- - -### Feed 数据 (一):通过 feed 字典 - - - -- 执行executor的run方法时,指定feed字典,feed op 会将指定的数据放到`x`和`y`两个Variable中 - ```python - y_data = np.random.randint(0, 8, [1]).astype("int32") - y_tensor = core.Tensor() - y_tensor.set(y_data, place) - - x_data = np.random.uniform(0.1, 1, [11, 8]).astype("float32") - x_tensor = core.Tensor() - x_tensor.set(x_data, place) - …… - cost = exe.run( - fluid.default_main_program(), - feed={'x': x_tensor, - 'y': y_tensor}, - fetchlist=[avg_cost]) - ``` - -- 这种方法较为底层,一般用于单测中 - - - ---- - -### Feed 数据 (二):使用 DataFeeder接口 - - - -- 编写一个data_reader函数,data_reader是一个Python generator - - ```python - def demo_reader(): - def random_generator(): - yield np.random.uniform(0.1, 1, [4]), np.random.randint(0, 1, [1]) - return random_generator - ``` -- 在训练任务中使用 DataFeeder 接口 - ```python - cost = exe.run( - fluid.default_main_program(), - feed={'x': x_tensor, - 'y': y_tensor}, - fetchlist=[avg_cost]) - - train_reader = paddle.batch( - paddle.reader.shuffle(demo_reader(), buf_size=500), batch_size=4) - feeder = fluid.DataFeeder(place=place, feed_list=[x, y]) - for data in train_reader(): - cost = exe.run( - fluid.default_main_program(), - feed=feeder.feed(data), - fetch_list=[cost]) - ``` - - - ---- - -### 常见问题 - - - -- 如何使用 evaluator ? [->](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/fluid/tests/book/test_label_semantic_roles.py#L168) - - ```python - accuracy = fluid.evaluator.Accuracy(input=predict, label=label) - for pass_id in range(PASS_NUM): - accuracy.reset() - for data in train_reader(): - loss, acc = exe.run(fluid.default_main_program(), - feed=feeder.feed(data), - fetch_list=[avg_cost] + accuracy.metrics) - pass_acc = accuracy.eval(exe) - # acc 当前一个batch 的 accuracy - # pass_acc 当前batch 的 accuracy - pass_total_acc = accuracy.eval(exe) # 整个pass的accuracy - ``` - -- 如何在训练中测试?[->](https://github.com/dzhwinter/benchmark/blob/master/fluid/vgg16.py#L144) -- 如何保存训练好的模型?[->](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/fluid/tests/book/test_recognize_digits.py#L143) -- 如何加载训练好的模型进行预测?[->](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/fluid/tests/book/test_recognize_digits.py#L154) -- 如何在同一个训练任务中定义多个Program,并交替运行? [->](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/fluid/tests/demo/fc_gan.py) -- 如何profile?Fluid 实现了profile 工具,可以直接调用。请参考示例 [->](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/fluid/tests/unittests/test_profiler.py) - - - - ---- diff --git a/doc/fluid/getstarted/concepts/index_cn.rst b/doc/fluid/getstarted/concepts/index_cn.rst deleted file mode 100644 index 2e7f70fc4..000000000 --- a/doc/fluid/getstarted/concepts/index_cn.rst +++ /dev/null @@ -1,4 +0,0 @@ -基本使用概念 -============ - -TBD diff --git a/doc/fluid/getstarted/concepts/index_en.rst b/doc/fluid/getstarted/concepts/index_en.rst deleted file mode 100644 index 78cca1e2a..000000000 --- a/doc/fluid/getstarted/concepts/index_en.rst +++ /dev/null @@ -1,4 +0,0 @@ -Concepts -============ - -TBD diff --git a/doc/fluid/getstarted/concepts/reader/README.md b/doc/fluid/getstarted/concepts/reader/README.md deleted file mode 100644 index 2cd4b6225..000000000 --- a/doc/fluid/getstarted/concepts/reader/README.md +++ /dev/null @@ -1,206 +0,0 @@ -# Python Data Reader Design Doc - -During the training and testing phases, PaddlePaddle programs need to read data. To help the users write code that performs reading input data, we define the following: - -- A *reader*: A function that reads data (from file, network, random number generator, etc) and yields the data items. -- A *reader creator*: A function that returns a reader function. -- A *reader decorator*: A function, which takes in one or more readers, and returns a reader. -- A *batch reader*: A function that reads data (from *reader*, file, network, random number generator, etc) and yields a batch of data items. - -and also provide a function which can convert a reader to a batch reader, frequently used reader creators and reader decorators. - -## Data Reader Interface - -*Data reader* doesn't have to be a function that reads and yields data items. It can just be any function without any parameters that creates an iterable (anything can be used in `for x in iterable`) as follows: - -``` -iterable = data_reader() -``` - -The item produced from the iterable should be a **single** entry of data and **not** a mini batch. The entry of data could be a single item or a tuple of items. Item should be of one of the [supported types](http://www.paddlepaddle.org/doc/ui/data_provider/pydataprovider2.html?highlight=dense_vector#input-types) (e.g., numpy 1d array of float32, int, list of int etc.) - -An example implementation for single item data reader creator is as follows: - -```python -def reader_creator_random_image(width, height): - def reader(): - while True: - yield numpy.random.uniform(-1, 1, size=width*height) - return reader -``` - -An example implementation for multiple item data reader creator is as follows: -```python -def reader_creator_random_image_and_label(width, height, label): - def reader(): - while True: - yield numpy.random.uniform(-1, 1, size=width*height), label - return reader -``` - -## Batch Reader Interface - -*Batch reader* can be any function without any parameters that creates an iterable (anything can be used in `for x in iterable`). The output of the iterable should be a batch (list) of data items. Each item inside the list should be a tuple. - -Here are some valid outputs: - -```python -# a mini batch of three data items. Each data item consist three columns of data, each of which is 1. -[(1, 1, 1), -(2, 2, 2), -(3, 3, 3)] - -# a mini batch of three data items, each data item is a list (single column). -[([1,1,1],), -([2,2,2],), -([3,3,3],)] -``` - -Please note that each item inside the list must be a tuple, below is an invalid output: -```python - # wrong, [1,1,1] needs to be inside a tuple: ([1,1,1],). - # Otherwise it is ambiguous whether [1,1,1] means a single column of data [1, 1, 1], - # or three columns of data, each of which is 1. -[[1,1,1], -[2,2,2], -[3,3,3]] -``` - -It is easy to convert from a reader to a batch reader: - -```python -mnist_train = paddle.dataset.mnist.train() -mnist_train_batch_reader = paddle.batch(mnist_train, 128) -``` - -It is also straight forward to create a custom batch reader: - -```python -def custom_batch_reader(): - while True: - batch = [] - for i in xrange(128): - batch.append((numpy.random.uniform(-1, 1, 28*28),)) # note that it's a tuple being appended. - yield batch - -mnist_random_image_batch_reader = custom_batch_reader -``` - -## Usage - -Following is how we can use the reader with PaddlePaddle: -The batch reader, a mapping from item(s) to data layer, the batch size and the number of total passes will be passed into `paddle.train` as follows: - -```python -# two data layer is created: -image_layer = paddle.layer.data("image", ...) -label_layer = paddle.layer.data("label", ...) - -# ... -batch_reader = paddle.batch(paddle.dataset.mnist.train(), 128) -paddle.train(batch_reader, {"image":0, "label":1}, 128, 10, ...) -``` - -## Data Reader Decorator - -The *Data reader decorator* takes in a single reader or multiple data readers and returns a new data reader. It is similar to a [python decorator](https://wiki.python.org/moin/PythonDecorators), but it does not use `@` in the syntax. - -Since we have a strict interface for data readers (no parameters and return a single data item), a data reader can be used in a flexible way using data reader decorators. Following are a few examples: - -### Prefetch Data - -Since reading data may take some time and training can not proceed without data, it is generally a good idea to prefetch the data. - -Use `paddle.reader.buffered` to prefetch data: - -```python -buffered_reader = paddle.reader.buffered(paddle.dataset.mnist.train(), 100) -``` - -`buffered_reader` will try to buffer (prefetch) `100` data entries. - -### Compose Multiple Data Readers - -For example, if we want to use a source of real images (say reusing mnist dataset), and a source of random images as input for [Generative Adversarial Networks](https://arxiv.org/abs/1406.2661). - -We can do the following : - -```python -def reader_creator_random_image(width, height): - def reader(): - while True: - yield numpy.random.uniform(-1, 1, size=width*height) - return reader - -def reader_creator_bool(t): - def reader: - while True: - yield t - return reader - -true_reader = reader_creator_bool(True) -false_reader = reader_creator_bool(False) - -reader = paddle.reader.compose(paddle.dataset.mnist.train(), data_reader_creator_random_image(20, 20), true_reader, false_reader) -# Skipped 1 because paddle.dataset.mnist.train() produces two items per data entry. -# And we don't care about the second item at this time. -paddle.train(paddle.batch(reader, 128), {"true_image":0, "fake_image": 2, "true_label": 3, "false_label": 4}, ...) -``` - -### Shuffle - -Given the shuffle buffer size `n`, `paddle.reader.shuffle` returns a data reader that buffers `n` data entries and shuffles them before a data entry is read. - -Example: -```python -reader = paddle.reader.shuffle(paddle.dataset.mnist.train(), 512) -``` - -## Q & A - -### Why does a reader return only a single entry, and not a mini batch? - -Returning a single entry makes reusing existing data readers much easier (for example, if an existing reader returns 3 entries instead if a single entry, the training code will be more complicated because it need to handle cases like a batch size 2). - -We provide a function: `paddle.batch` to turn (a single entry) reader into a batch reader. - -### Why do we need a batch reader, isn't is sufficient to give the reader and batch_size as arguments during training ? - -In most of the cases, it would be sufficient to give the reader and batch_size as arguments to the train method. However sometimes the user wants to customize the order of data entries inside a mini batch, or even change the batch size dynamically. For these cases using a batch reader is very efficient and helpful. - -### Why use a dictionary instead of a list to provide mapping? - -Using a dictionary (`{"image":0, "label":1}`) instead of a list (`["image", "label"]`) gives the advantage that the user can easily reuse the items (e.g., using `{"image_a":0, "image_b":0, "label":1}`) or even skip an item (e.g., using `{"image_a":0, "label":2}`). - -### How to create a custom data reader creator ? - -```python -def image_reader_creator(image_path, label_path, n): - def reader(): - f = open(image_path) - l = open(label_path) - images = numpy.fromfile( - f, 'ubyte', count=n * 28 * 28).reshape((n, 28 * 28)).astype('float32') - images = images / 255.0 * 2.0 - 1.0 - labels = numpy.fromfile(l, 'ubyte', count=n).astype("int") - for i in xrange(n): - yield images[i, :], labels[i] # a single entry of data is created each time - f.close() - l.close() - return reader - -# images_reader_creator creates a reader -reader = image_reader_creator("/path/to/image_file", "/path/to/label_file", 1024) -paddle.train(paddle.batch(reader, 128), {"image":0, "label":1}, ...) -``` - -### How is `paddle.train` implemented - -An example implementation of paddle.train is: - -```python -def train(batch_reader, mapping, batch_size, total_pass): - for pass_idx in range(total_pass): - for mini_batch in batch_reader(): # this loop will never end in online learning. - do_forward_backward(mini_batch, mapping) -``` diff --git a/doc/fluid/getstarted/concepts/save_model/model_format.md b/doc/fluid/getstarted/concepts/save_model/model_format.md deleted file mode 100644 index 1f12ba049..000000000 --- a/doc/fluid/getstarted/concepts/save_model/model_format.md +++ /dev/null @@ -1,76 +0,0 @@ -# Design Doc: Model Format - -## Motivation - -A model is an output of the training process. One complete model consists of two parts, the **topology** and the **parameters**. In order to support industrial deployment, the model format must be self-complete and must not expose any training source code. - -As a result, In PaddlePaddle, the **topology** is represented as a [ProgramDesc](https://github.com/PaddlePaddle/Paddle/blob/1c0a4c901c9fc881d120249c703b15d1c50dae7d/doc/design/program.md), which describes the model structure. The **parameters** contain all the trainable weights in the model. We must support large size parameters and efficient serialization/deserialization of parameters. - -## Implementation - -The topology is saved as a plain text in a detailed self-contain protobuf file. - -The parameters are saved as a binary file. As we all know, the protobuf message has a limit of [64M size](https://developers.google.com/protocol-buffers/docs/reference/cpp/google.protobuf.io.coded_stream#CodedInputStream.SetTotalBytesLimit.details). We have done a [benchmark experiment](https://github.com/PaddlePaddle/Paddle/pull/4610), which shows that protobuf is not fit for the task. - -As a result, we design a particular format for tensor serialization. By default, an arbitrary tensor in Paddle is a [LoDTensor](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/framework/lod_tensor.md), and has a description information proto of [LoDTensorDesc](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/framework/framework.proto#L99). We save the DescProto as the byte string header. It contains all the necessary information, such as the `dims`, and the `LoD` information in [LoDTensor](https://github.com/PaddlePaddle/Paddle/blob/1c0a4c901c9fc881d120249c703b15d1c50dae7d/paddle/framework/lod_tensor.md). A tensor stores values in a continuous memory buffer. For speed we dump the raw memory to disk and save it as the byte string content. So, the binary format of one tensor is, - -The table below shows a tensor's byte view in detail. Note that all the signed values are written in the little-endian format. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
field nametype description
version uint32_t Version of saved file. Always 0 now.
tensor desc length uint32_t TensorDesc(Protobuf message) length in bytes.
tensor desc void* TensorDesc protobuf binary message
tensor data void* Tensor's data in binary format. The length of `tensor_data` is decided by `TensorDesc.dims()` and `TensorDesc.data_type()`
lod_level uint64_t Level of LoD
length of lod[0] uint64_t [Optional] length of lod[0] in bytes.
data of lod[0] uint64_t* [Optional] lod[0].data()
... ... ...
- -## Summary - -- We introduce a model format. -- The model represented by its forward-pass computation procedure is saved in a **ProgramDesc** protobuf message. -- A bunch of specified format binary tensors describe the **parameters**. diff --git a/doc/fluid/getstarted/index_cn.rst b/doc/fluid/getstarted/index_cn.rst deleted file mode 100644 index 3daea71d0..000000000 --- a/doc/fluid/getstarted/index_cn.rst +++ /dev/null @@ -1,20 +0,0 @@ -新手入门 -============ - - -如果需要快速了解PaddlePaddle的使用,可以参考以下指南。 - -.. toctree:: - :maxdepth: 1 - - quickstart_cn.rst - - -在使用PaddlePaddle构建应用时,需要了解一些基本概念。 -这里以一个线性回归为例子,详细介绍了PaddlePaddle的使用流程,包括数据格式,模型配置与训练等。 - -.. toctree:: - :maxdepth: 1 - - concepts/use_concepts_cn.rst - developer's_guide_to_paddle_fluid.md diff --git a/doc/fluid/getstarted/index_en.rst b/doc/fluid/getstarted/index_en.rst deleted file mode 100644 index fb20bb4f2..000000000 --- a/doc/fluid/getstarted/index_en.rst +++ /dev/null @@ -1,19 +0,0 @@ -GET STARTED -============ - -If you want to quickly know how to use PaddlePaddle, please refer to the following guide: - -.. toctree:: - :maxdepth: 1 - - quickstart_en.rst - -While using PaddlePaddle to build applications, please understand some basic concepts. - -Here is an example of linear regression. It introduces workflow of PaddlePaddle, including data format, model configuration and training, etc. - -.. toctree:: - :maxdepth: 1 - - concepts/index_en.rst - developer's_guide_to_paddle_fluid.md diff --git a/doc/fluid/getstarted/quickstart_cn.rst b/doc/fluid/getstarted/quickstart_cn.rst deleted file mode 100644 index 6a964d4f8..000000000 --- a/doc/fluid/getstarted/quickstart_cn.rst +++ /dev/null @@ -1,45 +0,0 @@ -快速开始 -======== - -快速安装 --------- - -PaddlePaddle支持使用pip快速安装,目前支持CentOS 6以上, Ubuntu 14.04以及MacOS 10.12,并安装有Python2.7。 -执行下面的命令完成快速安装,版本为cpu_avx_openblas: - - .. code-block:: bash - - pip install paddlepaddle - -如果需要安装支持GPU的版本(cuda8.0_cudnn5_avx_openblas),需要执行: - - .. code-block:: bash - - pip install paddlepaddle-gpu - -更详细的安装和编译方法参考: :ref:`install_steps` 。 - -快速使用 --------- - -创建一个 housing.py 并粘贴此Python代码: - - .. code-block:: python - - import paddle.dataset.uci_housing as uci_housing - import paddle.fluid as fluid - - with fluid.scope_guard(fluid.core.Scope()): - # initialize executor with cpu - exe = fluid.Executor(place=fluid.CPUPlace()) - # load inference model - [inference_program, feed_target_names,fetch_targets] = \ - fluid.io.load_inference_model(uci_housing.fluid_model(), exe) - # run inference - result = exe.run(inference_program, - feed={feed_target_names[0]: uci_housing.predict_reader()}, - fetch_list=fetch_targets) - # print predicted price is $12,273.97 - print 'Predicted price: ${:,.2f}'.format(result[0][0][0] * 1000) - -执行 :code:`python housing.py` 瞧! 它应该打印出预测住房数据的清单。 diff --git a/doc/fluid/getstarted/quickstart_en.rst b/doc/fluid/getstarted/quickstart_en.rst deleted file mode 100644 index 680122f25..000000000 --- a/doc/fluid/getstarted/quickstart_en.rst +++ /dev/null @@ -1,49 +0,0 @@ -Quick Start -============ - -Quick Install -------------- - -You can use pip to install PaddlePaddle with a single command, supports -CentOS 6 above, Ubuntu 14.04 above or MacOS 10.12, with Python 2.7 installed. -Simply run the following command to install, the version is cpu_avx_openblas: - - .. code-block:: bash - - pip install paddlepaddle - -If you need to install GPU version (cuda8.0_cudnn5_avx_openblas), run: - - .. code-block:: bash - - pip install paddlepaddle-gpu - -For more details about installation and build: :ref:`install_steps` . - -Quick Use ---------- - -Create a new file called housing.py, and paste this Python -code: - - - .. code-block:: python - - import paddle.dataset.uci_housing as uci_housing - import paddle.fluid as fluid - - with fluid.scope_guard(fluid.core.Scope()): - # initialize executor with cpu - exe = fluid.Executor(place=fluid.CPUPlace()) - # load inference model - [inference_program, feed_target_names,fetch_targets] = \ - fluid.io.load_inference_model(uci_housing.fluid_model(), exe) - # run inference - result = exe.run(inference_program, - feed={feed_target_names[0]: uci_housing.predict_reader()}, - fetch_list=fetch_targets) - # print predicted price is $12,273.97 - print 'Predicted price: ${:,.2f}'.format(result[0][0][0] * 1000) - -Run :code:`python housing.py` and voila! It should print out a list of predictions -for the test housing data. diff --git a/doc/fluid/howto/cluster/fluid_cluster_train_cn.md b/doc/fluid/howto/cluster/fluid_cluster_train_cn.md deleted file mode 100644 index a1d1b8bf4..000000000 --- a/doc/fluid/howto/cluster/fluid_cluster_train_cn.md +++ /dev/null @@ -1,181 +0,0 @@ -# Fluid 分布式版本使用指南 -本篇文章将说明如何在PaddlePaddle Fluid版本下进行分布式训练的配置和执行,以及将单机训练脚本改造成支持集群训练的版本 - -## 准备工作 -* 可用的集群 - - 包含一个或多个计算节点的集群,每一个节点都能够执行PaddlePaddle的训练任务且拥有唯一的IP地址,集群内的所有计算节点可以通过网络相互通信。 -* 安装PaddlePaddle Fluid with Distribution版本 - - 所有的计算节点上均需要按照分布式版本的PaddlePaddle, 在用于GPU等设备的机器上还需要额外安装好相应的驱动程序和CUDA的库。 - - **注意:**当前对外提供的PaddlePaddle版本并不支持分布式,需要通过源码重新编译。编译和安装方法参见[编译和安装指南](http://www.paddlepaddle.org/docs/develop/documentation/en/getstarted/build_and_install/index_en.html)。 - cmake编译命令中需要将WITH_DISTRIBUTE设置为ON,下面是一个cmake编译指令示例: -``` bash -cmake .. -DWITH_DOC=OFF -DWITH_GPU=OFF -DWITH_DISTRIBUTE=ON -DWITH_SWIG_PY=ON -DWITH_PYTHON=ON -``` - -## 更新训练脚本 -这里,我们以[Deep Learing 101](http://www.paddlepaddle.org/docs/develop/book/01.fit_a_line/index.html)课程中的第一章 fit a line 为例,描述如何将单机训练脚本改造成支持集群训练的版本。 -### 单机训练脚本示例 -```python -import paddle -import paddle.fluid as fluid - -x = fluid.layers.data(name='x', shape=[13], dtype='float32') -y_predict = fluid.layers.fc(input=x, size=1, act=None) -y = fluid.layers.data(name='y', shape=[1], dtype='float32') - -cost = fluid.layers.square_error_cost(input=y_predict, label=y) -avg_cost = fluid.layers.mean(x=cost) - -sgd_optimizer = fluid.optimizer.SGD(learning_rate=0.001) -sgd_optimizer.minimize(avg_cost) - -BATCH_SIZE = 20 - -train_reader = paddle.batch( - paddle.reader.shuffle( - paddle.dataset.uci_housing.train(), buf_size=500), - batch_size=BATCH_SIZE) - -place = fluid.CPUPlace() -feeder = fluid.DataFeeder(place=place, feed_list=[x, y]) -exe = fluid.Executor(place) - -exe.run(fluid.default_startup_program()) - -PASS_NUM = 100 -for pass_id in range(PASS_NUM): - fluid.io.save_persistables(exe, "./fit_a_line.model/") - fluid.io.load_persistables(exe, "./fit_a_line.model/") - for data in train_reader(): - avg_loss_value, = exe.run(fluid.default_main_program(), - feed=feeder.feed(data), - fetch_list=[avg_cost]) - - if avg_loss_value[0] < 10.0: - exit(0) # if avg cost less than 10.0, we think our code is good. -exit(1) -``` - -我们创建了一个简单的全连接神经网络程序,并且通过Fluid的Executor执行了100次迭代,现在我们需要将该单机版本的程序更新为分布式版本的程序。 -### 介绍Parameter Server -在非分布式版本的训练脚本中,只存在Trainer一种角色,它不仅处理常规的计算任务,也处理参数相关的计算、保存和优化任务。在分布式版本的训练过程中,由于存在多个Trainer节点进行同样的数据计算任务,因此需要有一个中心化的节点来统一处理参数相关的保存和分配。在PaddlePaddle中,我们称这样的节点为[Parameter Server](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/fluid/design/dist_train/parameter_server.md) - -**因此,在分布式的Fluid环境中,我们有两个角色需要创建,分别是Parameter Server和Trainer。** - -### 分布式训练 -Fliud专门提供了工具[Distributed Transpiler](https://github.com/PaddlePaddle/Paddle/blob/ba65d54d9d3b41cd3c5171b00f476d4e60133ddb/doc/fluid/design/dist_train/distributed_architecture.md#distributed-transpiler)用于将单机版的训练程序转换为分布式版本的训练程序。工具背后的理念是找出程序的优化算子和梯度参数,将他们分隔为两部分,通过send/recv 操作算子进行连接,优化算子和梯度参数可以在优化器的minimize函数的返回值中获取到。 -```python -optimize_ops, params_grads = sgd_optimizer.minimize(avg_cost) -``` -将Distributed Transpiler、优化算子和梯度函数放在一个代码中如下: -```python -... #define the program, cost, and create sgd optimizer - -optimize_ops, params_grads = sgd_optimizer.minimize(avg_cost) #get optimize OPs and gradient parameters - -t = fluid.DistributeTranspiler() # create the transpiler instance -# slice the program into 2 pieces with optimizer_ops and gradient parameters list, as well as pserver_endpoints, which is a comma separated list of [IP:PORT] and number of trainers -t.transpile(optimize_ops, params_grads, pservers=pserver_endpoints, trainers=2) - -... #create executor - -# in pserver, run this -#current_endpoint here means current pserver IP:PORT you wish to run on -pserver_prog = t.get_pserver_program(current_endpoint) -pserver_startup = t.get_startup_program(current_endpoint, pserver_prog) -exe.run(pserver_startup) -exe.run(pserver_prog) - -# in trainer, run this -... # define data reader -exe.run(fluid.default_startup_program()) -for pass_id in range(100): - for data in train_reader(): - exe.run(t.get_trainer_program()) -``` -### 分布式训练脚本运行说明 -分布式任务的运行需要将表格中说明的多个参数进行赋值: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数名 值类型说明 示例
trainer_id int 当前训练节点的ID,训练节点ID编号为0 - n-1, n为trainers的值 0/1/2/3
pservers str parameter server 列表 127.0.0.1:6710,127.0.0.1:6711
trainers int 训练节点的总个数,>0的数字 4
server_endpoint str 当前所起的服务节点的IP:PORT 127.0.0.1:8789
training_rolestr 节点角色, TRAINER/PSERVER PSERVER
- - -**注意:** ```training_role```是用来区分当前所起服务的角色的,用于训练程序中,用户可根据需要自行定义,其他参数为fluid.DistributeTranspiler的transpile函数所需要,需要在调用函数前进行定义,样例如下: - -```python -t = fluid.DistributeTranspiler() -t.transpile( - optimize_ops, - params_grads, - trainer_id, - pservers=pserver, - trainers=trainers) -if training_role == "PSERVER": - pserver_prog = t.get_pserver_program(server_endpoint) - pserver_startup = t.get_startup_program(server_endpoint, pserver_prog) -``` - -### Demo -完整的demo代码位于Fluid的test目录下的[book](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/fluid/tests/book/test_fit_a_line.py)中。 - -第一步,进入demo代码所在目录: -```bash -cd /paddle/python/paddle/fluid/tests/book -``` - -第二步,启动Parameter Server: -```bash -PADDLE_PSERVER_PORT=6174 PADDLE_PSERVER_IPS=192.168.1.2 PADDLE_TRAINERS=2 PADDLE_CURRENT_IP=192.168.1.2 PADDLE_TRAINER_ID=1 PADDLE_TRAINING_ROLE=PSERVER python test_fit_a_line.py -``` -执行命令后请等待出现提示: ```Server listening on 192.168.1.2:6174 ```, 表示Paramter Server已经正常启动。 - -第三步,启动Trainer: -```bash -PADDLE_PSERVER_PORT=6174 PADDLE_PSERVER_IPS=192.168.1.3 PADDLE_TRAINERS=2 PADDLE_CURRENT_IPP=192.168.1.3 PADDLE_TRAINER_ID=1 PADDLE_TRAINING_ROLE=TRAINER python test_fit_a_line.py -``` -由于我们定义的Trainer的数量是2个,因此需要在另外一个计算节点上再启动一个Trainer。 - -现在我们就启动了一个包含一个Parameter Server和两个Trainer的分布式训练任务。 diff --git a/doc/fluid/howto/cluster/fluid_cluster_train_en.md b/doc/fluid/howto/cluster/fluid_cluster_train_en.md deleted file mode 100644 index 26f7e6296..000000000 --- a/doc/fluid/howto/cluster/fluid_cluster_train_en.md +++ /dev/null @@ -1,153 +0,0 @@ -# Fluid Distributed Training - -## Introduction - -In this article, we'll explain how to configure and run distributed training jobs with PaddlePaddle Fluid in a bare metal cluster. - -## Preparations - -### Getting the cluster ready - -Prepare the compute nodes in the cluster. Nodes in this cluster can be of any specification that runs PaddlePaddle, and with a unique IP address assigned to it. Make sure they can communicate to each other. - -### Have PaddlePaddle installed - -PaddlePaddle must be installed on all nodes. If you have GPU cards on your nodes, be sure to properly install drivers and CUDA libraries. - -PaddlePaddle build and installation guide can be found [here](http://www.paddlepaddle.org/docs/develop/documentation/en/getstarted/build_and_install/index_en.html). - -In addition to above, the `cmake` command should be run with the option `WITH_DISTRIBUTE` set to on. An example bare minimum `cmake` command would look as follows: - -``` bash -cmake .. -DWITH_DOC=OFF -DWITH_GPU=OFF -DWITH_DISTRIBUTE=ON -DWITH_SWIG_PY=ON -DWITH_PYTHON=ON -``` - -### Update the training script - -#### Non-cluster training script - -Let's take [Deep Learning 101](http://www.paddlepaddle.org/docs/develop/book/01.fit_a_line/index.html)'s first chapter: "fit a line" as an example. - -The non-cluster version of this demo with fluid API is as follows: - -``` python -import paddle -import paddle.fluid as fluid - -x = fluid.layers.data(name='x', shape=[13], dtype='float32') -y_predict = fluid.layers.fc(input=x, size=1, act=None) -y = fluid.layers.data(name='y', shape=[1], dtype='float32') - -cost = fluid.layers.square_error_cost(input=y_predict, label=y) -avg_cost = fluid.layers.mean(x=cost) - -sgd_optimizer = fluid.optimizer.SGD(learning_rate=0.001) -sgd_optimizer.minimize(avg_cost) - -BATCH_SIZE = 20 - -train_reader = paddle.batch( - paddle.reader.shuffle( - paddle.dataset.uci_housing.train(), buf_size=500), - batch_size=BATCH_SIZE) - -place = fluid.CPUPlace() -feeder = fluid.DataFeeder(place=place, feed_list=[x, y]) -exe = fluid.Executor(place) - -exe.run(fluid.default_startup_program()) - -PASS_NUM = 100 -for pass_id in range(PASS_NUM): - fluid.io.save_persistables(exe, "./fit_a_line.model/") - fluid.io.load_persistables(exe, "./fit_a_line.model/") - for data in train_reader(): - avg_loss_value, = exe.run(fluid.default_main_program(), - feed=feeder.feed(data), - fetch_list=[avg_cost]) - - if avg_loss_value[0] < 10.0: - exit(0) # if avg cost less than 10.0, we think our code is good. -exit(1) -``` - -We created a simple fully-connected neural network training program and handed it to the fluid executor to run for 100 passes. - -Now let's try to convert it to a distributed version to run on a cluster. - -#### Introducing parameter server - -As we can see from the non-cluster version of training script, there is only one role in the script: the trainer, that performs the computing as well as holds the parameters. In cluster training, since multi-trainers are working on the same task, they need one centralized place to hold and distribute parameters. This centralized place is called the Parameter Server in PaddlePaddle. - -![parameter server architecture](src/trainer.png) - -Parameter Server in fluid not only holds the parameters but is also assigned with a part of the program. Trainers communicate with parameter servers via send/receive OPs. For more technical details, please refer to [this document](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/design/dist_refactor/distributed_architecture.md). - -Now we need to create programs for both: trainers and parameter servers, the question is how? - -#### Slice the program - -Fluid provides a tool called "Distributed Transpiler" that automatically converts the non-cluster program into cluster program. - -The idea behind this tool is to find the optimize OPs and gradient parameters, slice the program into 2 pieces and connect them with send/receive OP. - -Optimize OPs and gradient parameters can be found from the return values of optimizer's minimize function. - -To put them together: - -``` python -... #define the program, cost, and create sgd optimizer - -optimize_ops, params_grads = sgd_optimizer.minimize(avg_cost) #get optimize OPs and gradient parameters - -t = fluid.DistributeTranspiler() # create the transpiler instance -# slice the program into 2 pieces with optimizer_ops and gradient parameters list, as well as pserver_endpoints, which is a comma separated list of [IP:PORT] and number of trainers -t.transpile(optimize_ops, params_grads, pservers=pserver_endpoints, trainers=2) - -... #create executor - -# in pserver, run this -#current_endpoint here means current pserver IP:PORT you wish to run on -pserver_prog = t.get_pserver_program(current_endpoint) -pserver_startup = t.get_startup_program(current_endpoint, pserver_prog) -exe.run(pserver_startup) -exe.run(pserver_prog) - -# in trainer, run this -... # define data reader -exe.run(fluid.default_startup_program()) -for pass_id in range(100): - for data in train_reader(): - exe.run(t.get_trainer_program()) - - -``` - -### E2E demo - -Please find the complete demo from [here](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/fluid/tests/book_distribute/notest_dist_fit_a_line.py). -First `cd` into the folder that contains the `python` files. In this case: - -```bash -cd /paddle/python/paddle/fluid/tests/book_distribute -``` - -In parameter server node run the following in the command line: - -``` bash -PSERVERS=192.168.1.2:6174 SERVER_ENDPOINT=192.168.1.2:6174 TRAINING_ROLE=PSERVER python notest_dist_fit_a_line.py -``` - -*please note we assume that your parameter server runs at 192.168.1.2:6174* - -Wait until the prompt `Server listening on 192.168.1.2:6174` - -Then in 2 of your trainer nodes run this: - -``` bash -PSERVERS=192.168.1.2:6174 SERVER_ENDPOINT=192.168.1.2:6174 TRAINING_ROLE=TRAINER python notest_dist_fit_a_line.py -``` - -*the reason you need to run this command twice in 2 nodes is because: in the script we set the trainer count to be 2. You can change this setting on line 50* - -Now you have 2 trainers and 1 parameter server up and running. diff --git a/doc/fluid/howto/cluster/fluid_recordio.md b/doc/fluid/howto/cluster/fluid_recordio.md deleted file mode 100644 index 92859e8f6..000000000 --- a/doc/fluid/howto/cluster/fluid_recordio.md +++ /dev/null @@ -1,127 +0,0 @@ -# How to use RecordIO in Fluid - -If you want to use RecordIO as your training data format, you need to convert to your training data -to RecordIO files and reading them in the process of training, PaddlePaddle Fluid provides some -interface to deal with the RecordIO files. - -## Generate RecordIO File - -Before start training with RecordIO files, you need to convert your training data -to RecordIO format by `fluid.recordio_writer.convert_reader_to_recordio_file`, the sample codes -as follows: - -```python - reader = paddle.batch(mnist.train(), batch_size=1) - feeder = fluid.DataFeeder( - feed_list=[ # order is image and label - fluid.layers.data( - name='image', shape=[784]), - fluid.layers.data( - name='label', shape=[1], dtype='int64'), - ], - place=fluid.CPUPlace()) - fluid.recordio_writer.convert_reader_to_recordio_file('./mnist.recordio', reader, feeder) -``` - -The above code snippet would generate a RecordIO `./mnist.recordio` on your host. - -**NOTE**: we recommend users to set `batch_size=1` when generating the recordio files so that users can -adjust it flexibly while reading it. - -## Use the RecordIO file in a Local Training Job - -PaddlePaddle Fluid provides an interface `fluid.layers.io.open_recordio_file` to load your RecordIO file -and then you can use them as a Layer in your network configuration, the sample codes as follows: - -```python - data_file = fluid.layers.io.open_recordio_file( - filename="./mnist.recordio", - shapes=[(-1, 784),(-1, 1)], - lod_levels=[0, 0], - dtypes=["float32", "int32"]) - data_file = fluid.layers.io.batch(data_file, batch_size=4) - - img, label = fluid.layers.io.read_file(data_file) - hidden = fluid.layers.fc(input=img, size=100, act='tanh') - prediction = fluid.layers.fc(input=hidden, size=10, act='softmax') - loss = fluid.layers.cross_entropy(input=prediction, label=label) - avg_loss = fluid.layers.mean(loss) - - fluid.optimizer.Adam(learning_rate=1e-3).minimize(avg_loss) - - place = fluid.CPUPlace() - - exe = fluid.Executor(place) - exe.run(fluid.default_startup_program()) - avg_loss_np = [] - - # train a pass - batch_id = 0 - while True: - tmp, = exe.run(fetch_list=[avg_loss]) - - avg_loss_np.append(tmp) - print(batch_id) - batch_id += 1 -``` - -## Use the RecordIO files in Distributed Training - -1. generate multiple RecordIO files - -For a distributed training job, you may have multiple trainer nodes, -and one or more RecordIO files for one trainer node, you can use the interface -`fluid.recordio_writer.convert_reader_to_recordio_files` to convert your training data -into multiple RecordIO files, the sample codes as follows: - -```python - reader = paddle.batch(mnist.train(), batch_size=1) - feeder = fluid.DataFeeder( - feed_list=[ # order is image and label - fluid.layers.data( - name='image', shape=[784]), - fluid.layers.data( - name='label', shape=[1], dtype='int64'), - ], - place=fluid.CPUPlace()) - fluid.recordio_writer.convert_reader_to_recordio_files( - filename_suffix='./mnist.recordio', batch_per_file=100, reader, feeder) -``` - -The above codes would generate multiple RecordIO files on your host like: - -```bash -. - \_mnist-00000.recordio - |-mnist-00001.recordio - |-mnist-00002.recordio - |-mnist-00003.recordio - |-mnist-00004.recordio -``` - -2. open multiple RecordIO files by `fluid.layers.io.open_files` - -For a distributed training job, the distributed operator system will schedule trainer process on multiple nodes, -each trainer process reads parts of the whole training data, we usually take the following approach to make the training -data allocated by each trainer process as uniform as possiable: - -```python -def gen_train_list(file_pattern, trainers, trainer_id): - file_list = glob.glob(file_pattern) - ret_list = [] - for idx, f in enumerate(file_list): - if (idx + trainers) % trainers == trainer_id: - ret_list.append(f) - return ret_list - -trainers = int(os.getenv("PADDLE_TRAINERS")) -trainer_id = int(os.getenv("PADDLE_TRAINER_ID")) -data_file = fluid.layers.io.open_files( - filenames=gen_train_list("./mnist-[0-9]*.recordio", 2, 0), - thread_num=1, - shapes=[(-1, 784),(-1, 1)], - lod_levels=[0, 0], - dtypes=["float32", "int32"]) -img, label = fluid.layers.io.read_file(data_files) -... -``` diff --git a/doc/fluid/howto/cluster/nccl2_rdma_training.md b/doc/fluid/howto/cluster/nccl2_rdma_training.md deleted file mode 100644 index 8adaf324f..000000000 --- a/doc/fluid/howto/cluster/nccl2_rdma_training.md +++ /dev/null @@ -1,110 +0,0 @@ -# Distributed Training with NCCL2 and RDMA - -When doing distributed multi-GPU training, network bandwidth often becomes the -bottleneck. We introduce a way to use NCCL2 to do such training job to -achieve best performance. - -## Prepare Hardware with RDMA and Multiple GPUs - -I'm using two Linux servers each of them installed with 8 GPUs and -one 100Gb RDMA card. -Base environment is: - -* OS: CentOS 7.4 -* RDMA device: "Mellanox Technologies MT27700 Family [ConnectX-4]" -* Kernel version: `4.4.88-1.el7.elrepo.x86_64` -* Docker version: `1.12.6` -* Docker storage driver: `overlay2` -* IP addresses: 192.168.16.30,192.168.16.34 - -In general, the steps including: - -1. Install GPU drivers -1. Install RDMA drivers -1. Install "InfiniBand Support" -1. Use docker to run tests and make sure GPUs and RDMA can work inside - the container. - -I'll omit the section "Install GPU drivers" because we can find it easily -somewhere else. - -### Install RDMA drivers - -For my case, I've got two machines with device -"Mellanox Technologies MT27700 Family [ConnectX-4]" installed. The OS was -"CentOS 7.4" and I updated the kernel to version 4.4 so that docker can -work with the latest overlay2 filesystem. - -***NOTE: before you start, make sure you have a way to get a console -of the server other than ssh because we may need to re-configure the -network device.*** - -1. Go to http://www.mellanox.com/page/products_dyn?product_family=26, - download `MLNX_OFED` software in the bottom of the page, and upload it - onto the server. -1. Run `./mlnxofedinstall --add-kernel-support` in the software package. -1. Run `/etc/init.d/openibd restart` to make everything work, note that - this operation may cause the network goes down if you are using this - RDMA device as default network device and use ssh to log in the server. -1. Re-configure the network interface, for example: - `ifconfig eth2 192.168.16.30/20 up`, then add routes if needed: - `ip route add default via 192.168.16.1 dev eth2`. -1. Do the same thing on the other node. -1. Use `ping` to test if the two nodes have typical ICMP connection. -1. Use either `udaddy` or `ib_write_bw` to test the network connection is - ready and have the desired bandwidth. - -### Prepare Docker Image to Run RDMA Programs - -1. Build a docker image using cuda base image like: `nvidia/cuda:8.0-cudnn5-devel-ubuntu16.04` and install paddlepaddle whl - package in it. -1. Start a docker container and mount GPU driver libs into it (you can - skip this step if you are using nvidia-docker). -1. Mount RDMA drivers and libs into the docker image (see below section), - also `udaddy` and `ib_write_bw` if needed. -1. Mount GPU devices and RDMA devices into the container using `--device` - or just use privileged mode `--privileged`. -1. Start the container using host network mode: `--net=host` - -### RDMA Library Files Needed - -Usually, `MLNX_OFED` install latest supported libs under -`/usr/lib64/mlnx_ofed/valgrind`. Other libs also needed to run RDMA programs -is listed below. These libs must be mounted into the docker container. - -* Libs under `/usr/lib64/mlnx_ofed/valgrind` - * libibcm.so - * libibverbs.so - * libmlx4.so - * libmlx5.so - * libmlx5-rdmav2.so - * librdmacm.so -* Other libs: - * libnl-3.so.200 - * libnl-route-3.so.200 - * libnuma.so.1 - -## Start to Run the Training Job - -Setting NCCL environment variables to turn NCCL switches on and off: - - -| Env Name | Description | -| --- | --- | -| NCCL_SOCKET_IFNAME | The RDMA device, e.g. eth2 | -| NCCL_P2P_DISABLE | Set to 1 to disable P2P transfer between GPUs | -| NCCL_IB_DISABLE | Set to 1 to disable using RDMA | -| NCCL_IB_CUDA_SUPPORT | Set to 1 to enable GPU Direct if supported | -| NCCL_DEBUG | Set debug level: VERSION, WARN, INFO | - -My two servers are: `192.168.16.30,192.168.16.34`, On node 1, Run : - -```bash -PADDLE_TRAINER_ID=0 PADDLE_PORT=48372 PADDLE_WORKERS=192.168.16.30,192.168.16.34 POD_IP=192.168.16.30 stdbuf -oL python vgg16.py -``` - -On node 2, Run: - -```bash -PADDLE_TRAINER_ID=1 PADDLE_PORT=48372 PADDLE_WORKERS=192.168.16.30,192.168.16.34 POD_IP=192.168.16.34 stdbuf -oL python vgg16.py -``` diff --git a/doc/fluid/howto/index_cn.rst b/doc/fluid/howto/index_cn.rst deleted file mode 100644 index b57af64f4..000000000 --- a/doc/fluid/howto/index_cn.rst +++ /dev/null @@ -1,8 +0,0 @@ -进阶使用 ------------- - -.. toctree:: - :maxdepth: 1 - - inference/index_cn.rst - optimization/index_cn.rst diff --git a/doc/fluid/howto/index_en.rst b/doc/fluid/howto/index_en.rst deleted file mode 100644 index fd21e167c..000000000 --- a/doc/fluid/howto/index_en.rst +++ /dev/null @@ -1,7 +0,0 @@ -HOW TO ------------- - -.. toctree:: - :maxdepth: 1 - - optimization/index_en.rst diff --git a/doc/fluid/howto/inference/build_and_install_lib_cn.rst b/doc/fluid/howto/inference/build_and_install_lib_cn.rst deleted file mode 100644 index 91357dd8c..000000000 --- a/doc/fluid/howto/inference/build_and_install_lib_cn.rst +++ /dev/null @@ -1,97 +0,0 @@ -安装与编译C++预测库 -=========================== - -直接下载安装 -------------- - -====================== ======================================== -版本说明 C++预测库 -====================== ======================================== -cpu_avx_mkl `fluid.tgz `_ -cpu_avx_openblas `fluid.tgz `_ -cpu_noavx_openblas `fluid.tgz `_ -cuda7.5_cudnn5_avx_mkl `fluid.tgz `_ -cuda8.0_cudnn5_avx_mkl `fluid.tgz `_ -cuda8.0_cudnn7_avx_mkl `fluid.tgz `_ -cuda9.0_cudnn7_avx_mkl `fluid.tgz `_ -====================== ======================================== - -从源码编译 ----------- -用户也可以从 PaddlePaddle 核心代码编译C++预测库,只需在编译时配制下面这些编译选项: - -================= ========= -选项 值 -================= ========= -CMAKE_BUILD_TYPE Release -FLUID_INSTALL_DIR 安装路径 -WITH_FLUID_ONLY ON(推荐) -WITH_SWIG_PY OFF(推荐 -WITH_PYTHON OFF(推荐) -WITH_GPU ON/OFF -WITH_MKL ON/OFF -================= ========= - -建议按照推荐值设置,以避免链接不必要的库。其它可选编译选项按需进行设定。 - -下面的代码片段从github拉取最新代码,配制编译选项(需要将PADDLE_ROOT替换为PaddlePaddle预测库的安装路径): - - .. code-block:: bash - - pip install paddlepaddle-gpu - PADDLE_ROOT=/path/of/capi - git clone https://github.com/PaddlePaddle/Paddle.git - cd Paddle - mkdir build - cd build - cmake -DFLUID_INSTALL_DIR=$PADDLE_ROOT \ - -DCMAKE_BUILD_TYPE=Release \ - -DWITH_FLUID_ONLY=ON \ - -DWITH_SWIG_PY=OFF \ - -DWITH_PYTHON=OFF \ - -DWITH_MKL=OFF \ - -DWITH_GPU=OFF \ - .. - make - make inference_lib_dist - -成功编译后,使用C++预测库所需的依赖(包括:(1)编译出的PaddlePaddle预测库和头文件;(2)第三方链接库和头文件;(3)版本信息与编译选项信息) -均会存放于PADDLE_ROOT目录中。目录结构如下: - - .. code-block:: text - - PaddleRoot/ - ├── CMakeCache.txt - ├── paddle - │   └── fluid - │   ├── framework - │   ├── inference - │   ├── memory - │   ├── platform - │   ├── pybind - │   └── string - ├── third_party - │   ├── boost - │   │   └── boost - │   ├── eigen3 - │   │   ├── Eigen - │   │   └── unsupported - │   └── install - │   ├── gflags - │   ├── glog - │   ├── mklml - │   ├── protobuf - │   ├── snappy - │   ├── snappystream - │   └── zlib - └── version.txt - -version.txt 中记录了该预测库的版本信息,包括Git Commit ID、使用OpenBlas或MKL数学库、CUDA/CUDNN版本号,如: - - .. code-block:: text - - GIT COMMIT ID: c95cd4742f02bb009e651a00b07b21c979637dc8 - WITH_MKL: ON - WITH_GPU: ON - CUDA version: 8.0 - CUDNN version: v5 diff --git a/doc/fluid/howto/inference/index_cn.rst b/doc/fluid/howto/inference/index_cn.rst deleted file mode 100644 index a90342354..000000000 --- a/doc/fluid/howto/inference/index_cn.rst +++ /dev/null @@ -1,8 +0,0 @@ -预测库 ------------- - -.. toctree:: - :maxdepth: 1 - - build_and_install_lib_cn.rst - inference_support_in_fluid_cn.md diff --git a/doc/fluid/howto/inference/inference_support_in_fluid_cn.md b/doc/fluid/howto/inference/inference_support_in_fluid_cn.md deleted file mode 100644 index 309b17fcc..000000000 --- a/doc/fluid/howto/inference/inference_support_in_fluid_cn.md +++ /dev/null @@ -1,304 +0,0 @@ -# 使用指南 - -## 目录: - -- Python Inference API -- Inference C++ API -- Inference实例 -- Inference计算优化 - -## Python Inference API **[改进中]** -- 保存Inference模型 ([链接](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/fluid/io.py#L295)) - - ```python - def save_inference_model(dirname, - feeded_var_names, - target_vars, - executor, - main_program=None, - model_filename=None, - params_filename=None): - ``` - Inference模型和参数将会保存到`dirname`目录下: - - 序列化的模型 - - `model_filename`为`None`,保存到`dirname/__model__` - - `model_filename`非`None`,保存到`dirname/model_filename` - - 参数 - - `params_filename`为`None`,单独保存到各个独立的文件,各文件以参数变量的名字命名 - - `params_filename`非`None`,保存到`dirname/params_filename` - -- 两种存储格式 - - 参数保存到各个独立的文件 - - 如,设置`model_filename`为`None`、`params_filename`为`None` - - ```bash - $ cd recognize_digits_conv.inference.model - $ ls - $ __model__ batch_norm_1.w_0 batch_norm_1.w_2 conv2d_2.w_0 conv2d_3.w_0 fc_1.w_0 batch_norm_1.b_0 batch_norm_1.w_1 conv2d_2.b_0 conv2d_3.b_0 fc_1.b_0 - ``` - - 参数保存到同一个文件 - - 如,设置`model_filename`为`None`、`params_filename`为`__params__` - - ```bash - $ cd recognize_digits_conv.inference.model - $ ls - $ __model__ __params__ - ``` -- 加载Inference模型([链接](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/fluid/io.py#L380)) - ```python - def load_inference_model(dirname, - executor, - model_filename=None, - params_filename=None): - ... - return [program, feed_target_names, fetch_targets] - ``` - -## 链接Fluid Inference库 -- 示例项目([链接](https://github.com/luotao1/fluid_inference_example.git)) - - - GCC配置 - ```bash - $ g++ -o a.out -std=c++11 main.cc \ - -I${PADDLE_ROOT}/ \ - -I${PADDLE_ROOT}/third_party/install/gflags/include \ - -I${PADDLE_ROOT}/third_party/install/glog/include \ - -I${PADDLE_ROOT}/third_party/install/protobuf/include \ - -I${PADDLE_ROOT}/third_party/eigen3 \ - -L${PADDLE_ROOT}/paddle/fluid/inference -lpaddle_fluid \ - -lrt -ldl -lpthread - ``` - - - CMake配置 - ```cmake - include_directories(${PADDLE_ROOT}/) - include_directories(${PADDLE_ROOT}/third_party/install/gflags/include) - include_directories(${PADDLE_ROOT}/third_party/install/glog/include) - include_directories(${PADDLE_ROOT}/third_party/install/protobuf/include) - include_directories(${PADDLE_ROOT}/third_party/eigen3) - target_link_libraries(${TARGET_NAME} - ${PADDLE_ROOT}/paddle/fluid/inference/libpaddle_fluid.so - -lrt -ldl -lpthread) - ``` - - - 设置环境变量: - `export LD_LIBRARY_PATH=${PADDLE_ROOT}/paddle/fluid/inference:$LD_LIBRARY_PATH` - - - -## C++ Inference API - -- 推断流程([链接](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/inference/tests/test_helper.h#L91)) - - - 1、 初始化设备 - ```cpp - #include "paddle/fluid/framework/init.h" - paddle::framework::InitDevices(false); - ``` - - - 2、 定义place,executor,scope - ```cpp - auto place = paddle::platform::CPUPlace(); - auto executor = paddle::framework::Executor(place); - auto* scope = new paddle::framework::Scope(); - ``` - - - 3、 加载模型 - ```cpp - #include "paddle/fluid/inference/io.h" - auto inference_program = paddle::inference::Load(executor, *scope, dirname); - // or - auto inference_program = paddle::inference::Load(executor, - *scope, - dirname + "/" + model_filename, - dirname + "/" + params_filename); - ``` - - - 4、 获取`feed_target_names`和`fetch_target_names` - ```cpp - const std::vector& feed_target_names = inference_program->GetFeedTargetNames(); - const std::vector& fetch_target_names = inference_program->GetFetchTargetNames(); - ``` - - - 5、 准备`feed`数据 - ```cpp - #include "paddle/fluid/framework/lod_tensor.h" - std::vector cpu_feeds; - ... - std::map feed_targets; - for (size_t i = 0; i < feed_target_names.size(); ++i) { - // Please make sure that cpu_feeds[i] is right for feed_target_names[i] - feed_targets[feed_target_names[i]] = cpu_feeds[i]; - } - ``` - - - 6、 定义`Tensor`来`fetch`结果 - ```cpp - std::vector cpu_fetchs; - std::map fetch_targets; - for (size_t i = 0; i < fetch_target_names.size(); ++i) { - fetch_targets[fetch_target_names[i]] = cpu_fetchs[i]; - } - ``` - - - 7、 执行`inference_program` - ```cpp - executor.Run(*inference_program, scope, feed_targets, fetch_targets); - ``` - - - 8、 使用`fetch`数据 - ```cpp - for (size_t i = 0; i < cpu_fetchs.size(); ++i) { - std::cout << "lod_i: " << cpu_fetchs[i]->lod(); - std::cout << "dims_i: " << cpu_fetchs[i]->dims(); - std::cout << "result:"; - float* output_ptr = cpu_fetchs[i]->data(); - for (int j = 0; j < cpu_fetchs[i]->numel(); ++j) { - std::cout << " " << output_ptr[j]; - } - std::cout << std::endl; - } - ``` - 针对不同的数据,4. - 8.可执行多次。 - - - 9、 释放内存 - ```cpp - delete scope; - ``` - - -- 接口说明 - - ```cpp - void Run(const ProgramDesc& program, Scope* scope, - std::map& feed_targets, - std::map& fetch_targets, - bool create_vars = true, - const std::string& feed_holder_name = "feed", - const std::string& fetch_holder_name = "fetch"); - ``` - - 使用Python API `save_inference_model`保存的`program`里面包含了`feed_op`和`fetch_op`,用户提供的`feed_targets`、`fetch_targets`必须和`inference_program`中的`feed_op`、`fetch_op`保持一致。 - - 用户提供的`feed_holder_name`和`fetch_holder_name`也必须和`inference_program`中`feed_op`、`fetch_op`保持一致,可使用`SetFeedHolderName`和`SetFetchHolderName`接口重新设置`inferece_program` - - 默认情况下,除了`persistable`属性设置为`True`的`Variable`之外,每次执行`executor.Run`会创建一个局部`Scope`,并且在这个局部`Scope`中创建和销毁所有的`Variable`,以最小化空闲时的内存占用。 - - `persistable`属性为`True`的`Variable`有: - - Operators的参数`w`、`b`等 - - `feed_op`的输入变量 - - `fetch_op`的输出变量 - - -- **不在每次执行时创建和销毁变量 - ([PR](https://github.com/PaddlePaddle/Paddle/pull/9301))** - - 执行`inference_program` - ```cpp - // Call once - executor.CreateVariables(*inference_program, scope, 0); - // Call as many times as you like - executor.Run( - *inference_program, scope, feed_targets, fetch_targets, false); - ``` - - **优点** - - 节省了频繁创建、销毁变量的时间(约占每次`Run`总时间的1% ~ 12%) - - 执行结束后可获取所有Operators的计算结果 - - **缺点** - - 空闲时也会占用大量的内存 - - 在同一个`Scope`中,相同的变量名是公用同一块内存的,容易引起意想不到的错误 - - -- **不在每次执行时创建Op([PR](https://github.com/PaddlePaddle/Paddle/pull/9630))** - - 执行`inference_program` - ```cpp - // Call once - auto ctx = executor.Prepare(*inference_program, 0); - // Call as many times as you like if you have no need to change the inference_program - executor.RunPreparedContext(ctx.get(), scope, feed_targets, fetch_targets); - ``` - - **优点** - - 节省了频繁创建、销毁Op的时间 - - **缺点** - - 一旦修改了`inference_program`,则需要重新创建`ctx` - - -- **多线程共享Parameters([链接](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/inference/tests/test_multi_thread_helper.h))** - - 主线程 - - 1、 初始化设备 - - 2、 定义`place`,`executor`,`scope` - - 3、 加载模型,得到`inference_program` - - 从线程 - - **复制`inference_program`得到`copy_program`,修改`copy_program`的`feed_holder_name`和`fetch_holder_name`** - ```cpp - auto copy_program = std::unique_ptr( - new paddle::framework::ProgramDesc(*inference_program)); - std::string feed_holder_name = "feed_" + paddle::string::to_string(thread_id); - std::string fetch_holder_name = "fetch_" + paddle::string::to_string(thread_id); - copy_program->SetFeedHolderName(feed_holder_name); - copy_program->SetFetchHolderName(fetch_holder_name); - ``` - - 4、 获取`copy_program`的`feed_target_names`和`fetch_target_names` - - 5、 准备feed数据,定义Tensor来fetch结果 - - 6、 执行`copy_program` - ```cpp - executor->Run(*copy_program, scope, feed_targets, fetch_targets, true, feed_holder_name, fetch_holder_name); - ``` - - 7、 使用fetch数据 - - 主线程 - - 8、 释放资源 - - -- 基本概念 - - 数据相关: - - [Tensor](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/fluid/design/concepts/tensor.md),一个N维数组,数据可以是任意类型(int,float,double等) - - [LoDTensor](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/fluid/design/concepts/lod_tensor.md),带LoD(Level-of-Detail)即序列信息的Tensor - - [Scope](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/design/scope.md),记录了变量Variable - - 执行相关: - - [Executor](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/fluid/design/concepts/executor.md),无状态执行器,只跟设备相关 - - Place - - CPUPlace,CPU设备 - - CUDAPlace,CUDA GPU设备 - - 神经网络表示: - - [Program](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/fluid/design/concepts/program.md). - - 详细介绍请参考[**Paddle Fluid开发者指南**](https://github.com/lcy-seso/learning_notes/blob/master/Fluid/developer's_guid_for_Fluid/Developer's_Guide_to_Paddle_Fluid.md) - - - -## Inference实例 - - 1. fit a line: [Python](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/fluid/tests/book/test_fit_a_line.py), [C++](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/inference/tests/book/test_inference_fit_a_line.cc) - 1. image classification: [Python](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/fluid/tests/book/test_image_classification.py), [C++](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/inference/tests/book/test_inference_image_classification.cc) - 1. label semantic roles: [Python](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/fluid/tests/book/test_label_semantic_roles.py), [C++](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/inference/tests/book/test_inference_label_semantic_roles.cc) - 1. recognize digits: [Python](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/fluid/tests/book/test_recognize_digits.py), [C++](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/inference/tests/book/test_inference_recognize_digits.cc) - 1. recommender system: [Python](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/fluid/tests/book/test_recommender_system.py), [C++](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/inference/tests/book/test_inference_recommender_system.cc) - 1. understand sentiment: [Python](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/fluid/tests/book/test_understand_sentiment.py), [C++](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/inference/tests/book/test_inference_understand_sentiment.cc) - 1. word2vec: [Python](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/fluid/tests/book/test_word2vec.py), [C++](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/inference/tests/book/test_inference_word2vec.cc) - - -## Inference计算优化 -- 使用Python推理优化工具([inference_transpiler](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/fluid/inference_transpiler.py)) - ```python - class InferenceTranspiler: - def transpile(self, program, place, scope=None): - ... - if scope is None: - scope = global_scope() - ... - ``` - - 使用`InferenceTranspiler`将会直接修改`program`。 - - 使用`InferenceTranspiler`会修改参数的值,请确保`program`的参数在`scope`内。 -- 支持的优化 - - 融合batch_norm op的计算 -- 使用示例([链接](https://github.com/Xreki/Xreki.github.io/blob/master/fluid/inference/inference_transpiler.py)) - ```python - import paddle.fluid as fluid - # NOTE: Applying the inference transpiler will change the inference_program. - t = fluid.InferenceTranspiler() - t.transpile(inference_program, place, inference_scope) - ``` - - - - -## 内存使用优化 -- 使用Python内存优化工具([memory_optimization_transipiler](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/fluid/memory_optimization_transpiler.py)) - ```python - fluid.memory_optimize(inference_program) - ``` diff --git a/doc/fluid/howto/optimization/benchmark/index_cn.rst b/doc/fluid/howto/optimization/benchmark/index_cn.rst deleted file mode 100644 index 9404800eb..000000000 --- a/doc/fluid/howto/optimization/benchmark/index_cn.rst +++ /dev/null @@ -1,8 +0,0 @@ -基准 ------------- - -.. toctree:: - :maxdepth: 1 - - vgg16/README.md - README.md diff --git a/doc/fluid/howto/optimization/benchmark/index_en.rst b/doc/fluid/howto/optimization/benchmark/index_en.rst deleted file mode 100644 index 1e200b660..000000000 --- a/doc/fluid/howto/optimization/benchmark/index_en.rst +++ /dev/null @@ -1,8 +0,0 @@ -Benchmark ------------- - -.. toctree:: - :maxdepth: 1 - - vgg16/README.md - README.md diff --git a/doc/fluid/howto/optimization/index_cn.rst b/doc/fluid/howto/optimization/index_cn.rst deleted file mode 100644 index 27cc96702..000000000 --- a/doc/fluid/howto/optimization/index_cn.rst +++ /dev/null @@ -1,9 +0,0 @@ -性能优化 ------------- - -.. toctree:: - :maxdepth: 1 - - timeline.md - cpu_profiling_cn.md - benchmark/index_cn.rst diff --git a/doc/fluid/howto/optimization/index_en.rst b/doc/fluid/howto/optimization/index_en.rst deleted file mode 100644 index 4ce624fe8..000000000 --- a/doc/fluid/howto/optimization/index_en.rst +++ /dev/null @@ -1,9 +0,0 @@ -Performance Optimization ---------------------------- - -.. toctree:: - :maxdepth: 1 - - timeline.md - cpu_profiling_en.md - benchmark/index_en.rst diff --git a/doc/fluid/howto/optimization/pprof_1.png b/doc/fluid/howto/optimization/pprof_1.png deleted file mode 100644 index 8e9edbf377672d0ef40f2fc7bd39e746923550cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 352710 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
MJQdJP{bh5BFe>cpI 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 f5jO zzQ4W+S#)+pL)wdCh^koBxWYYDef~%YXa)tQK^dFqO})8M=k=S_B&8?And^FpI7ydN z!RmIvf|+%{ZZ{eVpDcAxHmt)Q*|~{>Q6v!O?HfS6Ker7ORm)N-Gvy=<#CC4;*$RSJ zJVWl=3nBcjkY@roOE+c%AVFh&VDAZH#IgBvv8)PXHo4le*qtUgpIq!!fzr1?W*|Iz zwOvjaaI=w7)QQ6(vJebMWd4DvvpXlA_i(n1e~Gs6I2ny*f|%R^p&^1?Ew7}6TwGcT z_qld0e5{@HuWq>h<#ahXC2C=Yg$0T-MQr9OD%0%8rzSvR))9aa6B~O96NZr_>~-`L ze{5i3rHHt=WI8mhS2GtVo{XmIgxK{&iVYGr{( zWEK<$^Fn(U9WXBJB|J>wZscV`jD&d{Y1>|5PtMkh``-5(1tSM$R{IZ1Vmv5l!TH)! zHLJGHIR%Q4DTV{+<^3@!=|4g_o)(CCHW|IFV+xv=%2Bt6OyIutGHI~`3r#@~lN zaPLc*ar}4v@j7*@W&dyNZ)UK4$si0dm+Eu`4h|k9Gup1FZR|e7KrFUL32B`6W_H2w z+lxAwqHo_9$Vf?Ne=ZCt;i00^j>>6pxeW3gZ=C^o6Z{c?y*;t#Na8Lr!^-iIx(RPunVFZL{IXV^N4*qYh>eTq@D!T6Ns{@;+RtWVrc4fhN6?jwRq_L)X&DUVqrBo+Z- zDt^G!1Ea12q`4md4XeB&GBC9Jx&t06N_&Wh`+W$s!2!?ionJ{B>2bzI^G7q0(Fmn( zhsuH4hyO?>-G9BRRnV{cHdb=`U?OdX{8Ai#hbb~PDkNBe1~qyvp8=#?SrV^o_EtIG zZkp;IJ2^A;#Kp=&Dx8Ew@oP_}RTaHZGQL29C82+x+6&d(5OL6(!iY?+RRm*PUxFN0 zUc6pN_EHDW%7axKUguP9Va`{ZcZ6J7R~H-_iNMWQ#FoZbX9?Lf$DQP?T;kUjZMtOD zcH22wr1a+K+Xv(G09U_IvOw7q$nVFQRc%Uy`=$^*P6+s4ckziWpa%iSD}LL?Xf@J* zYTQ|7ULgt_T0~9ENPxLhp&%Bpg#y@@J#%rgZ2(*3%Y^UH{Vp0wc4ifE}re>KT~o{j=}>9wV_I zz`{KPe}cPOZ>t0uA59HE0aLCln_^|$fI&rDm8`z}c6s(}_yum}834%_@LthU*f^+) z)8AIWM;wGu6MQsmw&vGC58SPiIBeOXe2r(JG@b=sGF2_hRE8%Ed>=f#1=rCLSJu-b zlm22;8|j- zBhiUiW0O}<=!-W4DK3{3`K&MXwl#Xg?**N89(!a6KcEDG;MKu521did{cMHF=iF2a z1A;0VhSif)L@HH$qa2bgsZ=mtK0bI>*5Ai>)6;WeS{)iF$BusC4YR$0!TOFjy&8#) z01FftxQ45@4S80EOj08*2&h?m39$=wU&d-N(Q8VGT?z|T#;Dk+h{ocGAB83)4qs>Sf#Sg8`Lsfv3VtGEVVOZ@Rw?9VVlrR>MwUoSIPK{l2gELOY}z`9 z`Q-0+tD&UqzsleQgN{vMW)KjE)V4q=7g9ckcYW(jlHJ#oobl z-$m%aq2MxWg!Bzrkyk@hCnO=juG&JQGn<&$a;P2)u}{zt86ySO=iBze0=v!!yrzf* zv|^k#<%Bn+;%VehmpmDor9dSp+Uj0=L=y%^AVxKc1V&0Aq8hIoM1lCJMA#+USlAqrQy!S&)#HvoHPg6s@rS`s(*}X!=yXS#_Y2qcp0iXGP zN*&vy*o;+mWj+7MXK}ex9!U=#{e98N#~Z95*dm-Ax(S1FSe+OoHfBxRb;&!>{RFr1 zF<6Ksnx0`L7W$Gv#_&EuUfs47DYAH=Iq$=Za$Rp(DTCh9Ugu5F<~>@hRzS=x#|$wpS-QOh9t`hIS)4-}!F%3#(xa)y zlBWhMFEt7y~fEr}r8GKj+qHET>S%0D4>n=6A#88;o%T!y8)I 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

dDPd0is~dWdnaK(Ga_NKg>nF88*ZefVe; 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 diff --git a/doc/fluid/howto/optimization/pprof_2.png b/doc/fluid/howto/optimization/pprof_2.png deleted file mode 100644 index 172ba20399ba974d27f4c072425277b69b02520b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 194000 zcmYiNWmJ^^_dN~|!yrS?(4EpDAT3CDhjdGKgLFzGEz(`mol+74N~d&pODg;?-rvvf zUiVr94`$84E6&+xpS{l&siGu}fl7=D0)a4OWhB%5Z9;%H%QXAT0%M5cU3)=-xv7~D;H`SN9h2!ooKV=(Uiq%8zt-eL)Q8z^vD-fASbOjnM`C*9>JobzXD0*4-3nf8ftT0Gu}G!X zAGMn+VtwYoyWls`HN!Q-7@C9Vw|2$koE4dzi$7BEC5qhs1R;Wwhs}}0#An0psDDP? zP?%CQX|E967ce6IZIO`l)nLdbe~nAQ3bT-wLhonXywvW~?@xjZVm=h2iD}2L3rmn7 zeW+;3OWVCbLP>~!N4c70*8dUfkDp;TRtzbTJTc7_`V;>PmzRC5#uob<@q}T*JHrGu z)Zs_)4}V+OC5`Nu!dd5X5&4toWupjZ`?isgn6He(1Wo?ND^=(x6Tn_?b%`gF32lAi zzN`~B_rMuCPW(H+{>|@$QyrsAk0_mwZ-c46zIrkNS;_dv*P;+8L^Keku%7o_g+4xTybG76eSs4aVe%c8|A$L7?>4+ep*x7ktdHr% z`q|GAogZA#@Wy~>aWAnwO2L=<^lsP=A&@h|dz8n7^=7MJ_;1KKO2J2T^Uv3Q9xX^3 z$HB;JD=Na%aj%_(jKe>LeYxHI#?DJ%_3wJ-G0S7W#-yoNzF-rIaN=rj@6OyLWs;n|JGu}9-+GcLj3yM!n_lfzy$_mPKwoT%;zl6;FlPGu%QqhJ-5AKVTTBIA zt_QW|g&jz*+oOi$2oYHX(dq?#H<1%u|HWL70iRY|5862LN)Q4>R0fKXN7EJoH;tR8 zR*HDD5dxus%b+L56jBpKz!Iok<0WMn)#B_#ny6-ms)yiP5Et@&5eFIr8LSK9yHHaG zycr1$6*M>WgSh*Gbt_TKCXrJfczhzR!o#9CFEx{%Mfki|sAet3KYf z_H*yQxc+#jy$@&A5Mt3BWBId}HBi}5^j>r^j=bQSB&Red;;J%--Z#_h`-yh4D}@Z$8OhR2bd~hSv}E)KRPIS{85o&~82K5) z7>XEBQczQvlCK%a)Z6l}G^_(Fqgpov!Y?GugD$|^?!yl$V~n1R0fjay_N777KQtKKiQEYq!@M)@ zKS~wojQ_P_Y!F=J)a5>Yd5mxzf@;uj7*^E#?n|{=nOe1rH+_O`GL>$*jM2xN^5N^h^-TM6jzgN z=Cqf@;9l{Sh(P$ah;JeO=_{48(+$&R))qFYHYZbdb4OE?oismqacHq$HEloM zSsi}3u%|ekk=Lwq+F*Ff@Ke>WfUiJKij2@*nqsDT;?qP62E@ZJ~{>+}qo^2t&sj3P5Td|3( z0Hr`k3Qbxo_M5eI<7M+m^VizLI?H+Kd4fgW`7YA;Jap!x!yJ}_zV1%WLmu<%PIIb# z&K>Xb-Y0F^(v#4~sTWOgTc*24T>9=x?P|TZAG{cFAom#wJK^jxua*BgLZHQ~Rcl*m z`zhm#UiojS=8Ti{lZg}alU+e5IRg2mP`c1t?>6t959DWmM@D`zkJx^it9MS_^xE`@ z@!7K9_<6muv%KGTCHrULU~1p?Xym%`!f(&=VDQiH{hR64Md7J{>ZcJ46rES1l%pi!l;f<>zo1Q}_n?cFP0w)S z(0Qd3zmz5>Co8k?Wm1^YYcgGSImv*IK=~U-zsv9_<8H};;?HbvxAX(9>xPiB(CP2f zLS;D%sz*#70mRJq?{z8YchGL>WQWmz%2xBhU!eA^i; z((|I{>uAj=>zC8|{5lVF3=4XTxow8+!W~k$4YWSAq?kl0hrd(YjF}1FeaCyJ>c=ro zc(kV+><6yw`)oQvvu4@KLSfnV3%?8IOW{$OG-s#cdxiDUCLNyo)L-7ZFtxK0J6|44 zk3-T;ezaY;pMP@N?a4V`*&81EPTfgfwiAT1&3DGvvD>bnhGB+nhdC0^ve__kGU%#Y z?Ujt@*hIaH>hI?z@L^r4gBVe3Pkx*Juzz1s71B+PzVCu~};UNHnT*z}g)&y3E{eqF8l(zN5-KOeQmEmBr@HaDlG$XNm$+W&s|rjy11<=+dGaiGfJz$|>E`Yz2W2$J5`{ zk4yTLbKc;%>}=^g)enw+$gzEU`r&a1=>`phz~I$vb87?H}j3Za6Nr@!whOvYu30HrG3LwIu~uuAKz?g!<6l z%$#Tmjt8jx3I9Xko>i44-5%VwNIvkk<00a5umAmz&9P-kWh-T-Y+|8G|DCIfR{Fx- zi%Z$DcB2SG^egmyd zV&${%_`jNmf``HS9Bg4Bvb6IrS09!M4qqu6^>wX~j1rOJ*7n=ose(fA6qS+J{;+|p zew-aS5rKwZ_Ae_K!utKxl-7i6Hy-I;Re_E!5Gnl;K=8AeIwDQiA&uKqvcb*2po1ep zweYBy%L}sbXjDhOP^^#;M|2P+H^P~uARk|iwbR)MCc`xkh_yB9OX{`Sgku zf^cd8!W@<3uP1EV=SBj>Nk+#N1j46%{y~scdwB)|iGXA!L^Zq+jyh4i^yl1nKgh6z zb=JHysqV#uMN6pRzI327A9kTuJ{rn78lMtU`;Bs}DMh|pzjUmb%omlZo#XRTc`0!* z`Ws(u;^U~Zpc<)kLqSBMm1@2OYatXyQv1$C+Jw0x%orTH7y~5;{FbVwrA6fFdL$tC?vB3>|D-_A;muBx{{#xOLbBVUexlKq zVj^3}XAdXm7D9y1Vf(I+9|LFas9|d6E5+pFKV-&NWBDfXCh4hAE?&cu;sJrExVU2F z6`xh6sl`RzeQyI+Nhzs`)0Ky^cXQ5S8IW6=yXvt{1vIov4K-b6SHFP-~YlxEG#Ng_c!4%H{Twz zJY#0NKQpezdJxm1gk3|t1%4OGM2q4kuOX_G*-pqY3GS$?}2LmC%&gkM36Xhr#=26tT zXbd~OQ*3N)Q4X6r8BHi4n%HUXia&5Zrp>1iI6=U`O%qcZuLMMGj1C8%HW@u>BjWc! zp8v==eNaRMv`!ao@4G=xZo#0Enuk)hbTT&=mkdS64d%ZG=2z;j>Owz9TmEjC6&iU< zmQccqA$Il{lb6X{uW9LuLK%@-$e>_xad9pV4yte_1_tQ&c*4FxNPd3)-rmHfT7~<= zvFCk@ryIdAL?aLXflp9S;v6NCc`5eOr%O_0MWsXz{sq?9q7hR`|^cuk=dW;T52SR$e(>M;9+-X z$J|ZvS7~ia3&S(f&D>by>iQ>|eBYhfk7~V~P@cz0%TCW-@A3Z;G)0~t7$}T# z_MMo(KW&KlrRtR|5Mk1Bq;nw>(hqchndHv!o*2tCUP`!t)3o~|Kgh3n4Pe+p(0pL?nc$fk+(70PDT*< z` zm#nM;zYr5DXeeRO&JNu^To_mMU;@_O>VypOl?bFrEYGRtqs9o;eG86uc+OY3+`2ls zh_~4Li;bT`W&EPp41Lv$ec4zg7k2|!py)fi;J=-V`)*Npi5$cf6a)*<0dw!meQP+a zZFtzz*kU-}_p%iiHR_yht`jDtH&mpMD)r*jKVJ9gPk>rG%m(l2 z@ktV{`tjY0GQU9C-O~g4pKnhj<#+e1YP$Ui@7$fh&-Wu@%#9Fdn3j^o+ z(!9XHF6g`+Pua>gUIIVASMKSnUwZ_Q1_jFHWGe9*mtoY;X-+ZlB#)J_{ueCM8xgt; zi}d4%DcAAzhW}xobYTCfjllkei(nx->4z8y_@2g?(^5sNB|rC? zto0C$eDKYyzg^RJzXS5~KFVji&i@Beuz8}O@84gxZO?{isD40mUwl(q(D}~)(QHCU zdTAqeH=1u)Q_5nt=|zx=tzL@?(Q{DG*%GuKSZ+zmBTN=mD56;Ui3avDH#K_>Rk7fY zRP{04_tIS<0AT3_ws0-B9A8;sV`5-AC%shC_a%*uL645m9l`NoW?B<@4KZ8nGo(E> zQDU1Ux7iu!j<2B_pP#4nGY_&=!t{U9w=>YE3Ii6J^y6ii?q666MfN~{|8Xt>7eY`L z&e{-5(nio*f^6KKemw@t8XR!u$=TMA_R^-NRDm#%yO~+2VZcA`^73-JY+Eq|gi83@ zT`U06=Z0i>)ij4v*=olYJ!+<=`7m1IFi?V|P84DE4aP^p#>MivGL!^zJJHB*cq9aA z$sweSww+fWJNT6GoMS&J%dGO75)#Cb5A?D+p5sT4adLA0u;WSkk<7Led+upEqd0&9 zgTleJ)(gpggQu!vZ=R?jdcuVj={{xucmw1;s3z0Nk94=Um!{{-UHO260)Z)O+`)hU zwddAoJ9GqoLell~8+Iid6cIijxRkgPt1+*|AF`^*_!FmWlL7B_hs}c#eA*M)Xbrcj zm1SQ$<{^~_cK?E2{rTf95p;Kl^yUy!350>0GNoEY=GIj>O8G#T;-4r5!9i!#@!1X+e1d#?Fw+-b zcM0E6!l2-e#O4MC9nzsPLKP8XUI;Zcwbj$(zvM4pWVNad6Y@WOdfUd7Z~JGeviW3n zG9+v{=2H`84LJh78GjbbkQz^1YNO$LsoLN62`h!fUKaO&5^xdG+=VG`hzu+K5jI7R zNXN21?pviVI|*U7{g z-0_!2g_{z~?dSe~UnUluvpBK-{TdeF13y<`*gQPQE$NHbW<&|uF{@c~W3=T>y^AVE ziG-b9X~B{{8eT+0M2C}cCpd4`+sug^(j;T-F(CO*h)3tQZi8cVr3wbbLrNsJxc_VG z=H{m7EQ)Rr2pS3riiu%)2JNe`B zB7 zG^-98aECziDC_j1DzX&>Yzs5an>FzC%dFDBQ<2(PZx|;vIqVJ!NzTsxCWV#>Mp%Wf z-J~-KY;?_)uUS>X`M9Y{?&M`vC;!!+MLh95)Q$dPm}qDjvx0}of9LJn1{|t25%IMSL*pyOyxhn3by z{^yX*wFV28bX4c34-Ye!m9!@ZX6|WLLt19FYwpl0U8w*H^Y^k%Jhe>D~Wb=V+GjCQsB~k0;)qTEGLFBjhOzd*%M)!W0OY`SAd= z_+5J2@tZB*&fU`;Tlk5H2tUWK-(%S+rQ%L9*+^wiwjU!e_3?z8WtK1~F4fyw)xzVg zq+|T1;d_fdQZj5STiYbfOB;?y&e(hda8{NFf2)qVYdG|E9A4>Sr}}-hoK z_~NTc3U9PVKCZU`9J^S-o79S+P~F9jIn0ESOz{nuA3uJ~6erX?hqH)lecgO8g@P_i zD(nxo1CSK#2!nR#8!*q&exhSutmn zv$wa$1AltUI2)WMF7GKv(d6V-vA%9n>#R{?LWS#6Y0dY_g^M^=ExA7-U)$+B91@~x zv0R3Q!O=ss`uXi8qWEL$cI@s)Qfgubv^jno@&KNL)6>r+(o7>ie&lrsMt5L+Ye4V= zmUa8FTjk&HX-0@{R@c9~Vay^C`AipStA+X?rf5mS=av(AJ<`W#CdwhJ*_77V2rmdM zmKGGG=u=B>04$%IcV;Sf=f&{wFSu%x987iOsTq+blrw0(=WTj+dOVvh>WJ9FyIXuS zaAsRfzp%d7hTY6?1m*AW_0K40X3_@B++Pg0hf}cjPTGZAec?WoYwy8CUlyjV9ZL|X zrt=RFnZ0+B!v#6oCYWaMFq~jcV1tvC3KSF+7fyk-7setms5&?#B*XaF?oEumT1qUXsyf$&iSmrkx&N_0D06tB53t92GkDk8i zVP-}*IWL;FXhqUxW~*{#7lP)^3RpQ2KXbajVu8E4a&jYOErl`n58h_F-}6MnamQ~W zSeQGg@>7k*3#Oc?j2%6zzZ38u{v?VBg|poV5&C<$yZ=DJd^EMM)ebQM4=hn57@~Mx z?K!vk-jS7;wYvTfq`NZ{Xv1`YepW4oVlxGmQdJ>WK5zDR{+EC>a~HNT0$a7kb|QW6 zMn2F6LE^fHt#ohi(Eg)zJv7~L0bkW*4FyI{_o>_n1yv1=qiBZ-8Wm6*v^a^P@?9T)rHs3d!~O=*Ug~2+=hwxLuJbwx3Pa>2$fl83RCIT=b_v3k z_MWu)lCH6%yn!vI7oWx!y4&$iOKapR;_vHU@Fu=aSHFMmHddvd^V#AAGZPXbk@|G~ z`g*HsC{;Y3Xt=ZkB6ms#@dAouY{zE(jIiCCRs9ah3h17f71*r_J#+mxT0z>X7_sYh zY|py!#W37=2PY93-v4R%rXn&2+qz=a;AgG%Ps5?Onx?oDZL zt1!fnNwC-OiX#desi^g@;0X2nQ&Z|jM!eeuEW#`b*vwR|P6y(+$MCh3uhG%blQm0% z5uJ^m;l`?^*n~tx30NufT^k#wlNTZRDxJt@Xpk$VZZl3sG1gk_#HZBFn~0TDh9hJI znD!@7w4FoiHa^ipXVZ21U-W)76d!NzP?bg*-&E{<0qS!v6CwXRw``iPWsK-|DWB$; zNXg{k7DYd_;>HV0IJwu8cRseMj67tQCN%MpeOh)P$cQa2E*30<0}|0w$L=nHiiAX{ zr}|L{aJPXXiH%Wl{)Yrtvp6^MwW-P99keR&KyNr8|95aZ5NvGhvinrThU$FXsKzrz z8&```1h6gk-ih70pm8HUY92l+^fnSyt&)+ZqGq?VOLGvC!(N~V8>bDDX%*l$P)NfZ zz6xIvtCUE%k4G!nbZgbuKCh^Kv$U;bIfCW$UcyWX7X}LIhFRIzBqP?IE!+IW8qFnq zPLx7unu5i~kT1)m>A9t@uCB}-vL%ojB5M{v6U*%T-Z)OJ@P`&XSP~Qj!FR0a}JjM%z2m z^4;5&l;q^0pH%rD>#U*)(rN>v15PqBGRkUdRO}?bQ~%!z;l{O^KWT*Xnx76_PoSRi zoKaNL)(bYyiwDiRcz>Q32BfV*AVE7WEn|A-CGcm~NIjEomIgT1|A41pJv(-#~@ZpZ+% z8GuQ*h17kY?11_qR%y}75J6+#*whqJsuv~(afEkK)UxTfdpg;V>`2Z+xx=VRILs1K ziT^FMBT2_AC@H}MZunC2sDGgrMcCB8p6WeC+IQiToWA%rc<}ZW!)9f9c_MHr=J)FU zIW^kR0gsiMUt^T)*eQ|9htaDk*Brstc+yr+THmC#0-O(}DhLVs;Y=TkjwOSi8qCR#fY1d``{JzX=vaM}qs5x{Un2j6 zj1uWgYa21stA)Qn9@9nVkh1 zN)a?5MVp?g->4B!;SXBlfCdICL(f8N;)prf$6xj5m{X^tqdo_GC>p{e*^sIyOR6A| zdAK^2OM1iM++l>U?e_MzEP}KhOa2SnKSDjK&EX$k^sm;4QjHTA*K*J{@WadvTHV`vCZx=|=Y=Be*S;oP|0|P57MZJ3%OX^(E#JXu( za^Hb@G88}7Zb#NEEeTepqqGCz7cA5LfAmB~lAUIXqFjuXCsM2Z0&=uhiv3ME!ot+* z71*O)k^DT$P2%bt9AfYsdvV46`KWAiT&%u$*E9}p7+@;pzygJ{Q(PsqemI>NW4_GL zsvsW}Ou2>wW?AENTFb??ZfJD=PL`qllIztZRntf;LE%}jxKd;|wmz7p@VzMh7@CvY zLS$qlH%3%+^yi!CQzFOA3(m}_W))^0e}1tKd>q2uDqrjF14~d#c1-f{OV~svULg4AzG0;sZlyfV<2ga8fMS7v{*+sE!I#Fz zqmr}sT5|V70YB2jpWv0bIXS5mf=8}ajrWM2v!6?Wl8Pz_0B=nuf(fKI0s@6HwiXsr z65*!_8535?)E~0v#8A+K^75z{M>jrz9v^=Mr#GUmlHi*am1Jx&M?3enmWr{8D+sE2 zRb5K0ovN|SZp8L~$ppK5d#AUxw{NFrWwB1uYQoj1s}Nx&qTSMv;gbM~h(>|3!=C|a z61sZ0wiq*AikV{Y|Aadc5fTXH^yGkFAf5pA_^Rz^Rrz_dLZRu2*r~iSKR>_hoAjCV zYH=)MPH3P=F4XB>9N$J!Atp&)A+f(@N}&*%hfna?Hr=ak$(S87{4%B<6T#4VIE2M4j!cEf3IUGW0G5xb#_l;Rbih8VZ} z-1zK&&ifPgKG*Mo>6x5Bg1Av?hDsV5G#m^JvN$(>&Ce4$YfNDY{|&UUt&Utx(fJ{Y7N$A%O31RuA2GKqIlbM;x0@1M+OG{zvil!#sl2a>JL9@ova?v>*vT4M2 z%zR8n(jzUaEGd!pKiybG%EW#?j_v>mrr;HC-KBYLDjzOFlLOn3uh(lhDNqIj13jQ3 zrA1jj2=Z=X-LoqUtctj0#W9Tg0=2{z2MHoRKJ8p@sHhS&YQxC?LAf)kjjD?}1kq?| ziNt?$-xjs_S@5GH6uu3h z%c-#R#`ZKC5dr=V zk_LH7Ufxe$n|r@1D=Vj0SCw5|T`xLEPL1LSb5c?yGf}f8#cvH88hw5w-00j6FrrIK zOK%ULVb3ygaB#S=B?M@lWl~2sT%RnrYre~L#nHyMp*mjoSix;=ZQa-v`h4W^hMQ}8 z1nLkQ8+*}GSBGkPecUZ!0Gp>nz_*QEsG3UaG=y7M!gbIB-Z!J*%{*f_Wgrkn2MH1eIF81m<%l$k0*KDM`nb_HzcJ{DpL4IK>qR>*mePwUugt{02~=P zu3;Iz^K+C(a@2nz-Bl=OnJA8b-z3r;pWRR?4G!kB;=7*>;#^fOM~-Y}6fyn4TT zdfwO9m;G~}v&3~+H@EQ97 zEP}EjKpTTcC<+c^0y{fpbw`=wFDhsS>dAKwB0&Lp+r6jUhAE->7+}Hu@day|f&}_O zs>#U#gCIPnpwT0J#%UMyh?!wiFH21s_5>hdxCZR1fUogS>3zkPn6nRW~#&Rg)_0pesLRKC){`ECcpT z08Y)$E{-DuWiCCK#f+7OCHZ%q)mQ1_qf6k#T#d^%9=_HU{g6=!!d`umvAeYuiu>sD zoy9#PJKJ!I#Ufwo$3}$CXf%=|Lpu#S_kJ>&NNJ;M+~1Xoii*O&zRU*g9*Tuqq_}7a z;d_7PjFQk2Muvya4VU>18=m1oqMyV%MLT*{$!qVZMd?epzvWMVC+uga6`?$Pjy*xw zn9}#)CLTZ;)l@=|lw!o{c0a;Ym}3w6r9|sO5*~&1S(XuF74wrdpm+j?mZ>>41fQH? zegZw{C{wV!x}E7r2b($NO+O+jZKqb0Ou+o=96fyx_j@}+V$QcbbXuS44`+QP&F8Ee2@&wMiorX!b8H-}!G3 ziIb!h7QSruVtrT0t^g14+2AdYvwcI!E<~#)9NuV%3vEytw?!BdMf9q2;^obXP=4$q1ZoN;Obw#l@J>VH zC2w2>H_NvXObqApE~+u=&$S#SFfRVGzQYGxG@vDx`1@@C!vpcwPGpW!{c#5?a9V1sew^#1X~}=IE_9fnyhmXl?#B%du=wTwIocyYi@^8ta+^Bsc!9;ajtQe%Y;F09{`JOb>mkPQ z#C}>|lpfdTGaSbUps&GQ*f>@Sg(U*HLMW?pQa~O7P&co5!a{WfTZIJ#nEZZ>jbQ;+ z5zv#0tU@ryF%C5n?7miwQEep4hopsfVK ztN_WN;HJlJx#=xY+dsnw$#1j7Pn?Sgz$STBZgPHrMM4ve30scOgPHBIby13JDSYD5)-)&>5_Uy#8G4s^Yk9qN4+4Xq+o(Z_nzBM|8j`A1Nl_LQOVwvIDdP z1i4ZOlvL^{LnHaXfgatc&!)s*+M%R;`FO!`dfHSv(ZWZqrJ>QFkKPY&zfF6>JiBqi zH+L=sDy1vKJ$0_swAiBf(`xh8m0R0k)hC?j25)a~3EVCJjXhnK*CqQA1N0(lg&m`HxxEbh7ecYFUGoJVWICbnMU6$AbB7Zx5)eEO?2cYXl2H^_Tcxv zo3va5KE%lk9SOWH|Lj*_jiI8U^$|b>fy9PF0TV<=N|Kz^Z3xNG2Odd7xx@i|Udvg> zmvk{F8e+lK0g@8-%$!}^k1KDNcy4&-n z-RwkX=<7%3Dz_t7KAYXtdYWx z(q|8@+K3t@7fC@`Zf<224~(G9hTEmS53UjcsP@V4wok$Tc-Jbt`i#*fw$H@#|RFE2tN_ z8sy}W;#AGf+d<|IV%httd*#fPh&-fw7Uhh9+b28`FgT2)eByhJ56@Iw^&lU^!>vul zzTggxjjd|xX9UWq& zfsXjB^gqAW(7-latS8KG5yV)H*q3D~I)-+>MWxje*;sX*KXr~momASx=O|L271!tsg3L1Wdiagws<7k zP<~Z*0s=L^6W{;<(?ZnW2mrdN1zuSA;C9SZBCMZZr9^^<_gU3jSHOMIo{NV^s=mG+ zmzCNv@AeZ&nWd?*X$ax=MqtwJ_7k`F3xpJaZzSpl6s6XLryN6tk6F)=0=sx71Kg5vk8BG|YAQ`r4&#^*9$Mq( z-`1*y3tPP=*{Z?fl#D+Z#Owm}BN{1((SMP3mwuy*PkNtV5Eq9&b#;{-vxiGSKtE;@ zJTljybu%}+$fSI6nmj!{J%i`;0%+w+AjHH6<^iOgabc&=^&?L?kS5fo2zZ3cJ3mDr z{!xXwnbzzWC}<@XRMW(v4D4p79Hc;Pg^~uAlj}NKSe**q7yf~6?GlVn6bx?d ze!aW<&;~e}HrA^7snv5Yc7e3up##LHwCT}U=5?n3fIy@h5DM_vrwL^ofjPR^Ni)O# z1Y5?5jJp~wX^2;1O0=v*yC|V0*)m@mDwvo)J|&4>lY)ujPg{F(sjl_@@b^uaCiVTF zlk=#t9?@{pf>OeXhQFvJSs{Ux<8yQL>Za^5b#*SS7sSRu{)pv>yzg@txVh+3DbOn= zvirpECqN)Eje4C0{dZnakRM54ED^2I^*>(@=&w%jZD{FAPOE4duK9zKlW_$;T)ZTT z9nRM^%yiuz#>@E>f(dNu|B_RLlJNPyUbx4Up@FYGfCkFL5H2YpbeoI zDLFaS!pO$YdZ`79L{yi-4!U`Y#wWeflIQ+i;N#8R@<-ifnVs-CIl8 z6)J!lRJl@98{xAbK77c&d?r{>1Mpw|;;&zm@bU2@gfFe~(w6qIN=izsO-;qn=z2cF zXr2DPr{9}izJW=Ti2iThhAgNSZl3TCJ5;wFald5tg*ZCd8;?vESJ!Rm-@DU`ZO?5> z5n+r-hyTAlQ9kbpYJr~53l2eC<`ODWsL(|l`D5|+XabtYp7L}h=vC4%#w3j#jI~#gd$r1gX?U!NEg0BFvkDz69guKrDc=i1m}Fv zL4-H*fbh2D1*=`wxmNQo<%_#-#$L~q`1uvI4DU`VSUwj&gwX;g z85Jv^JMFe*hdJ?^)UEl}#2?Va8~RLZ*LqCHPoe0bpmCb`FDZwz0rN8pqAaM2a&n1r z8wmLUC%kA*K<{59G7`mr{1_BtDBAtpizQZN7FciZP^YI75FZ7L4B^NSFlITn{sBo! zOWXEp;eVo~FOktBMMO-mL6Q1j1q4AWl#NHTuH$V9)fEo4zT+vv7}(f~|2<&I=t)US z?{D<;T3ZYhq5L-fKj-Mbx@q?rU~j)^Ki*R*8~ZCoShg(|<=jaQGsVVx5@Wsy6R|AG zdM=Ig_|e=9JjN=(zQ^gh%K|w$>kE?%t}*XyehtM}{{wW&RnZH`;{rDVzExvmDnM|#POzB&n*8dI_m>zU) zRvCfeNUKh8c)u2AIo{T|;pX-n>UYkxxo__J$Ev8L^pO?~;2{6IyIjX-BKGju<1Gx^ zt6M%(DAh$B{>u(-gCK;7__R|)xiWr!SEYO&vk~d0fVf;Pp9YP z5HP~C9tk<^9*&Op^A^4k?FX2sI?uZVZc@S+fVx`wJRSSv2g-B}A@Xxt&eC?T9=FtZ z`FMF*Eqk~8Uj=@KR$s6UFdi<1{@6JmheTwGu(94J%|J~Ztj|W!dAH-p(bY&6Sc>-l zTQ>@@ZtD%6ZYV2UWs2OwOpkFfFojFEjW^G1WNnR7QCV63bH(gm6&H+e!1Y?ih*)Sg zMI4#MYcALyC#R>=(bwNXCMoW(EgBn^;>lc?iobuCSoMfo0hXu<+dDccEGuLDfH~2i zncIT^)EF2FAbI**4Vi=Xu|mA)*}49MN)XgeNhG#3#Y*9K2d52?DmFGuKv|37`*XFl zMB4dhRu3rT#f&5-=>PjTuoOE9kXU8x-kPoqJT0AcbvlP*mz`fae9SCJVTeVva-o3MTK4l@8I;$mr2qDm~kFWcW~?!}5_D zwqG4L@d|1c+npAX%q_$%3XDXsGV;e>T*z!eNC4cJf3+o0K5&5gZ6{qnD0=c*%^pWzPn671~k46v?O($e>R zl*Ocek4%2SDt z^SY|%aJF9!(H*#WeIAhnOr*){jYMp$_XYxp1)?IGke%IKS;f~j_+|ZS5{3Wg`;Air z4sXA?ajsGHP7mGxq8{q=jIRMxZP;~Y!mr;&m%P~6Z(ppC*J0HUEfcyn-`8i4vcyQc2_}5;f<8j zi+EB$xp(fa#lsywdthK;0nY|$aa+=$KLeyJrSZe)9@UcO?j}cM-{RdE{28VuOeiRv}(daCIRpcyN~dOa@bct6Aj6#a^`NY7B8tbqJ>h^bZv3w~Lor=D|K z55MzSI(_5kjrbMV?UhV-q7lQ-o$#y<;3=cw%@xCK&m?j`)Z(9{QbvlFdMYXm)UHyH zDbg6gkyZ>Wm}_iqmZ#wFFHQf(U6}RJ6cx?kDd6qp2aypjZn${b=RTi1_j^0%pGbBJ*Mu( zk8aYS`WavF*{k4&O+{1|@7=L*g)*{g#v- z=1u`)ZKD--z_h-)vNCV})X^I2#LBE3Fg(P$Y$9qhf$1%R13+~p_Sz8D-^+oVv5}FH z=0)`9NfWWaKt&1gcFxm!p6GH!z7G1>zD{^}_z=}31>o3*c4q~m=~8tkxZDZh0|Ioz zZ{1eL8bsjv8!gCy6e+n6Ty-Rby3hjMO&d?7DDa1O*WoLXht64(aZ0kd~J2?v`%p4(V=?29XZw zPHB*a^9;VH-)+{8SCxzObm!%+N3$ zpfCj(#L*9Ih2jIf(@E#3xDR-E<Iv8#&r0E#>&hrbkgpUDwoa~b`qE46tO-U1sAD!Q4qaXul{S&h@XqWqu71V z{7!39+Ht29Q~m1ZkF?DsCQ_POdgWvC$@oxZ2jN)8(`>w>)sCwBP1$ir$1Uj7&1TyB ztJ|&_x71&_9=^ZM1pBDCGZtk{^~|^O5J%(|zs#33nRPlQA*FkJezhptOUCRJA2@$! zsnbIR@p-3o(D{6qbn=&luR!0z>)JdOh^^c8@ z=I*7$1k-}tl03)8m4(s^o<51(2_q-b9i6^1lKa^65H1ZSGm;)xfQNCG$nNOSZ7_}% z*2Ky+KLV4a`S}7(SC`^;6eUOLx%aKSVL-bvh<-KSn;uV|X}oaNI63HO^=`;S=z2@oMJF za;$HY;j)gMRnK$_3-*4*<-LC3pBndIm{8~8tz7wS-a5lu&ND?DXrh$wv|-occtnC- z<0WFlbK%=M>2~+CT6>?TX09?Ym;|`dP5{3gVbGW`r$k*#2yqK7d>`J(PRMum%8S13 zTs5OAnc@@~l0?F!2*}9Lrn1y*6{kPNPrgIHF}b_49n&XyNl^t{!3rcm zU*BMF)h08d6M(FYOZB6sJ-3Hv#$B-S{kz0q4Bzg{2TGK#(0z|nrNPhUs9>9Pcs>%m z8+$&IJn%k&ZJ8^JW|41`qQAEDdHj}1!=x)%L`!^>qorGRqUO?P$-!%Pfa0ceHI8tZ zA%CLXVX`8=%5%MUeiq)I(V#ssbP(Xjv0oMW+BvwQ%{EQy>z_csQvS!H%Mly=i|OYF zU@1yqNEG__0vDfJuX@$P_nj+OKY!PPCMa3^F#QuQL{XQgr+%1lT{Q zo%nM^8;K+!X>WU4T3UXu2-))b-X2`Dj?`A?w@*7+l?@GQ?pLdN&9_P#_%1F^lRqPC zxWDJ;)6!yfnSj{BOWS7K*WUZA zsyNAEy(yM^w-@pZS+3i-zn7)TKM2R|dMd>wD~;$#6!EGjx!kRCO7q(jJk2rCMKn)i z_b+MhZyxx~9m*}bIaTi*i=xQNU>HP9u!+g-o||0$I=zW^$fuq7REv`i$=ac_z@e9t z40|vzLNQ%&r(yB<S-%wJ zSemE<26m{3h={(sb-960Dg1!BENpodN zbuSVEoOgl8N3Shg&b@_tOM4_Pc8rOMMnABsaHKCbktJ`VVR-bE@_Uih;$7_B5@i{J zT=5ja435Q*|eHVVlRw-DOjPYzs1$hheRLQY|m{ zq9Zlu_PgS*-j@Ml+n4gc6xQX{=DM&TUJ;HINJ~MII7a*aPzZHRRT4Bx-lr1|O_SQUM2l2fvW zvvYC`QlD()LL0gJ#-@9>5<;N{y@q_)PgrFvP7g+gB)45;HE+)kY8mYato;G7c6v@P zdGl{6utN2<+i(Nk@BLNtU9C>)lRLomFbXko`?ymN+RJ!a8ntLKIBW zI@y`aXlQNDni;U*shS!~&nr5S#Kb~Vn~OCS*=gPa zkai}}kfF?-rX+ypa{t=HM2JH}OtWD{-B(WcnUTvKo2OXA&AuMjsHQ}VLRJ(nn$h&b=BSKu8G0A9|Lp=G2IJw$ z($2c?W=Jyw*rWqXVp39YQvB&_7*C1pyDqQX#$@AYT}h;p+euAshdVo}@s?}tv8l1= z9=qYteezxTUzL%i+o%zKsvagLVQh*cN?KPxuq%ONNlg7PW8(ppiAmB>yYls~7oyrT zyg>1`PyYu&aTv~w3HqTBQ25zw+j= zkqvzG;Xk~qMn_AQsMyCc^uxfkvBMZMre4_QtrIs(nF*8CWRiJSRK~2nzyBL{vkHm# z-b7tlLpa#zipHLvJli`vx1VtxU(#nk!mijv&EoA3wxMHcBMwM@A8?EScMf?8G@*os z>n5Q|cqM7)_eG2+QLran7f}p^Hg;5~**(Vf7UWB@D(e~qq1y!E^eFtDGiDC!o4z%! zby9F}h)<~;14o>KIVciNxI7oB{IE*fvw@K_IYr5e^Va(3$>{yl{gWZNPU2i8uidGj zVJIP;dV}Uu=HH*L6|bCw6oD(tVG`M;uZxwQ?}+81pBNCErw`;nO&PnEkt~t~;1GrG(DbGRtBI0#8xR6ms<c_9-T96zB00EkufNs4C-4h~!*)iczaC8_1yA*??a-Fhw^7+#J6Vrfh2%Ij{D6Ba$ zn^&1WE?giFv|P9Q)o_U8v7Qf^-WyS^+3j38vG74n&qf%kev;G2et+T5%=j>=%l?`Z8jU%$qFZxRS7p_0ff51WzLG)ZK-zj7h-e=i zkSZ;gYQHfOx8?sL;xO0j8}}Q`x4m-ECpm{Q(U~zgK<5rGB}Y-Fe^NbIfA8_buz! znayrQb%lL$;syUJ1kGTU~RKq7gw%2Db5P2Hp*G>8sVea25u)u=@VJ z2W0O*C>9y_-O?%_vwPbX%s+l+jNY(xv$|d>3CYyuQ-9{cqrWG)ORcJ1&TS&BkjUR-R}-U@rq zCZO-?8p`R9h$-g*kkf!a=muJ8i?W?=x1tu!L;&HAcr@qZFaaHv!IL^I{&KFL(XT|k z<;HoLxfy^`4VIOja{>1s1_2RYOUqiqfrXiQ&`hKhr5&K1!h<>p$7dIWl2_YBY}&k6 zFqh3sk!wFbuI~+oO89YBQZ4F7^1(OhOtG?ZN|2BoGDuAqnO42f()}d`GzXp6PEUZi zs?%KuZ*(6aU~W!@_3pJ6fC(MW@p7#^u;JdpLLZ^JZlh2?jMSR#`HO7e4m6@G{!>|sI#-_xS#qa zNxS`=QdPqzi|@MYL^-WKnD03t;#}+fGfki}g-vD7^TldQnDc_1$+%84CFenTLm~ZUnpAx`OCMG5p^GYeN0bpzxhPl?B zaxU(~Id*&KI8?S)(jp0$uN=KlT)+^(q@y&u5643aChQ%hy6G)xuE|1M&`OJo!F&C66%pij zf~kmTxb^uGmdi9#+FSy!D?TF1d#@JG>~x+>f~-6a?+2$!?2%SIj~!a4&NaEKCQs}a z8(6~x#d`0*&+zv}f;)xT$G=uS7=Cn7GLh>*`W_tSPS`a;2=J=%OE4mWI8S*0;UN*g z(6h^6PU{~$!yP-nUOiwck%3raXU}>mGt*i=u(zhhtEHCUb%3ufT$2vH(v%pmPDRnv z(_dF61k%vwBevbm5FfN|grLdM?$dG{>ADo$+-WAJrsiD}@~N7d3rt8!dvOBB`R8ul z-rjP_e|yXzS>HG+baRUK0~!_c7Zv;#Y3agl41To1(b4y-!i#2(jtP8sd(;^`Zppi; zu~{Kv*M!+vprR};`LVFe;9t-osBXhCB3S)SlW)>2_qd3L-L>-HrV|B(26pIF-Z_jZ zUZ0G@b-qLIc}rIrXLqW6Dc{iA_rb_M@&i-wLc`s{=jyC2RS!28kE3^&zl(7C8kW4< z+YjWuQ-jmw;@d4_bbbVVkRo-+lzclfYZ-6>(Uvt!2=0_dc{ha!t(u=`Ntg2@&SH5U zQMg_{8`7}`8mKuE9>tIMun2;LxNs_}1o=!%`#|$b$|GrM-_vL>#N0x0b<4QbUs%8!XsanAx4<>p82-SBZE#Vw2Z&Q{M-&Z0!53Kxlhd-Z&YAfC&Iw zLg5W>5h8@T>29Dv+T@JvJsZ@-dA~*a=^DaOew2Qz)2R6@^Rvd*(n(!tzP|s%VOU+# z;z`}IJ+kF-A8BmCht7*R zxSFtV6c9wae_)`%)vuL?k`heAFqd|GF`>Wr8uF5$|#xdW!svy#U zn6EX=Y}V=8EjWt%7a2QW?65T#uC?u2C1DJ(T#Bdhrn#gf3T6p@rMBukH!g^g#9Xb6Zfcv9T&zT05)V;~yaj z988$+P(EC}tLp$%t_AEqyS@fQ^`ZP231gCC8_5{l_(WpOQSdk)K5AP8NaaZCuXfm{ zp4)nRXD%!(2v146!h%*{OiYra+28ut>ma-sIbd_-Kt>Vmm;2ERtRFi&5f3)s-?ZKz zk@_}Dj=1yYtEQ&r9kcG{EIS+9_`?G(upS4_?{h+bd5{}nwk+tO*5N*50BF)k$%xTY z8PXY)UISd&q>#MevevQ@k~UG+^7@tcoNquKM2v*JZ-He7HMNtIN)KPJ5!EgMsb&j; zUI+NaMM^QpLJ#=9rVEt(pFF~0RH$a9R@-*D>=9_p$~Gzz+t(;n;6A)#GOpi|b^+pM zXt5ST&Ia}alph=1&vEU}yOQ09W<4*FNBS`$=YIkMi4ZaiYzF>h{PY(i4c8?&l7Ia` zqJ`?4d+Wz7jEZ+{k5OMED5M3Ouc`i=_(D}S?H?b<(OsOM1AT78H|^O&?l9J!k8;3z z7}AKo8r}ElKoe~qT4#4e1tWdbL~?iZ`~xxRRwcrPLHPOEUWbo|kVlq#1$IY^?;) zeiezlkxQbbJ$b+_FI|nVV8&DyiLaB409q%%X#}rgXIrdnp&^#; zDGMdP(81DqU*fSu?t3Q7y?Ka%$RvT!rT)Xs^FoN=n3-V94B|xOfO( zhVKkv6}(@{hgao|UnbFCsz%`G5Ad2^C`>jJC!x0Og>Nfb$ugG$<$dMya+2w+wNI|49FDSbP>AH_F4>RJJrRIOAj0r{ z4F^C{%f`8WPu|!-kNdXcEusc2+CS@puwH1xN{~L+inaPoe$p?hfk!w8>|dn&#F88Azi9I8lnr+QkSyJ;net^go8aL|2kK z1e^K*Oc!3-s{gTMpGdMRgp^IVi1Ttw{v?q+;UMuIra_6%09@7tK4282%4>cUhx&4}vp3j% z)&X=Eq9u^1h6kZ%zZoBgfgG<5$nl-s2B~V|;^W&HfPIC)|2c}Tb#;GSGAxIU{i^`i z@S}LCX+j2<$nIpNT}4X?TP(9j6%0q~r-dRJA`MXHfXp7&*%q>h59|nH3jRP%ON*)) znpfP!>G`~p22ca<@9+J+<@J3#;ALcGC%3lpJ2HH)APN9938jg%F>G`ue>NwmhZX}i z@X(46{q)@goTc3iX{oC}{7)>v`#S(tNn$Y1WdI(cilhrIx2H#V^5o&+q3VJF2@pvj zuyM)qv&jxHqsB$nGAm2ZJ&?|kG4Z?}IU;)WrF=5>N3J1rFJ-*l-SsrBd$N8i7a@Yyr)%Q!*_4ULRJ+}T|=A8DM!t%sb4&Ds(-Z307yByWAGBZ=(`fD60g1eAma4&n_;1_5m6SRmWL!<|W0#a>QDCS^5tKejT z9a;U>>VaCCn!gR&iIBwqkrK)GyTc;ea zs8FybOb%n%F(MK|)}PiirZ^D#_tOBNkW6lj&uIx0lWEv{F%bsT!=|Y zgmY409 z&X_`dtM7IKuBHpc_1R`@+z7LO5Zpw>gbK0fn*@P;c@JUJm&X%>xx2rY{7RcwQ3X$O z{kUTR%)FvoZ0~46;F6fw0fzHr0Oc=z-TH2mrTRLxVwXY+`bos}0#9 z2L);&??Qg!#G_?UT9-h4NJW5!X%Hr)=kxwJqX^XP`Uo(u-MNdm@3!ftMc(rQq|~(2 z6f7(h*^^H<1prs7g9Nw%oEl=zh&~~t0pEw8K$0nHXP44*y8Q7CuV2?M_)EPzCa?1_ zu?ayW#h<_K1*IXr0gfDi`28gbjBF&je)|OIFp(t~EM=#SNRDQ(sA$#T*36q%lHAMS zt0r4b+XnF2!2?^v1Y|u1_dO;jCmZJ9&aeYxp#b8QUsPnH_I|F%7fQSW2irc-uL#>k z5oTIzp;cU@D=gcbiHVJutI#f>(Q*Y}3tfn=ZLVSDi^~;eOrfa@l+$$DR7B~<--82f zM`JFT7svIC!uX9PKQxj51PK}0jhOw$M&$C{OL#vTC32@L_ z$X;Q^O_pqR@eOOJ_p%B<&hh774@~YWhaiNdFFT%PludK7OB;t4mcAM&;bt)ZG@_IH zbg#Y;+RMqxBG5;l(;S|%YB2k2NqCKnG{H56Ph&;Jl z0ILwUw6r+qU?b5PkOGxz`cvj&1J;3+UCcz6bCGheo0DhxQ_}0wLsYM~^gsL4wF&QZ zgjRcEzN&I`$Bk@Q-JqQfky(rfM6i zUz&f-Rd@ew+8Y7rOj;&>ykEh^UT0%_Tgh3;vpiQVUpq9~`zhc}@gDb0S7|P=OJ7 z2Pn`;Gzw_r?1rYGs8_*E(kL*Yt>RfZg(8~}D z3q1aJLG=GzsIvfJWwHC4@^KMq0OBqzsVobs`Tp6Ek3>tlFes2NzzffiXw_BXrX~~Z zLGx>$R(pH<^wcY0-CepZUkZ%L-UdIPT$bA(vcAx8`&{=Z)`EnoRrkz}i;w}yjIh{^ zT!h`dd-*nj2iHXEU*ibKD7>et+o|7MQ$4vJr#0P=9q!xZ!ydo&Uv#*SK_I&+l>_hm z!#`Hp7d*2@VIRY8^A z6^fQO}w#`ZmL?XGL#j-f= zVESK#v0VN+DVVw@@Dx~=+`bf>;-Auru21&p#)tSnN6%Dd-Q3DHekZ3;o4s7yRpKL$UPvDj-4d z%jIJwpB(==s(mb24p0UZk#Xv!)-yi0Qa8C$mq!xEtAcAlZ137FxSPeQXAY zKZb$Bxfn7EUeUnliy*IhWLcd&j`@aupYhptqna$eo4jybXF!jg$K-S2cs%t}zMK!j zMX3d15fEn^#Pm;QOLH*bVB&mZ&(D8;Lo%ZsB014wGIa7bhsS@idW-blS=N_;eZdN^ zh5!RyRNP2(wjw9@6(F)vv`~48{3RV45v{aNWkxUzK$bQ(7LhZn6%7g!HAHz$URUqn zq7M%w#u#uZqJgjJ(a_L(QQ#npY5%=ErGZh8DIsWJyms*CPf`pU`}JZiV9xA4sQ&rJ zNi?7Ao%{Mgbd#u-)hAT1zxy2fl|iRcNp}?c7ta@^^K|(q4|iGSd+odCZebE!ygtXw zpIq-y?lu4(Fs7Bwr1EvsVpwu5@uXVqebw_<(*lVISgGgJ5TX1&WgaH-yFYquRXiBH z@~h7rA%n0QBzG41H2l1^OR4jl)xl}MCY1GBqL1634=?pjsPdogICz~5+f?K*fNYws za;7!!0s$*wqAgl(xl$LUy>CW-xiz_u5NDOI$ydOY77w4q5B%a&w?K zrRO3S@Dusy7TMwzDMu1NC9iY0KOL8IH7rE$xiYC< zBY%LjS5Xl=S2!PYet!>q2W%flE;s9S zZP&uN#>cu#i%>6e(BVPTo;8rR7Xh#rJb3B!a*?%eG*be+$#b>sxSUL*T+=_212df* zbMLTZ&*L6;#XFn+xXD=!U7_;vUV^-m2EwWG8J_y$FOlVaGz;M(QDUp6;}W(CrkOD( z&98ohs~e1^%!Pf!e>eA3S+vh~y=~f=Unr_mkwqk;IhLsqjk8}(pyN#NfwIyt%iXVo z9Ol!^29cwT9irFa?e1PPe}^_-d?pGvt7fKa(k~Zx-fZ@{@wr~uN|xhrS4aWxR}b(2 z>e(^VmjivvI-_(S?mKhG3QQG#HI7Y=;ooy^qbDkferDUw&nir|p?&`B`E2SVX5L(I zc{}iwj)c2)h&*}!Nb?4W?3KnDKgO2Cxtg&YZ$`>4h~jIbGC5NPgACK}&9tSkSh^4d@I5%5tSXn)o|ety1Lx6DL-YeCoM-=zj$Y>tdb+*dfXbp`KOhL`;k z8UB^Kft-HF$JW?5Xd|eiR1B-)0FFv@eD*xH@=ZY0so-(t+41#ozHlF9kU0#Z|0~1k z-WxW>q*CxEqKwfa`@5< zIv|Q6Zo~Ae#YFYR}dTf(|J<5n&er@p{8T>Dd#YQJ2;h!BtaJ4p8YtX^rtP-Lg}P4KEg@z1EAz)*ac~%bj$uSd>8>PAQDmhNJ^rkONB`gJh9)2PfPc8zjOKKb>X_}g zKlbQCk?=V2@Kay$fKP~ze~g!xTg!`n(mM$n|CLy_NH9A$w_cRxZDGn_-T(ij22E~T z3*oo-de+xlXykrl`#9DEqlH?`TOJ;(HQOu&($@vn)%v1-xff7JuvyQFd=*eHmguBs z?iM>l#}l3=AGP71oCP2e_(4W1JE%r?Z(fhj2FX(1->b>svtk>KN*3dNAS~rhu~4|_ zD2t#-O)9=3xNo8Kv&Lat#ivEJ}$D~#ZLZKazTSY^<2wzE2BcHLet$k_uq zs2R|5uGjMGQ7s2E1```R;Wl?a9C4;#MA&T-pB?x`qsPu5q5n3+5#EmfnH^lldMAV; zGUAoNZcKgxm0NrE5J=ek6C8en``M~5F#KUA&Yqit151kL9oyI$>R+XOQr$lVp_<63 z;j%#!ia~GP1=t*aNR$XF-Wd#z-5f4BB*E7SuAOgNjJolejjyq5Ik5ew@X&zvyA${g z55N8LZEqq^ytb@tz@GIZ=NNin;XS}(u3PUanz))>mNTNyo zpUpr%!kW*I&+Be2)8janyrN9`nz!}V`7}~SfNX8^Iy>!)(;U%M7m8M^md!9pc@Pa6 zI{SjtxX{tot5?g1Z0@(Qo$xI!jTGv3y+WY!GxVEHHkk6CeftikX9qs?miPF!5#1-E z#cJdYn$t*2Ed5XPIT%NI^ZCH9&#csJ$J)U(c*RBE8XT*pmed)kFKCy5#nJKR0>EPNNZ%az-fw-r)=(a;U1~{ zP(1Lk&4jO$6IlMMVC81U=-N7L>GiJS^NUk~Tu_RDJelp)foeLxkFHi`XD9#N^)>E7 zM^Q!ATpyqx`Q>s0(a~KDB;X)fKQsK?l0ydG2w$|QC$FBdI*70zh!g+DGJ z^hOnI_j}i-%5c$!yjyR{UD-xR`R{@fpViFKo@6eovbfDvtj6Jte>`VQtqR3WZZlGa z(7aw$gOQT;4~QN^X%zRJ_#aY?|6!Sfa$!>yRm2CqM(T@K#>>Uxv7t#vB*(Q2^?f3bn?$9R3sZ)6Z$5BlgUq8 zvTLshO}C<8v$oZM$ykvWB9nvVbom8NliTsBaTItgQniq zHX9!NwfY0LvHz1&*8t^5>vGX^VXyw|e2-YTXQP0iq^ zTP`_Ow1g=wrI(y>S+aZc`rU_dE#(T}TmE;O0+l3$B1gcY1M+f@!5E^Z`{Py*yjQx6 z5Mx=>f=i(U$X}+z(J*y)#C6SWsB`YEo33d%lS&><7=}X4mM#R8B35);LY4iI)Y#;78Ul-Ozf= z0-iz@eTKfsP)<%A-h9KSKA1KXuzblZFjqDsC@6UId+cVch(isJ%EqjCp!50hB+7BU z0g%b1J_yN!>`zOyWwf*tw}Rrn^8}Q*D%bE;)&>4Ydm=z69C2Op{Evb06!H?vH#ax> zd*cQi_T2d2AjScx`OSSRK8#_vY&3U0hbI#-HBrPmaLxZ<+q1g?{}N&w;{@&>VUI!B zMFGx-l$C9Xg%?Y_fxh#lEjFtilNQ+6*zSX+u2{>-0#G~Jy5m1F6-&~@?d&u811|&Y z<5{JNx5S0(=ukIK_c_aFsK?1}meuQOQRAhFcNyVJhqZtxMVp{z3 zO<{E@Whq!qG+*uP+G%iJ@6|I^m`2Xk0}J!h3QwsT+IO2uC9O8!Tji}UvZ8*@(V8V! zH_Tv4snIXpi}_zr+z_>?+|xr5fN-?852Il|J~ehKtD&cOXMwI37Og}v+}IhI03zh0 zK+D@hlYM+AC#m)IQ|o!Pt$xCHCHncVk>ATHIb=kw>lkZ3Fp+FlmwiXwF2E2WJ&C84 z56`Z#f0H{|Q?Qx)lk?~BU=dCoyOn%uab&#!HQKe)QGJa?TdCHQkO|z^-hPRREA%+x z;EnxATw_x@q0U%4#&SB5gaH~fb80{*mf)tRb&?v+P=W$pBRZFD23S(qUhX~jba;6v ze){Be6ksb4*jEd$-}$GJiONm_e{sIoWsb7z29iEaP3p#FP+og* zqEZz+xb(haqc;R`eC_IscupYh4u$Xe@q;jZKK);UmF)!+*fle!9>s56>4cfzXai$C zqYeMy(;3-i6fN8P3YlkI8|AbGa&zl2!x!q=S*uVmA@UY|dip&zC9lRAY(FfkQzqG* zCm+S!!3Oe#Q($`0CSKX9w6%Q`$kyxho}|_DJnNH9`C6n8Dn~nwmgs+CD|MwNK&j>` zR>1dln#C7Ynl?1|9ZYo7z*O{M_Xdj<|gpok}YS;hJkROSCI?FgHLJ}#!3z~tZyz?l%^-+_gN@L&Qn*b%66i1`hdzQ;b^P0IiCbp*j1_HZZyBq`-6}Rc5KOywdQQuO)8}#iavSqS_+g*KLmn0oBlcG^K_v*lwFHSmuv3z+zxOh z^g5q1czL1+faHXOn34LJ?2itSj|NT~Z;LT*5Lq+EEjE#YH7mWrtEeryI5ljMIdq6( zHL<~nIR0cY{UsH@>ayzffs^rc_QQ`_W=OnlVS;wL@40K?4y6oAPZ98dyFBvXzumm+ z(chcO+*t~Kaa>1mk>Rofztjt*oIS2F1C1nq`OrLpZYS(Eo4A^6Z}9fLL7tCZ%wtcY?2|Tj_8mKcPHND&Al$_h&|n{pJI= z=*=re&(n$dD51f2kEq#3in&9wGjX<;T>vNv1d>?iM zY^;M%pNMEE;OGi^X)#jW?dI>LnVjcsd6tQZF%hxYQPztbn6`5!-kxX}XJm$c?e&<7 z)K4~mBnrOpbwX=VY6nf>@O2Rao^oNNKkd0CN{@_4cVo)F5t)Hj${Tz39hI7um`dT; z@{5#^`(}gTaU#I2vs6wAi(zfngxu!@n9%`OEP@~LCwN|$@FN~#o2J7eR>-CnROjmj zE6~oH5Af8;n|mN}SsH%(HAm2KW=-n#oeV+gar7VR9b8BxOYKT!DLU&xu8DWQ zH0z^siT|>;|Kg>VGkk|wp>}C#_D}Yaiz_Qbva%YBR$A|+etZARH}pYxL;_F#gzXev z4thpr+21+^>X?IrC4}g{?b7QE!*I(8EZ-?OK0I8!PLXN*EFD5*A0kJwM!{R^NU zsDuuVVE5RZY4W)eLA$IzVzYo)d-%;cSv5m_w z4!yB!Hbp67b&MJPMP3tabxMK5$pkSYZXqCH!OQ9U!i#E#P9T)fJE~+OiDpiPs6$Mr zj(p9&lCMHKJ}J9tjyo56%w>?(sJN_sj)G=Op`hv{Ne$M%dDy`0w5{CAJA|-0UE(-} zm#ZIIf;WBvYP2K*Dpk-5t;2KFzr41&#gZPj@F)jM-glvI<><~!e+fkE3JF{xeBpwD@pvg7*c|=k-bo3NZ~% z$svV0z5hz{a&Xi0(|y4gqacN{qy~QD95tFMK!0B{`xaVg7au{iTLc-pM_6>}KIXpC_sX-ySvGk@(H85e0!XTX6 z2rsH^y|$3X9I0p{^M^;Chw{H2NE6;FAhXZ&lRm=((0+Df$D%3Q$S&BTJjIF5`m#C43=8=HrVrThSvx%e3h zpZ_=7pqA3bXHPPLRa!2=m_q4ZprrD{^Zp;94qbDxFyvGLQ!uC7c_8c0qsCP~6cR_f z-H%4L_yI4@H3DwQdGX7_Xa`UY>DJlnQbTfkUtmlMB-i@&0k({3#0KgX!8xXr@GUe^ z4;bSK40=FadVu{~gO~D$9$)CyIZldwW&C-x&Kgviwd7gWqg%r#f8 z%WXR!!{h|zZ=Q+8@<#by^5`1VDpUOEjkH(ajl2!Lp^u>S51ox5-=e+Dyt%%8O$aj7=5y+FTlrh{CPPE_ zEpU1~azbJ~0K-xsb+^_Hw3;IRvufJ?V5_JQ*c*zeNJI}?dVXeXfkZrqvA)*8!|JK! zD}lZ?bm=*Irddt%UO8^gs4vsVj8h>pcqAl8M>Vv2YYPHm#SZ?kz^$z8>3-$J8P_OL z{^hEklmyIF8MraH&CNQ!SjCQA)qxsa)R@q?5Dfu4_CENfrH$O2OS^gOt@nhiSF|1< z%tI}uLCR5C0g-7-3qyVZ(@YUGQL6X*z#Lu@F`MJgJP*b{0WkXEhzf{&G%w{LyGO8} z9Mp>me}sK5zd;C(y_rY-t>-IcEK<~sks6e?K{v1Ff@DeJce%$_tPoi?C{N z5d}LOVM4)cu(p$M%kCW0c+GYBJuYpBKZ&;TLVa7@&+aV-xbD~k8nfbiku%H(`E$(E z*I`GX!LQ?uCtj$q7#3&Wau!i-*(YX0rE)_IcwyO8%5D??nWHr>Gyo=WHt@O|Kf^~T zINYKxKh#O{vn4m`yMukwulM3tq%qZ1RmsX90E{Px!NALd3Rai><=Nmq2*)z=>xwb0 z`UjX-f8d~hTZzwE$SF%lS;Hl;dR1V2s#<|yc4!b!sn|&4m_)+z8zi#3b_+i|TNJF& zyGv;_vaA@J1#c0wv~;V$A%SNR72-itQ2o@W8=i7Sn4>`&8AYw4Kw3EtAD8w{bU%cM zU2zNWFkM$@U`28H3~n++M<5bycE1Uz^ija~gUCa4?PlOJCGA6Jlc#2sz*2eSNpAn$ zJ@Pp1X0aCb+h6~%1p##m!drx$K{fJcj#~tixK2XUN(`U;8w6*GC(uN;qQ!O|+^a}N zDU@2gn7UOtoPTEX?E%*B+%>LK085*m$fq0ow_Z&A_Y2IQ<{_PHReu<6;!iPEXrBCI zCyPZHYB~kFM;N|<8L>a-B)K--f3xW@&tp?(@v9KeJ`gUW{r%Ib5( zOFZOFg*sWEi61*g)cqFvJ%`*&mu^#?e0&++^Zuw2h>yuhOs=N^%U)bo{E*vUYk@B& zroA93b(DICB|=bW+9a7#DYQ50ord?`P?dGdgZ23lKh)C zqKF4)J8)D>Ky?C6-Lp1xv7WY^`hA{qWaXuLjA0_Fp`)=sS0<@062%|6$@FG=gZzev z2;gd?(29$Tvn9A|SZpr$n84c35DU+~2Af$qDohtuo^D3-pFcm#@f`8-@ts~>1%;}a zRMs1TeUOhtT6oa^*}{?pD6LaJ{Ylyrxc|b~PW`Mu3?DG16zk}vCK}3y-=6kIjCJM0 z)S%M88r1{S0Y_bwe)9MCQei9KeDd%4F$SaqnCgTD0w)ZF&w+VikFcnCPcsC{t+{1J{VNKvZzp@#JmsAwMEzu!*Pg%o5 z4;*bdQ$Tfw%p7r}-$*}uWoY~;xgX)hd+HGQnILOntvzwnn`cJ>1auyhCig39zQ@Zp6*m1Y zsLPYpRb>`>2>$a1?evO`_~4Af_H2V61&wH=hTa%3BP%giu{ z9f=5V_Rf4kCU9MY4rS2)?>${C(5kra-&^?SS=EwGGFQ?G^z>`ILuBq&pBo*ZUu-p z+!|KWEK>zAi3JR4i3ZOvr-Hs4E5Cd}J1`Dj@7`y=BMOu>dO_d>=Z z3nV>rXN5M6*Zs5ATkVNZ&Vh>d<7+W(JV6kfd`yB`or~W=5^S$<^%GGJGY)_w&0nP$ z`@L^|D?$@Uz1+B)e1JoBRyQ3A9_2_@e73!YH^JCK{5*Jj*^09OEv;}{K@qfW~ z{5>3J;?cxs?Z8g`H=m27oMmN*9d{n;|GF(4hJ_<=CwW&S8l4k(E zYf{r&k&GoRtE(IX?rj!Tq6TIG+XW^Z^#7siEu-S-zAnx{AV3K2?kwmtLd(~x9XgIetTba>=)>?t8Kvxus)SJ!q9R!_J1|% ze>VfD8dk}jXcXILR|s|i2M=r9ixr0Gn$v4g#VfdB>CtVOvOjs#|2?WQrE|zVnZK6? zsEvePp8*I18z>?s)Fb70VU+!iiinL37Ak&GW1~~pdZ@)jN0iZ!vkDQiYN#m%q{KQ_ z{ZnOD5Mrq>oKukbjrU-M3irfJ(2U3X$|8O#DJ2yxs4Jo8HfmOvkBFff#=Gs##mA>Ib?Mpm9h+nCxIw|hxshEC;34Mw-1Nn$qIA~N`ogSb8)bJ z)BoM$6h2Kbo7OXy$EP6#F-sJED^1U)tpDDXDSWB~a<|)t~1QO4U~ES})Ieg9J`9v}?o9w?*y3SJa*yGX~CnJW11$8-xF?SCYT zSJlavH{7`_xVi43UOa~@^Iu>6Z;E*-!{;S5;lT|&5`k8#%lBsxSJ>}uNp#BdAC3l~ znL>Q00B>M4s5ujG6vsCFe>c)6ix0ts7rPi`bb_L%^q*>RLnzdt5J0F28y7c0)c8m@ znq)+5L(8XPPP{+CsyEAmm8P&A3w*&$*A19uh&_`PXillcGoo$rBdd;}htIrZq;Oj! zgw2x?8MM0|s{}07baQz#@2B?KQ(MBa>+M16upm0!QN19^*ro>uwDsB%^91cF8Eb!p z?UqRsVX6MTLbV2qK|*RW0Y#(L>T2BZqPoLlcOV8@Lhdbb!#V$H4Jkf9K}o&6f88&2 zUIGu3*g2jn#crSE{G+2wM5v9+u0?47h$kzRZ*8^6JAbl)`~%qfIDq!2ybbD&g*~z3 zZO*AJ>FO0gl+I5kf9wetRdKn2Ogr3f^BIBsCbsR{zw@OdBhxonCo_|f#`or@kIN&Q zVpBw+M><~pUlxFOH`6s5G3C2oDx3CXz|xfYE2vX z%i=u#=mq+H_J&_TdGKZmr}!0GnbIpbo}O_T;=E>U2BTCLCkS(1lG)VaBIH~3gN~MC zIT&`m^KG%&h!NA1Gqp`eEyBGBb40cc7oP4T)|{xU^Ipc83K;gBshrCzHRZ|dW7sWU zwXJsqCg-;;0uUUJ$~x1%D2_$$w#-}YxrgG$hpJ^2>muBr52~VP;0fNY$mxnSAvCML zP4Mp@b88b6E8d2mTlufu8GSwn4s6H-244QuO)$E(sgMr7#a2M?I%E;Q)}*W5cX>{T zP~Bg@%&=wWV9C~E3cnZmFJth}Pz;G{mNF?o8j<~y;=f#Y=8%tL#ygs|ClQ*#ywaBT) z(imYQlH0?Cl9Z;8#qDm=xK-)xM5{ggOz3Ih@smg_~_O=+&rGtPt zF=%^%h7SvBF@pOssEco<=j{u@qBW}n`mpX%Ij;nHqF!9M)dZ4Cn$VUQ(APN8fX?Yq zj&d>n-A4YrIR~mWZh+`WZ)EuqM#U;^YTaJr{vb|MvdjLRd|gbsZ-0iCv!^$x*G1za zD>WoC$yhApuh;_@9gsg-zZu(1CSivDC|LpzM(=*fn7 z)JF6d@L}SU)irSo0sL*0Afj#{CU*~_T`{?kzq7v#16FkY6wjNd=PN9Cgb?cAVwwHr zY;7=b_~3^m-4b4m;jcrH_mx?b@%wYyJR5b~&-V50%E={G;UZ?hEp1tb9dAlPEEH zJM)MB3>We=hY8fm(7AD7y`9qjh~w{$kd3%8gVnRd>tq2pr}s51NUb(kd5zygMh>Ar z+xKQ9Gfb9be>7*E_MeGlO!Ly3;X_I*&4T;bqm%PZ*%w%7& zHj=(o3-3GS^y0*bs)<8st91$9iqA@y#8r{kkmmfgdA@VCFQuCCsr6nC!Sb zQR#UH#rZMr!VXH<;*`zfN!;4;w4Y9Esyo3j2r={F$cjmu+3#ClZ6iq~F(DkNDNY4Z z9}LuRwios#cWT5+QEaqZ!ocLbHN!T^l?#}$EooF{Cq4G`d|$KJt;dAh>Vgmp`qHOt z?Rhv(R)CVF@$}0<-5v8!3E8%w86&}75`t+&kP;eHrLjppY>N@#O zcaS274t#6!n441{H3#SxncpBxaFs}?2zhR_32R0ZsJYq-WWFbAF`K(p2j z;`2Cj-Pi1{Ww^m&L;QJ4N&u$y(*bwLvRZlN^5*s`A&uDVpC{_ zzo#b1Og$5Kd7Gx2?Y)j~O+$c6-N3y&>js7kEOUQgqX%qm#*AYnhyri-CMi-3FG~5- z!PCtZY5c)aN>@4YWj~tkCrU9C!0-R_@KDO1T}aOj6FU%zMPTey-Rbx z5#SWz3wieQ58m{J@bX=`*o;Kt5Q)|V))$k_U`D=4&a5xc9LZGC^U6@Go)6q{=G3z- zZl-3l05X+2P683%}1e6ks5vNGaKC4U4>G4 z^`v5<61Jp9_Pk!$F;^vfU|D+~+=Te((i3_c)>c|NTj&S2KCB_YQrHH5@to6&rlu&2 zJK(p$nq=%SL>d%Sb6`vl5^xN^PN{bo;7S~GC{fU+h}tLZ3MLO#YR?5wrmU?1{4R%= zM5x6L(c(lA5k;XqXXnTG4thZN{ZlXBBav;8R2tTr#gLE~u;Xu`)EY=wLw zXOR>7VGgaiJTBKFYBiZfi=v4vA-kBv-H;C7=)gUVys~gw+Et20Q=H4r+7I4C785Zt zD%!kg09AL+?H%y?qm*rb7WfEg5wf+D__^kc_KGs#YOD4zre@gb^+xY<+8c-TWHLJ7 z_&G*x20JZOhYV38hSNxpnqoPaWCj^YJa|$_14WBQ(_He#$;0*BZ zYl={-juUIs(;aU~L>6mxj;E|W((pw4YZ+GNnoc`h{$;G=7A8TG&1zt2b%f*aAOi!M z2sa}7jd}!2&q?kw!G;H-mHHVA>CIkF(J$}`vJ{)QmSRsErX2Q}AR!8YdQ8Uw1aF!V z*1R$PkjCkK^-sZ7_&t@v=~+r$s$aN|tgba|h(Ehsv6eM^tD>(10c){SkaJXSFa#mW zebVy`2sDy!jGPd;9Oia0Zc)^2HHq7YzM!Fe^3UH33OWMzO2T85KShCMAx{0|pqw4C zsfeCuNdf9fRAGZ{xv)HEC}z%ld1V!!K*iTsVmMKn_5zm`nf&x3asL#fyX3mUILlcr zsoXQPWNV5-+1ch0$FEx!{mogTn=cog1D)?AyuJwN=por}5g$VLZMCCRpBqpE>QPoK zA2MkU*}PWfxum%bWyb#&4SIot;o-A=rb2qWow)(RBb6jbqESBvGJmcwC5{=dd^S%; zpw4Y)I%G)JA9kJ>op=KHR0`#pS-*DvPo0*^2}iuljtNUU4mT@qC48Gz>g;{@qjj%X zEE^}Xo8ZQlFTF8qa3qel8Pu}kB@FhwWRd89af9~&FA2SW$rbXPUCFQzw)HCK4#TLf z6bEZt_djF!bsST;NSS)O${h`U*fx>yo-bswPrjt`2cFl%amVy^2^+$qQ>+Jg!|oL#HSxkU^~-fgxcQB zb8V^+Ru5OPs{0Md8bYfL(Q?dt@QaL0WjEi#fbOfMXx|C2hLE$SygOs(^~vBoxEMsYQIw$y=0& zufc{&Iqs|~mcNZK<*%;9m0lu5X2mRa%JMtN%qvJAAHfX``XE_VWDw0sxYHojyS^!D zSNN_y=!Co!k^Tyl@H=mbJn_$o`SO%R7pZwgv2^h#z;_n6U zgtC)Ku$Pi}a?8``qq;!C5VxUVGP$)!oboH$fauKG?~ZG9Emr*-x^sl)*2J+Yer$MW z($g8+<#cSiZXizSk~LzG<3-R&U*H*o8$`I^FYbCL)*yL~$AP@l zAL5(-$dK%h*Ml`T3MY-W$Htj|4V_D=gY! zew1YtZCp_~ULD(#9tFq{a}e6gZt*q{zR^@$>mf(|s`*axQI8yIn_%`vD?_^JZuM56HAJ}X3$-lBt_FMBzu{B;2ZwsVV zod7*~wKJY{YBbbPZWAD(CCwEb60~0B;OQoj=JMwyIj6SJSGx{RTDx&#R25$d%l{Ce z!W~GDA_j7kc>nF=a~m7O*a>xpyyFZ99`>Y7N>VCL3ux<#6#jHr#Fr5_KO6hF46bMNbrL?>5)Jd#V!A0VUFOr5Q zPwSdthInlq+va={bH?GZD=*HW6-l9}D*2)gmkA&3pA4O7jSVeFA!M21&g5I!`HrdU z^;B3V67_p7UzQmV^?$Mw5E6#)ZE4X6+jJ1NU^g0sN3Cx3#{lxv+`tt5>S(>u#bA1q z(OzzA^EDH0(hrcd^7`QoqjI1BNRH zeF$6^2CKe`2wur@6&_~LZ+E!)71x_sA z*xXB<@Z=NNWcCcp*yRz-VT$4egt(Z*5zWVRn_)Rw55X8OXhgblwjfan%d6CO_pSPt zi-hpljmJDu_G}&q#hY#+mT+%|xwP1RqQV@&5ec!ha?=s z!U~7-q;{%HHmO7V4dx`k%r(goMrO(T3Wf=3rn=HBM5^G;rDcT9=Ofi_0_I`F<@2X( zCtbx0P&$opu0ztPUPWn>Iz9N!SHV_ZIP9l(#VgF@E4G%CJvzaZ$Ds!avEr3tlMdZD zR1wVsc@qQbsp6enz9ikcQopuZgddpyl8cV(d{qHnlVo8t9C-6ka;>-~8wRK=p4^Ac z!g#hS0{PT3czPt!{3;dfd40*YD0_62_RdA^0+O`M_J|z_Z9*FP1cTpRKoOm{@q4r7 zY;}p>^T(A~rdeL${Yt*`){oBxOWY+;?&5dMJtn0lmq9|q%4otPae6(RnFu~uCFeCo zE7UC9op%PsiZ+DCcW&ig{v7{b8X={WnWeL4! zpK%bYi$9SIRo$0+t*?{7fw$Cp9h=DjNgY)+Ri0*4t?V*ygM6+Lpss1L zV%~~0K>gCEXUE~JYVr*a(d3Np*@dL5s5?Mzirj%z0EV!)gbb<4^(uS%8YtAcd@=}! zLy~*-{~x&+c#JtO@B}enJT^i7Rqn~Pey>(kuL`FF3Gjz&)U&N|fyx}2Y(rA3vrjQoKuLWs z)ea^+;PQq%B3zzP#6loxaGP0!b+V~JQ*Z2rMRAV5*kYhpGiX7b=dp)in-ihw8^}jcW%#B zYZFWgibM!lF;0%X|B4lR%OYIj&Vsh$#fU3npFO=9-1IT(xFn$YWPFC!lcvX&{i1pb z_%&u-!K_(sHmDuZgmLBikk6HTc<7W#YQ>28MrTnYX=Qv3?L&UU+T3t7bE|5TKLR1x z>vX_h`q0nlMhv|Ec}OAhvsKtNWVRUFzqz8on}e$aj4AK(&nU#P8;^d@&}TNC0kn!D zP2L8?$8^f&jDDRvLk+A_a^XDUzpBc&go%6?LX1!iM8C+_Lcg{ zsWJ@>zd3D$mDlB^#?RG~4mD^+T%yh*EP=A$%3>C$pUv1|;~&jchPA6SW?3lC#rgG`>@aWw0*5N zV$jxro?T!0DhZ$s|2T$hvJl8OnODz_F9)ZXq-=L8ACV zIM;L%nA&*h8n!a&mC~3gT@+6cpv&7pC8ugWJC=DY=Di*U81!K0TEEE7N967D7Sq6ujmKG z@^Ji+OaG_Eca;-tUI2J$RCQH@v%Q{==Fz+VBkMjJ8dNas;>nBCDH%+`@H^(mfJ~t zvF^97BeMX(H-dhQqvE={r}lgfgc)rOcGAjTKZ@=O!x?`uxj=acinN4MkpGDZ_#R$Y-Ukf;Q&(7ce z_bq*<2FTI^#^3Fr>Ph3fhG;;O@Un8PvBs9`p4ePE+7l$;Zw>_#>SvO*uNw$uJdy(3 zWY*Y=94mPbTvz^t_W$tZSh)gK8As<&dN$auL^IT+g#r~!V18+uw^^@3mnT?0-oj%M z(d@kQTt-w-KdE2L*Wdnp&RQetF$<)JxSM|6DOPLK#DfWLmsd!|a*(dkXa$dAXH$^v zp>B!Y$(bO@Cq9~IW(Y9omf_rI$DR%@jGj7d`EnKA*X<6F4Z!r<^>|5 zZU8h9johbh2g$0yUX@RlaI=e35SL%ko;fH=p%TJ<`q`C6YI7b5eudxr`N(Yup4Wki z=d$Z-<2rf6KiFn694bYuSXo^i1mUbIHy8Kq<>Y+$)`0eZ2)`ca7*v97R4=koE`d@} zjM;ifbSfViBD?@i^%;Ta?6FWW4n|nR`pOeEU3#93_))p4{Pn7h6tXv{Mf7&`#T1n_ zp6NW4!fp_aH|L23zV)%7^1g1Q%i6#!GjjxX^pjJYIwfcLu}BNWA0*VHv=&qGyXoR2 zGe4qwJ}Ww>$`igJ_6a=U-*FQXEHk#5r0pjU^W>ZwJkh?9{klqR>w4$Y<{Pral zST7A)JH$n=7p!GPNp~8ga?lVT)d5=vqU1 zLpG#AX+eM>@W*_F=|Xhj&d$l(^izjT!qX9hb>AZKJsGb^CO!ls?G-)^ilzE{ea*ib zub@d;<%RDi>P287hOcEPYk5F``cs2cf-@Ix|Lu7T$O#s%6GY!Ijl~=BhcbsRhd#Z^ ziSe_X8Lt%D_wKia?7{K+(H+0Yq+)y48Z2n_84XV~6w1Qn(uBQLsX~n|wVd%OyHTtU z!Ly7B6Oh{?Vnb4o#OT6n&`L8dxCBVWr{c6Sp+5iG)4T1KQ zmca%b^nmpL2DE%dh)rh=E1RZqtUs#b<--4&@;+C8x=fdTZ@S|*e0)1}Kf$1>lP{wh z9bc8FRZX`5Ku5+b*e!HM)X(cigPILJuwdSRs+jJSMD?5-w8@8?>GDIeWAhAP0M%h~ zivM?W>@7f!J)(KmF3v7sk#8sT=^OdGAI@~s|47CNE7zhj6%qMnEPciWv8OyVyrL@z zyJ`t9zr_b0>T5CiCt*vfLM=XzjHj%+vOsX ztzZI8sGpp4yJHsU@LN1~R=7Rm;C>y# zSSn`)2v@2!ayvIpUuqc1VgwX`E(Ilo@H_c844y$Rl-ETam;ga)Ic;qcX0-7O-><@} zsxq14Io0x96O)4RH;io0W8y#uFP@gUD77M%Ic z*{rxx-;gQrS|&5pXK!1a=2yz5Du)yP@uBkrCS97#_B&9tpFluFoW>b7!TN__wfp&WhSIu|d%oSN zVpr#?W?V(l)P&^);L&n}A)v(nXFZ*PVzYMT*tIvBrycmmWVZUfd8Y;CWiUm+Xhl*E z=}rp0`x&G?BR@gk6Ieg!oN8qgrz+IFV-W9+yn`a#S)7iN408U8`r91B%>?^hg^^=0J0BQ%^WS0)>H16pX@tulCf(ia`@EpP zI%wjA2Q1c=!b|6$8${GIoZe#}^cqbn@vr^lz1sXPcvX818VqN{=30yFqAq^ymaaSK zaTFc(?6hL@k{cfIB<;dV@pt}6(+J|)S0@1#WQq>|YMRoG){>k_FK3d}={f(Gjc(bZuX zF-0rg+6yk7wWhDkOb5T4_#VOH+)|&&lRF4zS{`1991qRRQGlH1trn>1c!n>$Whj%& zsharcilgcX)jt;sP(A&Wp1OgfP8lga*{-EsAwj{fPlw01{r_PQPTzgw#>}gx#Vp?w zLUJX*qU~>LVyQd_)s9y~ZMEp8~8QG&c=5T z|J>*Vq>aM<_HQz*DPOEpDYdqTvk9#kdc_#$gUo{^NWYuQ)`?0Hv9dlNEqADrhx4Vw zQQ))+@xObWh0pKVr@$g>DBNg<_9*!W0v$dtvtx*sQ@|4qeN2LJ)RyX*nPXhl@Pw_O zG=rCsnL|@4*EcAwgDEC3!%-OhIE{Srr${y#pWHi>4|R5e!QE5}j!fOX>HR(~`6bhj z#>(4U*Cj!~U2fCvNnu30HpX4cFA~Cld!dLr3_>4NJN$Dm%s(Bf%$wnLY>Sk*OqM5g z{k?Ypb#`{H8>sySf`!afoIG>*x>u?x;q~#>$!srtFyU|`%4L}vj8HAP7kXebfX18I zm5wZJxgo2I?>%Hz^7=4Ebots5zF?AZL%n~8<6G#ld%hCw?Tgg9(U-1yzZK5-6l1b@ z;}LOq!?4WSo4ok;EQRPP-H-LspCW7Uay22AQI7?^U8MKu^RgTI`168s48t@SbZ*Ypb#Leqj;Xz7< zZfsfWyv!;|!Abi9v%Rl(oaIyGq_BnL8gs=<7?FP%s8D6DX7YZvcz2_CCeGTdm^;Wz3M$E?^7$acf;19)iLd)0pOqOg=D-;{9(y^(6+Ds~pl-#21%1##$ zF%@clt+m3 zU9^&iMJ7ke6tMu!RZC<-^sosip+_d|wrcR$$dG*v%d{eNVdpwp(4haji?DQxNxA zS_sgKvo87Bi9M{|45#u{{xdrn;AgD&R1cLnLV-cRb?*)-ek$adoR{U;XTvrTVvB#& zs=%_XLxUyvo$yRLyuN%$&RY;rxs$?b^>Qb80-}951U0%%L-6v`_1PlTU(*;quv{84laNFG$miqa^{v^JP6+pLiCN zA)t}wT!Abo5;#i;sGh>|1w+s-YVZ}zy;80f+5ngF|!?#;MCSYNBwepyON4z%WM z&}+HvQnCaVDa21Oe-{sXT}@7M8{WXvs;yVf4KIP<>&xICz?B}h+v{dgH^+W20zU`M zf;|(+uxwp~{jMya08V^n3@8nS%4E!#vCZqswQq!MgtRFG&T7u#K~iM5ahQ$!Kbix@ z{<^)xPs0tEF5%Pc>0di$f}CVBW@`+#HJ?U-n>?F)kk#t%VVn)T+0 zGMY($>eX<0p_X*|G{%qfQ|`?2sIT*JW2tVc81fQdd@qu7YL--YYdYI0t&1o~M>VgT zSSmA~B)lLsD9X#?H;QZ`e-Kq2<#Qc5%F#5o$A+kn^=ZgYlq;6{&NPRh-)ma&I(%~x zB|1Hj#rL?9k`kW~eT?Ih`iT@yv9^le9E8Zec4Xs53)w*m$iFFQXjk!=eLqLNL;xyQ zW5AT3Qg#HMPjFrp9zM3NLaUju+<7vGzpZ@&hU3H_y{3!r&aww4ZTC0KNq{kb8OzG* z*$o{Zrvl>x!TTM_aJRUWr(2`ORE6q+I&@y`>~F_vy|iGA-=qEHDJ2Cl;&nuA{YorD+*VEe(jK@AFi5m>b>jr5lrNs8#ntU4+w|oeqL8HM ztZNfS5;dk6-i^_qIW7Pdr7#g14P-PmC2#pERubUOV7%dFQ~2-j}I% zP^00SjNk8T)Tu;lQj$)#L%rT)fAj%)eVKx)s@SHJiq@6~zeRVTpvobXQ+7%o7WNL{ zc}YH}IE0PtinK)qiSO)WnuFtgu+bA=4!~Ne_4AEDEVmlE!XkX_$f+kEuY!9Bl zw_$nRUc#J1)82!%D9QJcv_P{dxFfa*jA(8kZ2jpgu*&Y_TliSEQhf#QSG6718Q z;haACf35R1G(hV-v6r@C_f6ViF_bZcq!tcswlmVwvaEV+0pyq&DfY{vaqtJ519SiIc;4KpF`%Gy3x@K4vfA3UugH}e|DWZ93s5LSLWy-NjX7YseTr8ZH zrS}IhB}!IYtPEn+TW>$j+Zo(ygR4^v9jzovQ|7qn7R5p{;@jI$^sihyqJl`QL$#24 zlQ#mqy@Qj%0h;kA@KX|BJm2P83eaVFKrPRBwTzqzZjqvl0PzZTR9!6%-O0J{3bR}CS9@}ck{lRZx}$kYlC zxG)wHvCwGYMZp~eRFvqwi%f9R%AWC!63d+O0JuYRJT0jnTDXm~OlR`B>WaLF;uEEq z&2v1r3g#HOaw!D;pR2g;9V`5!P9JzRAK~LvA8t;(SHJqekb!)|cB3EAP5I2AU^4So zZL>7HRUEjcBl+DX_#8ScK1#FUtPOFQqa@CT^yj)yqfLPeU5E4EyVF#FZbun+;HqPQ z5cf;Q+Vz|^yH5c3AC!E0+hM!At~2K@fa&zUpTu&@A3^zgSR=AxZhH42F4t6$s}IR^ z5U3?Q3s0?7K(+C{8Vy4-`Nq2}s(JIH-FT!=H(In9I5;`i{`--JHgPLL9_|!0ZTf1K zo0XIM${dwQdGNR`R7X=Asw#hY*bG%33^(bx|Di$X>nclmUW zW+Uv@x;f5dJG+7zbE1!CzBIGY1B+cd+#O09?QCB#> z+3jD*_3??v{)B(rzL~fh1M>KvP#4b6)hSNYwMbQpJkpYblKJs1-qx!UqnUqw^je4y z$Zt^*iF+FgL{0pbxc2K5rx?_d=)sj$-OK7zK*|fcR4&n;b#~ZvOswt^CS?5}Y-)f2 zobJ+`NLnZU^VayyMW75ERbr=U@_Io8pLiG zsUjREebsHV2p)%_fyhYi-lA=jf1^Yhw#=h~4sf4swMWG|0leWj-(v;Gp=Y?ZD)ONU7XT7Bp4^d6ZukayRH0lPp2W zyW%hNn_l2U`NOW4~Y29Yi z=~SIvzO*rR)ABv&msL86C@Et^M1O4g`5VC%TR<8j`*)>XMF2ivBMkaroRGFaN4-^N zFfo|IXu@duZ?)DoYM|2_yPIt_@s}0NwUC<5$qER0invNOmSbwDyT7fc%GAt3Tv0y( zIQ?1m;&C|*hi8Q;h|Eyky&^=9@{EYd2jVn4$z{EndDJmt}o(XB6-bA7##c4IZtB5{Mubrf#j<1)Jkuj6z#I4`pu_)j_J!H zJ*-zeqd5?v!iX2$U)cdo_407jENXJ`Xq7^atv-QH<3#(%7+;UB8~TJ;c&D zg$Fc*%%Fcim_Z32FSn+E{X{MtNxZ(=&Cjovd-9(0^6>etVcI2VVs!k@ySV=QMq*%?vu8-?{hAC__DT}!No9s*NvPN3JnpL2q2?D+os+K^C{+Etx43V5KZPSJ#{zND{c^dw$Y znn)86rust;b6j{Ik_-H`tC!|CJ{uRwk{gSWwUx5=NY2`IWj%}%^=7xbnga;Di)V1n ztI6JsAfZ0IsK}L~`@lXcLi}%&A}3ueC<_}^`5?UQi*PFf351=TD++pH2Za-dmqeryxYIZk7i5o>aTR#L%9rdr8Y{J8cJ8ahFFVLtod<_JNui(&H?|!2& z=&XzgCW7%!3T5nWi&)4}yd44^&3^YwUZXX#$0z52OQ44s7U&|1?esZacm-!%(#46Sfj7Ht+xIZ&&OiQ($CHPWQ;6wLBEd4Ll7@YX z1%E`?hN3N*{ves8H zcLofYgKc?XO&$($Xp63Px_UKHI+iK+joJB}I%%WQi&|$>^Y(JMX&#R+2;db&Csv*+ zz_dN?>@UFarOd&iHz@49su(LDNv$@n1HHn)e zSF*kmZR-s8eQyEz0XFOcErDXoLl6AbXO=+Qh9}Znzy9=oZR@AUe5}@@+7#U5$Tm7 zxBCE1u(J8zlfiSp4}$Hs%WQ%GynTLPncL8gSNouMLun0XcJ+^lWG=SdBRBi{`=hC@ z?|ZEJ>~^4NfUGWGxODF==eupK2Vy<+L?7sW_S-r&1RzYIKR=_0z_*nTgegQmVG5uZ zF+!BjoA(wA14h!70rpo5fAe2DLV^prd9my{V5$%mki(-Xg1i_fB1mY5kB1PUlg?KbGQr5zW<_X`IgYT#(NyU0G3)2;+6rA8vcy z^YubzyldT4zTidw2g4M|`UIdXNJR zH+VjEs%ktp1h?t&K3=}@F(@g%L~|t)N^r@!4RaqzAYQ;`4U6MTRiAX41T#ro0Sly_3oy)Mx(~}?$)_R zD*zs`Jf^D$nHk2s?G;3W7Ru;&sUY(s^xJYxJ0^ygzxKP|p#Cm^je3m2OZ?qWI66OD zEqX(67a-R2em4Vbp%Jzt@bzL67-RZ0qzcFo@a<&=A%BqgM!Dkb@fSEVs#?-L>zj$u zg+?6?_?s2iTG6My63fRucpwo^B3d)WCUMn1+-DlAd;HCH6!|3*S#VSM`oo&Q#$tfY zS$g^nyL(l4Ybr`7b0fed4l>V?M=9gRQeD(kb9V0Z==AQ&RcaFzeltX)@yqj_w0U2E z>vz_&08E()YJr~d#Ux$W)8N&E@PLf8_!o6g&{Mo8ypLvv5gx%MnvU zXE@{6IzpbJ!}=OVNYvQu2rbs;v?~ZISVdjH>(N(2M7Iy%<8kN)cz%b|sf4p0jOJq; zOv3Emp&PfY4{1jUB zTmD>q)IN~v$!i}iAEx&O3=5^IP&l9zK*8t3lf@zRzcTFFf=@tg&LFTopwUf$9IZh9 z&KGZykM7hnWx(NgOyAP9?)3(&Y^F@1u)mR_2N}JRr@z{PDI~-#T-WY(rP)aOh5R@Db ztD_j=B`i3|eVeVrcbY))dh9fWwOAULaQQCLq{|x_7A9-|Dga%f+Zk1Tu6QYRDF8NM zr&_OMtjQxhoA20FlyONLrr2i3!HQ{bJ8b>CGx{P*);`QvB5e>B39Jse;nKf!i>_XQ z&2X8ffMSyWwtn$p%ZlCr7)%l}ieM7s)?+CRmHE1!;_|%?QY02^J zd<^JnXRs}Dr=8Pzs3v2UTrmPWWXp@tCOaCBl!@(pg6lm1{HXi-l|_n-<8xnUCX?iQ z&_77`peNSw>;sVGxo{}0aXTt`O8@>bB-p=i=0gMOS8NCH+vCK{sYP+`?V)OklWV9Yd4YiKdhBZ;}ilqaI|{CC}Jca?`7LJlAKY z7Tltmz$NgK@}wxq)VOogi)LG92Cj}nhA}bn)YA?BR@{QJ(q)N8$jA`=t(C!bFr)^Co-Sf1g zS#siw#Vi<2(X|y7Cqm(Ar`A$agLVRfM^0;RR9n?dlQt^~GpMhAG%&f#lsZf8xBOw5 z$2r1CkG{8J|L5iPmG}MPfp93%S-m_|F+D#|7^0ECT@fz+{ofyR{e4tUM2N{vpKm91 za_p@{f0CxoIcqeotUw=*38+3hS9&bu|HN!O`JHEiOxPuWSJT&n7e@TKXcWOh0;r$t zh~M0byY)HXavOlFiLMMD{zss`bE}c@(SweeN(DA3yx6jd^T3Fv9Q8v)28R_TO^-wC zld|c6f*KwU@As1>&3O?k*rW<|w?bsk!3wlirhEmc!ov^LeK!s>LNs&#n#n5X1}9?+ zA?GO(IAhBOW^=oBcTfZhXWSyI zxY-Ey&Z#ghpb+?_8TF0!zSNK3vTV^#%S?1upTwkPMBi!)lMm)ih9}gjyhQ#l3m}f+ z|Doxc0_%*HZi6FV#{{m9-d9{*qHcN4Q}2pSsmJh=h5PPo9In@toW237T0Yw@UlW*L==ka%|< z&rewztNmf8ztYjGtv|6nLv1gO6%r-Vz(>3spvE_(M-JyTAtxDxg3a>r;$w()R z24k)t?|1j1bvt~GREGj*5P{X#EA-rqk5D7E+; z(}UOwDwD4&V6H=lzF3D{_%+vL{?Lc_LtHT9f{Davf48^Chi^hgsJU;02=Df<<}wBC z>Q$q)#4}ouz9Dl!a@wu+tiSt2qVTwbF&cjcRHWeA9guDCf3~z#slwzZjW5n{nd&&k z+bb=#v*;8KMeGxK=9`GpR?6{LlJD~U%e;FV#F8f)jCRTcD79@Op`I@9dC(oEZ zR(9x#sZ96sl!I`6*hoGOxBH2~6X-oG%nxO}w_IF+b5j_=Gmx%|h~CY$3-`LmD7ozi zJBWpipH3I+p>|+VL+#CzRtDY$V{tVzB4xmD?+v%Bb#|-W`HR(Tg}N48Mi%0<<0zqS z2Bm?$;7PfnJ-d{3P1)yUMyf+Tu``cEfwHH5nTkw1)Od!Aeq-IEFcP{GYQ;X8k|o7y zytq=sbYOPIBBGtkrE?-RGREneo}oN_I25*X9$^F-o8blen%^t_DTp6H#Qw;Sr1i^3 z0(yEvHU=0#0gjz zf=-wSmIXy2@1IwlWv3ba_;`BRw9o^zfa{3;gM-p=YGN%|ulLt`(Gkm@OJfN|y}K+f zr-M&v_yiJjiltPr4`Nl~2VwAGzjZ*m4(?crZJ%>=N;l`@$J(v) zE`lO^_YI^`90=bOU9Q6}Eap6Dj>DK-=Bl9_x8@;hnz_8{U{h_sUorubl7{756PX__;ac)EySn_1`i_(HS?o*Y zx9}?npaPV~#fToxkr~`CT2AZ$Sf%r4+Ub$|MLrG9wIy>hDo%xHPfb=l_Cl8Rlv%RzkXKpm7Ozd{5#HA@c+(kmCV4B zEy{8^U~xvYA@~X6yIneUskoJuj`?zc=8o(8uP|&5*y@-WYY|Kt;7tw^+m`TugX>r5 zlsvdS_T%{XrSR8hq+(W|&0qPq*D+IC)U04MRM84UH{a#svg|+@lOq`MVQ8A6=c@01 zpKh03+5?#6uCq#)x*oV^rT4;H?vgR47Il18b47>BB_m>wT=nb_Zlt z^^G?IM4_bu>0H%a8*o|i=)$3#O~d?d1CH7DtqHF~!Dqt9I*g|h=cU90wC z7j5^+;Tp!cZQ@~-mDKIjVHn5a_0u-!>!Fz1^4tWnD$`E(phbgN47}euKK88hL z>XiX>T7@As50%(=tmMY!ARo~ncvei~f7EmgwU`xO zN#FO&b1A?5oa_t|EA&FkU95ypXFc}EdAeMGkzBRk?l(lYkxpka%&+K$fn_39Ct;F= zO|g_=vi0}8m+%TT@f?uZv1vCKkZ1@l6q<4A8f_ICL+w>)we^U({T(B_@l zqxw#D_`*dwb&EhdXLJb7$XmsU%q|$n-~9=~^tv3ZtR@5arE}Wl=4|rv zzn`eQ+~yhin8hZ4?8YhNbp<8dvQksWXOM55a$N$nAVf1@Q2knA6dO?aP+?ODl;n7U z#(If~ZTSdYXS-7d$3_9=d1*^I54kKHG~8wL2@x@Dm_%$Ou7@UcgQQnD1t%wjs&g#9 z=rhSxpVKGI>=|>!q{Y~$xV5Yh_GH5f-s)<5t@naU>H%WC6uQW1nCQ6eFI56S5G%Qz z_?$BBJRSR21TnGRhtqtflJD+t942a@QAQ=B$)}O4;@e8dwJ)P0-G_b{?0Lj-JKz>kr*%wJ*5dQOS z^}QQKU;?-d9y+Tn?QSQ#_V2GYu(&%}{I^>q_&Fi)?O!Uui2CrjpXGKOioxeGDZ@sD z412J$+MK3QsaxYUh62+Lih>I0z)+Cw9!ageILLdS??5EU{}-^mg#`&vK~@_48jFCi zi3z7KNc;KQJF!sInixj)d_88{7k8@sNmQ{8!8%7-&Xi(H7s(th_hpBjD}gJxjL=l& zWXmFm(kR|S_l2M+1TOW=a1L(>UruI1`~7h^cTyfJ_h{CY%#6({MzYCT@()J)t``-7 zSGR4wYEBI_lHP>zRBX0G*%c6S{tl%rH>9(Ktm>;6fqz`K9n0*@9Ih1o3Bh83*Yxxw zx!k4lbkAIjt_YRXNG!g}Vt>~S(v{L%{ z0K|T_L~Y>3`2pR9+a028yof&%!5G7EVCOQTGJx!jfYgey(d>rAfpy+hdIe7|rcMI1 zB5;AR>5pS)kVL!ZTBJ`ks4)GuFlMVmBjttQQsREfQ& zGnPz6EnfvAp`nqkaB5hYVi)#V$Ce@9>xIeKXf+G#?idT%mMILW(81bcx#ny1ht&ULX zx9g9}`$BhR-MvR~Em);N|CPrF0FDjp)~Kz%{z)3Q*E0!Oj=X54m%~At9{>o4syom= z7q`Z(8YmZLik)>K)(co7Pc;#T25*44KT?Fz60f?c;dP5}B4g`Gb(1FqKbd3(Exj2J z5BW338sRZ&5rY#}rJahS`<>&kf_39{&^+pKFQfH)3S+iOm2yH9HEp=`*ORT2sA6G! zQhEGMIiO5C8sTpBDM-OonQpeQO27DOfgQW%c)i!|?oZG2Z?_U?dfF_%8~A>C)#1;H z5*71kClobuBlCLNR2?)=*HXl_%rF~3u#pf`3e@~i~(Q)f+Kc4Pjs&2K$wSuA*z4CTy^ zt{qe%=*XB9)VCi_$?33$B|WJem|0?{f#Q33lYNISd|G}nowPZH46Ha#awu|GRxt9O znqrtq)#g6j*ZFG0-BqceZ60#N>9(O!IcMIqTFY@>6XedmKFHoU2MJ6=K2X7TJBJ5v zwajWT^BwgIqkgnB@Nx974&AOc?B1O&)E87t?PoHRAKQLYH3tf;iU25rwT&3h|2~zb zmh}!C8GjIHOB#6Zf0`eJxIy2@;>ATugoF>NyFUKLX5fR6s9=%fz9Ic$Ohg?W?6&~e zKmQ}xH}HONG|S!4Fb%;-17k~)4Z%Bxww_E|kBf&3ORDb64Z+p*iA{4^g)mE&nh6&P zCY~4L9W|v`7j-KlNW4&a)$0dAI4?Ll(!m;if%o2-!oi!6FN7c+JiU0lq$TZ8?LEVi zzlt9DBop#GWfdX1_1%wwd%=_Hi)IJ+S$%~=u+S}w1meG4aq1!casvM?G#lr<0?Vx@ zGwK)0$*#NR0It(|VYQr`CWSFS7G@Lp<=k@^R-^r7S^F5D(BaDYw_uynHQ;`A)b3)m zk@NQr?gGtsMf`Tc#5Q*){K0tMfRnl;4{;NvWjZTAxiO?+mj+-IuVD@6R2)^vPhFWB zj;D>%9q$3{+%by}f8H;YO3Dt|5mgL?97$#r_Bty;t9^B0oQ9yApD*Yt+jycZ+RdB{ zz3g<5h(8L&Qp6(6INqA7u#QJ4m4EdaV9DCaKpFTZx3n1Uo~f6smQ{{D2N~_phGPb2 z-W2ud4bhfZwe!_P_30F`C5#*98yDGU48XVxIY!m2e%iWfK>g^F)!zM<9ojC(3eN~F&8Fa|#pAC`5PVN=Ev z-03al{A|qdM9n*=#Bjf`x1TKin_GURy8c~RQhN7U!_uhmocn0?&@*A)g>2cHMWnl3 zE*AObw^^A883!XG1%o!V%`ut96`#tCVatL~V_dTA-Ll|h2D^#WZTm1o;v3yK#^JiO z$B+7N&xO)ZhtG3ojs7L-jGjZ#F4kZQi$Nj_YyFoRHoUdw9!dQZtFLBwVkmc>`2p39 zT&qS;F*1rlCFxX$Cet!48{X71s}DK0%4OqmZC-JUxq@<2%Is60DY83!k(NwC=+yEt zJwJjn*PpBz#mRJs8=WwCN&EUJSa*=pp4^z4=@pKVHaolO|$(_}?C!E#=s3T2|&JuHqbr)f2C>D^f$KrAV+ z1UNat(3LRrJRn&P(AmFb2^Io}FI4r*)wjmj5YI2Ibp^RQ+X z$J50xTDNHX>fk&=leGr$)jw+P|6r+C(#JV)nsddpq;DBZSNi?iUv0)9e(A#aa03@Z zrhecC0a86T>GgV=aSMd%C)fy^lFlzO)#kRCIhYolBlynJW#%Dsr_AcU_|4@LUJYY+ z_1~$j4I>g8-&GoVd|2qGu#N?(A8jjPR_1?t>a8@0Bn|ayaYfkqp#St8T7l7_s2I(PL*c7Tt30vscmduy`%Wjzq#V_zrhBV(b~Tp z7-n!gLq_6^Z_icutzHVG{Hn&`_^tQpP8kBJy=VGx<$!|JlY6PL%E@ypf{Yp81I@x> zzgURzwt<66V@THZ+ZRftx);Am4|1v3r{k*2k3lb2U)?>l@1-O2xx<)@&|UZOM3Jm}7Km zRQ;NoZ1(Ly0)kj!7^(0tK{?R%YkSb;qR)0r^Ov>g!&IA!bkQ$0D{c|#J3^=4O!iaI zbfXms=jnLnRy48cXd<_pm<&z0GW`nK9Dug(XPx3HN5cc*6tvfVoQbrg9tA?b2RU+D zs8K$uCf>vd5{62od(n+YialEwaoA!qW@PcaL4IB$p9MG|w)@OCerSCm_9Z0dOch3$ z2fF6K%+`2J*?3Wgpo@jJNyf=r+scGfI~iHg-(l|Adw(oOc1O6|w^pL8zZA0Ev(&QX zwcM3Ro8<(o^zE{EEfDt8k9KS6*@^G!lxbmfyxWX8UZGVWErkSC_$ljPfczN#x#?Oe z&^^J%uuzog?gCJj@T^VzGAskF2Xww^3cQxq5BrpuHn5xCnb8rs9>hJ<6_gE_oEDI` z1K%mMe!kYCZ%{=ZZB%_h`@9S5paMY0I5hIce$Y)e$!<}C=nhO9GJ5e_Wu2-A(5}v@% z55k6g^NkKrx10CQkQ}NksDuI-FFxr6mv73CS|-~ne^;cXq5=ljeI^wII_Bq56y&pn z3_Z-qE=r0nQQnzg9QVh%+syZkeST7Rb-hu&?N?zN89o5%p8EGM6~-kI%6qV>-?FT*^oiLAfqn_vO_YERYAN@-7e+C0UhA&UYe;q%3dC831$|__GUXK)G zN?hmDMGCRUr`mv}OUcpwhvlN+uP56OC+qs4p`rJ#e$Qd0hW)CCV+jgs#%G0>`F<>A zw}JPyV3FX`%f)s6-5k=tT=s-i#}Qnfdu(G_0x;t8c7L2g|5gjQ+@!q3eM%A6455x` zd|!Zv`;Sm-P)xevCV89D{jlb2y>_ZCZ;X+}w zeCML{Xfn3Q6l&nBt~Y~wL*16&)vB8t>2HG5OF0nf59D&MXa)@xXWk>l&!=HiD6S@2 zJMx8HfiEC$Z|@cZbGz#EySL+zG3K=A?!+)hMZkQD(D1~r_*V3bfH?=g$0op66Hg`} z=Sui-=WTin#WEnR+HbFSuc599P;ncqm?E(~K?twb2deGW@;aF**Dz@gb!iAbZA0nq zPag~)Z#>X=yepeBdF3RD$c=YOe93iG`ZnLK{9UK-XFStAC2v1kCI}{d$HVNJIcAh9 z>PB0XBMY6*6nA>zv?8*>FYg-n|n>1^4>8`4Q>LMhbNP=l!fhUfRueL|4KCYu>nrtF@`b43bRl@ zR5Tw*<&Z-R$if!BlwwMY*C*$Uwg&+Ac&wDRY-t~sk0bVGKsZeGp@uiU*^E=^o3C$p zm!rQE_l)fW`!tg7TU4>e`@>&9P}Sy1a^!DGZ2{JTN8(2)7^pQ zmd8`h8~;G}?%eIx^d_mb>LznKpI7?zg7xV|Fj3h3`a8*)?*>Gj{@)3e|Il(D`k zRbU^(sCqYN-Up=ey4(23At!SYrDJ3%aRTn#YbQhS6|NLTGh^6H-bx1}3lzN`SI5dc z0$_lSQ$JI9?H(<(Ll3s1)vSzaRE;}eLjU~O{vsZF6OWl1P*L!u%?LQ9>V?e$G$#uX zUl27t{t4X~TNX?7_se9m%Ow-Um?;cu#Q-87j*Y0L13$b=B5HpKuWCgOSso!;YhI08 zFdC86nC|$_Zfgk1ZdrGmw|GjxYqO!V#HzNtYYElVV7!`3 zJ|p}6ObR%!;QUy>;A*c1lxs>KUnM! zL-AUY>{;Wy!I-cH+evssok$GKXuptAX3dZ9G}^Q^?F+OQ?Y17f`I8 z4HG-Iac7uUpsmpZ%*5Odew(0Z!{@TF$u`!s_2pbuV)8=~C6Bt$0Yj(8P`X9~dC1cj z_Q^NRWlSQ2<=)6iJydyhN2szv>>=Z9ip3VhG(|B(szGF`f2E@z5T`s{2@g%hE1YU;XqpK> z7wk?<=_XI;B5}h>UI_&L4xgUX-3_C*IfO7WM;TfFg_Mr^fYH&x7 zeM+*E=$?gbQViM4w@?}gNkvF5b<`9$%n6oO7REr&vh2XP-YOsrOJ?jnPF{janG)yL zSt@;^bxx{15j&y!_C6C?RQ-1G#U+1_6+!P~9C~9U6=Sa_&h?e)`R1^4k=vWY23*7- zhSdMU-x(t08Rpx?7Krh&uRrXyO)k3^4Kina%xMnNdB1>EL$Gh3a-$8hl{}DqgV{K3Xl8jQqE(s{` zx%Je`>L6_qi2fe1{<1asa<_Upy#U!F0E}$-XB->BwgRTnz-&hRgv&|1fiIuL;r81I z+|)z%@Sb^RY<0JR0~_8q>$tCy#HX_ z13kDG&lsB@m)l@qHArQ0O$yeA+!Q%&8Vw$58l^f?GodOMaZ({2F!|-t&A@M|rwu>1 zhhtb}g`pQE7d+X7<`~B}(MASO%;xQ102t4S;B~3ZN6_)J5+{zh*8hS#2!)gQDE2qH zy%3X5^Shtiu0F}wdLn^RhB5j!Aq;=o!!!Z(0*`3Y2;EbJB&1)bXona4JNhNqxktY} zAjlP)`%!=&Vi+Ddo9so)BqQH;E4JQ9f_r-MG{mbGUFUP^=$GW2pE=$a5Ge!DQn3g; zRPtkS$Aq)4XOlLA5B3->Hr@Eu6XB<)lxr?4O_zK}WcYB zUn{CsWRex?fivJE^(Onh~NGqTyw31LKJeec3iR~`JB~Yr)%sXt34kr=?3FVg!y8K1bZ?d zmz2_aBsKS4e_iII?gdE$Ef29~2gwSA`5h>5Uc+J?^?)GdLhgMutAp8UF738s)O%?b zme7gXiYDxEAt;kBQLyp}VMrke5tJzDLT*&U z)X|G!yg&=m8=HrgDS4GE!5W&kYEGI4T6erm<3+_A%wjw)9jFsyQg5GJDQhL4!P z9o6z(vj_k4=PlgT>C{VZ>S5*%QIl^tyI-#Lrih7R2R~sQPIR(PdR*9;D3{5h{b8DZ z8D+4|cu^NOT}HeWoiSn&*H@M_3}AL_DAs`05_lom|7*U9|F{3%VL@EaZhlOeD%n-y z$;i>rCM9{}?F!QiM@uq=3e4=ZA`u*CZjSvWF6%3FzLVVk^A0Zpf|QLdRok|~3ITJ_ zf9lk@L$DE9On%ntb!90llq^-+{>AJG=SdTC|B1B|U-B|A!F+)?Q+FL4+BF62wR~)Y z4Z#+5b(D~^mS&!k;w#!$dl@Q1R-;H_QK?@Wy@K+6J64mf57`k|x6zPp%ee`}Pl17s}IWrh)iJ3&pe zQUkKo9S!JY*z{Bc@U?uRSg2aZ2yy#Cy=+;6HbiLSE?UHR;ioxa)+kCQo+)KuzBukSnqcN0Pl!Ob&`!eG9Xz1*O=DLQwLyORQ1+29yya(dLvVO*(jic@P$Tre{; z8<9KQqhxcO6h{`jBqJ51jytUMIMxscF)#yUOP)T?cEX|l@dbV-{~Jc}h%T)?#YjQ_ z#eJ}~Izv*QmW-TH?>V~3XvG?6n0W3#i7Cd_^y`O4gVer=PTQw;NUoec8VQ8SAK!P2 z$!*+*zfv-TD;siq)z;Azc`aWbwo$yglQsA6h-4;fU13$Lu;>u)~Pn^=t9lR930e$k8C84(K@xz z$1X{PGFWhd0eC& z8{18yh1MQfzbvEftHZ2E-QXbMAaiok2!kb_xC zQTlOlD0MWQ)1NVFgYpDWeC9G=y4p-+N2lXmtLf-uv=|~q)_S-`$E)%2XidtfXGLRR z=$ujvSmXqu4;96si~0&VN^7odhXmuqxL(7 za+A#1JD*15c*%^UG=P?PD7lkuZ5aOLIaAY9B`QI@16XmhSyMFdI2P^+BHd^*(ax<> zO9jh(@V}wM{q;z)V^TaO3x*5n%8mFy8YY9$T{3SU<5)?+$!W0S&`bnf^C)v3sf2x! zhJ2*nHOvbwa-=@1CZF47;U|ZMkKzXP;3VCu_TqW4*aY0T_ zA}WjesTM!b3)cTL!5{`mv`3g~)}@v^_W5Lktrc5ql;C{la>HBgE6suiKGea`x$?ME zq0HJ*Z57JLi9NMrZAX903aOqFz|fwRI*#e(PqhfNp^HkyUKc{U${C;k z`CAWJP1@X-Xx@7TZc+kEF5R)MO7=S$tOqLg&jwie6h!eVU#yD-9k=gr>^@n9kNYM2@b<2{gx&tzhDx?dwEjKL`XlhNI~OmF@6F1QyK^7M4z9L2XNto zNc@oaKzSvu&OiAzXQD|*LK5O{M^ZdRxsnQ1{LLM41LpFk(FxK#I=}lkFB&>1#EJD) zBol(-<8%Ruy7{Wh8GM&(N_aj2t@vRs+j*d{v1jnhqfs#L?KC$FU zCYjPz27l!nXsK3@&cSW%QX_>gE-zEKtqnR&5rL-f+1tLDL^l}=i|Znfv&hM8&d<%) zt}2r_N?oqE>n=n@IWekF>CK*#7w%aRx5Z>tMmyLTKaGWq z402YIY~z-$;cBy!;k<7}fXH)BmwZ5_>KLEjWHXhN+|7}c=QD?OyE(;ADZQ4N`TMBYb`R#<cunbB?9?mq?_`0XNUz z)vV*|7hs}P?^f>&$dp1+)Q7lSKJQurU`K z8bM}RGepbY#Io&uYe1Skj!RT(h3 zHLX|ou-l?^C7EcImUqO0YgzO0t_(|rtpyQ~yFNj_a58G{PjO4ws+k=|S;&~}mptUJ z&Du0|FLGTq;fyk*_ITXK3+B{M_mDf@UTKYzR44|O#D5}2UXzd=DDgc7e2M&Qofg*+ zU-xbYlAf!-qz}m(EVA82&PN5D`WLy7LAUefTjqETa8?rG8v#|Sz zwa5aaLUqzjGdi{AxBwyjuOW5C8^)gdg0_QAT1dE$#IMEMws!A_58%g>yOB@%T|gdR zXYxlqy3JZ?c@4c4;QInso!1z8I3`R1KCo|>8aeYgP1})*__zc|p~p+JW!Oe3f8XP= z?K0Z&bm~rhp}#~H&kE69jjh$l_WW#HJS}HSgSnXKuAI7zxgFs(4*l1=0Siq?+Mzk( z`~JM{o>=7U8J|~}EBhY~%OxlnUfqj%HmV!FViPGT3+FfyRI8)tRh<-3&|m^kc@>&z z9TU$U6KVutA>~_3L3~%FQ*w03){h4j(9LaYL!}v~GudlHs)HUb#9NQ8_h+S?RroBw z`(Jd8dX52*m-(=aU#|!O&d0K^DA6p;qCCA-JJ^B zXzj|u{>219Ofq>P#;IH4S-Kc|T9jyhF42g5p_#?{e1tD5@9dQt2ZVEt*>Ft_v*5&zl3Zv(2#BXtU8Y?`8bekNnp_LO&jJOo`N$89iC} zC9ciQUO8F#A#NOgFnsp5rwqqxTF6dnVKTW#SXuJgDRzv3%^ZGlfR~l_`tLda*YmE6 zY=^zivj39ge-3`siNkUME*%|h=EY&F;$q61|60Hy{cO=lmPOcJZOuQlV7WSMQ@zyF zcq3w_xKqChi;6+f%=n}4=C=W-h9o939!LI019#Pl)+hvncZ#3OA4S1@4~%5s+3mJT z+q~1Za@GXLl{+RJVqI>LhG4l6T{*pG#Hyu50CFcG(RRmOwwR&=4OMvO1I;3oQN}W0 zCLpWT=�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 bg1?qGymXmRYp`!_b>? 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%0Dek1 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 z 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 UA!c8H>i_@%07*qoM6N<$f|2}Ij{pDw diff --git a/doc/fluid/howto/optimization/timeline.jpeg b/doc/fluid/howto/optimization/timeline.jpeg deleted file mode 100644 index 38ec3f80c982857531f30a8bb0fa26ea5bf05385..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70606 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 GZUO)|OGNnq diff --git a/doc/fluid/howto/performance/error_clip.md b/doc/fluid/howto/performance/error_clip.md deleted file mode 100644 index 749cf7693..000000000 --- a/doc/fluid/howto/performance/error_clip.md +++ /dev/null @@ -1,92 +0,0 @@ -# Error Clip - -## Overview - -Error clip is widely used in model training to prevent gradient exploding. It takes some specific rules to adjust variables' gradients and prevent them from being too large. With it, values of a gradient will be checked before they are taken by the next `grad_op` and be shrunk if necessary. -## Usage - -Users are allowed to assign different error clip methods or attributes to different `Variable`s. Users can specify it as a parameter of `Variable`'s constructor: - -```python -var = framework.Variable(..., error_clip=myErrorClip, ...) -``` - -The default value of `error_clip` is `None`, which means no error clip is employed. When it's not `None`, it should take an object of `BaseErrorClipAttr`'s derived class. So far, `BaseErrorClipAttr` has only one derived class: `ErrorClipByValue`, whose constructor is: - -```python -ErrorClipByValue(max, min=None) -``` - -`max` and `min` represent the maximal and minimal clip threshold respectively. In backward pass, all values of `var`'s gradient greater than `max` or less than `min` will be clipped to `max` and `min` respectively. When the `min` is None, the minimal threshold will be assigned with `-max` automatically. - -So we can enable the error clip with threshold `[-5.0, 5.0]` for variable `var` by: - -```python -var = framework.Variable(..., error_clip=ErrorClipByValue(max=5.0), ...) -``` - -## Implementation - -The `BaseErrorClipAttr` and its derived class `ErrorClipByValue` are defined in *clip.py*. - -```python -class BaseErrorClipAttr(object): - def append_clip_op(self, block, grad_name): - raise NotImplementedError() - - -class ErrorClipByValue(BaseErrorClipAttr): - def __init__(self, max, min=None): - max = float(max) - if min is None: - min = -max - else: - min = float(min) - self.max = max - self.min = min - - def append_clip_op(self, block, grad_name): - clip_op_desc = block.desc.append_op() - clip_op_desc.set_type("clip") - clip_op_desc.set_input("X", [grad_name]) - clip_op_desc.set_output("Out", [grad_name]) - clip_op_desc.set_attr("min", self.min) - clip_op_desc.set_attr("max", self.max) -``` - -The `BaseErrorClipAttr` have one main member functions: `append_clip_op(self, block, grad_name)`. - -This function is used to create a `clip_op` and append it to the end of given `block`. For different error clip algorithm require different `clip_op`, the function is defined as virtual in the base class. All derived classes must implement their own versions of this function. - -These `clip_op`s should be inserted after `grad_op`s whose output gradients need to be clipped. It is equivalent to appending some `clip_op`s to the end of the target block every time a new `grad_op` is added. - -```python -for op_desc in grad_op_descs: - new_op_desc = target_block.desc.append_op() - new_op_desc.copy_from(op_desc) - callback(block=target_block, context=grad_to_var) -``` - -Here we employ a callback function to complete this kind of jobs. In `_append_backward_ops_` function, each time after a `grad_op` is added to the `target_block`, a callback function is invoked. The logic of `clip_op` appending can be implemented inside the callback function. - -The callback function for `clip_op` appending is defined in *clip.py*: - -```python -def error_clip_callback(block, context): - # the context is a grad_to_var map - grad_to_var = context - op_desc = block.desc.op(block.desc.op_size() - 1) - for grad_n in filter(lambda n: grad_to_var.has_key(n), - op_desc.output_arg_names()): - fwd_var = block.__var_recursive(grad_to_var[grad_n]) - error_clip = getattr(fwd_var, "error_clip", None) - if not (error_clip is None or isinstance(error_clip, - BaseErrorClipAttr)): - raise TypeError( - "Variable's error_clip should be an instance of BaseErrorClipAttr or None." - ) - if error_clip is not None: - error_clip.append_clip_op(block, grad_n) -``` - -This function takes a `block` and a `context`(which is actually a grad\_to\_var map) as inputs. It checks each output of the last `OpDesc` in the `block`. Notice that the last `OpDesc` of the `block` must be a `grad_op` and its outputs must be some forward variables' gradients. If an output gradient's corresponding forward variable has an attribute of `error_clip`, `error_clip_callback` will call the `error_clip`'s `append_clip_op` function to append the required `clip_op` into the `block`. diff --git a/doc/fluid/howto/performance/images/profiler.png b/doc/fluid/howto/performance/images/profiler.png deleted file mode 100644 index d57b71ca88aaba5d05584a6219d84214e285a1e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51116 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
- -### Event - -In above work flow, a pair of events are needed before and after the piece of code to collect time. So the event has a flag to mark whether it is a starting event or an ending event. Except this two kinds of event, sometime, a only marker with a text message is needed, for example, a marker to specify the profiling start or end. There are three kinds of event: - -```c++ -enum EventKind { - kMark, - kPushRange, - kPopRange}; -``` -- kMark: only a marker without time range. -- kPushRange: mark the starting event for time range. -- kPopRange: mark the ending event for time range. - -For the CPU code, the events only need to record the current time. For the CUDA code, the [event management functions of CUDA](http://docs.nvidia.com/cuda/cuda-runtime-api/group__CUDART__EVENT.html#group__CUDART__EVENT) are used. For many pieces of code, an event lists are used to record each piece. - -```c++ -class Event { - public: - // The DeviceContext is used to get current CUDA stream. - Event(EventKind kind, std::string name, uint32_t thread_id, - const platform::DeviceContext* dev_ctx = nullptr); - double CpuElapsedUs(const Event& e) const; - double CudaElapsedUs(const Event& e) const; - - private: - EventKind kind_; - std::string name_; - uint32_t thread_id_; - int64_t cpu_ns_; -#ifdef PADDLE_WITH_CUDA - cudaEvent_t event_ = nullptr; - int device_ = -1; -#endif -}; - -struct EventList { - std::forward_list> event_blocks; -}; -``` - -As mentioned above, there is no need to record the timeline when disabling the profiler. So there is a global state to enable or disable the profiler. - -```c++ -enum ProfilerState { - kDisabled, - kCPU, - kCUDA -}; -ProfilerState g_state; -``` -- kDisabled: the disabled state. -- kCPU: CPU profiling state. -- kCUDA: GPU profiling state. - -A pair of starting and ending events are pushed to event lists in constructor and destructor of `RecordEvent`. So the timeline is recorded for the code in the lifecycle of an object of `RecordEvent`. - -```c++ -struct RecordEvent { - explicit RecordEvent(const std::string name, - platform::DeviceContext* dev_ctx = nullptr) { - if (kState == ProfilerState::kDisabled) return; - // push the starting event to the event lists. - } - ~RecordEvent() { - if (kState == ProfilerState::kDisabled) return; - // push the ending event to the event lists. - } -}; -``` - -### Report sample - -``` -Event Calls Total Min. Max. Ave. Ratio. -thread101::deserial 1410 392.302 0.032768 14.1058 0.278228 0.00117247 -thread100::GetRPC 11 2951.13 7.60675 1426.75 268.284 0.00882 -thread100::serial 14 75.3212 0.07584 36.2135 5.38009 0.000225112 -thread100::SendRPC 14 13.9494 0.003072 3.97517 0.996389 4.16905e-05 -thread99::GetRPC 15 3012.62 2.79062 1426.61 200.841 0.00900378 -... -thread0::matmul_grad 1480 3674.28 0.375808 181.608 2.48262 0.0109813 -thread0::matmul 1480 3365.82 0.196608 172.256 2.2742 0.0100594 -thread0::mul_grad 3840 3167.39 0.411648 3.33824 0.82484 0.00946633 -thread0::fetch_barrier 5 3082.82 354.385 1617.88 616.564 0.00921359 -thread0::dropout 2480 3014.05 0.201728 6.76454 1.21534 0.00900807 -``` - -Note: profiler can merge the same operator's time which runs multiple times in the same thread. \ No newline at end of file diff --git a/doc/fluid/howto/third_party/images/multigpu_allreduce.graffle b/doc/fluid/howto/third_party/images/multigpu_allreduce.graffle deleted file mode 100644 index cb5bc420ceafe8ba4c87694d44ee4e5e4ad06779..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5489 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 diff --git a/doc/fluid/howto/third_party/images/multigpu_allreduce.png b/doc/fluid/howto/third_party/images/multigpu_allreduce.png deleted file mode 100644 index 87a1b3e8f6dd4a713ec9df9f0037d1da04e9178a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110982 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

+Z5{^=HsVTZ9Do?K@cff>8{(d!vQ?le3c3yG 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 XI5GNI{@yJd_)k++Po+Z1_U``x3bt$Q diff --git a/doc/fluid/howto/third_party/images/multigpu_before_convert.graffle b/doc/fluid/howto/third_party/images/multigpu_before_convert.graffle deleted file mode 100644 index 6c35ab1b21fb76ceae82d3693ed0d085b5bc0855..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3056 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 diff --git a/doc/fluid/howto/third_party/images/multigpu_before_convert.png b/doc/fluid/howto/third_party/images/multigpu_before_convert.png deleted file mode 100644 index 9c8f7711165d80a2fa3911280fdee91855a401b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33557 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%0D};r5zEcM|Y>GjFVW0fo!v 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⁣oG^-x}cKWt7wDs|h&g%{-Ui_Yw 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 diff --git a/doc/fluid/howto/third_party/mkldnn_fluid.md b/doc/fluid/howto/third_party/mkldnn_fluid.md deleted file mode 100644 index bef126f3f..000000000 --- a/doc/fluid/howto/third_party/mkldnn_fluid.md +++ /dev/null @@ -1,149 +0,0 @@ -# Design Doc: Add MKLDNN Kernel in Fluid Operator - -## Principles - -First of all, we should follow some basical principles like: -1. [How to write a new operator](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/howto/dev/new_op_en.md). We are trying to add a new kind of kernel into operators, so basically we should follow this doc. -2. [Supporting new Device/Library](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/design/support_new_device.md). Since MKLDNN is a new library to fluid, we should add `MKLDNNDeviceContext` and maybe `mkldnn_helper.h`, just like [cudnn_helper.h](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/platform/cudnn_helper.h). -3. [Switch Kernel](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/design/switch_kernel.md). Another important point is that we should ensure the data synchronization between different kernel types, which is this [topic](https://github.com/PaddlePaddle/Paddle/issues/6549). So basically we should override `GetExpectedKernelType` and `trans` functions to support switching kernels. -4. [The Keys of Operator Kernel Type](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/design/operator_kernel_type.md). Kernel Type is a pivotal conception which can record the `Place`, `Library`, `DataType` and `Layout`. - -## Sulution - -In general, there are four parts we should follow to run a MKL-DNN primitive. -- Create a primitive descriptor that describe this operator -- Create a primitive itself by primitive descriptor and the engine -- Create all memory buffers that primitive needed -- Launch a stream to execute the primitive created -More details can refer to [here](http://01org.github.io/mkl-dnn). - -It's better to avoid reinitialization of primitives and memory handles in the first three stages in every iteration. \ -So we plan to create a map to record all the `primitive` and `memory`, which should not take too much memories as discussed [here](https://github.com/PaddlePaddle/Paddle/issues/6822). - -It's assumed that following three conditions should be satisfied. -1. there is a unique key for each operator instance. May be the actual name of `Output Tensor`. -2. the `Input Tensor` inside `Compute` function is the one after converted. -3. we can get the phase(eg. `is_test`) inside `Compute` function, otherwise we need to expose this attribue to user. - -### Compute -The algorithm of `Compute` would be described as follow, let's take conv like an example. - -```c++ - - PADDLE_ENFORCE(platform::is_cpu_place(ctx.GetPlace()), "It must use CPUPlace."); - PADDLE_ENFORCE(platform::is_mkldnn_library(ctx.GetLibrary()), "It must use MKLDNN Library."); - - auto& dev_ctx = ctx.template device_context(); - - // find primitive by unique key from mkldnn context - // the op_key should be a unique name of this op instance - auto& p = dev_ctx.findPrimitive(op_key + "_fwd"); - - // assuming the input tensor inside this compute function is the one after converted - // this point should be guarantee by another mechanism - auto& i = dev_ctx.findMemory(op_key + "_input"); - - if (p == nullptr || i == nullptr || inputSizeChanged(p, i)) { - auto fwd_primitive_desc = createPrimitiveDesc(ctx); - auto* input = ctx.Input("Input"); - auto* filter = ctx.Input("Filter"); - auto* output = ctx.Output("Output"); - shared_ptr in(new mkldnn::memory(fwd_primitive_desc->src_primitive_desc(), input->data())); - shared_ptr wgt(new mkldnn::memory(fwd_primitive_desc->weights_primitive_desc(), filter->data())); - shared_ptr out(new mkldnn::memory(fwd_primitive_desc->dst_primitive_desc(), output->mutable_data(ctx.GetPlace()))); - shared_ptr fwd_primitive(new mkldnn::conv_fwd(*fwd_primitive_desc, *in, *wgt, *out)); - - dev_ctx.addMemory(op_key+"_input", in); - dev_ctx.addMemory(op_key+"_output", out); - dev_ctx.addMemory(op_key+"_filer", wgt); - dev_ctx.addPrimitive(op_key+"_fwd", fwd_primitive); - dev_ctx.addPrimitiveDesc(op_key+"_fwd_PD", fwd_primitive_desc); - } - - p = dev_ctx.findPrimitive(op_key + "_fwd"); - - PADDLE_ENFORCE(p, "Should have forward Primitive"); - PADDLE_ENFORCE(dev_ctx.findMemory(op_unique_key+"_input"), "Should have input memory"); - PADDLE_ENFORCE(dev_ctx.findMemory(op_unique_key+"_output"), "Should have output memory"); - PADDLE_ENFORCE(dev_ctx.findMemory(op_unique_key+"_filter"), "Should have filter memory"); - PADDLE_ENFORCE(dev_ctx.findPrimitiveDesc(op_unique_key+"_fwd_PD"), "Should have forward PrimitiveDesc"); - dev_ctx.submit(p); - dev_ctx.execute(); // the convert primitive should have already contained. - -``` - -The `createPrimitiveDesc` returns the primitive descripotor of this operator, would be like this: -```c++ - auto* input = ctx.Input("Input"); - auto* filter = ctx.Input("Filter"); - auto* output = ctx.Output("Output"); - std::vector strides = ctx.Attr>("strides"); - std::vector paddings = ctx.Attr>("paddings"); - std::vector dilations = ctx.Attr>("dilations"); - int groups = ctx.Attr("groups"); - algorithm algo = static_cast(ctx.Attr("convolution_algorithm_option")); - prop_kind pk = ctx.Attr("is_test") ? prop_kind::forward_inference : prop_kind::forward_training; - - auto fwd_desc = mkldnn::conv_fwd::desc(/* all the setting above*/); - shared_ptr fwd_primitive_desc(new mkldnn::conv_fwd::primitive_desc(fwd_desc, ctx.getEngine())); - - return fwd_primitive_desc; - } -``` - -### MKLDNNDeviceContext -`MKLDNNDeviceContext`, which is very straightforward, should contain some base information like: `stream`, `engine` and the map needed. - - -### mkldnn_helper -Some functions would be put in `paddle/platform/mkldnn_helper.h`. -- create MKLDNN memories -- create MKLDNN primitives -- error check function -- etc - - -### Kernel Switch -We should `reorder` the different Layout from other device or to other device. `GetExpectedKernelType` and `trans` functions can help us to implement it. - -`GetExpectedKernelType` should get the context, and this operator can return the best `KernelType`. -`trans` would be like this: - -```c++ -void trans(inputs, ctx) override { - if (NoNeedTrans()) { - return; - } - // find reorder primitive by op_key from context - auto& dev_ctx = ctx.template device_context(); - auto& p = dev_ctx.findPrimitive(op_key + "_reorder_input"); - auto& i = dev_ctx.findMemory(op_key + "_src_input"); - - if (p == nullptr || i == nullptr || changeSized(i, input)) { - auto prim = createPrimitiveDesc(ctx); - auto src = createMemory(memoryDesc(input->dims(), actual_layout), input->data); - auto newbuffer = paddle::memory::Alloc(ctx.GetPlace(), input->size_in_bytes()); - auto dst = createMemory(p->expected_desc(), newbuffer->data); - auto reorder_primitive(new mkldnn::reorder(src, dst)); - - dev_ctx.addMemory(op_key+"_src_input", src); - dev_ctx.addMemory(op_key+"_input", dst); - dev_ctx.addPrimitive(op_key+"_reorder_input", reorder_primitive); - } - - p = dev_ctx.findPrimitive(op_key + "_reorder_input"); - PADDLE_ENFORCE(p, "Should have Reorder Primitive"); - dev_ctx.submit(p); - if (! this->isMKLDNNKernel()) { - // execute immediately only if this is not mkldnn kernel function. - // otherwise, it can be executed with the operator primitive in Compute - dev_ctx.stream(); - } - // after submit, the input tensor in ExecutionContext should be changed as the converted one - // there should be another mechanism to ensure this -} -``` - -### Unit Test -All the functions should be tested corresponding. -TBD diff --git a/doc/fluid/howto/third_party/paddle_nccl.md b/doc/fluid/howto/third_party/paddle_nccl.md deleted file mode 100644 index c7dac7099..000000000 --- a/doc/fluid/howto/third_party/paddle_nccl.md +++ /dev/null @@ -1,65 +0,0 @@ -# Design Doc: NCCL support in Paddle Fluid - -## Abstract - -This Design Doc refers to the NCCL feature in paddle. We propose an approach to support NCCL library both on a single machine and multiple machines. We wrapper the NCCL primitives `Broadcast`, `Allreduce`, `Reduce` as operators to utilize Multi-GPU powers in one script. - - -## Motivation - -[NCCL](https://developer.nvidia.com/nccl) is a NVIDIA library support Multi-GPU communicating and optimized for NVIDIA GPUs, it provides routines such as all-gather, all-reduce, broadcast, reduce, reduce-scatter, that can achieve high bandwidth over PCIe and NVLink high-speed interconnect. With NCCL library, we can easily accelerate the training in parallel. - -- Pros -1. easily plug-in with [NCCL2](https://developer.nvidia.com/nccl) library. -1. high performance in NVIDIA GPUs. -1. MPI like primitives, which have low learning cost for users. - -- Cons -1. Only design for NVIDIA GPUs, not a general multi-device solution. -1. Although NCCL1 is opensourced under BSD license, but NCCL2 is not opensourced anymore. - -At the beginning of training, the framework needs to distribute the same parameters to every GPU, and merge the gradients at any time user interests. - -As a result, during training, we need the operations of peer to peer copy between different GPUs, aggregating gradients/parameters from GPUs, and broadcasting parameters to GPUs. Every GPU only need to run the operator with correct place information. - -Besides, it needs interfaces to synchronize model update with each different GPU Cards. - -## Implementation - -As mentioned above, we wrap the NCCL routines as several kinds of operators. Need to note that NCCL need to create Communicator between gpu at the beginning, so there is a NCCLInit operator created. - -### Transpiler - -To be compatible with [parameter server design doc](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/design/ops/dist_train.md), the transpiler compiles the user defined operation graph into sub-graphs to be executed on different devices. - -1. The user-defined model will be a single device program - -2. Broadcast/Reduce operators between GPUs will be inserted into the program, even for the multi-node, may insert the `Send`, `Recv` operator. - - *Broadcast, AllReduce in a single machine. And Broadcast, AllReduce, [Send, Recv](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/design/ops/dist_train.md#graph-converter) in multiple machines* - - - -After compiling, the graph as shows - - - -Operators are added to the sub-graphs. Every GPU assigned a role of `rank0`, `rank1` etc. - -- **Broadcast**. Broadcast operator distribute initialized parameter to all the GPUs from the GPU who owns it. e.g. from`rank0` GPU. -- **AllReduce**. AllReduce operator synchronizes parameters/gradients between GPUs. AllReduce implemented in the Ring-Based communicating method, avoid of the bottle neck in a single GPU. - -Need to notice that AllReduce operator force GPUs synchronized at that point. The whole training process in asynchronous or synchronous mode depends on the AllReduce point in the graph. - -As it shown in the picture, when each GPU compute the gradient of `W`, followed with a `AllReduce` operator, accumulate the `dW` to full batch of data, then run the optimize process individually and apply the gradient to its `W`. - -- **AllReduce** - Need to note that our AllReduce operator is a ring-base AllReduce implementation. If we use the NCCL2 AllReduce primitive, every GPU optimized full batch of data, wasted (n-1) GPU compute resources. In addition, NCCL2 built-in AllReduce will only utilize the communicating resource during synchronization, then update the gradient will be a subsequent phase. In fact, we can amortize the update gradient time cost into the communicating phase. The process is -1. Every parameter has its root card. That card will responsible for aggregating the gradients from GPUs. -2. The whole model's parameter will be hashed to different root card, ensure the load balance between GPUs. -3. Logically neighberhood card will start send parameter to the next one. After one round, the parameter main card will aggregate the full gradients. -4. Then the root card will optimize the parameter. -5. This parameter card will send its optimized result to its neighberhood, then the neighberhood will send parameter to its next one. -6. Finish the sychronization round. - -The total time cost will be 2 * (n-1) * per-parameter-send-time, we reach the goal of amortize the upgrade time into communicating phase. diff --git a/doc/fluid/index_en.rst b/doc/fluid/index_en.rst index e6ee20c42..f187f8e3b 100644 --- a/doc/fluid/index_en.rst +++ b/doc/fluid/index_en.rst @@ -7,7 +7,6 @@ beginners_guide/index_en.rst user_guides/index_en.rst advanced_usage/index_en.rst - api/index_en.rst - book/index_en.rst + diff --git a/doc/fluid/overview.md b/doc/fluid/overview.md deleted file mode 100644 index a7c253a54..000000000 --- a/doc/fluid/overview.md +++ /dev/null @@ -1,25 +0,0 @@ -# 概览 - -使用文档部分将帮助您更好的了解和学习 PaddlePaddle,本单元将主要为您展示 **教程** 和 **API** 两个板块。 - - -## 教程 - -如果您想了解深度学习知识与 Fluid 使用方法,可以在教程部分查找相关内容。教程模块主要包含: - -- [新手入门](beginners_guide/index.html):包含安装说明和多个简单的模型案例供您快速上手 - -- [使用指南](user_guides/index.html):包含 Fluid 使用说明和已开源的[模型库](user_guidex/models/index.html)助您更好地应用Fluid - -- [进阶使用](advanced_usage/index.html):包含移动端部署、模型调优、书写Operator等高阶使用说明,使 Fluid 更贴合您的需求。 - - -## API - -如果您是PaddlePaddle的老用户,想查找与您项目相关的API,可以直接阅读: - -- [API Guide](api/api_guides/index.html):介绍 Fluid 主要 API 的功能以及说明文档的接口 - - -- [API](api/index.html):Fluid 已有 API 的设计思想与使用说明 - diff --git a/doc/fluid/read_source.md b/doc/fluid/read_source.md deleted file mode 100644 index bb6d4563f..000000000 --- a/doc/fluid/read_source.md +++ /dev/null @@ -1,67 +0,0 @@ -# PaddlePaddle Fluid Source Code Overview - -Examples: https://github.com/PaddlePaddle/Paddle/tree/develop/python/paddle/fluid/tests/book - -Core: https://github.com/PaddlePaddle/Paddle/tree/develop/paddle/fluid/framework - -Operator: https://github.com/PaddlePaddle/Paddle/tree/develop/paddle/fluid/operators - -Memory: https://github.com/PaddlePaddle/Paddle/tree/develop/paddle/fluid/memory - -Platform: https://github.com/PaddlePaddle/Paddle/tree/develop/paddle/fluid/platform - -# Compile Time - -The following **defines** the NN. The definition goes into this [protocol buffer](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/framework/framework.proto). - -```python -x = fluid.layers.data(name='x', shape=[13], dtype='float32') -y = fluid.layers.data(name='y', shape=[1], dtype='float32') - -y_predict = fluid.layers.fc(input=x, size=1, act=None) -cost = fluid.layers.square_error_cost(input=y_predict, label=y) -avg_cost = fluid.layers.mean(x=cost) - -sgd_optimizer = fluid.optimizer.SGD(learning_rate=0.001) -sgd_optimizer.minimize(avg_cost) -``` - -- Variables: `x`, `y`, `y_predict`, `cost` and `avg_cost`. [Python](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/fluid/framework.py#) -- Layers: `fluid.layers.data`, `fluid.layers.fc` and `fluid.layers.mean` are layers. [Python](https://github.com/PaddlePaddle/Paddle/tree/develop/python/paddle/fluid/layers) - - Every Layer has one or more operators and variables/parameters - - All the operators are defined at [`paddle/fluid/operators/`](https://github.com/PaddlePaddle/Paddle/tree/develop/paddle/fluid/operators). Other worth-looking files: - - Base class: [`paddle/fluid/framework/operator.h`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/framework/operator.h) - - Operator Registration: [`paddle/fluid/framework/op_registry.h`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/framework/op_registry.h) - - Operator Lookup: [`paddle/fluid/framework/op_info.h`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/framework/op_info.h) -- Optimizer: `fluid.optimizer.SGD`. It does the following - - Add backward operators. [[Python](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/fluid/backward.py)] - - Add optimizer operators. [[Python](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/fluid/optimizer.py)] - -# Run Time - -The following **evaluates** the NN. Instantiates all the variables, operators. - -```python -place = fluid.CPUPlace() -feeder = fluid.DataFeeder(place=place, feed_list=[x, y]) -exe = fluid.Executor(place) - -# Allocate memory. Initialize Parameter. -exe.run(fluid.default_startup_program()) - -# Allocate memory. Do computation. -exe.run(fluid.default_main_program(), - feed=feeder.feed(data), - fetch_list=[avg_cost]) -``` - -- Place: `place`. one of CPU, GPU or FPGA. [C++](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/platform/place.h) - - The device handle are at [paddle/fluid/platform/device_context.h](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/platform/device_context.h) -- Executor: `fluid.Executor(place)`. [[Python](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/fluid/executor.py), [C++](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/framework/executor.cc)] - - Feeds the data: `feed=feeder.feed(data)` - - Evaluates all the operators - - Fetches the result: `fetch_list=[avg_cost]` -- Other worth looking files: - - Scope: [paddle/fluid/framework/scope.h](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/framework/scope.h). Where all the variables live - - Variable: [paddle/fluid/framework/variable.h](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/framework/variable.h). Where all the data (most likely tensors) live - - Tensor: [paddle/fluid/framework/tensor.h](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/framework/tensor.h). Where we allocate memory through [`paddle/fluid/memory/`](https://github.com/PaddlePaddle/Paddle/tree/develop/paddle/fluid/memory) -- GitLab

}6Qu`2pGC0PaQd6Amn%i&@2OXQ#z*hy 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�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"gamma", "(float, default 1.0) Accumulation multiplier").SetDefault(1.0f); - AddComment(R"DOC( -Accumulate Operator. - -This operator accumulates the input tensor to the output tensor. If the -output tensor already has the right size, we add to it; otherwise, we first -initialize the output tensor to all zeros, and then do accumulation. Any -further calls to the operator, given that no one else fiddles with the output -in the interim, will do simple accumulations. - -Accumulation is done as follows: - -Out = 1*X + gamma*Out - -where X is the input tensor, Out is the output tensor and gamma is the multiplier -argument. - -)DOC"); - } -}; -``` diff --git a/doc/fluid/dev/new_op_cn.md b/doc/fluid/dev/new_op_cn.md deleted file mode 100644 index 23e562d4c..000000000 --- a/doc/fluid/dev/new_op_cn.md +++ /dev/null @@ -1,452 +0,0 @@ -# 如何写新的operator - - - [概念简介](#概念简介) - - [实现C++类](#实现c类) - - [定义ProtoMaker类](#定义protomaker类) - - [定义Operator类](#定义operator类) - - [定义OpKernel类](#定义opkernel类) - - [注册Operator](#注册operator) - - [编译](#编译) - - [绑定Python](#绑定python) - - [实现单元测试](#实现单元测试) - - [前向Operator单测](#前向operator单测) - - [反向Operator单测](#反向operator单测) - - [编译和执行](#编译和执行) - - [注意事项](#注意事项) - - -## 概念简介 - -简单介绍需要用到基类,详细介绍请参考设计文档。 - -- `framework::OperatorBase`: Operator(简写,Op)基类。 -- `framework::OpKernel`: Op计算函数的基类,称作Kernel。 -- `framework::OperatorWithKernel`:继承自OperatorBase,Op有计算函数,称作有Kernel。 -- `class OpProtoAndCheckerMaker`:描述该Op的输入、输出、属性、注释,主要用于Python API接口生成 - -依据是否包含kernel,可以将Op分为两种:包含Kernel的Op和不包含kernel的Op,前者Op的定义继承自`OperatorWithKernel`,后者继承自`OperatorBase`。本教程主要介绍带Kernel的Op如何写,简单总结Op需要包含的内容如下: - - - - - - - - - - - - - - - - - - - - - - - - - - -
内容定义位置
OpProtoMake定义 .cc 文件,Backward Op不需要定义OpProtoMake
Op定义 .cc 文件
Kernel实现 CPU、CUDA共享Kernel实现在.h 文件中,否则,CPU 实现在.cc 文件中,CUDA 实现在.cu 文件中。
注册Op Op注册实现在.cc 文件;Kernel注册CPU实现在.cc 文件中,CUDA实现在.cu 文件中
- - -实现新的op都添加至目录[paddle/fluid/operators](https://github.com/PaddlePaddle/Paddle/tree/develop/paddle/fluid/operators)下,文件命名以`*_op.h`(如有) 、 `*_op.cc` 、`*_op.cu`(如有)结尾。**系统会根据文件名自动构建op和其对应的Python扩展。** - - -下面以矩阵乘操作,即[MulOp](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/operators/mul_op.cc)为例来介绍如何写带Kernel的Operator。 - - -## 实现C++类 - - -### 定义ProtoMaker类 - -矩阵乘法的公式:$Out = X * Y$, 可见该计算由两个输入,一个输出组成。 - -首先定义`ProtoMaker`来描述该Op的输入、输出,并添加注释: - -```cpp -class MulOpMaker : public framework::OpProtoAndCheckerMaker { - public: - MulOpMaker(OpProto *proto, OpAttrChecker *op_checker) - : OpProtoAndCheckerMaker(proto, op_checker) { - AddInput("X", "(Tensor), 2D tensor of size (M x K)"); - AddInput("Y", "(Tensor), 2D tensor of size (K x N)"); - AddOutput("Out", "(Tensor), 2D tensor of size (M x N)"); - AddComment(R"DOC( -Two Element Mul Operator. -The equation is: Out = X * Y -)DOC"); - } -}; -``` - -[`MulOpMaker`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/operators/mul_op.cc#L76-L127)继承自`framework::OpProtoAndCheckerMaker`,构造函数含有2个参数: - - - `framework::OpProto` : 前者存储Op的输入输出和参数属性,将用于Python API接口的生成。 - - `framework::OpAttrChecker` :后者用于检查参数属性的合法性。 - -构造函数里通过`AddInput`添加输入参数,通过`AddOutput`添加输出参数,通过`AddComment`添加Op的注释。这些函数会将对应内容添加到`OpProto`中。 - -上面的代码在`MulOp`中添加两个输入`X`和`Y`,添加了一个输出`Out`,并解释了各自含义,命名请遵守[命名规范](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/fluid/dev/name_convention.md)。 - - -再以[`ScaleOp`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/operators/scale_op.cc#L38-L55)为例: - -```cpp -template -class ScaleOpMaker : public framework::OpProtoAndCheckerMaker { - public: - ScaleOpMaker(OpProto *proto, OpAttrChecker *op_checker) - : OpProtoAndCheckerMaker(proto, op_checker) { - AddInput("X", "(Tensor) Input tensor of scale operator."); - AddOutput("Out", "(Tensor) Output tensor of scale operator."); - AddComment(R"DOC( -Scale operator -$$Out = scale*X$$ -)DOC"); - AddAttr("scale", - "(float, default 1.0)" - "The scaling factor of the scale operator.") - .SetDefault(1.0); - } -}; -``` - -这个例子有`AddAttr("scale", "...").SetDefault(1.0);` : 增加`scale`系数,作为参数属性,并且设置默认值为1.0。 - -### 定义GradProtoMaker类 -每个Op的必须有一个对应的GraProtoMaker,若未定制对应前向Op的GradProtoMaker,fluid提供了DefaultGradProtoMaker,默认注册会使用全部输入输出,包括Input, Output, Output@Grad等,使用不需要的变量的会造成显存浪费。 -下面示例定义了ScaleOp的GradProtoMaker。 - -```cpp -class ScaleGradMaker : public framework::SingleGradOpDescMaker { - public: - using framework::SingleGradOpDescMaker::SingleGradOpDescMaker; - - std::unique_ptr Apply() const override { - auto *grad_op = new framework::OpDesc(); - grad_op->SetType("scale"); - grad_op->SetInput("X", OutputGrad("Out")); - grad_op->SetOutput("Out", InputGrad("X")); - grad_op->SetAttr("scale", GetAttr("scale")); - return std::unique_ptr(grad_op); - } -}; -``` - -### 定义Operator类 - -下面实现了MulOp的定义: - -```cpp -class MulOp : public framework::OperatorWithKernel { - public: - using framework::OperatorWithKernel::OperatorWithKernel; - - protected: - void InferShape(const framework::InferShapeContext &ctx) const override { - //never use Input or Output if you want a to get a LoDTensor. - auto dim0 = ctx.Input("X")->dims(); - auto dim1 = ctx.Input("Y")->dims(); - PADDLE_ENFORCE_EQ(dim0.size(), 2, - "input X(%s) should be a tensor with 2 dims, a matrix", - ctx.op_.Input("X")); - PADDLE_ENFORCE_EQ(dim1.size(), 2, - "input Y(%s) should be a tensor with 2 dims, a matrix", - ctx.op_.Input("Y")); - PADDLE_ENFORCE_EQ( - dim0[1], dim1[0], - "First matrix's width must be equal with second matrix's height."); - ctx.Output("Out")->Resize({dim0[0], dim1[1]}); - } -}; -``` - -[`MulOp`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/operators/mul_op.cc#L22)继承自`OperatorWithKernel`。`public`成员: - -```cpp -using framework::OperatorWithKernel::OperatorWithKernel; -``` - -这句表示使用基类`OperatorWithKernel`的构造函数,也可写成: - -```cpp -MulOp(const std::string &type, const framework::VariableNameMap &inputs, - const framework::VariableNameMap &outputs, - const framework::AttributeMap &attrs) - : OperatorWithKernel(type, inputs, outputs, attrs) {} -``` - -还需要重写`InferShape`接口。`InferShape`为const函数,不能修改Op的成员变量,参数为`const framework::InferShapeContext &ctx`,通过该参数可获取到输入输出以及属性。它的功能是: - - - 做检查, 尽早报错:检查输入数据维度、类型等是否合法。 - - 设置输出Tensor的形状。 - -通常`OpProtoMaker`和`Op`类的定义写在`.cc`文件中,和下面将要介绍的注册函数一起放在`.cc`中 - -### 定义OpKernel类 - -`MulKernel`继承自`framework::OpKernel`,带有下面两个模板参数: - -- `typename DeviceContext`: 表示设备类型,不同设备(CPU、CUDA)共享同一个Kernel时,需加该模板参数,不共享则不加,一个不共享的例子是[`OnehotCrossEntropyOpKernel`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/operators/cross_entropy_op.h#L43)。 - -- `typename T` : 表示数据类型,如`float`, `double`等。 - -需要为`MulKernel`类重写`Compute`接口。 - -- `Compute`接受一个输入参数:`const framework::ExecutionContext& context`。 - -- 与`InferShapeContext`相比,`ExecutionContext`增加了设备类型,同样可获取到输入输出和属性参数。 - -- `Compute`函数里实现`OpKernel`的具体计算逻辑。 - -Op的输入和输出可分别通过`ExecutionContext::Input()`和`ExecutionContext::Output()`获得。 - -**注意:** 若op的输入/输出的变量类型是`LoDTensor`(fluid默认所有的Tensor默认都是LoDTensor类型),请写成`ExecutionContext::Input()`和`ExecutionContext::Output()`,不要写`ExecutionContext::Input()`和`ExecutionContext::Output()`。因为若实际的变量类型为`SelectedRows`,`Input()`和`Output()`方法会将`SelectedRows`类型特化为`Tensor`,导致潜在的错误。 - -下面是 `MulKernel` `Compute`的实现: - - ```cpp - template - class MulKernel : public framework::OpKernel { - public: - void Compute(const framework::ExecutionContext& context) const override { - auto* X = context.Input("X"); - auto* Y = context.Input("Y"); - auto* Z = context.Output("Out"); - Z->mutable_data(context.GetPlace()); - auto& device_context = context.template device_context(); - math::matmul(*X, false, *Y, false, 1, Z, 0, device_context); - } - }; - ``` - -需要注意:**不同设备(CPU、CUDA)共享一个Op定义,是否则共享同一个`OpKernel`,取决于`Compute`调用的函数是否支持不同设备。** - -`MulOp`的CPU、CUDA实现共享同一个`Kernel`。`OpKernel`不共享的例子可以参考:[`OnehotCrossEntropyOpKernel`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/operators/cross_entropy_op.h#L43)。 - -为了使`OpKernel`的计算过程书写更加简单,并且CPU、CUDA的代码可以复用,我们通常借助 Eigen unsupported Tensor模块来实现`Compute`接口。关于在PaddlePaddle中如何使用Eigen库,请参考[使用文档](https://github.com/PaddlePaddle/FluidDoc/blob/develop/doc/fluid/dev/use_eigen_cn.md)。 - -到此,前向Op实现完成。接下来,需要在`.cc`文件中注册该op和kernel。 -反向Op类的定义,反向OpKernel的定义与前向Op类似,这里不再赘述。**但需注意反向Op没有`ProtoMaker`**。 - -### 注册Operator - -- 在`.cc`文件中注册前向、反向Op类,注册CPU Kernel。 - - ```cpp - namespace ops = paddle::operators; - REGISTER_OPERATOR(mul, ops::MulOp, ops::MulOpMaker, - paddle::framework::DefaultGradOpDescMaker) - REGISTER_OPERATOR(mul_grad, ops::MulGradOp) - REGISTER_OP_CPU_KERNEL(mul, ops::MulKernel); - REGISTER_OP_CPU_KERNEL(mul_grad, - ops::MulGradKernel); - ``` - - 在上面的代码中: - - - `REGISTER_OPERATOR` : 注册`ops::MulOp`类,类型名为`mul`,该类的`ProtoMaker`为`ops::MulOpMaker`,注册`ops::MulOpGrad`,类型名为`mul_grad`。 - - - `REGISTER_OP_CPU_KERNEL` :注册`ops::MulKernel`类,并特化模板参数为`paddle::platform::CPUPlace`和`float`类型,同理,注册`ops::MulGradKernel`类。 - - -- 在 `.cu`文件中注册CUDA Kernel。 - - 请注意,如果CUDA Kernel的实现基于Eigen unsupported模块,那么在 `.cu`的开始请加上宏定义 `#define EIGEN_USE_GPU`,代码示例如下: - - - ```cpp - // if use Eigen unsupported module before include head files - #define EIGEN_USE_GPU - - namespace ops = paddle::operators; - REGISTER_OP_CUDA_KERNEL(mul, ops::MulKernel); - REGISTER_OP_CUDA_KERNEL(mul_grad, - ops::MulGradKernel); - ``` - -### 编译 - -运行下面命令可以进行编译: - -``` -make mul_op -``` - -## 绑定Python - -系统会对新增的op自动绑定Python,并链接到生成的lib库中。 - -## 实现单元测试 - -单测包括对比前向Op不同设备(CPU、CUDA)的实现、对比反向OP不同设备(CPU、CUDA)的实现、反向Op的梯度测试。下面介绍介绍[`MulOp`的单元测试](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/fluid/tests/unittests/test_mul_op.py)。 - -### 前向Operator单测 - -Op单元测试继承自`OpTest`。各项更加具体的单元测试在`TestMulOp`里完成。测试Operator,需要: - -1. 在`setUp`函数定义输入、输出,以及相关的属性参数。 -2. 生成随机的输入数据。 -3. 在Python脚本中实现与前向operator相同的计算逻辑,得到输出值,与operator前向计算的输出进行对比。 -4. 反向计算已经自动集成进测试框架,直接调用相应接口即可。 - - - ```python - import unittest - import numpy as np - from op_test import OpTest - - - class TestMulOp(OpTest): - def setUp(self): - self.op_type = "mul" - self.inputs = { - 'X': np.random.random((32, 84)).astype("float32"), - 'Y': np.random.random((84, 100)).astype("float32") - } - self.outputs = {'Out': np.dot(self.inputs['X'], self.inputs['Y'])} - - def test_check_output(self): - self.check_output() - - def test_check_grad_normal(self): - self.check_grad(['X', 'Y'], 'Out', max_relative_error=0.5) - - def test_check_grad_ingore_x(self): - self.check_grad( - ['Y'], 'Out', max_relative_error=0.5, no_grad_set=set("X")) - - def test_check_grad_ingore_y(self): - self.check_grad( - ['X'], 'Out', max_relative_error=0.5, no_grad_set=set('Y')) - ``` - - 上面的代码首先导入依赖的包,下面是对`setUp`函数中操作的重要变量的详细解释: - - - `self.op_type = "mul" ` : 定义类型,与operator注册时注册的类型一致。 - - `self.inputs` : 定义输入,类型为`numpy.array`,并初始化。 - - `self.outputs` : 定义输出,并在Python脚本中完成与operator同样的计算逻辑,返回Python端的计算结果。 - -### 反向operator单测 - -而反向测试中: - -- `test_check_grad_normal`中调用`check_grad`使用数值法检测梯度正确性和稳定性。 - - 第一个参数`["X", "Y"]` : 指定对输入变量`X`、`Y`做梯度检测。 - - 第二个参数`"Out"` : 指定前向网络最终的输出目标变量`Out`。 - - 第三个参数`max_relative_error`:指定检测梯度时能容忍的最大错误值。 - -- `test_check_grad_ingore_x`和`test_check_grad_ingore_y`分支用来测试只需要计算一个输入梯度的情况。 - - -### 编译和执行 - -`python/paddle/fluid/tests/unittests/` 目录下新增的 `test_*.py` 单元测试会被自动加入工程进行编译。 - -请注意,**不同于Op的编译测试,运行单元测试测时需要编译整个工程**,并且编译时需要打开`WITH_TESTING`, 即`cmake paddle_dir -DWITH_TESTING=ON`。编译成功后,执行下面的命令来运行单元测试: - -```bash -make test ARGS="-R test_mul_op -V" -``` - -或者: - -```bash -ctest -R test_mul_op -``` - -## 注意事项 - -- 注册Op时的类型名,需要和该Op的名字一样。即不允许在`A_op.cc`里面,注册`REGISTER_OPERATOR(B, ...)`等,这将会导致单元测试出错。 -- 如果Op没有实现CUDA Kernel,请不要创建空的`*_op.cu`,这将会导致单元测试出错。 -- 如果多个Op依赖一些共用的函数,可以创建非`*_op.*`格式的文件来存放,如`gather.h`文件。 - -### PADDLE_ENFORCE使用注意 - -实现Op时检查数据的合法性需要使用PADDLE_ENFORCE以及PADDLE_ENFORCE_EQ等宏定义,基本格式如下: - -``` -PADDLE_ENFORCE(表达式, 错误提示信息) -PADDLE_ENFORCE_EQ(比较对象A, 比较对象B, 错误提示信息) -``` - -如果表达式为真,或者比较对象A=B,则检查通过,否则会终止程序运行,向用户反馈相应的错误提示信息。 -为了确保提示友好易懂,开发者需要注意其使用方法。 - -#### 总体原则 - -任何使用了PADDLE_ENFORCE与PADDLE_ENFORCE_**检查的地方,必须有详略得当的备注解释!**错误提示信息**不能为空! - -#### 提示信息书写标准 - -1. [required] 哪里错了?为什么错了? - - - 例如:`ValueError: Mismatched label shape` - -2. [optional] 期望的输入是什么样的?实际的输入是怎样的? - - - 例如:`Expected labels dimension=1. Received 4.` - -3. [optional] 能否给出修改意见? - - - 例如:`Suggested Fix:If your classifier expects one-hot encoding label,check your n_classes argument to the estimatorand/or the shape of your label.Otherwise, check the shape of your label.` - -如果并非必要或者简洁的描述即可表达清楚以上要点,根据情况书写亦可。 - -#### FAQ 典型问题 - -1. 无报错信息或报错信息过于简单,不能给用户提供有效的提示! - - 问题示例1 :未写提示信息 - ``` - PADDLE_ENFORCE(ctx->HasInput("X"), ""); - ``` - 问题示例2 :提示信息过于简单 - ``` - PADDLE_ENFORCE(i != nullptr, "i must be set"); // i是什么? - ``` - -2. 在报错信息中使用开发人员定义的变量缩写,不易理解! - - 问题示例: - ``` - PADDLE_ENFORCE(forward_pd != nullptr, - "Fail to find eltwise_fwd_pd in device context"); //eltwise_fwd_pd用户可能看不懂 - ``` - -3. OP内部调用非法接口:Op内部如果出现Output = ShareDataWith(Input) - 问题示例: - ```cpp - auto *out = ctx.Output("Out"); - auto *in = ctx.Input("X"); - out->ShareDataWith(*in); - ``` - Op内部如果出现Output = ShareDataWith(Input),相当于operator图的中有一条隐藏边,连接了Input和Output,这条边无法在图分析中表达,引发基于图优化的错误。 - -4. OP实现的性能实践 - 调用了eigen的broadcast, chop等操作,性能会比手写cuda kernel差几倍以上。此时cpu的实现可以复用eigen,gpu实现可以实现cuda kernel. - - -#### OP InferShape检查提示信息特别说明 - -- 检查输入输出变量,请统一遵循以下格式 -`Input(变量名) of OP名 operator should not be null.` - - 正确示例: - ``` - PADDLE_ENFORCE(ctx->HasInput("Input"), - "Input(Input) of LSTMP operator should not be null."); - ``` - -- 反向Op的输入输出检查,要写明反向Op的名字 - - 正确示例: - ``` - PADDLE_ENFORCE(ctx->HasInput("X"), - "Input(X) of LoDResetGrad opreator should not be null."); - ``` diff --git a/doc/fluid/dev/new_op_kernel.md b/doc/fluid/dev/new_op_kernel.md deleted file mode 100644 index 87e617d44..000000000 --- a/doc/fluid/dev/new_op_kernel.md +++ /dev/null @@ -1,121 +0,0 @@ -# Add Kernels for a New Device - -## Background - -PaddlePaddle Fluid have hundreds of operators. Each operator could have one or more kernels. A kernel is an implementation of the operator for a certain device, which could be a hardware device, e.g., the CUDA GPU, or a library that utilizes a device, e.g., Intel MKL that makes full use of the Xeon CPU. - -[This document](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/fluid/dev/new_op_en.md) explains how to add an operator, and its kernels. The kernels of an operator are indexed by a C++ type [`OpKernelType`](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/fluid/design/multi_devices/operator_kernel_type.md). An operator chooses the right kernel at runtime. This choosing mechanism is described [here](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/fluid/design/execution/switch.md). - -## Write Kernels for A New Device - -### Add A New Device - - For some historical reaons, we misuse the word *library* for *device*. For example, we call the deivce type by *library type*. An example is the header file [`library_type.h`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/framework/library_type.h#L24). We will correct this ASAP. - -To register a new device, we need to add an enum value to `LibraryType`: - -``` -enum class LibraryType { - kPlain = 0, - kMKLDNN = 1, - kCUDNN = 2, -}; -``` - - -### Add A New [Place](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/platform/place.h#L53) - -If you have a new kind of Device, firstly you need to add a new kind of [`Place`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/platform/place.h#L53). For example `CUDAPlace`: - -```cpp -struct CUDAPlace { - CUDAPlace() : CUDAPlace(0) {} - explicit CUDAPlace(int d) : device(d) {} - - inline int GetDeviceId() const { return device; } - // needed for variant equality comparison - inline bool operator==(const CUDAPlace &o) const { - return device == o.device; - } - inline bool operator!=(const CUDAPlace &o) const { return !(*this == o); } - - int device; -}; - -typedef boost::variant Place; -``` - -### Add [device context]((https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/platform/device_context.h#L37)) -After a new kind of Device is added, you should add a corresponding [DeviceContext](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/platform/device_context.h#L37) for it. - -```cpp -class DeviceContext { - public: - virtual ~DeviceContext() {} - virtual Place GetPlace() const = 0; - - virtual void Wait() const {} -}; -``` - -### Implement new [OpKernel](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/framework/operator.h#L351) for your Device. - -A detailed documentation can be found in [`new_op_and_kernel`](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/fluid/dev/new_op_en.md) - -```cpp -class OpKernelBase { - public: - /** - * ExecutionContext is the only parameter of Kernel Run function. - * Run will get input/output variables, state such as momentum and - * device resource such as CUDA stream, cublas handle, etc. from - * ExecutionContext. User should construct it before run the Operator. - */ - - virtual void Compute(const ExecutionContext& context) const = 0; - - virtual ~OpKernelBase() = default; -}; - -template -class OpKernel : public OpKernelBase { - public: - using ELEMENT_TYPE = T; -}; -``` - - -### Register the OpKernel to framework - -After writing the components described above, we should register the kernel to the framework. - -We use `REGISTER_OP_KERNEL` to do the registration. - -```cpp -REGISTER_OP_KERNEL( - op_type, - library_type, - place_type, - kernel0, kernel1, ...) -``` - -kernel0, kernel1 are kernels that have the same `op_type`, `library_type`, `place_type` but different `data_types`. - -take [`conv2d`]((https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/operators/conv_cudnn_op.cu.cc#L318)) as an example: - - ```cpp - REGISTER_OP_KERNEL(conv2d, CPU, paddle::platform::CPUPlace, - paddle::operators::GemmConvKernel, - paddle::operators::GemmConvKernel); - - REGISTER_OP_KERNEL(conv2d, CUDNN, ::paddle::platform::CUDAPlace, - paddle::operators::CUDNNConvOpKernel, - paddle::operators::CUDNNConvOpKernel); - ``` - -In the code above: - - - `conv2d` is the type/name of the operator - - `CUDNN/CPU` is `library` - - `paddle::platform::CUDAPlace/CPUPlace` is `place` - - template parameter `float/double` on `CUDNNConvOpKernel` is `data_type`. diff --git a/doc/fluid/dev/op_markdown_format.md b/doc/fluid/dev/op_markdown_format.md deleted file mode 100644 index 4e539d799..000000000 --- a/doc/fluid/dev/op_markdown_format.md +++ /dev/null @@ -1,64 +0,0 @@ -# Standard Markdown Format for Operators -The following should be the standard format for documentation for all the operators that will get rendered in the `html`: - -``` -Operator Name (In PaddlePaddle) - -Operator Name (Standard) - -Operator description. - -LaTeX equation of how the operator performs an update. - -The signature of the operator. -``` - -Each section mentioned above has been covered in further detail in the rest of the document. - -## PaddlePaddle Operator Name -This should be in all small letters, in case of multiple words, we separate them with an underscore. For example: -`array to lod tensor` should be written as `array_to_lod_tensor`. - -This naming convention should be standard across all PaddlePaddle operators. - -## Standard Operator Name -This is the standard name of the operator as used in the community. The general standard is usually: -- Standard abbreviations like `SGD` are written in all capital letters. -- Operator names that have multiple words inside a single word use `camelCase` (capitalize word boundaries inside of a word). -- Keep numbers inside a word as is, with no boundary delimiters. -- Follow the name of the operator with the keyword: `Activation Operator.` - -## Operator description -This section should contain the description of what the operator does, including the operation performed, the literature from where it comes and was introduced first, and other important details. The relevant paper/article including the hyperlink should be cited in this section. - -## LaTeX equation -This section should contain an overall equation of the update or operation that the operator performs. The variables used in the equation should follow the naming convention of operators as described [here](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/operators/name_convention.md). Two words in the same word should be separated by an underscore (`_`). - -## The signature -This section describes the signature of the operator. A list of Inputs and Outputs, each of which have a small description of what the variable represents and the type of variable. The variable names follow the `CamelCase` naming convention. The proposed format for this is: -`Section : -VariableName : (VariableType) VariableDescription -... -... -` - - -The following example for an `sgd` operator covers the above mentioned sections as they would ideally look like in the `html`: - -``` -sgd - -SGD operator - -This operator implements one step of the stochastic gradient descent algorithm. - -param_out = param_learning_rate * grad - -Inputs: -Param : (Tensor) Input parameter -LearningRate : (Tensor) Learning rate of SGD -Grad : (Tensor) Input gradient - -Outputs: -ParamOut : (Tensor) Output parameter -``` diff --git a/doc/fluid/dev/releasing_process_cn.md b/doc/fluid/dev/releasing_process_cn.md deleted file mode 100644 index acea9a2b5..000000000 --- a/doc/fluid/dev/releasing_process_cn.md +++ /dev/null @@ -1,195 +0,0 @@ -# PaddlePaddle发行规范 - -PaddlePaddle使用Trunk Based Development,使用[Semantic Versioning](http://semver.org/)标准表示PaddlePaddle版本号。 - -PaddlePaddle每次发新的版本,遵循以下流程: - -1. 从`develop`分支派生出新的分支,分支名为`release/版本号`。例如,`release/0.10.0` -2. 将新分支的版本打上tag,tag为`版本号rc-Patch号`。例如,第一个tag为`0.10.0-rc0`。 -3. 新分支一般不接受新的feature和优化。QA在release分支上进行测试。研发基于最新的develop开发。 -4. QA和研发发现的bug,在develop上修复验证后,cherry-pick修复到release分支。直到release分支相对稳定。 -5. 如果有需要,在release分支最新代码上打上新的tag,比如`0.10.0-rc1`,让更多的用户加入测试。重复3-4步。 -6. release分支稳定后,打上正式的release tag,比如`0.10.0`。 -7. 将这个版本的python wheel包发布到pypi。 -8. 更新Docker镜像(参考后面的操作细节)。 - -需要注意的是: - -* bug修复需要先在develop上进行,然后进入release分支。而不是直接在release分支上开发。 - -* release分支原则上只接受修复类的修改,不接受新feature。 - -## 发布wheel包到pypi - -1. 使用[PaddlePaddle CI](https://paddleci.ngrok.io/project.html?projectId=Manylinux1&tab=projectOverview) -完成自动化二进制编译,参考下图,选择需要发布的版本(通常包含一个CPU版本和一个GPU版本),点击"run"右侧的"..."按钮,可以 -弹出下面的选择框,在第二个tab (Changes)里选择需要发布的分支,这里选择0.11.0,然后点击"Run Build"按钮。 - -1. 等待编译完成后可以在此页面的"Artifacts"下拉框中找到生成的3个二进制文件,分别对应CAPI,`cp27m`和`cp27mu`的版本。 -1. 由于pypi.python.org目前遵循[严格的命名规范PEP 513](https://www.python.org/dev/peps/pep-0513),在使用twine上传之前,需要重命名wheel包中platform相关的后缀,比如将`linux_x86_64`修改成`manylinux1_x86_64`。 -1. 上传: -``` -cd build/python -pip install twine -twine upload dist/[package to upload] -``` - -* 注:CI环境使用 https://github.com/PaddlePaddle/buildtools 这里的DockerImage作为编译环境以支持更多的Linux - 发型版,如果需要手动编译,也可以使用这些镜像。这些镜像也可以从 https://hub.docker.com/r/paddlepaddle/paddle_manylinux_devel/tags/ 下载得到。 -* pypi不支持覆盖上传,所以一个版本号的wheel包发布之后,不可以更改。下一个wheel包需要更新版本号才可以上传。 - -## 发布Docker镜像 - -上述PaddlePaddle CI编译wheel完成后会自动将Docker镜像push到DockerHub,所以,发布Docker镜像只需要对自动push的镜像打上 -版本号对应的tag即可: - -``` -docker pull [镜像]:latest -docker tag [镜像]:latest [镜像]:[version] -docker push [镜像]:[version] -``` - -需要更新的镜像tag包括: - -* `[version]`: CPU版本 -* `[version]-openblas`: openblas版本 -* `[version]-gpu`: GPU版本(CUDA 8.0 cudnn 5) -* `[version]-gpu-[cudaver]-[cudnnver]`: 不同cuda, cudnn版本的镜像 - -之后可进入 https://hub.docker.com/r/paddlepaddle/paddle/tags/ 查看是否发布成功。 - -## PaddlePaddle 分支规范 - -PaddlePaddle开发过程使用[Trunk Based Development](https://trunkbaseddevelopment.com/) 开发规范。 - -* `develop`分支为开发(develop branch)版本分支。每一个`develop`分支的版本都经过单元测试。并且会经过模型回归测试。 -* `release/版本号`分支为每一次Release时建立的临时分支。release分支主要用于测试,bug修复和最终发版。 -* `master`分支因为历史原因,已经废弃。 - -* 其他开发者fork的feature branch。 - * 建议,开发者的feature branch需要同步主版本库的`develop`分支。 - * 建议,开发者的feature branch需要基于主版本库中的`develop`分支。 - * 当feature branch开发完毕后,向PaddlePaddle的主版本库提交`Pull Reuqest`,进而进行代码评审。 - * 在评审过程中,开发者修改自己的代码,可以继续在自己的feature branch提交代码。 - -## PaddlePaddle回归测试列表 - -TODO - -### PaddlePaddle Book中所有章节 - -PaddlePaddle每次发版本首先要保证PaddlePaddle Book中所有章节功能的正确性。功能的正确性包括验证PaddlePaddle目前的`paddle_trainer`训练和纯使用`Python`训练(V2和Fluid)模型正确性。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
新手入门章节 识别数字 图像分类词向量 情感分析语意角色标注 机器翻译个性化推荐
API.V2 + Docker + GPU
API.V2 + Docker + CPU
`paddle_trainer` + Docker + GPU
`paddle_trainer` + Docker + CPU
API.V2 + Ubuntu + GPU
API.V2 + Ubuntu + CPU
`paddle_trainer` + Ubuntu + GPU
`paddle_trainer` + Ubuntu + CPU
diff --git a/doc/fluid/dev/releasing_process_en.md b/doc/fluid/dev/releasing_process_en.md deleted file mode 100644 index 00650946f..000000000 --- a/doc/fluid/dev/releasing_process_en.md +++ /dev/null @@ -1,228 +0,0 @@ -# PaddlePaddle Releasing Process - -PaddlePaddle manages its branches using Trunk Based Development, and [Semantic Versioning](http://semver.org/) as it's version number semantics. - -Each time we release a new PaddlePaddle version, we should follow the below steps: - -1. Create a new release branch from `develop`,named `release/[version]`. E.g.,`release/0.10.0` -2. Create a new tag for the release branch, tag format: `version-rc.Patch`. E.g. the first tag is `0.10.0-rc0`。 -3. New release branch normally doesn't accept new features or optimizations. QA will test on the release branch. Developer should develop based on `develop` branch. -4. If QA or Developer find bugs. They should first fix and verify on `develop` branch. Then cherry-pick the fix to the release branch. Wait until the release branch is stable. -5. If necessary, create a new tag on the relese branch, e.g. `0.10.0-rc1`. Involve more users to try it and repeat step 3-4. -6. After release branch is stable,Create the official release tag,such as `0.10.0`. -7. Release the python wheel package to pypi. -8. Update the docker image (More details below). - -NOTE: - -* bug fix should happen on `develop` branch, then cherry-pick to relese branch. Avoid developing directly on release branch. - -* release normally only accept bug fixes. Don't add new features. - - -## Publish Wheel Packages to pypi - -1. Use our [CI tool](https://paddleci.ngrok.io/project.html?projectId=Manylinux1&tab=projectOverview) - to build all wheel packages needed to publish. As shown in the following picture, choose a build - version, click "..." button on the right side of "Run" button, and switch to the second tab in the -pop-up box, choose the current release branch and click "Run Build" button. You may repeat this - step to start different versions of builds. - -1. After the build succeeds, download the outputs under "Artifacts" including capi, `cp27m` and `cp27mu`. -1. Since pypi.python.org follows [PEP 513](https://www.python.org/dev/peps/pep-0513), before we - upload the package using `twine`, we need to rename the package from `linux_x86_64` to - `manylinux1_x86_64`. -1. Start the upload: - ``` - cd build/python - pip install twine - twine upload dist/[package to upload] - ``` - -* NOTE: We use a special Docker image to build our releases to support more Linux distributions, you can - download it from https://hub.docker.com/r/paddlepaddle/paddle_manylinux_devel/tags/, or build it using - scripts under `tools/manylinux1`. -* pypi does not allow overwrite the already uploaded version of wheel package, even if you delete the - old version. you must change the version number before upload a new one. - -### Publish wheel Packages for MacOS - -You need to build the binary wheel package for MacOS before publishing, to -make sure that the package can be used by many versions of MacOS -(10.11, 10.12, 10.13) and different python installs (python.org, homebrew, etc.), -you must build the package ***exactly*** following below steps: - -Build steps: - -1. install python from python.org downloads, and make sure it's currently in use - in your system. -1. `export MACOSX_DEPLOYMENT_TARGET=10.11`, use `10.11` is enough for recent versions. -1. `git clone https://github.com/PaddlePaddle/Paddle.git && cd Paddle && mkdir build && cd build` -1. `cmake -DWITH_GPU=OFF -DWITH_MKL=OFF -DWITH_SYSTEM_BLAS=OFF ..`, make sure the output of `cmake` command is using the correct python interpreter installed from python.org -1. `make -j` -1. `pip install delocate` -1. `mkdir fixed_wheel && delocate-wheel -w fixed_wheel python/dist/*.whl` - -Then the whl under `fixed_wheel` is ready to upload. - -Install steps: - -1. run `pip install paddlepaddle...whl` -1. find the `libpython.dylib` that are currently in use: - - for python.org package installs, do nothing. - - for other python installs, find the path of `libpython*.dylib` and `export LD_LIBRARY_PATH=you path && DYLD_LIBRARY_PATH=your path` - -## Publish Docker Images - -Our CI tool will push latest images to DockerHub, so we only need to push a version tag like: - -``` -docker pull [image]:latest -docker tag [image]:latest [image]:[version] -docker push [image]:[version] -``` - -Tags that need to be updated are: -* `[version]`: CPU only version image -* `[version]-openblas`: openblas version image -* `[version]-gpu`: GPU version(using CUDA 8.0 cudnn 5) -* `[version]-gpu-[cudaver]-[cudnnver]`: tag for different cuda, cudnn versions - -You can then checkout the latest pushed tags at https://hub.docker.com/r/paddlepaddle/paddle/tags/. - -## Branching Model - -PaddlePaddle uses [Trunk Based Development](https://trunkbaseddevelopment.com/) as our branching model. - -* `develop` branch is used for development. Each comment to `develop` branc goes through unit tests and model regression tests. -* `release/[version]` branch is used for each release. Release branch is used for tests, bug fix and evetual release. -* `master` branch as been deprecated for historical reasons - -* Developer's feature branch。 - * Developer's feature branch should sync with upstream `develop` branch. - * Developer's feature branch should be forked from upstream `develop` branch. - * After feature branch is ready, create a `Pull Request` against the Paddle repo and go through code review. - * In the review process, develop modify codes and push to their own feature branch. - -## PaddlePaddle Regression Test List - -TODO - -### All Chapters of PaddlePaddle Book - -We need to guarantee that all the chapters of PaddlePaddle Book can run correctly. Including -V1 (`paddle_trainer` training) and V2 training and Fluid training. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Linear RegressionRecognize DigitsImage ClassificationWord2VecPersonalized RecommendationSentiment AnalysisSemantic Role LabelingMachine Translation
API.V2 + Docker + GPU
API.V2 + Docker + CPU
`paddle_trainer` + Docker + GPU
`paddle_trainer` + Docker + CPU
API.V2 + Ubuntu + GPU
API.V2 + Ubuntu + CPU
`paddle_trainer` + Ubuntu + GPU
`paddle_trainer` + Ubuntu + CPU
diff --git a/doc/fluid/dev/src/fc.py b/doc/fluid/dev/src/fc.py deleted file mode 100644 index 3b074821c..000000000 --- a/doc/fluid/dev/src/fc.py +++ /dev/null @@ -1,81 +0,0 @@ -# Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - - -def fc(input, - size, - num_flatten_dims=1, - param_attr=None, - bias_attr=None, - act=None, - name=None): - """ - **Fully Connected Layer** - - The fully connected layer can take multiple tensors as its inputs. It - creates a variable called weights for each input tensor, which represents - a fully connected weight matrix from each input unit to each output unit. - The fully connected layer multiplies each input tensor with its coresponding - weight to produce an output Tensor. If multiple input tensors are given, - the results of multiple multiplications will be sumed up. If bias_attr is - not None, a bias variable will be created and added to the output. Finally, - if activation is not None, it will be applied to the output as well. - - This process can be formulated as follows: - - .. math:: - - Out = Act({\sum_{i=0}^{N-1}X_iW_i + b}) - - In the above equation: - - * :math:`N`: Number of the input. - * :math:`X_i`: The input tensor. - * :math:`W`: The weights created by this layer. - * :math:`b`: The bias parameter created by this layer (if needed). - * :math:`Act`: The activation function. - * :math:`Out`: The output tensor. - - Args: - input (Variable|list of Variable): The input tensor(s) of this layer, and the dimension of - the input tensor(s) is at least 2. - size(int): The number of output units in this layer. - num_flatten_dims (int, default 1): The fc layer can accept an input tensor with more than - two dimensions. If this happens, the multidimensional tensor will first be flattened - into a 2-dimensional matrix. The parameter `num_flatten_dims` determines how the input - tensor is flattened: the first `num_flatten_dims` (inclusive, index starts from 1) - dimensions will be flatten to form the first dimension of the final matrix (height of - the matrix), and the rest `rank(X) - num_flatten_dims` dimensions are flattened to - form the second dimension of the final matrix (width of the matrix). For example, suppose - `X` is a 6-dimensional tensor with a shape [2, 3, 4, 5, 6], and `num_flatten_dims` = 3. - Then, the flattened matrix will have a shape [2 x 3 x 4, 5 x 6] = [24, 30]. - param_attr (ParamAttr|list of ParamAttr, default None): The parameter attribute for learnable - parameters/weights of this layer. - bias_attr (ParamAttr|list of ParamAttr, default None): The parameter attribute for the bias - of this layer. If it is set to None, no bias will be added to the output units. - act (str, default None): Activation to be applied to the output of this layer. - name (str, default None): The name of this layer. - - Returns: - A tensor variable storing the transformation result. - - Raises: - ValueError: If rank of the input tensor is less than 2. - - Examples: - .. code-block:: python - - data = fluid.layers.data(name="data", shape=[32, 32], dtype="float32") - fc = fluid.layers.fc(input=data, size=1000, act="tanh") - """ diff --git a/doc/fluid/dev/support_new_device.md b/doc/fluid/dev/support_new_device.md deleted file mode 100644 index 051a463cf..000000000 --- a/doc/fluid/dev/support_new_device.md +++ /dev/null @@ -1,240 +0,0 @@ -# Design Doc: Supporting new Device/Library - -## Background - -Deep learning has a high demand for computing resources. New high-performance devices and computing libraries are appearing very frequently. Deep learning frameworks have to integrate these high-performance devices and computing libraries in a flexible and efficient manner. - -On one hand, hardware and computing libraries usually do not have a one-to-one correspondence. For example, Intel CPUs support Eigen and MKL computing libraries while Nvidia GPUs support Eigen and cuDNN computing libraries. We have to implement operator specific kernels for each computing library. - -On the other hand, users usually do not want to care about the low-level hardware and computing libraries when writing a neural network configuration. In Fluid, `Layer` is exposed in `Python`, and `Operator` is exposed in `C++`. Both `Layer` and `Operator` are hardware independent. - -So, how to support a new Device/Library in Fluid becomes a challenge. - - -## Basic: Integrate A New Device/Library - -For a general overview of fluid, please refer to the [overview doc](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/fluid/read_source.md). - -There are mainly three parts that we have to consider while integrating a new device/library: - -- Place and DeviceContext: indicate the device id and manage hardware resources - -- Memory and Tensor: malloc/free data on certain device - -- Math Functor and OpKernel: implement computing unit on certain devices/libraries - -### Place and DeviceContext - -Please note that device and computing library are not one-to-one corresponding. A device can have a lot of computing libraries and a computing library can also support several devices. - -#### Place -Fluid uses class [Place](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/platform/place.h#L55) to represent the device memory where data is located. If we add another device, we have to add the corresponding `DevicePlace`. - -``` - | CPUPlace -Place --| CUDAPlace - | FPGAPlace -``` - -And `Place` is defined as follows: - -``` -typedef boost::variant Place; -``` - -#### DeviceContext - -Fluid uses class [DeviceContext](https://github.com/PaddlePaddle/Paddle/blob/develop/fluid/paddle/platform/device_context.h#L30) to manage the resources in different libraries, such as CUDA stream in `CDUADeviceContext`. There are also inheritance relationships between different kinds of `DeviceContext`. - - -``` - /-> CPUDeviceContext -DeviceContext ----> CUDADeviceContext - \-> FPGADeviceContext -``` - -An example of Nvidia GPU is as follows: - -- DeviceContext - - -``` -class DeviceContext { - virtual Place GetPlace() const = 0; -}; -``` - - -- CUDADeviceContext - - -``` -class CUDADeviceContext : public DeviceContext { - Place GetPlace() const override { return place_; } -private: - CUDAPlace place_; - cudaStream_t stream_; - cublasHandle_t cublas_handle_; - std::unique_ptr eigen_device_; // binds with stream_ -}; -``` - -### Memory and Tensor - - -#### memory module - -Fluid provides the following [memory interfaces](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/memory/memory.h#L36): - -``` -template -void* Alloc(Place place, size_t size); - -template -void Free(Place place, void* ptr); - -template -size_t Used(Place place); -``` - -To implement these interfaces, we have to implement MemoryAllocator for different Devices. - - -#### Tensor - -[Tensor](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/framework/tensor.h#L36) holds data with some shape in a specific Place. - -```cpp -class Tensor { - public: - /*! Return a pointer to mutable memory block. */ - template - inline T* data(); - - /** - * @brief Return a pointer to mutable memory block. - * @note If not exist, then allocation. - */ - template - inline T* mutable_data(platform::Place place); - - /** - * @brief Return a pointer to mutable memory block. - * - * @param[in] dims The dimensions of the memory block. - * @param[in] place The place of the memory block. - * - * @note If not exist, then allocation. - */ - template - inline T* mutable_data(DDim dims, platform::Place place); - - /*! Resize the dimensions of the memory block. */ - inline Tensor& Resize(const DDim& dims); - - /*! Return the dimensions of the memory block. */ - inline const DDim& dims() const; - - private: - /*! holds the memory block if allocated. */ - std::shared_ptr holder_; - - /*! points to dimensions of memory block. */ - DDim dim_; -}; -``` - -`Placeholder` is used to delay memory allocation; that is, we can first define a tensor, using `Resize` to configurate its shape, and then call `mutuable_data` to allocate the actual memory. - -```cpp -paddle::framework::Tensor t; -paddle::platform::CPUPlace place; -// set size first -t.Resize({2, 3}); -// allocate memory on CPU later -t.mutable_data(place); -``` - - - -### Math Functor and OpKernel - -Fluid implements computing units based on different DeviceContexts. Some computing units are shared between operators. This common part will be put in operators/math directory as basic Functors. - -Let's take [MaxOutFunctor](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/operators/math/maxouting.h#L27) as an example: - -The interface is defined in the header file. - -``` -template -class MaxOutFunctor { - public: - void operator()(const DeviceContext& context, const framework::Tensor& input, - framework::Tensor* output, int groups); -}; -``` - -CPU implementation is in .cc file - -``` -template -class MaxOutFunctor { - public: - void operator()(const platform::CPUDeviceContext& context, - const framework::Tensor& input, framework::Tensor* output, - int groups) { - ... - } -}; -``` - -CUDA implementation is in .cu file - -``` -template -class MaxOutFunctor { - public: - void operator()(const platform::CUDADeviceContext& context, - const framework::Tensor& input, framework::Tensor* output, - int groups) { - ... - } -}; -``` - - -We first obtain the computing handle from a concrete DeviceContext and then compute on tensors. - -The implementation of `OpKernel` is similar to math functors, the extra thing we need to do is to register the OpKernel in a global map. - -Fluid provides different register interfaces in op_registry.h - - -Let's take [Crop](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/operators/crop_op.cc#L134) operator as an example: - -In .cc file: - -``` -REGISTER_OP_CPU_KERNEL(crop, ops::CropKernel); -REGISTER_OP_CPU_KERNEL( - crop_grad, ops::CropGradKernel); -``` - -In .cu file: - -``` -REGISTER_OP_CUDA_KERNEL(crop, ops::CropKernel); -REGISTER_OP_CUDA_KERNEL( - crop_grad, ops::CropGradKernel); -``` - - -## Advanced topics: How to switch between different Device/Library - -Generally, we will implement OpKernel for all Device/Library of an Operator. We can easily train a Convolutional Neural Network in GPU. However, some OpKernel is not suitable on a specific Device. For example, crf operator can only run on CPU, whereas most other operators can run on GPU. To achieve high performance in such circumstance, we have to switch between different Device/Library. - - -For more details, please refer to following docs: - -- operator kernel type [doc](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/fluid/design/multi_devices/operator_kernel_type.md) -- switch kernel [doc](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/fluid/design/execution/switch.md) diff --git a/doc/fluid/dev/use_eigen_cn.md b/doc/fluid/dev/use_eigen_cn.md deleted file mode 100644 index 56203d6fa..000000000 --- a/doc/fluid/dev/use_eigen_cn.md +++ /dev/null @@ -1,146 +0,0 @@ -# 在Paddle中如何使用Eigen - -神经网络本质上是一个计算图,计算需要的数据存放在`Tensor`中,而计算过程是由`Operartor`来描述的。在执行时,`Operator`调用对应`OpKernel`中的`Compute`接口,实现对`Tensor`的操作。 - - -## Eigen Tensor模块 - -Eigen Tensor模块对element-wise计算提供了强大的支持,并且书写一份代码,可以同时在CPU、GPU执行。但Eigen Tensor是一个正在开发中的模块,因此可能测试不够完备,文档较少。 - -关于Eigen Tensor模块的详细介绍请参考[Eigen文档](https://bitbucket.org/eigen/eigen/src/default/unsupported/Eigen/CXX11/src/Tensor/README.md) - - -## paddle::framework::Tensor - -Paddle Tensor定义在framework目录下,其主要接口如下: - -```cpp -class Tensor { - public: - /*! Return a pointer to mutable memory block. */ - template - inline T* data(); - - /** - * @brief Return a pointer to mutable memory block. - * @note If not exist, then allocation. - */ - template - inline T* mutable_data(platform::Place place); - - /** - * @brief Return a pointer to mutable memory block. - * - * @param[in] dims The dimensions of the memory block. - * @param[in] place The place of the memory block. - * - * @note If not exist, then allocation. - */ - template - inline T* mutable_data(DDim dims, platform::Place place); - - /*! Resize the dimensions of the memory block. */ - inline Tensor& Resize(const DDim& dims); - - /*! Return the dimensions of the memory block. */ - inline const DDim& dims() const; - - private: - /*! holds the memory block if allocated. */ - std::shared_ptr holder_; - - /*! points to dimensions of memory block. */ - DDim dim_; -}; -``` - -`Placeholder`的作用是延迟分配内存,即我们可以先定义一个Tensor,然后使用Resize接口设置Tensor的大小,最后再调用mutable_data接口分配实际的内存。 - -```cpp -paddle::framework::Tensor t; -paddle::platform::CPUPlace place; -// set size first -t.Resize({2, 3}); -// allocate memory on CPU later -t.mutable_data(place); -``` - -### paddle::framework::Tensor使用样例 -下面以AddOp为例说明Tensor的使用过程: - -- InferShape - -在运行神经网络计算图时,我们先调用每个`Operator`的`InferShape`接口,根据输入Tensor的大小来设置输出Tensor的大小,`Resize`接口会被调用。 - -```cpp -void InferShape(const framework::InferShapeContext &ctx) const override { - PADDLE_ENFORCE_EQ(ctx.Input("X")->dims(), - ctx.Input("Y")->dims(), - "Two input of Add Op's dimension must be same."); - ctx.Output("Out")->Resize(ctx.Input("X")->dims()); -} -``` - - -- Run - -`Operator`的`Run`接口最终会调用对应`OpKernel`的`Compute`接口,在这时真正的分配内存,`mutable_data`接口会被调用。 - -```cpp -void Compute(const framework::ExecutionContext& context) const override { - auto* input0 = context.Input("X"); - auto* input1 = context.Input("Y"); - auto* output = context.Output("Out"); - - output->mutable_data(context.GetPlace()); - - auto x = EigenVector::Flatten(*input0); - auto y = EigenVector::Flatten(*input1); - auto z = EigenVector::Flatten(*output); - - auto place = context.GetEigenDevice(); - - z.device(place) = x + y; -} -``` - - -### paddle::framework::Tensor到EigenTensor的转换 - -如上一小节所示,在具体的计算中,我们需要先把输入Tensor和输出Tensor转换为Eigen支持的格式。我们在[eigen.h](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/framework/eigen.h)中提供了一些全局函数用来实现paddle::framework::Tensor到EigenTensor/EigenMatrix/EigenVector/EigenScalar的转换。 - -以EigenTensor为例,做一个介绍 - -```cpp -Tensor t; -float* p = t.mutable_data(make_ddim({1, 2, 3}), platform::CPUPlace()); -for (int i = 0; i < 1 * 2 * 3; i++) { - p[i] = static_cast(i); -} - -EigenTensor::Type et = EigenTensor::From(t); -``` - -From是EigenTensor模板提供的一个接口,可以实现从paddle::framework::Tensor到对EigenTensor的转换。由于Tensor的rank是模板参数,因此在转换时需要显示的指定。 - -在Eigen中,不同rank的Tensor是不同类型,Vector是rank为1的Tensor。需要额外注意的是,EigenVector::From方法是把paddle中的一维Tensor转为Eigen的一维Tensor,在这里用EigenVector来表示;而EigenVector::Flatten方法是把paddle中的一个Tensor进行reshape操作,压扁成为Eigen的一维Tensor,类型仍然为EigenVector。 - -更多的转换方法请参考eigen_test.cc中的[单元测试](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/framework/eigen_test.cc)。 - - - -## 实现计算 - -当需要完成计算时,我们需要等式左边的EigenTensor调用device接口。在这里需要注意的是,这里的EigenTensor之间的运算只是改变了原有Tensor中的数据,而不会改变原有Tensor的shape信息。 - -```cpp -auto x = EigenVector::Flatten(*input0); -auto y = EigenVector::Flatten(*input1); -auto z = EigenVector::Flatten(*output); -auto place = context.GetEigenDevice(); -z.device(place) = x + y; -``` - -在这段代码中,input0/input1/output可以是任意维度的Tensor。我们调用了EigenVector的Flatten接口,把任意维度的Tensor转为了一维的EigenVector。而在计算结束之后,input0/input1/output的原有shape信息不变。如果想改变原有Tensor的shape信息,可以调用Resize接口进行改变。 - -由于Eigen Tensor模块的文档较少,我们可以参考TensorFlow的[kernels](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/core/kernels)模块下的相关`OpKernel`的计算代码。 diff --git a/doc/fluid/dev/use_eigen_en.md b/doc/fluid/dev/use_eigen_en.md deleted file mode 100644 index 3313d097c..000000000 --- a/doc/fluid/dev/use_eigen_en.md +++ /dev/null @@ -1,146 +0,0 @@ -# How to use Eigen in Paddle - -Essentially, a neural network is a compute graph. T data needed for the computation is stored in `Tensor`s and its computation procedure is described by `Operator`s. An `Operator` calls the `Compute` interface in its corresponding `OpKernel` and operates on the `Tensor`. - - -## Eigen Tensor Module - -The Eigen Tensor module supports powerful element-wise computation. In addition, a piece of code written using it can be run on both the CPU and the GPU. - -Note that Eigen Tensor is still being actively developed, so its tests are not completely covered and its documentation may be sparse. - -For details on Eigen Tensor module, please see [doc 1](https://github.com/RLovelett/eigen/blob/master/unsupported/Eigen/CXX11/src/Tensor/README.md) and [doc 2](https://bitbucket.org/eigen/eigen/src/default/unsupported/Eigen/CXX11/src/Tensor/README.md). - - -## paddle::framework::Tensor - -Paddle Tensor's is defined in the framework directory with the following interface: - -```cpp -class Tensor { - public: - /*! Return a pointer to mutable memory block. */ - template - inline T* data(); - - /** - * @brief Return a pointer to mutable memory block. - * @note If not exist, then allocation. - */ - template - inline T* mutable_data(platform::Place place); - - /** - * @brief Return a pointer to mutable memory block. - * - * @param[in] dims The dimensions of the memory block. - * @param[in] place The place of the memory block. - * - * @note If not exist, then allocation. - */ - template - inline T* mutable_data(DDim dims, platform::Place place); - - /*! Resize the dimensions of the memory block. */ - inline Tensor& Resize(const DDim& dims); - - /*! Return the dimensions of the memory block. */ - inline const DDim& dims() const; - - private: - /*! holds the memory block if allocated. */ - std::shared_ptr holder_; - - /*! points to dimensions of memory block. */ - DDim dim_; -}; -``` - -`Placeholder` is used to delay memory allocation; that is, we can first define a tensor, using `Resize` to configure its shape, and then call `mutuable_data` to allocate the actual memory. - -```cpp -paddle::framework::Tensor t; -paddle::platform::CPUPlace place; -// set size first -t.Resize({2, 3}); -// allocate memory on CPU later -t.mutable_data(place); -``` - -### paddle::framework::Tensor Usage -`AddOp` demonstrates Tensor's usage. - -- InferShape - -When computing a neural network's compute graph, first call every `Operator`'s `InferShape` method, and use `Resize` to configure the size of the output tensor. - -```cpp -void InferShape(const framework::InferShapeContext &ctx) const override { - PADDLE_ENFORCE_EQ(ctx.Input("X")->dims(), - ctx.Input("Y")->dims(), - "Two input of Add Op's dimension must be same."); - ctx.Output("Out")->Resize(ctx.Input("X")->dims()); -} -``` - - -- Run - -```cpp -void Compute(const framework::ExecutionContext& context) const override { - auto* input0 = context.Input("X"); - auto* input1 = context.Input("Y"); - auto* output = context.Output("Out"); - - output->mutable_data(context.GetPlace()); - - auto x = EigenVector::Flatten(*input0); - auto y = EigenVector::Flatten(*input1); - auto z = EigenVector::Flatten(*output); - - auto place = context.GetEigenDevice(); - - z.device(place) = x + y; -} -``` - - -## paddle::framework::Tensor到EigenTensor的转换 - -As shown above, in actual computation, we need to transform the input and output `Tensor`s into formats Eigen supports. We show some functions in [eigen.h](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/framework/eigen.h) to implement the transformation from `paddle::framework::Tensor`to `EigenTensor/EigenMatrix/EigenVector/EigenScalar`. - -Using EigenTensor as an example: - -```cpp -Tensor t; -float* p = t.mutable_data(make_ddim({1, 2, 3}), platform::CPUPlace()); -for (int i = 0; i < 1 * 2 * 3; i++) { - p[i] = static_cast(i); -} - -EigenTensor::Type et = EigenTensor::From(t); -``` - -`From` is an interfacing method provided by the EigenTensor template, which implements the transformation from a `paddle::framework::Tensor` object to an EigenTensor. Since `rank` is a template parameter, it needs to be explicitly specified at the time of the transformation. - -In Eigen, tensors with different ranks are different types, with `Vector` bring a rank-1 instance. Note that `EigenVector::From` uses a transformation from an 1-dimensional Paddle tensor to a 1-dimensional Eigen tensor while `EigenVector::Flatten` reshapes a paddle tensor and flattens it into a 1-dimensional Eigen tensor. Both resulting tensors are still typed EigenVector. - -For more transformations, see the [unit tests](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/framework/eigen_test.cc) in the `eigen_test.cc` file. - - - -## Implementing Computation - -While computing, the device interface is needed from the EigenTensors on the left hand side of the assignments. Note that the computation between EigenTensors only changes the data originally inthe Tensor and does not change all the shape information associated with the Tensor. - -```cpp -auto x = EigenVector::Flatten(*input0); -auto y = EigenVector::Flatten(*input1); -auto z = EigenVector::Flatten(*output); -auto place = context.GetEigenDevice(); -z.device(place) = x + y; -``` - -In this code segment, input0/input1/output can be Tensors of arbitrary dimension. We are calling Flatten from EigenVector, transforming a tensor of any dimension into a 1-dimensional EigenVector. After completing computation, input0/input1/output will retain the same shape information, and they can be resized using the `Resize` interface. - -Because the Eigen Tensor module is under-documented, please refer to `OpKernel`'s computation code in TensorFlow's [kernel module documentation](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/core/kernels). diff --git a/doc/fluid/dev/versioning_en.md b/doc/fluid/dev/versioning_en.md deleted file mode 100644 index f15fd029d..000000000 --- a/doc/fluid/dev/versioning_en.md +++ /dev/null @@ -1,66 +0,0 @@ -# Versioning (Work In Progress) - - -PaddlePaddle framework follows Semantic Versioning 2.0 (semver). -Each release has version of the following format: MAJOR.MINOR.PATCH -(e.g. 1.2.0). Some key points: - - - * Major version number change can result in backward-incompatible changes. Codes working in old version don’t necessarily work in the new version. In addition, data, such as program model and checkpointed parameters, generated by the previous major version might not work in the new version. Tools will be attempted to be built to help the release migration. - - * Minor version number change always maintain backward compatibility. It normally contains compatible improvements and bug fixes. - - * Patch number change is for bug fixes. - - * Violation of the policy are considered as bugs and should be fixed. - -### What is Covered - -* All public documented Python APIs, excluding those live in the contrib namespace. - -### What is Not Covered - -* If an API’s implementation has bugs, we reserve the rights to fix the bugs and change the behavior. - -* The Python APIs in contrib namespace. - -* The Python function and classes that start with ‘_’. - -* The offline tools. - -* The data generated by the framework, such as serialized Program model file and checkpointed variables, are subject to different versioning scheme described below. - -* C++ Inference APIs. (To be covered) - - -## Data - - -Data refers to the artifacts generated by the framework. Here, we specifically mean model Program file and the checkpointed variables. - - - -* Backward Compatibility: User sometimes generates Data at PaddlePaddle version 1.1 and expects it to be consumed by PaddlePaddle version 1.2. - This can happen when an new online system wants to serve an old model trained previously. - - - -* Forward Compatibility: User sometimes generates Data at PaddlePaddle version 1.2 and expects it to be consumed by PaddlePaddle version 1.1. - The can happen when an new successful research model want to be served by an old online system that is not frequently upgraded. - - - -### Versioning - -Data version. Data is assigned an integer version number. Version is increased when incompatible change is introduced. - -PaddlePaddle framework has an interval of Data version that it supports. PadlePaddle framework within the same major version (semver) cannot drop support of lower version of Data. Hence, a minor version change cannot drop support of Data version. - - -For example, For PaddlePaddle version 1.1, it supports Program version 3 to 5. Later, Program version is increased from 5 to 6 due to addition of an attribute. As a result PaddlePaddle version 1.1 won’t be able to consume it. PaddlePaddle 1.2 should support Program version 3 to 6. PaddlePaddle can only drop support for Program version 3 until PaddlePaddle version 2.0. - - - -### Known Issues - -Currently, forward compatibility for new Data version is best-effort. diff --git a/doc/fluid/dev/write_docs_cn.md b/doc/fluid/dev/write_docs_cn.md deleted file mode 120000 index 57812a271..000000000 --- a/doc/fluid/dev/write_docs_cn.md +++ /dev/null @@ -1 +0,0 @@ -../../v2/dev/write_docs_cn.md \ No newline at end of file diff --git a/doc/fluid/dev/write_docs_cn.rst b/doc/fluid/dev/write_docs_cn.rst deleted file mode 120000 index 2c281eaaf..000000000 --- a/doc/fluid/dev/write_docs_cn.rst +++ /dev/null @@ -1 +0,0 @@ -../../v2/dev/write_docs_cn.rst \ No newline at end of file diff --git a/doc/fluid/dev/write_docs_en.rst b/doc/fluid/dev/write_docs_en.rst deleted file mode 100644 index cb2b9b0ff..000000000 --- a/doc/fluid/dev/write_docs_en.rst +++ /dev/null @@ -1 +0,0 @@ -../../v2/dev/write_docs_en.rst \ No newline at end of file diff --git a/doc/fluid/faq/faq.rst b/doc/fluid/faq/faq.rst deleted file mode 100644 index 3b4bd4f89..000000000 --- a/doc/fluid/faq/faq.rst +++ /dev/null @@ -1,12 +0,0 @@ -################### -编译安装与单元测试 -################### - -1. 通过pip安装的PaddlePaddle在 :code:`import paddle.fluid` 报找不到 :code:`libmkldnn.so` 或 :code:`libmklml_intel.so` ------------------------------------------------------------------------------------------- -出现这种问题的原因是在导入 :code:`paddle.fluid` 时需要加载 :code:`libmkldnn.so` 和 :code:`libmklml_intel.so`, -但是系统没有找到该文件。一般通过pip安装PaddlePaddle时会将 :code:`libmkldnn.so` 和 :code:`libmklml_intel.so` -拷贝到 :code:`/usr/local/lib` 路径下,所以解决办法是将该路径加到 :code:`LD_LIBRARY_PATH` 环境变量下, -即: :code:`export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH` 。 - -**注意**:如果是在虚拟环境中安装PaddlePaddle, :code:`libmkldnn.so` 和 :code:`libmklml_intel.so` 可能不在 :code:`/usr/local/lib` 路径下。 diff --git a/doc/fluid/faq/index_cn.rst b/doc/fluid/faq/index_cn.rst deleted file mode 100644 index bb2ed9921..000000000 --- a/doc/fluid/faq/index_cn.rst +++ /dev/null @@ -1,9 +0,0 @@ -FAQ -==== - -本文档对关于PaddlePaddle的一些常见问题提供了解答。如果您的问题未在此处,请您到 `PaddlePaddle社区 `_ 查找答案或直接提 `issue `_ ,我们会及时进行回复。 - -.. toctree:: - :maxdepth: 1 - - faq.rst diff --git a/doc/fluid/faq/index_en.rst b/doc/fluid/faq/index_en.rst deleted file mode 100644 index 395c11098..000000000 --- a/doc/fluid/faq/index_en.rst +++ /dev/null @@ -1,2 +0,0 @@ -FAQ ------------- diff --git a/doc/fluid/getstarted/Developer's_Guide_to_Paddle_Fluid.md b/doc/fluid/getstarted/Developer's_Guide_to_Paddle_Fluid.md deleted file mode 100644 index 4128bdee6..000000000 --- a/doc/fluid/getstarted/Developer's_Guide_to_Paddle_Fluid.md +++ /dev/null @@ -1,1814 +0,0 @@ - -# Paddle Fluid 开发者指南 - ---- - -### ==1==. 为什么需要 PaddlePaddle Fluid? - ---- - -### 两个基础问题 - - - -1. 如何描述机器学习模型和优化过程? - - 完备自洽,表达能力足以支持潜在出现的各种计算需求 -1. 如何充分利用资源高效计算? - - 支持异步设备、多卡、分布式计算 - - 降低计算/计算优化的开发成本 - - …… - - - ---- - -### 如何描述模型和优化过程? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
一组连续执行的layersvariable和operator构成的计算图 不再有模型的概念
2013 Caffe,Theano, Torch, PaddlePaddle
2015 TensorFlow, MxNet, Caffe2, ONNX, n-graph
2016 PyTorch, TensorFlow Eager Execution, **==PaddlePaddle Fluid==**
- ---- - - -###