diff --git a/.github/workflows/llm_performance_tests.yml b/.github/workflows/llm_performance_tests.yml index fdaa8d86..cc8f4f53 100644 --- a/.github/workflows/llm_performance_tests.yml +++ b/.github/workflows/llm_performance_tests.yml @@ -659,6 +659,8 @@ jobs: set PYTHONIOENCODING=utf-8 python run.py >> %CSV_SAVE_PATH%\32-32_int4_fp16\log\%LOG_FILE% 2>&1 if %ERRORLEVEL% neq 0 (exit /b 1) + python ..\..\..\test\benchmark\igpu-perf\check_csv_results.py --yaml-file config.yaml --suffix test1 + if %ERRORLEVEL% neq 0 (exit /b 1) call conda deactivate @@ -682,6 +684,8 @@ jobs: set PYTHONIOENCODING=utf-8 python run.py >> %CSV_SAVE_PATH%\32-32_int4_fp16\log\%LOG_FILE% 2>&1 if %ERRORLEVEL% neq 0 (exit /b 1) + python ..\..\..\test\benchmark\igpu-perf\check_csv_results.py --yaml-file config.yaml --suffix test2 + if %ERRORLEVEL% neq 0 (exit /b 1) call conda deactivate @@ -705,6 +709,8 @@ jobs: set PYTHONIOENCODING=utf-8 python run.py >> %CSV_SAVE_PATH%\32-32_int4_fp16\log\%LOG_FILE% 2>&1 if %ERRORLEVEL% neq 0 if %ERRORLEVEL% neq -1073740791 (exit /b 1) + python ..\..\..\test\benchmark\igpu-perf\check_csv_results.py --yaml-file config.yaml --suffix test3 + if %ERRORLEVEL% neq 0 (exit /b 1) call conda deactivate @@ -750,6 +756,8 @@ jobs: set PYTHONIOENCODING=utf-8 python run.py >> %CSV_SAVE_PATH%\1024-128_int4_fp16\log\%LOG_FILE% 2>&1 if %ERRORLEVEL% neq 0 (exit /b 1) + python ..\..\..\test\benchmark\igpu-perf\check_csv_results.py --yaml-file config.yaml --suffix test1 + if %ERRORLEVEL% neq 0 (exit /b 1) call conda deactivate @@ -773,6 +781,8 @@ jobs: set PYTHONIOENCODING=utf-8 python run.py >> %CSV_SAVE_PATH%\1024-128_int4_fp16\log\%LOG_FILE% 2>&1 if %ERRORLEVEL% neq 0 (exit /b 1) + python ..\..\..\test\benchmark\igpu-perf\check_csv_results.py --yaml-file config.yaml --suffix test2 + if %ERRORLEVEL% neq 0 (exit /b 1) call conda deactivate @@ -796,6 +806,8 @@ jobs: set PYTHONIOENCODING=utf-8 python run.py >> %CSV_SAVE_PATH%\1024-128_int4_fp16\log\%LOG_FILE% 2>&1 if %ERRORLEVEL% neq 0 (exit /b 1) + python ..\..\..\test\benchmark\igpu-perf\check_csv_results.py --yaml-file config.yaml --suffix test3 + if %ERRORLEVEL% neq 0 (exit /b 1) call conda deactivate @@ -840,6 +852,8 @@ jobs: set PYTHONIOENCODING=utf-8 python run.py >> %CSV_SAVE_PATH%\2048-256_int4_fp16\log\%LOG_FILE% 2>&1 if %ERRORLEVEL% neq 0 (exit /b 1) + python ..\..\..\test\benchmark\igpu-perf\check_csv_results.py --yaml-file config.yaml --suffix test1 + if %ERRORLEVEL% neq 0 (exit /b 1) call conda deactivate @@ -863,6 +877,8 @@ jobs: set PYTHONIOENCODING=utf-8 python run.py >> %CSV_SAVE_PATH%\2048-256_int4_fp16\log\%LOG_FILE% 2>&1 if %ERRORLEVEL% neq 0 (exit /b 1) + python ..\..\..\test\benchmark\igpu-perf\check_csv_results.py --yaml-file config.yaml --suffix test2 + if %ERRORLEVEL% neq 0 (exit /b 1) call conda deactivate @@ -886,6 +902,8 @@ jobs: set PYTHONIOENCODING=utf-8 python run.py >> %CSV_SAVE_PATH%\2048-256_int4_fp16\log\%LOG_FILE% 2>&1 if %ERRORLEVEL% neq 0 (exit /b 1) + python ..\..\..\test\benchmark\igpu-perf\check_csv_results.py --yaml-file config.yaml --suffix test3 + if %ERRORLEVEL% neq 0 (exit /b 1) call conda deactivate @@ -930,6 +948,8 @@ jobs: set PYTHONIOENCODING=utf-8 python run.py >> %CSV_SAVE_PATH%\1024-128_int4_fp16_loadlowbit\log\%LOG_FILE% 2>&1 if %ERRORLEVEL% neq 0 (exit /b 1) + python ..\..\..\test\benchmark\igpu-perf\check_csv_results.py --yaml-file config.yaml --suffix test1 + if %ERRORLEVEL% neq 0 (exit /b 1) call conda deactivate @@ -953,6 +973,8 @@ jobs: set PYTHONIOENCODING=utf-8 python run.py >> %CSV_SAVE_PATH%\1024-128_int4_fp16_loadlowbit\log\%LOG_FILE% 2>&1 if %ERRORLEVEL% neq 0 (exit /b 1) + python ..\..\..\test\benchmark\igpu-perf\check_csv_results.py --yaml-file config.yaml --suffix test2 + if %ERRORLEVEL% neq 0 (exit /b 1) call conda deactivate @@ -976,6 +998,8 @@ jobs: set PYTHONIOENCODING=utf-8 python run.py >> %CSV_SAVE_PATH%\1024-128_int4_fp16_loadlowbit\log\%LOG_FILE% 2>&1 if %ERRORLEVEL% neq 0 (exit /b 1) + python ..\..\..\test\benchmark\igpu-perf\check_csv_results.py --yaml-file config.yaml --suffix test3 + if %ERRORLEVEL% neq 0 (exit /b 1) call conda deactivate @@ -1019,6 +1043,8 @@ jobs: set PYTHONIOENCODING=utf-8 python run.py >> %CSV_SAVE_PATH%\1024-128\log\%LOG_FILE% 2>&1 if %ERRORLEVEL% neq 0 (exit /b 1) + python ..\..\..\test\benchmark\igpu-perf\check_csv_results.py --yaml-file config.yaml --suffix test1 + if %ERRORLEVEL% neq 0 (exit /b 1) call conda deactivate @@ -1042,6 +1068,8 @@ jobs: set PYTHONIOENCODING=utf-8 python run.py >> %CSV_SAVE_PATH%\1024-128\log\%LOG_FILE% 2>&1 if %ERRORLEVEL% neq 0 (exit /b 1) + python ..\..\..\test\benchmark\igpu-perf\check_csv_results.py --yaml-file config.yaml --suffix test2 + if %ERRORLEVEL% neq 0 (exit /b 1) call conda deactivate @@ -1065,6 +1093,8 @@ jobs: set PYTHONIOENCODING=utf-8 python run.py >> %CSV_SAVE_PATH%\1024-128\log\%LOG_FILE% 2>&1 if %ERRORLEVEL% neq 0 (exit /b 1) + python ..\..\..\test\benchmark\igpu-perf\check_csv_results.py --yaml-file config.yaml --suffix test3 + if %ERRORLEVEL% neq 0 (exit /b 1) call conda deactivate diff --git a/python/llm/test/benchmark/igpu-perf/check_csv_results.py b/python/llm/test/benchmark/igpu-perf/check_csv_results.py new file mode 100644 index 00000000..a842443d --- /dev/null +++ b/python/llm/test/benchmark/igpu-perf/check_csv_results.py @@ -0,0 +1,70 @@ +# +# Copyright 2016 The BigDL Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# Python program to check if the number of lines in html meets expectation + +import os +import sys +import argparse +import pandas as pd +from omegaconf import OmegaConf +from datetime import date + +def main(): + parser = argparse.ArgumentParser(description="check if the number of lines in html meets expectation") + parser.add_argument("-y", "--yaml-file", type=str, dest="yaml_name", help="name of yaml", required=True) + parser.add_argument("--suffix", type=str, dest="file_suffix", help="the suffix of the csv_file") + args = parser.parse_args() + + all_csv_files:list[str] = [file for file in os.listdir() if file.endswith('.csv')] + + conf = OmegaConf.load(args.yaml_name) + test_apis : list[str] = conf['test_api'] + in_out_pairs : list[str] = conf['in_out_pairs'] + for api in test_apis: + for in_out in in_out_pairs: + csv_name_info:str = f"{in_out}-{api}-results-" + csv_file = [file for file in all_csv_files if (csv_name_info in file) and file.endswith(f"_{args.file_suffix}.csv")][0] + + csv_dataframe = pd.read_csv(csv_file, index_col=0) + actual_test_num = len(csv_dataframe) + actual_test_cases = [] + for index, row in csv_dataframe.iterrows(): + actual_test_cases.append(row['model'] + ":" + row['input/output tokens'].split('-')[0] + ":" + str(row['batch_size'])) + + + all_test_cases = [] + for model in conf.repo_id: + if not OmegaConf.is_list(conf["batch_size"]): + batch_list = [conf["batch_size"]] + else: + batch_list = conf["batch_size"] + for batch_size in batch_list: + model_id_input = model + ':' + in_out.split('-')[0] + ':' + str(batch_size) + all_test_cases.append(model_id_input) + exclude_test_cases = [] + if 'exclude' in conf and conf['exclude'] is not None: + exclude_test_cases = conf['exclude'] + expected_test_num = len(all_test_cases) - len(exclude_test_cases) + if actual_test_num != expected_test_num: + print("---------------The test cases should be tested!------------") + for test_case in all_test_cases: + if test_case not in actual_test_cases and test_case not in exclude_test_cases: + print(test_case) + raise ValueError("The above tests failed. Please check the errors in the log.") + +if __name__ == "__main__": + sys.exit(main())