blob: 488c26324336948d3e1814c28b7c24d4d5693b1c [file] [log] [blame]
#!/bin/bash
# Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved.
#
# This source code is licensed under the BSD-style license found in the
# LICENSE file in the root directory of this source tree.
# Test the end-to-end quantization flow.
set -e
# shellcheck source=/dev/null
source "$(dirname "${BASH_SOURCE[0]}")/../../.ci/scripts/utils.sh"
get_shared_lib_ext() {
UNAME=$(uname)
if [[ $UNAME == "Darwin" ]];
then
EXT=".dylib"
elif [[ $UNAME == "Linux" ]];
then
EXT=".so"
else
echo "Unsupported platform $UNAME"
exit 1
fi
echo $EXT
}
test_buck2_quantization() {
echo "Building quantized ops shared library"
SO_LIB=$($BUCK build //kernels/quantized:aot_lib --show-output | grep "buck-out" | cut -d" " -f2)
echo "Run example.py"
${PYTHON_EXECUTABLE} -m "examples.quantization.example" --so_library="$SO_LIB" --model_name="$1"
echo 'Running executor_runner'
$BUCK run //examples/executor_runner:executor_runner -- --model_path="./${1}_quantized.pte"
# should give correct result
echo "Removing ${1}_quantized.pte"
rm "./${1}_quantized.pte"
}
test_cmake_quantization() {
echo "Building quantized ops shared library"
SITE_PACKAGES="$(${PYTHON_EXECUTABLE} -c 'from distutils.sysconfig import get_python_lib; print(get_python_lib())')"
CMAKE_PREFIX_PATH="${SITE_PACKAGES}/torch"
(rm -rf cmake-out \
&& mkdir cmake-out \
&& cd cmake-out \
&& retry cmake -DBUCK2="$BUCK" \
-DEXECUTORCH_BUILD_XNNPACK="$EXECUTORCH_BUILD_XNNPACK" \
-DREGISTER_QUANTIZED_OPS=ON \
-DCMAKE_PREFIX_PATH="$CMAKE_PREFIX_PATH" \
-DPYTHON_EXECUTABLE="$PYTHON_EXECUTABLE" ..)
cmake --build cmake-out -j4
EXT=$(get_shared_lib_ext)
SO_LIB="cmake-out/kernels/quantized/libquantized_ops_aot_lib$EXT"
echo "Run example.py, shared library $SO_LIB"
${PYTHON_EXECUTABLE} -m "examples.quantization.example" --so_library="$SO_LIB" --model_name="$1"
echo 'Running executor_runner'
cmake-out/executor_runner --model_path="./${1}_quantized.pte"
# should give correct result
echo "Removing ${1}_quantized.pte"
rm "./${1}_quantized.pte"
}
if [[ -z $PYTHON_EXECUTABLE ]];
then
PYTHON_EXECUTABLE=python3
fi
if [[ -z $BUCK ]];
then
BUCK=buck2
fi
if [[ "${XNNPACK_DELEGATION}" == true ]];
then
EXECUTORCH_BUILD_XNNPACK=ON
else
EXECUTORCH_BUILD_XNNPACK=OFF
fi
if [[ "$1" == "cmake" ]];
then
test_cmake_quantization "$2"
elif [[ "$1" == "buck2" ]];
then
test_buck2_quantization "$2"
else
test_cmake_quantization "$2"
test_buck2_quantization "$2"
fi