forked from apache/mxnet
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Jenkinsfile
137 lines (129 loc) · 3.65 KB
/
Jenkinsfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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
81
82
83
84
85
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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
// Jenkins pipeline
// See documents at https://jenkins.io/doc/book/pipeline/jenkinsfile/
def mx_lib = 'lib/libmxnet.so, lib/libmxnet.a, dmlc-core/libdmlc.a, nnvm/lib/libnnvm.a'
def mx_run = 'tests/ci_build/ci_build.sh'
def max_time = 30 // in minutes
def pack_lib(name, mx_lib) {
sh """
echo "Packing ${mx_lib} into ${name}"
echo ${mx_lib} | sed -e 's/,/ /g' | xargs md5sum
"""
stash includes: mx_lib, name: name
}
def unpack_lib(name, mx_lib) {
unstash name
sh """
echo "Unpacked ${mx_lib} from ${name}"
echo ${mx_lib} | sed -e 's/,/ /g' | xargs md5sum
"""
}
def init_git() {
checkout scm
retry(5) {
timeout(time: 2, unit: 'MINUTES') {
sh 'git submodule update --init'
}
}
}
stage("Sanity Check") {
timeout(time: max_time, unit: 'MINUTES') {
node {
ws('workspace/sanity') {
init_git()
sh "${mx_run} lint make cpplint"
sh "${mx_run} lint make rcpplint"
sh "${mx_run} lint make jnilint"
sh "${mx_run} lint make pylint"
}
}
}
}
stage('Build') {
parallel 'CPU': {
timeout(time: max_time, unit: 'MINUTES') {
node {
ws('workspace/build-cpu') {
init_git()
def flag = 'USE_BLAS=openblas'
try {
echo 'Try incremental build from a previous workspace'
sh "${mx_run} cpu make -j\$(nproc) ${flag}"
} catch (exc) {
echo 'Fall back to build from scratch'
sh "${mx_run} cpu make clean"
sh "${mx_run} cpu make -j\$(nproc) ${flag}"
}
pack_lib 'cpu', mx_lib
}
}
}
},
'GPU: CUDA7.5+cuDNN5': {
timeout(time: max_time, unit: 'MINUTES') {
node('GPU') {
ws('workspace/build-gpu') {
init_git()
def flag = 'USE_BLAS=openblas USE_CUDA=1 USE_CUDA_PATH=/usr/local/cuda USE_CUDNN=1'
try {
echo 'Try incremental build from a previous workspace'
sh "${mx_run} gpu make -j\$(nproc) ${flag}"
} catch (exc) {
echo 'Fall back to build from scratch'
sh "${mx_run} gpu make clean"
sh "${mx_run} gpu make -j\$(nproc) ${flag}"
}
pack_lib 'gpu', mx_lib
}
}
}
},
'Amalgamation': {
timeout(time: max_time, unit: 'MINUTES') {
node() {
ws('workspace/amalgamation') {
init_git()
def flag = '-C amalgamation/ USE_BLAS=openblas MIN=1'
sh "${mx_run} cpu make ${flag}"
}
}
}
}
}
stage('Unit Test') {
parallel 'Python2/3: CPU': {
timeout(time: max_time, unit: 'MINUTES') {
node {
ws('workspace/ut-python-cpu') {
init_git()
unpack_lib 'cpu', mx_lib
sh "${mx_run} cpu 'PYTHONPATH=./python/ nosetests --with-timer --verbose tests/python/unittest'"
sh "${mx_run} cpu 'PYTHONPATH=./python/ nosetests-3.4 --with-timer --verbose tests/python/unittest'"
}
}
}
},
'Python2/3: GPU': {
timeout(time: max_time, unit: 'MINUTES') {
node('GPU') {
ws('workspace/ut-python-gpu') {
init_git()
unpack_lib 'gpu', mx_lib
sh "${mx_run} gpu 'PYTHONPATH=./python/ nosetests --with-timer --verbose tests/python/unittest'"
sh "${mx_run} gpu 'PYTHONPATH=./python/ nosetests-3.4 --with-timer --verbose tests/python/unittest'"
}
}
}
},
'Scala: CPU': {
timeout(time: max_time, unit: 'MINUTES') {
node {
ws('workspace/ut-scala-cpu') {
init_git()
unpack_lib 'cpu', mx_lib
sh "${mx_run} cpu make scalapkg USE_BLAS=openblas"
sh "${mx_run} cpu make scalatest USE_BLAS=openblas"
}
}
}
}
}