README.md 3.9 KB
Newer Older
1 2 3
Paddle for Linux-musl Usage Guide
===========================================

4
# Introduction
5 6 7
Paddle can be built for linux-musl such as alpine, and be used in libos-liked SGX TEE environment. Currently supported commericial product TEE Scone, and community maintanced TEE Occlum. We also working on to support open source TEE Graphene.


8
# Build Automatically
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
1. clone paddle source from github
   
```bash
git clone https://github.com/PaddlePaddle/Paddle.git
```

2. setup build directory

```bash
# enter paddle directory
cd  ./Paddle

# create and enter building directory
mkdir -p build && cd build
```

3. build docker for compiling. use environment HTTP_PROXY/HTTPS_PROXY for proxy setup.

```bash
28 29 30
# setup proxy address, when the speed of internet is not good.
# export HTTP_PROXY='http://127.0.0.1:8080'
# export HTTPS_PROXY='https://127.0.0.1:8080'
31 32 33 34 35 36

# invoke build script
../paddle/scripts/musl_build/build_docker.sh
```

4. compile paddle in previous built docker. proxy setup method is same as previous step.
37

38 39

```bash
40 41 42
# setup proxy addresss, when the speed of internet is not good.
# export HTTP_PROXY='http://127.0.0.1:8080'
# export HTTPS_PROXY='https://127.0.0.1:8080'
43 44

# invoke build paddle script
45 46
# all arguments, such as -j8 optinal, is past to make procedure.
../paddle/scripts/musl_build/build_paddle.sh -j8
47 48

# find output wheel package
49 50
# output wheel packages will save to "./output" directory.
ls ./output/*.whl
51 52
```

53
# Build Manually  
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80

1. start up the building docker, and enter the shell in the container
```bash
# checkout paddle source code
git clone https://github.com/PaddlePaddle/Paddle.git

# entery paddle directory
cd ./Paddle

# build docker image
../paddle/scripts/musl_build/build_docker.sh

# enter the container interactive shell
BUILD_AUTO=0 ../paddle/scripts/musl_build/build_paddle.sh
```

2. Type commands to compile source manually
```sh
# compile paddle by commands
# paddle is mount to /paddle directory
# working directory is /root
mkdir build && cd build

# install python requirement
pip install -r /paddle/python/requirements.txt

# configure project with cmake
81
cmake -DWITH_MUSL=ON DWITH_CRYPTO=OFF -DWITH_MKL=OFF -DWITH_GPU=OFF -DWITH_TESTING=OFF /paddle
82

83 84 85
# run the make to build project.
# the argument -j8 is optional to accelerate compiling.
make -j8
86 87
```

88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
# Scripts
1. **build_docker.sh**
   compiling docker building script. it use alpine linux 3.10 as musl linux build enironment. it will try to install all the compiling tools, development packages, and python requirements for paddle musl compiling.
    
    environment variables:

   - WITH_PRUNE_DAYS: prune old docker images, with days limitation.
   - WITH_REBUILD: force to rebuild the image, default=0.
   - WITH_REQUIREMENT: build with the python requirements, default=1.
   - WITH_UT_REQUIREMENT: build with the unit test requirements, default=0.
   - WITH_PIP_INDEX: use custom pip index when pip install packages.
   - ONLY_NAME: only print the docker name, and exit.
   - HTTP_PROXY: use http proxy
   - HTTPS_PROXY: use https proxy

2. **build_paddle.sh** automatically or manually paddle building script. it will mount the root directory of paddle source to /paddle, and run compile procedure in /root/build directory. the output wheel package will save to the ./output directory relative to working directory.
    
    environment variables:

    - BUILD_AUTO: build the paddle automatically, save output wheel package to ./output directory, default=1.
    
    - HTTP_PROXY: use http proxy
    - HTTPS_PROXY: use https proxy


# Files
- **build_docker.sh**: docker building script
- **build_paddle.sh**: paddle building script
- **build_inside.sh**: build_paddle.sh will invoke this script inside the docker for compiling.
- **config.sh**: build config script for configure compiling option setting.
- **Dockerfile**: build docker defination file.
- **package.txt**: build required develop packages for alpine linux.
- **REAME.md**: this file.