build_from_source.md 9.7 KB
Newer Older
L
liaogang 已提交
1
Installing from Sources
Z
zhangjinchao01 已提交
2 3
=================

L
liaogang 已提交
4 5 6 7
* [1. Download and Setup](#download)
* [2. Requirements](#requirements)
* [3. Build on Ubuntu](#ubuntu)
* [4. Build on Mac OS X](#mac)
L
liaogang 已提交
8

L
liaogang 已提交
9 10
## <span id="download">Download and Setup</span> 
You can download PaddlePaddle from the [github source](https://github.com/gangliao/Paddle).
Z
zhangjinchao01 已提交
11

L
liaogang 已提交
12 13 14
```bash
git clone https://github.com/baidu/Paddle paddle
```
Z
zhangjinchao01 已提交
15

L
liaogang 已提交
16
## <span id="requirements">Requirements</span>
Z
zhangjinchao01 已提交
17

L
liaogang 已提交
18 19
To compile the source code, your computer must be equipped with GCC >=4.6 or Clang Compiler.
### Dependencies
Z
zhangjinchao01 已提交
20

L
liaogang 已提交
21 22 23 24
- **CMake**: version >= 2.8
- **BLAS**: MKL, OpenBlas or ATLAS
- **protobuf**: version >= 2.4, **Note: 3.x is not supported**
- **python**: only python 2.7 is supported currently
Z
zhangjinchao01 已提交
25

L
liaogang 已提交
26
### Options
Z
zhangjinchao01 已提交
27

L
liaogang 已提交
28
PaddlePaddle supports some build options. To enable it, first you need to install the related libraries. 
Z
zhangjinchao01 已提交
29

L
liaogang 已提交
30 31 32 33 34 35 36 37 38 39 40
    Optional            | Description
    ------------        | :-----------
    **WITH_GPU**        | Compile with GPU mode.
    **WITH_DOUBLE**     | Compile with double precision floating-point, default: single precision. |
    **WITH_GLOG**       | Compile with glog. If not found, default: an internal log implementation.
    **WITH_GFLAGS**     | Compile with gflags. If not found, default: an internal flag implementation.
    **WITH_TESTING**    | Compile with gtest for PaddlePaddle's unit testing. 
    **WITH_DOC**        | Compile to generate PaddlePaddle's docs, default: disabled (OFF).
    **WITH_SWIG_PY**    | Compile with python predict API, default: disabled (OFF).
    **WITH_STYLE_CHECK**| Compile with code style check, default: enabled (ON).
|
Z
zhangjinchao01 已提交
41

L
liaogang 已提交
42 43 44 45
**Note:**
  - The GPU version works best with Cuda Toolkit 7.5 and cuDNN v5.
  - Other versions like Cuda Toolkit 6.5, 7.0, 8.0 and cuDNN v2, v3, v4 are also supported.
  - **To utilize cuDNN v5, Cuda Toolkit 7.5 is prerequisite and vice versa.**
Z
zhangjinchao01 已提交
46

L
liaogang 已提交
47
As a simple example, consider the following:  
Z
zhangjinchao01 已提交
48

L
liaogang 已提交
49
1. **Python Dependencies(optional)**
Z
zhangjinchao01 已提交
50
  
L
liaogang 已提交
51
    To compile PaddlePaddle with python predict API, make sure swig installed and set `-DWITH_SWIG_PY=ON` as follows:
Z
zhangjinchao01 已提交
52

L
liaogang 已提交
53 54 55 56 57
    ```bash
    # install swig on ubuntu
    sudo apt-get install swig
    # install swig on Mac OS X
    brew install swig
Z
zhangjinchao01 已提交
58

L
liaogang 已提交
59 60 61
    # active swig in cmake
    cmake .. -DWITH_SWIG_PY=ON
    ```
Z
zhangjinchao01 已提交
62

L
liaogang 已提交
63
2. **Doc Dependencies(optional)**
Z
zhangjinchao01 已提交
64

L
liaogang 已提交
65
    To generate PaddlePaddle's documentation, install dependencies and set `-DWITH_DOC=ON` as follows:
Z
zhangjinchao01 已提交
66

L
liaogang 已提交
67 68 69
    ```bash
    pip install 'sphinx>=1.4.0'
    pip install sphinx_rtd_theme breathe recommonmark
Z
zhangjinchao01 已提交
70

L
liaogang 已提交
71 72 73 74
    # install doxygen on Ubuntu
    sudo apt-get install doxygen 
    # install doxygen on Mac OS X
    brew install doxygen
Z
zhangjinchao01 已提交
75

L
liaogang 已提交
76 77 78
    # active docs in cmake
    cmake .. -DWITH_DOC=ON`
    ```
Z
zhangjinchao01 已提交
79

L
liaogang 已提交
80
## <span id="ubuntu">Build on Ubuntu 14.04</span>
Z
zhangjinchao01 已提交
81

L
liaogang 已提交
82
### Install Dependencies
Z
zhangjinchao01 已提交
83

L
liaogang 已提交
84
- **CPU Dependencies**
Z
zhangjinchao01 已提交
85

L
liaogang 已提交
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
    ```bash
    # necessary
    sudo apt-get update
    sudo apt-get install -y g++ make cmake build-essential libatlas-base-dev python python-pip libpython-dev m4 libprotobuf-dev protobuf-compiler python-protobuf python-numpy git
    # optional
    sudo apt-get install libgoogle-glog-dev
    sudo apt-get install libgflags-dev
    sudo apt-get install libgtest-dev
    sudo pip install wheel
    pushd /usr/src/gtest
    cmake .
    make
    sudo cp *.a /usr/lib
    popd
    ```
  
- **GPU Dependencies (optional)**
Z
zhangjinchao01 已提交
103

L
liaogang 已提交
104
    To build GPU version, you will need the following installed:
Z
zhangjinchao01 已提交
105

L
liaogang 已提交
106 107 108 109
        1. a CUDA-capable GPU
        2. A supported version of Linux with a gcc compiler and toolchain
        3. NVIDIA CUDA Toolkit (available at http://developer.nvidia.com/cuda-downloads)
        4. NVIDIA cuDNN Library (availabel at https://developer.nvidia.com/cudnn)
Z
zhangjinchao01 已提交
110

L
liaogang 已提交
111 112 113 114 115
    The CUDA development environment relies on tight integration with the host development environment,
    including the host compiler and C runtime libraries, and is therefore only supported on
    distribution versions that have been qualified for this CUDA Toolkit release.
        
    After downloading cuDNN library, issue the following commands:
Z
zhangjinchao01 已提交
116

L
liaogang 已提交
117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
    ```bash
    sudo tar -xzf cudnn-7.5-linux-x64-v5.1.tgz -C /usr/local
    sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*
    ```
    Then you need to set LD\_LIBRARY\_PATH, CUDA\_HOME and PATH environment variables in ~/.bashrc.

    ```bash
    export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
    export CUDA_HOME=/usr/local/cuda
    export PATH=/usr/local/cuda/bin:$PATH
    ```

### Build and Install

As usual, the best option is to create build folder under paddle project directory.
Z
zhangjinchao01 已提交
132 133

```bash
L
liaogang 已提交
134 135
mkdir build && cd build
cmake ..
Z
zhangjinchao01 已提交
136 137
```

L
liaogang 已提交
138 139 140
CMake first check PaddlePaddle's dependecies in system default path. After installing some optional
libraries, corresponding build option will be set automatically (for instance, glog, gtest and gflags).
If still not found, you can manually set it based on CMake error information from your screen.
Z
zhangjinchao01 已提交
141

L
liaogang 已提交
142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
As a simple example, consider the following:

- **Only CPU**

  ```bash
  cmake  .. -DWITH_GPU=OFF -DWITH_DOC=OFF
  ```
- **GPU**

  ```bash
  cmake .. -DWITH_GPU=ON -DWITH_DOC=OFF
  ```

- **GPU with doc and swig**

  ```bash
  cmake .. -DWITH_GPU=ON -DWITH_DOC=ON -DWITH_SWIG_PY=ON
  ``` 
Z
zhangjinchao01 已提交
160 161 162 163 164

Finally, you can download source code and build:

```bash
# you can add build option here, such as:    
L
liaogang 已提交
165
cmake .. -DWITH_GPU=ON -DWITH_DOC=OFF -DCMAKE_INSTALL_PREFIX=<path to install>
W
wangmiao1981 已提交
166 167
# please use sudo make install, if you want
# to install PaddlePaddle into the system
Z
zhangjinchao01 已提交
168
make -j `nproc` && make install
L
liaogang 已提交
169
# set PaddlePaddle installation path in ~/.bashrc
L
liaogang 已提交
170
export PATH=<path to install>/bin:$PATH
Z
zhangjinchao01 已提交
171 172
```

L
liaogang 已提交
173 174 175 176 177 178
**Note:**

If you set `WITH_SWIG_PY=ON`, related python dependencies also need to be installed.
Otherwise, PaddlePaddle will automatically install python dependencies
at first time when user run paddle commands, such as `paddle version`, `paddle train`.
It may require sudo privileges:
Z
zhangjinchao01 已提交
179 180

```bash
L
liaogang 已提交
181 182 183 184
# you can run
sudo pip install <path to install>/opt/paddle/share/wheels/*.whl
# or just run 
sudo paddle version
Z
zhangjinchao01 已提交
185
```
L
liaogang 已提交
186

L
liaogang 已提交
187 188 189 190 191 192 193
## <span id="mac">Building on Mac OS X</span>

### Prerequisites
This guide is based on Mac OS X 10.11 (El Capitan). Note that if you are running an up to date version of OS X, 
you will already have Python 2.7.10 and Numpy 1.8 installed.

The best option is to use the package manager homebrew to handle installations and upgrades for you.
L
liaogang 已提交
194
To install [homebrew](http://brew.sh/), first open a terminal window (you can find Terminal in the Utilities folder in Applications), and issue the command:
L
liaogang 已提交
195 196 197 198 199 200 201 202 203 204 205 206

```bash
# install brew
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
# install pip
easy_install pip
```

### Install Dependencies

- **CPU Dependencies**

L
liaogang 已提交
207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222
  ```bash
  # Install fundamental dependents 
  brew install glog gflags cmake protobuf openblas

  # Install google test on Mac OS X
  # Download gtest 1.7.0
  wget https://github.com/google/googletest/archive/release-1.7.0.tar.gz
  tar -xvf googletest-release-1.7.0.tar.gz && cd googletest-release-1.7.0
  # Build gtest
  mkdir build && cmake ..
  make
  # Install gtest library
  sudo cp -r ../include/gtest /usr/local/include/
  sudo cp lib*.a /usr/local/lib
  ```

L
liaogang 已提交
223 224
- **GPU Dependencies(optional)**

L
liaogang 已提交
225
    To build GPU version, you will need the following installed:
L
liaogang 已提交
226

L
liaogang 已提交
227 228 229 230 231
        1. a CUDA-capable GPU
        2. Mac OS X 10.11 or later
        2. the Clang compiler and toolchain installed using Xcode
        3. NVIDIA CUDA Toolkit (available at http://developer.nvidia.com/cuda-downloads)
        4. NVIDIA cuDNN Library (availabel at https://developer.nvidia.com/cudnn)
L
liaogang 已提交
232

L
liaogang 已提交
233 234 235 236 237
    The CUDA development environment relies on tight integration with the host development environment,
    including the host compiler and C runtime libraries, and is therefore only supported on
    distribution versions that have been qualified for this CUDA Toolkit release.
        
    1. After downloading cuDNN library, issue the following commands:
L
liaogang 已提交
238

L
liaogang 已提交
239 240 241 242 243
        ```bash
        sudo tar -xzf cudnn-7.5-osx-x64-v5.0-ga.tgz -C /usr/local
        sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*
        ```
    2. Then you need to set DYLD\_LIBRARY\_PATH, CUDA\_HOME and PATH environment variables in ~/.bashrc.
L
liaogang 已提交
244

L
liaogang 已提交
245 246 247 248
        ```bash
        export DYLD_LIBRARY_PATH=/usr/local/cuda/lib:$DYLD_LIBRARY_PATH
        export PATH=/usr/local/cuda/bin:$PATH
        ```
L
liaogang 已提交
249

L
liaogang 已提交
250
### Build and Install
L
liaogang 已提交
251

L
liaogang 已提交
252
As usual, the best option is to create build folder under paddle project directory.
L
liaogang 已提交
253 254

```bash
L
liaogang 已提交
255 256
mkdir build && cd build
cmake ..
L
liaogang 已提交
257 258
```

L
liaogang 已提交
259 260 261
CMake first check PaddlePaddle's dependecies in system default path. After installing some optional
libraries, corresponding build option will be set automatically (for instance, glog, gtest and gflags).
If still not found, you can manually set it based on CMake error information from your screen.
L
liaogang 已提交
262

L
liaogang 已提交
263
As a simple example, consider the following:
L
liaogang 已提交
264

L
liaogang 已提交
265
- **Only CPU**
L
liaogang 已提交
266

L
liaogang 已提交
267 268 269 270
  ```bash
  cmake  .. -DWITH_GPU=OFF -DWITH_DOC=OFF
  ```
- **GPU**
L
liaogang 已提交
271

L
liaogang 已提交
272 273 274
  ```bash
  cmake .. -DWITH_GPU=ON -DWITH_DOC=OFF
  ```
L
liaogang 已提交
275

L
liaogang 已提交
276
- **GPU with doc and swig**
L
liaogang 已提交
277

L
liaogang 已提交
278 279 280
  ```bash
  cmake .. -DWITH_GPU=ON -DWITH_DOC=ON -DWITH_SWIG_PY=ON
  ``` 
L
liaogang 已提交
281

L
liaogang 已提交
282
Finally, you can build PaddlePaddle:
L
liaogang 已提交
283 284 285

```bash
# you can add build option here, such as:    
L
liaogang 已提交
286 287
cmake .. -DWITH_GPU=ON -DWITH_DOC=OFF -DCMAKE_INSTALL_PREFIX=<installation path>
# please use sudo make install, if you want to install PaddlePaddle into the system
L
liaogang 已提交
288
make -j `nproc` && make install
L
liaogang 已提交
289 290
# set PaddlePaddle installation path in ~/.bashrc
export PATH=<installation path>/bin:$PATH
L
liaogang 已提交
291 292
```

L
liaogang 已提交
293 294 295 296 297 298 299

**Note:**

If you set `WITH_SWIG_PY=ON`, related python dependencies also need to be installed.
Otherwise, PaddlePaddle will automatically install python dependencies
at first time when user run paddle commands, such as `paddle version`, `paddle train`.
It may require sudo privileges:
L
liaogang 已提交
300 301

```bash
L
liaogang 已提交
302
# you can run
L
liaogang 已提交
303
sudo pip install <path to install>/opt/paddle/share/wheels/*.whl
L
liaogang 已提交
304 305
# or just run 
sudo paddle version
L
liaogang 已提交
306
```