Files
wehub-resource-sync 2aaeece67c
Pipelines-Test / Pipelines-Test (push) Waiting to run
Codestyle Check / Lint (push) Has been cancelled
Codestyle Check / Check bypass (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:37:14 +08:00

176 lines
6.6 KiB
Python

# Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
#
# 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.
"""
RUN PaddleNLP CI Case
"""
import os
import re
import subprocess
import sys
def get_mode_info(case_path):
"""
Return: model_info{path,exec_file_list}
Examples:
pegasus = {
"path": "applications/text_summarization/pegasus/"
"deploy_path": "deploy/paddle_inference/"
"prepare": "run_prepare.py"
"train_exec_file": "train.py"
"eval_exec_file": None
"predict_exec_file": predict.py
“export_exec_file”: export_model.py
"infer_exec_file": inference_pegasus.py
}
"""
model_info = {
"path": case_path,
"deploy_path": None,
"prepare_exec_file": None,
"train_exec_file": [],
"eval_exec_file": None,
"predict_exec_file": None,
"export_exec_file": None,
"infer_exec_file": None,
}
for root, dirs, files in os.walk(case_path):
infer_deploy_path = case_path + "/deploy/paddle_inference"
python_deploy_path = case_path + "/deploy/python"
if files and root == case_path:
for file in files:
# TODO .sh file incompatible windows
if file.split(".")[-1] == "py":
if re.compile("prepare.py").findall(file):
model_info["prepare_exec_file"] = file
elif re.compile("train.py").findall(file):
model_info["train_exec_file"].append(file)
elif re.compile("finetune").findall(file):
model_info["train_exec_file"].append(file)
elif re.compile("eval.py").findall(file):
model_info["eval_exec_file"] = file
elif re.compile("predict.py").findall(file):
model_info["predict_exec_file"] = file
elif re.compile("export_model.py").findall(file):
model_info["export_exec_file"] = file
elif re.compile("run_").findall(file):
model_info["train_exec_file"].append(file)
else:
continue
elif files and root == infer_deploy_path:
for file in files:
if file.split(".")[-1] == "py":
model_info["deploy_path"] = "deploy/paddle_inference"
model_info["infer_exec_file"] = file
elif files and root == python_deploy_path:
for file in files:
if file.split(".")[-1] == "py":
model_info["deploy_path"] = "deploy/python"
model_info["infer_exec_file"] = file
print("model_info", model_info)
return model_info
def save_log(exit_code, output, case_name, file_name):
"""
save model log
"""
root_path = "/workspace/PaddleNLP"
# root_path = '/ssd1/paddlenlp/zhangjunjun/PaddleNLP'
if exit_code == 0:
log_file = root_path + "/model_logs/" + os.path.join(case_name + "_" + file_name + "_SUCCESS.log")
print("{} SUCCESS".format(file_name))
with open(log_file, "a") as flog:
flog.write("%s" % (output))
else:
log_file = root_path + "/model_logs/" + os.path.join(case_name + "_" + file_name + "_FAIL.log")
print("{} FAIL".format(file_name))
with open(log_file, "a") as flog:
flog.write("%s" % (output))
def run_normal_case(case_path):
"""
Run new normal case
params:
case_path: model path based PaddleNLP from git diff
"""
case_name = case_path.split("/")[-1]
model_info = get_mode_info(case_path)
deploy_path = model_info["deploy_path"]
prepare_exec_file = model_info["prepare_exec_file"]
eval_exec_file = model_info["eval_exec_file"]
predict_exec_file = model_info["predict_exec_file"]
export_exec_file = model_info["export_exec_file"]
infer_exec_file = model_info["infer_exec_file"]
os.chdir(case_path)
if prepare_exec_file:
prepare_output = subprocess.getstatusoutput("python %s " % (prepare_exec_file))
save_log(prepare_output[0], prepare_output[1], case_name, prepare_exec_file.split(".")[0])
if model_info["train_exec_file"]:
for train_file in model_info["train_exec_file"]:
train_output = subprocess.getstatusoutput(
"python -m paddle.distributed.launch %s --device gpu --max_steps 2 \
--save_steps 2 --output_dir ./output/"
% (train_file)
)
save_log(train_output[0], train_output[1], case_name, train_file.split(".")[0])
else:
print("Train Skipped")
if eval_exec_file:
eval_output = subprocess.getstatusoutput("python %s --init_checkpoint_dir ./output/" % (eval_exec_file))
save_log(eval_output[0], eval_output[1], case_name, eval_exec_file.split(".")[0])
else:
print("Evaluation Skipped")
if predict_exec_file:
predict_output = subprocess.getstatusoutput("python %s --init_checkpoint_dir ./output/" % (predict_exec_file))
save_log(predict_output[0], predict_output[1], case_name, predict_exec_file.split(".")[0])
else:
print("Predict Skipped")
if export_exec_file:
export_output = subprocess.getstatusoutput(
"python %s --export_output_dir ./inference_model/" % (export_exec_file)
)
save_log(export_output[0], export_output[1], case_name, export_exec_file.split(".")[0])
else:
print("Export model Skipped")
if infer_exec_file:
infer_output = subprocess.getstatusoutput(
"cd %s && python %s --inference_model_dir ../../inference_model/" % (deploy_path, infer_exec_file)
)
save_log(infer_output[0], infer_output[1], case_name, infer_exec_file.split(".")[0])
else:
print("python inference Skipped")
if __name__ == "__main__":
# path ="applications/text_summarization/pegasus"
path = sys.argv[1]
if os.path.isdir(path):
run_normal_case(path)
else:
print("not model file path, skepped ")