diff --git a/README.md b/README.md index 8e60c87..db0a556 100644 --- a/README.md +++ b/README.md @@ -223,13 +223,39 @@ embedding_model_dict = { #### 5.1 启动 LLM 服务 +##### 5.1.1 基于多进程脚本llm_api.py启动LLM服务 + 在项目根目录下,执行 [server/llm_api.py](server/llm_api.py) 脚本启动 **LLM 模型**服务: ```shell $ python server/llm_api.py ``` -以如上方式启动LLM服务会以nohup命令在后台运行 fastchat 服务,如需停止服务,可以运行如下命令: +项目支持多卡加载,需在llm_api.py中修改create_model_worker_app函数中,修改gpus=None,num_gpus=1,max_gpu_memory="20GiB",三个参数,其中gpus控制使用的卡的ID,如果“0,1", num_gpus控制使用的卡数,max_gpu_memory控制每个卡使用的显存容量。 + +注:以上方式可能会因torch的多进程问题而启动失败,视使用的系统、torch的版本而定。 + +##### 5.1.2 基于命令行脚本llm_api_launch.py启动LLM服务 + +在项目根目录下,执行 [server/llm_api_launch.py](server/llm_api.py) 脚本启动 **LLM 模型**服务: + +```shell +$ python server/llm_api_launch.py +``` + +该方式支持启动多个worker,示例启动方式: + +```shell +$ python server/llm_api_launch.py --model-path-addresss model1@host1@port1 model2@host2@port2 +``` + +如果要启动多卡加载,示例命令如下: + +```shell +$ python server/llm_api_launch.py --gpus 0,1 --num-gpus 2 --max-gpu-memory 10GiB +``` + +注:以如上方式启动LLM服务会以nohup命令在后台运行 fastchat 服务,如需停止服务,可以运行如下命令: ```shell $ python server/llm_api_shutdown.py --serve all @@ -237,8 +263,6 @@ $ python server/llm_api_shutdown.py --serve all 亦可单独停止一个 fastchat 服务模块,可选 [`all`, `controller`, `model_worker`, `openai_api_server`] -项目支持多卡加载,需在llm_api.py中修改create_model_worker_app函数中,修改gpus=None,num_gpus=1,max_gpu_memory="20GiB",三个参数,其中gpus控制使用的卡的ID,如果“0,1", num_gpus控制使用的卡数,max_gpu_memory控制每个卡使用的显存容量。 - #### 5.2 启动 API 服务 diff --git a/server/llm_api_launch.py b/server/llm_api_launch.py index 201bd2b..c7dd977 100644 --- a/server/llm_api_launch.py +++ b/server/llm_api_launch.py @@ -132,11 +132,11 @@ worker_args = [ "gptq-ckpt", "gptq-wbits", "gptq-groupsize", "gptq-act-order", "model-names", "limit-worker-concurrency", "stream-interval", "no-register", - "controller-address" + "controller-address","worker-address" ] # -----------------openai server--------------------------- -parser.add_argument("--server-host", type=str, default="127.0.0.1", help="host name") +parser.add_argument("--server-host", type=str, default="localhost", help="host name") parser.add_argument("--server-port", type=int, default=8888, help="port number") parser.add_argument( "--allow-credentials", action="store_true", help="allow credentials" @@ -215,6 +215,7 @@ def launch_worker(item): 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) worker_str_args = string_args(args, worker_args) print(worker_str_args)