serving_build.sh 9.2 KB
Newer Older
G
guru4elephant 已提交
1 2
#!/usr/bin/env bash

3 4 5 6 7 8 9 10 11 12 13 14
function unsetproxy() {
    HTTP_PROXY_TEMP=$http_proxy
    HTTPS_PROXY_TEMP=$https_proxy
    unset http_proxy
    unset https_proxy
}

function setproxy() {
    export http_proxy=$HTTP_PROXY_TEMP
    export https_proxy=$HTTPS_PROXY_TEMP
}

G
guru4elephant 已提交
15 16 17 18 19 20 21 22 23 24 25 26 27 28
function init() {
    source /root/.bashrc
    set -v
    export PYTHONROOT=/usr
    cd Serving
}

function check_cmd() {
    eval $@
    if [ $? -ne 0 ]; then
        exit 1
    fi
}

29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
function rerun() {
    if [ $# -ne 2 ]; then
        echo "usage: rerun command rerun-times"
        exit 1
    fi
    local command=$1
    local times=$2
    for((i=1;i<=${times};i++))
    do
        if [ ${i} != 1 ]; then
            echo "${i}-th run command: ${command}..."
        fi
        eval $command
        if [ $? -eq 0 ]; then
            return 0
        fi
        echo "${i}-th run(command: ${command}) failed."
    done
    exit 1
}

G
guru4elephant 已提交
50
function build_client() {
51
    local TYPE=$1
G
guru4elephant 已提交
52
    local DIRNAME=build-client-$TYPE
53 54
    mkdir $DIRNAME # pwd: /Serving
    cd $DIRNAME # pwd: /Serving/build-client-$TYPE
G
guru4elephant 已提交
55 56 57 58 59 60
    case $TYPE in
        CPU|GPU)
            cmake -DPYTHON_INCLUDE_DIR=$PYTHONROOT/include/python2.7/ \
                  -DPYTHON_LIBRARIES=$PYTHONROOT/lib64/libpython2.7.so \
                  -DPYTHON_EXECUTABLE=$PYTHONROOT/bin/python \
                  -DCLIENT_ONLY=ON ..
61
            rerun "make -j2 >/dev/null" 3 # due to some network reasons, compilation may fail
Y
Your Name 已提交
62
            pip install -U python/dist/paddle_serving_client* >/dev/null
G
guru4elephant 已提交
63 64 65 66 67 68 69
            ;;
        *)
            echo "error type"
            exit 1
            ;;
    esac
    echo "build client $TYPE part finished as expected."
Y
Your Name 已提交
70
    cd .. # pwd: /Serving
71
    # rm -rf $DIRNAME
G
guru4elephant 已提交
72 73 74
}

function build_server() {
75
    local TYPE=$1
G
guru4elephant 已提交
76
    local DIRNAME=build-server-$TYPE
77 78
    mkdir $DIRNAME # pwd: /Serving
    cd $DIRNAME # pwd: /Serving/build-server-$TYPE
G
guru4elephant 已提交
79 80 81 82 83 84
    case $TYPE in
        CPU)
            cmake -DPYTHON_INCLUDE_DIR=$PYTHONROOT/include/python2.7/ \
                  -DPYTHON_LIBRARIES=$PYTHONROOT/lib64/libpython2.7.so \
                  -DPYTHON_EXECUTABLE=$PYTHONROOT/bin/python \
                  -DCLIENT_ONLY=OFF ..
85 86
            rerun "make -j2 >/dev/null" 3 # due to some network reasons, compilation may fail
            check_cmd "make install -j2 >/dev/null"
Y
Your Name 已提交
87
            pip install -U python/dist/paddle_serving_server* >/dev/null
G
guru4elephant 已提交
88 89 90 91 92 93 94
            ;;
        GPU)
            cmake -DPYTHON_INCLUDE_DIR=$PYTHONROOT/include/python2.7/ \
                  -DPYTHON_LIBRARIES=$PYTHONROOT/lib64/libpython2.7.so \
                  -DPYTHON_EXECUTABLE=$PYTHONROOT/bin/python \
                  -DCLIENT_ONLY=OFF \
                  -DWITH_GPU=ON ..
95 96
            rerun "make -j2 >/dev/null" 3 # due to some network reasons, compilation may fail
            check_cmd "make install -j2 >/dev/null"
Y
Your Name 已提交
97
            pip install -U python/dist/paddle_serving_server* >/dev/null
G
guru4elephant 已提交
98 99 100 101 102 103 104
            ;;
        *)
            echo "error type"
            exit 1
            ;;
    esac
    echo "build server $TYPE part finished as expected."
Y
Your Name 已提交
105
    cd .. # pwd: /Serving
Y
Your Name 已提交
106
    # rm -rf $DIRNAME    for export SERVING_BIN
G
guru4elephant 已提交
107 108
}

109
function kill_server_process() {
Y
Your Name 已提交
110
    ps -ef | grep "serving" | grep -v serving_build | grep -v grep | awk '{print $2}' | xargs kill
111 112
}

G
guru4elephant 已提交
113
function python_test_fit_a_line() {
Y
Your Name 已提交
114 115
    # pwd: /Serving/python/examples
    cd fit_a_line # pwd: /Serving/python/examples/fit_a_line
G
guru4elephant 已提交
116 117
    sh get_data.sh
    local TYPE=$1
W
wangjiawei04 已提交
118
    echo $TYPE
G
guru4elephant 已提交
119 120 121
    case $TYPE in
        CPU)
            # test rpc
122 123
            check_cmd "python -m paddle_serving_server.serve --model uci_housing_model --port 9393 --thread 4 > /dev/null &"
            sleep 5 # wait for the server to start
G
guru4elephant 已提交
124
            check_cmd "python test_client.py uci_housing_client/serving_client_conf.prototxt > /dev/null"
125
            kill_server_process
B
barrierye 已提交
126
            
G
guru4elephant 已提交
127
            # test web
128
            unsetproxy # maybe the proxy is used on iPipe, which makes web-test failed.
129 130 131 132 133
            check_cmd "python -m paddle_serving_server.serve --model uci_housing_model --name uci --port 9393 --thread 4 --name uci > /dev/null &"
            sleep 5 # wait for the server to start
            check_cmd "curl -H \"Content-Type:application/json\" -X POST -d '{\"x\": [0.0137, -0.1136, 0.2553, -0.0692, 0.0582, -0.0727, -0.1583, -0.0584, 0.6283, 0.4919, 0.1856, 0.0795, -0.0332], \"fetch\":[\"price\"]}' http://127.0.0.1:9393/uci/prediction"
            # check http code
            http_code=`curl -H "Content-Type:application/json" -X POST -d '{"x": [0.0137, -0.1136, 0.2553, -0.0692, 0.0582, -0.0727, -0.1583, -0.0584, 0.6283, 0.4919, 0.1856, 0.0795, -0.0332], "fetch":["price"]}' -s -w "%{http_code}" -o /dev/null http://127.0.0.1:9393/uci/prediction`
134 135
            setproxy # recover proxy state
            kill_server_process
Y
Your Name 已提交
136 137 138 139
            if [ ${http_code} -ne 200 ]; then
                echo "HTTP status code -ne 200"
                exit 1
            fi
G
guru4elephant 已提交
140 141
            ;;
        GPU)
142 143 144 145 146 147
            # test rpc
            check_cmd "python -m paddle_serving_server_gpu.serve --model uci_housing_model --port 9393 --thread 4 --gpu_ids 0 > /dev/null &"
            sleep 5 # wait for the server to start
            check_cmd "python test_client.py uci_housing_client/serving_client_conf.prototxt > /dev/null"
            kill_server_process
            # test web
148
            unsetproxy # maybe the proxy is used on iPipe, which makes web-test failed.
149 150 151 152 153
            check_cmd "python -m paddle_serving_server_gpu.serve --model uci_housing_model --port 9393 --thread 2 --gpu_ids 0 --name uci > /dev/null &"
            sleep 5 # wait for the server to start
            check_cmd "curl -H \"Content-Type:application/json\" -X POST -d '{\"x\": [0.0137, -0.1136, 0.2553, -0.0692, 0.0582, -0.0727, -0.1583, -0.0584, 0.6283, 0.4919, 0.1856, 0.0795, -0.0332], \"fetch\":[\"price\"]}' http://127.0.0.1:9393/uci/prediction"
            # check http code
            http_code=`curl -H "Content-Type:application/json" -X POST -d '{"x": [0.0137, -0.1136, 0.2553, -0.0692, 0.0582, -0.0727, -0.1583, -0.0584, 0.6283, 0.4919, 0.1856, 0.0795, -0.0332], "fetch":["price"]}' -s -w "%{http_code}" -o /dev/null http://127.0.0.1:9393/uci/prediction`
154 155
            setproxy # recover proxy state
            kill_server_process
Y
Your Name 已提交
156 157 158 159
            if [ ${http_code} -ne 200 ]; then
                echo "HTTP status code -ne 200"
                exit 1
            fi
G
guru4elephant 已提交
160 161 162 163 164 165 166 167
            ;;
        *)
            echo "error type"
            exit 1
            ;;
    esac
    echo "test fit_a_line $TYPE part finished as expected."
    rm -rf image kvdb log uci_housing* work*
Y
Your Name 已提交
168
    cd .. # pwd: /Serving/python/examples
G
guru4elephant 已提交
169 170
}

W
wangjiawei04 已提交
171
function python_run_criteo_ctr_with_cube() {
Y
merge  
Your Name 已提交
172
    # pwd: /Serving/python/examples
W
wangjiawei04 已提交
173
    local TYPE=$1
174
    yum install -y bc >/dev/null
Y
merge  
Your Name 已提交
175
    cd criteo_ctr_with_cube # pwd: /Serving/python/examples/criteo_ctr_with_cube
B
barrierye 已提交
176 177 178 179 180 181 182 183 184 185 186
    case $TYPE in
        CPU)
            check_cmd "wget https://paddle-serving.bj.bcebos.com/unittest/ctr_cube_unittest.tar.gz"
            check_cmd "tar xf ctr_cube_unittest.tar.gz"
            check_cmd "mv models/ctr_client_conf ./"
            check_cmd "mv models/ctr_serving_model_kv ./"
            check_cmd "mv models/data ./cube/"
            check_cmd "mv models/ut_data ./"
            cp ../../../build-server-$TYPE/output/bin/cube* ./cube/ 
            mkdir -p $PYTHONROOT/lib/python2.7/site-packages/paddle_serving_server/serving-cpu-avx-openblas-0.1.3/
            yes | cp ../../../build-server-$TYPE/output/demo/serving/bin/serving $PYTHONROOT/lib/python2.7/site-packages/paddle_serving_server/serving-cpu-avx-openblas-0.1.3/
W
wangjiawei04 已提交
187

B
barrierye 已提交
188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210
            sh cube_prepare.sh &
            check_cmd "mkdir work_dir1 && cp cube/conf/cube.conf ./work_dir1/"    
            python test_server.py ctr_serving_model_kv &
            check_cmd "python test_client.py ctr_client_conf/serving_client_conf.prototxt ./ut_data >score"
            AUC=$(tail -n 2  score | awk 'NR==1')
            VAR2="0.70"
            RES=$( echo "$AUC>$VAR2" | bc )
            if [[ $RES -eq 0 ]]; then
                echo "error with criteo_ctr_with_cube inference auc test, auc should > 0.70"
                exit 1
            fi
            echo "criteo_ctr_with_cube inference auc test success"
            ps -ef | grep "paddle_serving_server" | grep -v grep | awk '{print $2}' | xargs kill
            ps -ef | grep "cube" | grep -v grep | awk '{print $2}' | xargs kill
            ;;
        GPU)
            ;;
        *)
            echo "error type"
            exit 1
            ;;
    esac
    echo "test criteo_ctr_with_cube $TYPE part finished as expected."
Y
merge  
Your Name 已提交
211
    cd .. # pwd: /Serving/python/examples
W
wangjiawei04 已提交
212 213
}

G
guru4elephant 已提交
214
function python_run_test() {
215
    # Using the compiled binary
Y
Your Name 已提交
216
    local TYPE=$1 # pwd: /Serving
Y
Your Name 已提交
217
    export SERVING_BIN=$PWD/build-server-${TYPE}/core/general-server/serving
Y
Your Name 已提交
218 219
    cd python/examples # pwd: /Serving/python/examples
    python_test_fit_a_line $TYPE # pwd: /Serving/python/examples
Y
merge  
Your Name 已提交
220
    python_run_criteo_ctr_with_cube $TYPE # pwd: /Serving/python/examples
G
guru4elephant 已提交
221
    echo "test python $TYPE part finished as expected."
Y
Your Name 已提交
222
    cd ../.. # pwd: /Serving
G
guru4elephant 已提交
223 224 225
}

function main() {
Y
Your Name 已提交
226 227 228 229 230
    local TYPE=$1 # pwd: /
    init # pwd: /Serving
    build_client $TYPE # pwd: /Serving
    build_server $TYPE # pwd: /Serving
    python_run_test $TYPE # pwd: /Serving
G
guru4elephant 已提交
231 232 233 234
    echo "serving $TYPE part finished as expected."
}

main $@