From 7a1aec9a7251dbe7b930e5b18f8d5cab7971977c Mon Sep 17 00:00:00 2001 From: NeosZhang Date: Mon, 15 Apr 2024 15:35:04 +0800 Subject: [PATCH 1/8] reformat auto_compare --- .../autogen_diopi_wrapper.py | 28 ++++++++----------- .../autogen_wrapped_code.sh | 13 ++++----- .../diopi_wrapper_template.py | 10 ++++--- dipu/torch_dipu/csrc_dipu/CMakeLists.txt | 3 +- .../torch_dipu/csrc_dipu/aten/ops/OpUtils.hpp | 21 ++++++++++++++ 5 files changed, 45 insertions(+), 30 deletions(-) diff --git a/dipu/scripts/autogen_diopi_wrapper/autogen_diopi_wrapper.py b/dipu/scripts/autogen_diopi_wrapper/autogen_diopi_wrapper.py index 84c4aa2ac..f87f2c192 100644 --- a/dipu/scripts/autogen_diopi_wrapper/autogen_diopi_wrapper.py +++ b/dipu/scripts/autogen_diopi_wrapper/autogen_diopi_wrapper.py @@ -905,8 +905,8 @@ def functions_code_gen(fun_config): ) fbody += custom_autograd_function_code fun_name = wrapper_fun_name - - if fun_config.get("autocompare", False) in [True, "True"] and fun_config.get( + print("fun_config = ", fun_config) + if fun_config.get("autocompare") not in ["disable"] and fun_config.get( "register_op", True ) in [True, "True"]: auto_compare_fun_name = fun_name + "_autocompare" @@ -929,17 +929,16 @@ def functions_code_gen(fun_config): ).replace(raw_fun_name, fun_name) ], transform_result_to_cpu_code=[], - result_compare_code=[ - create_result_compare_code(fun_config) - + ( - "\nreturn result_device;\n" - if len(get_function_return_param_from_schema(fun_config["schema"])) - > 0 - else "" - ) - ], + result_compare_code=[create_result_compare_code(fun_config)], ) fbody += autocompare_code + last_brace_pos = fbody.rfind("}") + fbody = fbody[:last_brace_pos] + fbody += ( + "\n\treturn result_device;\n}" + if len(get_function_return_param_from_schema(fun_config["schema"])) > 0 + else "\n\t}" + ) fun_name = auto_compare_fun_name if fun_config.get("custom_fallback", False) in ["False", False]: @@ -1039,12 +1038,7 @@ def parse_args(): type=boolean_string, help="whether generate code that prints op args", ) - parser.add_argument( - "--autocompare", - default=False, - type=boolean_string, - help="whether generate code that compare device calculation results with cpu calculation results", - ) + parser.add_argument( "--fun_config_dict", type=json.loads, diff --git a/dipu/scripts/autogen_diopi_wrapper/autogen_wrapped_code.sh b/dipu/scripts/autogen_diopi_wrapper/autogen_wrapped_code.sh index 3d6e0dd18..fd6e01b11 100755 --- a/dipu/scripts/autogen_diopi_wrapper/autogen_wrapped_code.sh +++ b/dipu/scripts/autogen_diopi_wrapper/autogen_wrapped_code.sh @@ -5,17 +5,16 @@ DIPU_DIR=$(readlink -f $(dirname $(readlink -f "$0"))/../..) AUTOGEN_DIOPI_WRAPPER=$DIPU_DIR/scripts/autogen_diopi_wrapper -USE_AUTOCOMPARE=${1:-OFF} -UsedVendor=${2:-cuda} -Torch_VERSION=${3:-2.1.0} -GENERATED_KERNELS_SCRIPT=${4:-$AUTOGEN_DIOPI_WRAPPER/autogen_diopi_wrapper.py} -GENERATED_KERNELS_CONFIG=${5:-$AUTOGEN_DIOPI_WRAPPER/diopi_functions.yaml} -GENERATED_KERNELS=${6:-$DIPU_DIR/torch_dipu/csrc_dipu/aten/ops/AutoGenedKernels.cpp} +UsedVendor=${1:-cuda} +Torch_VERSION=${2:-2.1.0} +GENERATED_KERNELS_SCRIPT=${3:-$AUTOGEN_DIOPI_WRAPPER/autogen_diopi_wrapper.py} +GENERATED_KERNELS_CONFIG=${4:-$AUTOGEN_DIOPI_WRAPPER/diopi_functions.yaml} +GENERATED_KERNELS=${5:-$DIPU_DIR/torch_dipu/csrc_dipu/aten/ops/AutoGenedKernels.cpp} GENERATED_KERNELS_VENDOR=${DIPU_DIR}/third_party/DIOPI/impl/${UsedVendor}/convert_config.yaml PYTHON_CMD="python3 ${GENERATED_KERNELS_SCRIPT} --out=${GENERATED_KERNELS} --config=${GENERATED_KERNELS_CONFIG} \ - --autocompare=${USE_AUTOCOMPARE} --print_op_arg=True --use_diopi_adapter=False --print_func_call_info=True \ + --print_op_arg=True --use_diopi_adapter=False --print_func_call_info=True \ --fun_config_dict='{\"current_device\":\"${UsedVendor}\",\"current_torch_ver\":\"${Torch_VERSION}\"}'" if [ -f "$GENERATED_KERNELS_VENDOR" ]; then diff --git a/dipu/scripts/autogen_diopi_wrapper/diopi_wrapper_template.py b/dipu/scripts/autogen_diopi_wrapper/diopi_wrapper_template.py index ba723da1b..a073a2db6 100644 --- a/dipu/scripts/autogen_diopi_wrapper/diopi_wrapper_template.py +++ b/dipu/scripts/autogen_diopi_wrapper/diopi_wrapper_template.py @@ -171,12 +171,14 @@ class $autograd_function_name : public torch::autograd::Function<$autograd_funct std::cout << std::endl << __FUNCTION__ << std::endl; $transform_input_to_cpu_code - $execute_op_on_cpu_code - $execute_op_on_device_code + + if (useAutoCompare()) { + $execute_op_on_cpu_code - $transform_result_to_cpu_code + $transform_result_to_cpu_code - $result_compare_code + $result_compare_code + } } """ diff --git a/dipu/torch_dipu/csrc_dipu/CMakeLists.txt b/dipu/torch_dipu/csrc_dipu/CMakeLists.txt index 20bb442fe..7b3ebaa18 100644 --- a/dipu/torch_dipu/csrc_dipu/CMakeLists.txt +++ b/dipu/torch_dipu/csrc_dipu/CMakeLists.txt @@ -1,5 +1,4 @@ #[[ Dependencies ]] -option(USE_AUTOCOMPARE "whether to use USE_AUTOCOMPARE" OFF) # Import Python3::Python, Python3_EXECUTABLE # Also see https://cmake.org/cmake/help/latest/module/FindPython3.html @@ -58,7 +57,7 @@ endif() add_custom_command( OUTPUT "${GENERATED_KERNELS}" - COMMAND bash -c "${AUTOGEN_CODE_SH} ${USE_AUTOCOMPARE} ${UsedVendor} ${Torch_VERSION} ${GENERATED_KERNELS_SCRIPT} ${GENERATED_KERNELS_CONFIG} ${GENERATED_KERNELS}" + COMMAND bash -c "${AUTOGEN_CODE_SH} ${UsedVendor} ${Torch_VERSION} ${GENERATED_KERNELS_SCRIPT} ${GENERATED_KERNELS_CONFIG} ${GENERATED_KERNELS}" COMMENT "Generating ${GENERATED_KERNELS}$<$: with ${GENERATED_KERNELS_VENDOR}>" DEPENDS "${GENERATED_KERNELS_SCRIPT}" diff --git a/dipu/torch_dipu/csrc_dipu/aten/ops/OpUtils.hpp b/dipu/torch_dipu/csrc_dipu/aten/ops/OpUtils.hpp index dc9d9fcb3..a090e648c 100644 --- a/dipu/torch_dipu/csrc_dipu/aten/ops/OpUtils.hpp +++ b/dipu/torch_dipu/csrc_dipu/aten/ops/OpUtils.hpp @@ -85,6 +85,27 @@ inline int dumpOpArgLevel() { return level; } +inline bool useAutoCompare() { + static const char* autocomparePtr = std::getenv("USE_AUTOCOMPARE"); + if (autocomparePtr == nullptr) { + return false; + } + + std::string autocompareString(autocomparePtr); + for(char& c : autocompareString) { + c = std::tolower(c); + } + + if (autocompareString == "on") { + return true; + } else if (autocompareString == "off") { + return false; + } else { + std::cerr << "Error: USE_AUTOCOMPARE can only be set to 'ON' or 'OFF'." << std::endl; + return false; + } +} + template std::string dumpArg(const T& t) { std::stringstream stream; From f7c6caf4e14f3d25c41896751ba23e23e3d8c38b Mon Sep 17 00:00:00 2001 From: NeosZhang Date: Mon, 15 Apr 2024 15:40:33 +0800 Subject: [PATCH 2/8] fix --- dipu/scripts/autogen_diopi_wrapper/autogen_diopi_wrapper.py | 1 - 1 file changed, 1 deletion(-) diff --git a/dipu/scripts/autogen_diopi_wrapper/autogen_diopi_wrapper.py b/dipu/scripts/autogen_diopi_wrapper/autogen_diopi_wrapper.py index f87f2c192..a93297ca5 100644 --- a/dipu/scripts/autogen_diopi_wrapper/autogen_diopi_wrapper.py +++ b/dipu/scripts/autogen_diopi_wrapper/autogen_diopi_wrapper.py @@ -905,7 +905,6 @@ def functions_code_gen(fun_config): ) fbody += custom_autograd_function_code fun_name = wrapper_fun_name - print("fun_config = ", fun_config) if fun_config.get("autocompare") not in ["disable"] and fun_config.get( "register_op", True ) in [True, "True"]: From 769084addfb0398a1c9d97126cc33659e5dda40c Mon Sep 17 00:00:00 2001 From: NeosZhang Date: Mon, 15 Apr 2024 15:44:16 +0800 Subject: [PATCH 3/8] fix lint --- dipu/torch_dipu/csrc_dipu/aten/ops/OpUtils.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dipu/torch_dipu/csrc_dipu/aten/ops/OpUtils.hpp b/dipu/torch_dipu/csrc_dipu/aten/ops/OpUtils.hpp index a090e648c..a4a2c9628 100644 --- a/dipu/torch_dipu/csrc_dipu/aten/ops/OpUtils.hpp +++ b/dipu/torch_dipu/csrc_dipu/aten/ops/OpUtils.hpp @@ -92,7 +92,7 @@ inline bool useAutoCompare() { } std::string autocompareString(autocomparePtr); - for(char& c : autocompareString) { + for(char& c: autocompareString) { c = std::tolower(c); } From 0018c09db23f8edb66eeedb897b362786b3bb89d Mon Sep 17 00:00:00 2001 From: NeosZhang Date: Mon, 15 Apr 2024 15:50:07 +0800 Subject: [PATCH 4/8] fix --- dipu/torch_dipu/csrc_dipu/aten/ops/OpUtils.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dipu/torch_dipu/csrc_dipu/aten/ops/OpUtils.hpp b/dipu/torch_dipu/csrc_dipu/aten/ops/OpUtils.hpp index a4a2c9628..a090e648c 100644 --- a/dipu/torch_dipu/csrc_dipu/aten/ops/OpUtils.hpp +++ b/dipu/torch_dipu/csrc_dipu/aten/ops/OpUtils.hpp @@ -92,7 +92,7 @@ inline bool useAutoCompare() { } std::string autocompareString(autocomparePtr); - for(char& c: autocompareString) { + for(char& c : autocompareString) { c = std::tolower(c); } From 2630858e785e02b71e2e899ec779c164189bef0a Mon Sep 17 00:00:00 2001 From: NeosZhang Date: Mon, 15 Apr 2024 15:54:25 +0800 Subject: [PATCH 5/8] fix lint --- dipu/torch_dipu/csrc_dipu/aten/ops/OpUtils.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dipu/torch_dipu/csrc_dipu/aten/ops/OpUtils.hpp b/dipu/torch_dipu/csrc_dipu/aten/ops/OpUtils.hpp index a090e648c..856616368 100644 --- a/dipu/torch_dipu/csrc_dipu/aten/ops/OpUtils.hpp +++ b/dipu/torch_dipu/csrc_dipu/aten/ops/OpUtils.hpp @@ -92,8 +92,8 @@ inline bool useAutoCompare() { } std::string autocompareString(autocomparePtr); - for(char& c : autocompareString) { - c = std::tolower(c); + for (size_t i = 0; i < autocompareString.length(); ++i) { + autocompareString[i] = std::tolower(autocompareString[i]); } if (autocompareString == "on") { From 7f7084ce14897d8f826b798dc6960f17f9b275ff Mon Sep 17 00:00:00 2001 From: NeosZhang Date: Mon, 15 Apr 2024 16:08:22 +0800 Subject: [PATCH 6/8] fix lint --- dipu/torch_dipu/csrc_dipu/aten/ops/OpUtils.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dipu/torch_dipu/csrc_dipu/aten/ops/OpUtils.hpp b/dipu/torch_dipu/csrc_dipu/aten/ops/OpUtils.hpp index 856616368..3586f7818 100644 --- a/dipu/torch_dipu/csrc_dipu/aten/ops/OpUtils.hpp +++ b/dipu/torch_dipu/csrc_dipu/aten/ops/OpUtils.hpp @@ -101,7 +101,7 @@ inline bool useAutoCompare() { } else if (autocompareString == "off") { return false; } else { - std::cerr << "Error: USE_AUTOCOMPARE can only be set to 'ON' or 'OFF'." << std::endl; + std::cerr << "Error: USE_AUTOCOMPARE can only be set to 'ON' or 'OFF'.\n"; return false; } } From 2291a00bd8ced478e6db43e6ee97e5ca537cd6ec Mon Sep 17 00:00:00 2001 From: NeosZhang Date: Mon, 15 Apr 2024 16:33:37 +0800 Subject: [PATCH 7/8] fix clang-tidy --- dipu/torch_dipu/csrc_dipu/aten/ops/OpUtils.hpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dipu/torch_dipu/csrc_dipu/aten/ops/OpUtils.hpp b/dipu/torch_dipu/csrc_dipu/aten/ops/OpUtils.hpp index 3586f7818..1c6b399dc 100644 --- a/dipu/torch_dipu/csrc_dipu/aten/ops/OpUtils.hpp +++ b/dipu/torch_dipu/csrc_dipu/aten/ops/OpUtils.hpp @@ -92,8 +92,8 @@ inline bool useAutoCompare() { } std::string autocompareString(autocomparePtr); - for (size_t i = 0; i < autocompareString.length(); ++i) { - autocompareString[i] = std::tolower(autocompareString[i]); + for (char& c : autocompareString) { + c = std::tolower(c); } if (autocompareString == "on") { @@ -102,8 +102,8 @@ inline bool useAutoCompare() { return false; } else { std::cerr << "Error: USE_AUTOCOMPARE can only be set to 'ON' or 'OFF'.\n"; - return false; } + return false; } template From 355cf558602fe2bcf4fe368ae98ef775fd914045 Mon Sep 17 00:00:00 2001 From: NeosZhang Date: Mon, 15 Apr 2024 16:53:09 +0800 Subject: [PATCH 8/8] fix clang-tidy --- dipu/torch_dipu/csrc_dipu/aten/ops/OpUtils.hpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/dipu/torch_dipu/csrc_dipu/aten/ops/OpUtils.hpp b/dipu/torch_dipu/csrc_dipu/aten/ops/OpUtils.hpp index 1c6b399dc..80b7bfcbe 100644 --- a/dipu/torch_dipu/csrc_dipu/aten/ops/OpUtils.hpp +++ b/dipu/torch_dipu/csrc_dipu/aten/ops/OpUtils.hpp @@ -93,16 +93,17 @@ inline bool useAutoCompare() { std::string autocompareString(autocomparePtr); for (char& c : autocompareString) { - c = std::tolower(c); + c = static_cast(std::tolower(static_cast(c))); } if (autocompareString == "on") { return true; - } else if (autocompareString == "off") { + } + if (autocompareString == "off") { return false; - } else { - std::cerr << "Error: USE_AUTOCOMPARE can only be set to 'ON' or 'OFF'.\n"; } + + std::cerr << "Error: USE_AUTOCOMPARE can only be set to 'ON' or 'OFF'.\n"; return false; }