From 8e00f8305b4eb5480b6290ec85e3f06bac51b1c9 Mon Sep 17 00:00:00 2001 From: hzg0601 Date: Wed, 16 Aug 2023 11:15:10 +0800 Subject: [PATCH] =?UTF-8?q?1.=20=E6=9B=B4=E6=96=B0allinone=E8=84=9A?= =?UTF-8?q?=E6=9C=AC=E6=8F=90=E7=A4=BA=EF=BC=8C=E5=A2=9E=E5=8A=A0=E4=B8=AD?= =?UTF-8?q?=E6=96=87=E6=8F=90=E7=A4=BA;2.=20=E6=96=B0=E5=A2=9E=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E4=B8=80=E9=94=AE=E5=81=9C=E6=AD=A2=E8=84=9A=E6=9C=AC?= =?UTF-8?q?shutdown=5Fall.sh;3.=20=E6=9B=B4=E6=96=B0readme=E8=AF=B4?= =?UTF-8?q?=E6=98=8E;3.=20=E4=BF=AE=E5=A4=8D=E5=91=BD=E4=BB=A4=E8=A1=8Cbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 8 +++++++- server/api_allinone.py | 7 ++++--- server/llm_api_launch.py | 31 ++++++++++++++++--------------- shutdown_all.sh | 1 + webui_allinone.py | 13 +++++++++---- 5 files changed, 37 insertions(+), 23 deletions(-) create mode 100644 shutdown_all.sh diff --git a/README.md b/README.md index 6cf14b0..c87b700 100644 --- a/README.md +++ b/README.md @@ -351,7 +351,7 @@ $ streamlit run webui.py --server.port 666 ### 6 一键启动 -**!!!注意,一键启动脚本仅适用于linux和mac设备!!!** +**!!!注意,一键启动脚本仅适用于linux和mac设备,且加载需要命令行指定模型,不会读取model_config.py配置!!!** #### 6.1 api服务一键启动脚本 @@ -411,6 +411,12 @@ $ python webui_alline.py --model-path-address model@host@port --num-gpus 2 --gpu 其他参数详见各脚本及fastchat服务说明。 +上述两个一键启动脚本会后台运行多个服务,如要停止所有服务,可使用shutdown_all.sh脚本: + +```shell +bash shutdown_all.sh +``` + ## 常见问题 参见 [常见问题](docs/FAQ.md)。 diff --git a/server/api_allinone.py b/server/api_allinone.py index de8f716..4379d7d 100644 --- a/server/api_allinone.py +++ b/server/api_allinone.py @@ -22,9 +22,7 @@ parser.add_argument("--api-host", type=str, default="0.0.0.0") parser.add_argument("--api-port", type=int, default=7861) parser.add_argument("--ssl_keyfile", type=str) parser.add_argument("--ssl_certfile", type=str) -# 初始化消息 -args = parser.parse_args() -args_dict = vars(args) + api_args = ["api-host","api-port","ssl_keyfile","ssl_certfile"] @@ -43,6 +41,9 @@ def run_api(host, port, **kwargs): if __name__ == "__main__": print("Luanching api_allinone,it would take a while, please be patient...") print("正在启动api_allinone,LLM服务启动约3-10分钟,请耐心等待...") + # 初始化消息 + args = parser.parse_args() + args_dict = vars(args) launch_all(args=args,controller_args=controller_args,worker_args=worker_args,server_args=server_args) run_api( host=args.api_host, diff --git a/server/llm_api_launch.py b/server/llm_api_launch.py index 0c92768..798206b 100644 --- a/server/llm_api_launch.py +++ b/server/llm_api_launch.py @@ -159,17 +159,7 @@ server_args = ["server-host", "server-port", "allow-credentials", "api-keys", "controller-address" ] -args = parser.parse_args() -# 必须要加http//:,否则InvalidSchema: No connection adapters were found -args = argparse.Namespace(**vars(args), - **{"controller-address": f"http://{args.controller_host}:{str(args.controller_port)}"}) -if args.gpus: - if len(args.gpus.split(",")) < args.num_gpus: - raise ValueError( - f"Larger --num-gpus ({args.num_gpus}) than --gpus {args.gpus}!" - ) - os.environ["CUDA_VISIBLE_DEVICES"] = args.gpus # 0,controller, model_worker, openai_api_server # 1, 命令行选项 @@ -211,13 +201,13 @@ def string_args(args, args_list): return args_str -def launch_worker(item,args=args,worker_args=worker_args): +def launch_worker(item,args,worker_args=worker_args): log_name = item.split("/")[-1].split("\\")[-1].replace("-", "_").replace("@", "_").replace(".", "_") # 先分割model-path-address,在传到string_args中分析参数 args.model_path, args.worker_host, args.worker_port = item.split("@") args.worker_address = f"http://{args.worker_host}:{args.worker_port}" print("*" * 80) - print(f"worker启动视设备不同而不同,约需3-10分钟,如长时间未启动,请到{LOG_PATH}/{log_name}下查看日志") + print(f"如长时间未启动,请到{LOG_PATH}{log_name}.log下查看日志") worker_str_args = string_args(args, worker_args) print(worker_str_args) worker_sh = base_launch_sh.format("model_worker", worker_str_args, LOG_PATH, f"worker_{log_name}") @@ -226,7 +216,7 @@ def launch_worker(item,args=args,worker_args=worker_args): subprocess.run(worker_check_sh, shell=True, check=True) -def launch_all(args=args, +def launch_all(args, controller_args=controller_args, worker_args=worker_args, server_args=server_args @@ -238,7 +228,7 @@ def launch_all(args=args, controller_check_sh = base_check_sh.format(LOG_PATH, "controller", "controller") subprocess.run(controller_sh, shell=True, check=True) subprocess.run(controller_check_sh, shell=True, check=True) - + print(f"worker启动时间视设备不同而不同,约需3-10分钟,请耐心等待...") if isinstance(args.model_path_address, str): launch_worker(args.model_path_address,args=args,worker_args=worker_args) else: @@ -255,4 +245,15 @@ def launch_all(args=args, print("LLM服务启动完毕。") if __name__ == "__main__": - launch_all() + args = parser.parse_args() + # 必须要加http//:,否则InvalidSchema: No connection adapters were found + args = argparse.Namespace(**vars(args), + **{"controller-address": f"http://{args.controller_host}:{str(args.controller_port)}"}) + + if args.gpus: + if len(args.gpus.split(",")) < args.num_gpus: + raise ValueError( + f"Larger --num-gpus ({args.num_gpus}) than --gpus {args.gpus}!" + ) + os.environ["CUDA_VISIBLE_DEVICES"] = args.gpus + launch_all(args=args) diff --git a/shutdown_all.sh b/shutdown_all.sh new file mode 100644 index 0000000..961260d --- /dev/null +++ b/shutdown_all.sh @@ -0,0 +1 @@ +ps -eo pid,user,cmd|grep -P 'server/api.py|webui.py|fastchat.serve'|grep -v grep|awk '{print $1}'|xargs kill -9 \ No newline at end of file diff --git a/webui_allinone.py b/webui_allinone.py index f710855..2992ae5 100644 --- a/webui_allinone.py +++ b/webui_allinone.py @@ -34,14 +34,14 @@ parser.add_argument("--theme.secondaryBackgroundColor",type=str,default='"#f5f5f parser.add_argument("--theme.textColor",type=str,default='"#000000"') web_args = ["server.port","theme.base","theme.primaryColor","theme.secondaryBackgroundColor","theme.textColor"] -args = parser.parse_args() -def launch_api(args=args,args_list=api_args,log_name=None): +def launch_api(args,args_list=api_args,log_name=None): print("Launching api ...") print("启动API服务...") if not log_name: log_name = f"{LOG_PATH}api_{args.api_host}_{args.api_port}" print(f"logs on api are written in {log_name}") + print(f"API日志位于{log_name}下,如启动异常请查看日志") args_str = string_args(args,args_list) api_sh = "python server/{script} {args_str} >{log_name}.log 2>&1 &".format( script="api.py",args_str=args_str,log_name=log_name) @@ -49,14 +49,16 @@ def launch_api(args=args,args_list=api_args,log_name=None): print("launch api done!") print("启动API服务完毕.") -def launch_webui(args=args,args_list=web_args,log_name=None): +def launch_webui(args,args_list=web_args,log_name=None): print("Launching webui...") print("启动webui服务...") if not log_name: log_name = f"{LOG_PATH}webui" - print(f"logs on api are written in {log_name}") + args_str = string_args(args,args_list) if args.nohup: + print(f"logs on api are written in {log_name}") + print(f"webui服务日志位于{log_name}下,如启动异常请查看日志") webui_sh = "streamlit run webui.py {args_str} >{log_name}.log 2>&1 &".format( args_str=args_str,log_name=log_name) else: @@ -70,6 +72,9 @@ def launch_webui(args=args,args_list=web_args,log_name=None): if __name__ == "__main__": print("Starting webui_allineone.py, it would take a while, please be patient....") print(f"开始启动webui_allinone,启动LLM服务需要约3-10分钟,请耐心等待,如长时间未启动,请到{LOG_PATH}下查看日志...") + args = parser.parse_args() + + print("*"*80) if not args.use_remote_api: launch_all(args=args,controller_args=controller_args,worker_args=worker_args,server_args=server_args) launch_api(args=args,args_list=api_args)