Imported Upstream version 1.25.0
[platform/core/ml/nnfw.git] / compiler / pota-quantization-value-test / test_wo_quantization.sh
1 #!/bin/bash
2
3 # This script tests the basic behavior of weights-only quantization
4 #
5 # HOW TO USE
6 #
7 # ./test_quantization.sh <path/to/test.config> <path/to/work_dir> <TEST 1> <TEST 2> ...
8 # test.config : set ${CIRCLE_QUANTIZER_PATH} and ${CIRCLE_TENSORDUMP_PATH}"
9 # work_dir : build directory of quantization-value-test (ex: build/compiler/quantization-value-test)
10
11 SOURCE_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
12 COMPARE_SCRIPT_PATH="${SOURCE_PATH}/compare_tensors.py"
13 CONFIG_PATH="$1"; shift
14 BIN_PATH=$(dirname "${CONFIG_PATH}")
15 TEST_INPUT_PATH="${SOURCE_PATH}/test_inputs"
16 WORKDIR="$1"; shift
17
18 source "${CONFIG_PATH}"
19
20 echo "-- Found CIRCLE_QUANTIZER: ${CIRCLE_QUANTIZER_PATH}"
21 echo "-- Found CIRCLE_TENSORDUMP: ${CIRCLE_TENSORDUMP_PATH}"
22 echo "-- Found workdir: ${WORKDIR}"
23
24 TESTED=()
25 PASSED=()
26 FAILED=()
27
28 pushd "${WORKDIR}"
29 while [ "$1" != "" ]; do
30   MODELNAME=$1; shift
31   GRANULARITY=$1; shift
32   DTYPE=$1; shift
33   TESTCASE="${MODELNAME}.${GRANULARITY}.${DTYPE}"
34
35   TESTED+=("${TESTCASE}")
36
37   TESTCASE_FILE="${WORKDIR}/${TESTCASE}"
38   TEST_RESULT_FILE="${BIN_PATH}/${TESTCASE}"
39
40   PASSED_TAG="${TEST_RESULT_FILE}.wo_quantization.passed"
41   rm -f "${PASSED_TAG}"
42
43   cat > "${TEST_RESULT_FILE}_wo_quantization.log" <(
44     exec 2>&1
45     set -ex
46
47     # Run circle-quantizer with --quantize_weights
48     "${CIRCLE_QUANTIZER_PATH}" \
49       --quantize_weights float32 "${DTYPE}" "${GRANULARITY}" \
50       "${WORKDIR}/${MODELNAME}.circle" \
51       "${TEST_RESULT_FILE}.wo_quantized.circle"
52
53     # Dump scale, zp, weights values (circle-tensordump)
54     "${CIRCLE_TENSORDUMP_PATH}" \
55       "${TEST_RESULT_FILE}.wo_quantized.circle" \
56       --tensors_to_hdf5 "${TEST_RESULT_FILE}.wo_quantized.circle.h5"
57
58     # Compare result
59     "${VIRTUALENV}/bin/python" "${COMPARE_SCRIPT_PATH}" \
60       --input_h5 "${TEST_RESULT_FILE}.wo_quantized.circle.h5" \
61       --expect_dir "${SOURCE_PATH}/expected_outputs/${MODELNAME}/${GRANULARITY}/${DTYPE}/wo_quantization" \
62       --mode weights_only_quantization
63
64     if [[ $? -eq 0 ]]; then
65       touch "${PASSED_TAG}"
66     fi
67   )
68
69   if [[ -f "${PASSED_TAG}" ]]; then
70     PASSED+=("$TESTCASE")
71   else
72     FAILED+=("$TESTCASE")
73   fi
74 done
75 popd
76
77 if [[ ${#TESTED[@]} -ne ${#PASSED[@]} ]]; then
78   echo "FAILED"
79   for TEST in "${FAILED[@]}"
80   do
81     echo "- ${TEST}"
82   done
83   exit 255
84 fi
85
86 echo "PASSED"
87 exit 0