Imported Upstream version 1.8.0
[platform/core/ml/nnfw.git] / compiler / tf2circle-value-pbtxt-remote-test / testall.sh
1 #!/bin/bash
2
3 # Need at least 4 arguments
4 if [[ $# -lt 4 ]]; then
5   echo "USAGE: $0 ..."
6   echo
7   echo "ARGUMENTS:"
8   echo "  [test.config path]"
9   echo "  [WORKDIR]"
10   echo "  [REMOTE_IP]"
11   echo "  [REMOTE_USER]"
12   echo "  [Prefix1]"
13   echo "  [Prefix2]"
14   echo "  ..."
15   exit 255
16 fi
17
18 CONFIG_PATH="$1"; shift
19 WORKDIR="$1"; shift
20 REMOTE_IP="$1"; shift
21 REMOTE_USER="$1"; shift
22
23 CURRENT_DATETIME=$(date +'%Y%m%d_%H%M%S')
24 REMOTE_WORKDIR=${REMOTE_WORKDIR:-"CVT_${CURRENT_DATETIME}"}
25 RESULT_CSV="${WORKDIR}/Result_${CURRENT_DATETIME}.csv"
26
27 source "${CONFIG_PATH}"
28
29 echo "-- Found nnkit-run: ${NNKIT_RUN_PATH}"
30 echo "-- Found TF backend: ${TF_BACKEND_PATH}"
31 echo "-- Found TF2CIRCLE: ${TF2CIRCLE_PATH}"
32 echo "-- Found MODEL2NNPKG: ${MODEL2NNPKG_PATH}"
33 echo "-- Found Runtime library: ${RUNTIME_LIBRARY_PATH}"
34 echo "-- Found randomize action: ${RANDOMIZE_ACTION_PATH}"
35 echo "-- Found HDF5 export action: ${HDF5_EXPORT_ACTION_PATH}"
36 echo "-- Found HDF5 import action: ${HDF5_IMPORT_ACTION_PATH}"
37 echo "-- Found workdir: ${WORKDIR}"
38
39 if [ -z ${MODEL2NNPKG_PATH} ] || [ ! -f ${MODEL2NNPKG_PATH} ]; then
40   echo "MODEL2NNPKG is not found"
41   exit 3
42 fi
43
44 # Register remote machine ssh information
45 cat /dev/zero | ssh-keygen -q -N ""
46 ssh-copy-id -o ConnectTimeout=5 "${REMOTE_USER}@${REMOTE_IP}"
47
48 # Odroid IP address validation
49 if [[ $? -ne 0 ]]; then
50   echo "Cannot reach to given remote machine. Check IP address or username."
51   exit 5
52 fi
53
54 # Send runtime library files
55 ssh "${REMOTE_USER}@${REMOTE_IP}" "mkdir -p ${REMOTE_WORKDIR}/Product/"
56 scp -r "${RUNTIME_LIBRARY_PATH}" "${REMOTE_USER}@${REMOTE_IP}:${REMOTE_WORKDIR}/Product/"
57
58 TESTED=()
59 PASSED=()
60 FAILED=()
61 echo "TEST_NAME, TF2CIRCLE, CIRCLE_VALUE_TEST" >> ${RESULT_CSV}
62
63 pushd "${WORKDIR}"
64 while [[ $# -ne 0 ]]; do
65   PREFIX="$1"; shift
66
67   TESTED+=("${PREFIX}")
68
69   PASSED_TAG="${PREFIX}.passed"
70
71   rm -f "${PASSED_TAG}" "${PREFIX}.circle"
72
73   # Information to be recorded
74   TF2CIRCLE_PASSED=FALSE
75   CIRCLE_VALUE_PASSED=FALSE
76
77   cat > "${PREFIX}.log" <(
78     exec 2>&1
79
80     echo "-- Found pb: ${PREFIX}.pb"
81
82     # Exit immediately if any command fails
83     set -e
84     # Show commands
85     set -x
86
87     # Generate circle
88     "${TF2CIRCLE_PATH}" \
89       "${WORKDIR}/${PREFIX}.info" \
90       "${WORKDIR}/${PREFIX}.pb" \
91       "${WORKDIR}/${PREFIX}.circle"
92
93     # Run TensorFlow
94     "${NNKIT_RUN_PATH}" \
95       --backend "${TF_BACKEND_PATH}" \
96       --backend-arg "${WORKDIR}/${PREFIX}.pb" \
97       --backend-arg "${WORKDIR}/${PREFIX}.info" \
98       --pre "${RANDOMIZE_ACTION_PATH}" \
99       --pre "${HDF5_EXPORT_ACTION_PATH}" \
100       --pre-arg "${WORKDIR}/${PREFIX}.input.h5" \
101       --post "${HDF5_EXPORT_ACTION_PATH}" \
102       --post-arg "${WORKDIR}/${PREFIX}.expected.h5"
103
104     # Generate nnpackage model
105     "${MODEL2NNPKG_PATH}" -o "${WORKDIR}" "${WORKDIR}/${PREFIX}.circle"
106
107     # Copy h5 files into nnpackage
108     mkdir -p "${WORKDIR}/${PREFIX}/metadata/tc"
109     cp "${WORKDIR}/${PREFIX}.input.h5" "${WORKDIR}/${PREFIX}/metadata/tc/input.h5"
110     cp "${WORKDIR}/${PREFIX}.expected.h5" "${WORKDIR}/${PREFIX}/metadata/tc/expected.h5"
111
112     # Run test_arm_nnpkg in remote machine
113     scp -r "${WORKDIR}/${PREFIX}/" "${REMOTE_USER}@${REMOTE_IP}:${REMOTE_WORKDIR}/${PREFIX}/"
114     ssh "${REMOTE_USER}@${REMOTE_IP}" "cd ${REMOTE_WORKDIR}; ./Product/out/test/onert-test nnpkg-test -i . -o  ${PREFIX}/metadata/tc ${PREFIX}"
115
116     if [[ $? -eq 0 ]]; then
117       touch "${PASSED_TAG}"
118     fi
119   )
120
121   if [[ -f "${PREFIX}.circle" ]]; then
122     TF2CIRCLE_PASSED=TRUE
123   else
124     TF2CIRCLE_PASSED=FALSE
125   fi
126
127   if [[ -f "${PASSED_TAG}" ]]; then
128     PASSED+=("$PREFIX")
129     CIRCLE_VALUE_PASSED=TRUE
130   else
131     FAILED+=("$PREFIX")
132     CIRCLE_VALUE_PASSED=FALSE
133   fi
134
135   echo "${PREFIX}, ${TF2CIRCLE_PASSED}, ${CIRCLE_VALUE_PASSED}" >> ${RESULT_CSV}
136 done
137 popd
138
139 rm -f Result_latest
140 ln -s ${RESULT_CSV} Result_latest
141
142 if [[ ${#TESTED[@]} -ne ${#PASSED[@]} ]]; then
143   echo "FAILED"
144   for TEST in "${FAILED[@]}"
145   do
146     echo "- ${TEST}"
147   done
148   exit 255
149 fi
150
151 echo "PASSED"
152 exit 0