3 # This script tests the basic behavior of weights-only quantization
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)
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"
18 source "${CONFIG_PATH}"
20 echo "-- Found CIRCLE_QUANTIZER: ${CIRCLE_QUANTIZER_PATH}"
21 echo "-- Found CIRCLE_TENSORDUMP: ${CIRCLE_TENSORDUMP_PATH}"
22 echo "-- Found workdir: ${WORKDIR}"
29 while [ "$1" != "" ]; do
33 TESTCASE="${MODELNAME}.${GRANULARITY}.${DTYPE}"
35 TESTED+=("${TESTCASE}")
37 TESTCASE_FILE="${WORKDIR}/${TESTCASE}"
38 TEST_RESULT_FILE="${BIN_PATH}/${TESTCASE}"
40 PASSED_TAG="${TEST_RESULT_FILE}.wo_quantization.passed"
43 cat > "${TEST_RESULT_FILE}_wo_quantization.log" <(
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"
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"
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
64 if [[ $? -eq 0 ]]; then
69 if [[ -f "${PASSED_TAG}" ]]; then
77 if [[ ${#TESTED[@]} -ne ${#PASSED[@]} ]]; then
79 for TEST in "${FAILED[@]}"