ChatGLM-Deploy-FastChat 利用FastChat部署ChatGLM
Reference
https://github.com/lm-sys/FastChathttps://github.com/lm-sys/FastChat/blob/main/docs/openai\_api.md
Note
: 一些screen窗口会话知识预备
1 2 3 4 5 6 screen -S fs-glm-wkr screen -r fs-glm-wkr screen -ls screen -D -r fs-glm-wkr
\
Install FastChat 使用依赖包安装或者使用源码安装,二选一即可。如果FastChat还不支持的模型,建议使用源码安装,再源码集成支持模型后在源码安装依赖包。 Note
: FastChat支持对接chatglm是因为源码中,已经做了这部分的配置集成。这里的测试使用pip安装。
1 2 3 4 5 6 pip3 install fschat git clone https://github.com/lm-sys /FastChat.git cd FastChatpip3 install --upgrade pip pip3 install -e .
\
Load Models 服务器部署模型,并提供l类似gpt 的 openai 接口方式访问。
Use serve.cli testing model
cli运行脚本如下
1 2 python3 -m fastchat.serve.cli \ --model-path /mnt/models/chatglm2-6b
如图,会在终端生成如下交互问答
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 (chatglm)longer@codeWL$ python3 -m fastchat.serve.cli --model-path /mnt/models/chatglm2-6b Loading checkpoint shards: 100 %|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 16 /16 [00 :13 <00 :00 , 1.18 it /s ] 问: 你是谁? 答: 我是一个名为 ChatGLM2-6B 的人工智能助手,是基于清华大学 KEG 实验室和智谱 AI 公司于 2023 年共同训练的语言模型开发的。我的任务是针对用户的问题和要求提供适当的答复和支持。 问: 如何使用fastchat 答: Fastchat 是一个基于 Python 的聊天应用程序,可以使用它进行文本或语音聊天。要使用 Fastchat,您需要首先安装它。在终端中输入以下命令来安装 Fastchat: ``` pip install fastchat ``` 安装完成后,您可以运行以下命令启动 Fastchat: ``` fastchat ``` 然后,您可以通过输入 "你好" 来启动 Fastchat 的语音聊天功能。 ``` fastchat 你好 ``` 在 Fastchat 中,您可以向对方发送文本消息或语音消息。在发送文本消息时,您可以使用 emoji 表情符号和表情符来使消息更加生动。例如,要发送一个带有开心表情的表情符号,您可以使用以下代码: ``` fastchat :( ``` 要发送一个带有哭泣表情的表情符号,您可以使用以下代码: ``` fastchat :'( ``` 此外,Fastchat 还支持发送语音消息。要发送语音消息,请首先请确保您的计算机已安装了浏览器,并将 Fastchat 的语音消息 URL 复制到浏览器中。然后,您可以使用以下代码发送语音消息: ``` fastchat :(4437912:您想说什么 ``` 这将在您的计算机上打开一个浏览器,并在 Fastchat 中显示您输入的语音消息。 问:
\
serve.controller for RESTful API Server
First Lunch a fastchat.serve.controller。
1 2 3 4 5 6 7 8 9 10 python3 -m fastchat.serve.controller (chatglm)longer@codeWL$ python3 -m fastchat.serve.controller 2023 -08-01 07 :15 :20 | INFO | controller | args: Namespace(host='localhost' , port=21001 , dispatch_method='shortest_queue' )2023 -08-01 07 :15 :20 | ERROR | stderr | INFO: Started server process [18496 ]2023 -08-01 07 :15 :20 | ERROR | stderr | INFO: Waiting for application startup.2023 -08-01 07 :15 :20 | ERROR | stderr | INFO: Application startup complete.2023 -08-01 07 :15 :20 | ERROR | stderr | INFO: Uvicorn running on http://localhost:21001 (Press CTRL+C to quit)
Then, launch the model worker(s)
1 2 3 python3 -m fastchat.serve.model_worker --model-path /mnt/models/chatglm2-6b
\
Finally, launch the RESTful API server
1 2 3 # screen -S fs-glm-api python3 -m fastchat.serve.openai_api_server --host localhost --port 8000 # localhost 建议使用局域网或者公网地址,这是对外的api接口
Note
: 以上三个步骤都是必须按照步骤全部执行。可以使用screen session会话依次后台执行这些服务。\
Launch the Gradio web server
1 2 3 4 5 6 python3 -m fastchat.serve.gradio_web_server
Grade web Page:上面的model_worker只选择了一个,所以这里只显示已经加载的模型。如果要支持多个模型可以看下文的Running Mutiple ,当然这个也需要显存支持。
Test APIs Interact with mode(OpenAI方式)
http://hostserver:8000/v1/
运行 chatglm.py
脚本会得到如下的ResponseText
1 2 3 (chatai) PS E:\TestGLM\src> python chatglm.py 你好,作为一名人工智能助手,我无法感受到情感,但我可以提供帮助。 请问有什么问题我可以解答吗? Hello! My name is Noxix. I am an AI chatbot designed to assist you with any questions or tasks you may have. How can I help you today?
chatglm.py
内容如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 import openaiopenai.api_key = "EMPTY" openai.api_base = "http://yourserverip:8000/v1" model = "chatglm2-6b" prompt = "你好" completion = openai.Completion.create(model=model, prompt=prompt, max_tokens=64 ) print (prompt + completion.choices[0 ].text)completion = openai.ChatCompletion.create( model=model, messages=[{"role" : "user" , "content" : "Hello! What is your name?" }] ) print (completion.choices[0 ].message.content)import openaidef create (**args ): openai.api_key = "EMPTY" openai.api_base = "http://hostserver:8000/v1" try : result = openai.ChatCompletion.create(**args) except openai.error.RateLimitError: result = create(**args) return result def chat (mess ): responde = create( model="chatglm2-6b" , messages=mess ) res = responde['choices' ][0 ]['message' ]['content' ] return res
List Models
http://hostserver:8000/v1/models
Using CMD curl http://hostserver:8000/v1/models
, then
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 { "object" : "list" , "data" : [ { "id" : "chatglm2-6b" , "object" : "model" , "created" : 1690876019 , "owned_by" : "fastchat" , "root" : "chatglm2-6b" , "parent" : null , "permission" : [ { "id" : "modelperm-37FkwejmTx3qArXrHS5uSv" , "object" : "model_permission" , "created" : 1690876019 , "allow_create_engine" : false , "allow_sampling" : true , "allow_logprobs" : true , "allow_search_indices" : true , "allow_view" : true , "allow_fine_tuning" : false , "organization" : "*" , "group" : null , "is_blocking" : false } ] } ] }
Chat Completions 1 2 3 curl http://localhost:8000/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "vicuna-7b-v1.3", "messages": [{"role": "user", "content": "Hello! What is your name?"}] }'
Text Completions 1 2 3 curl http://localhost:8000/v1/completions \ -H "Content-Type: application/json" \ -d '{ "model": "vicuna-7b-v1.3", "prompt": "Once upon a time", "max_tokens": 41, "temperature": 0.5 }'
Embeddings: 1 2 3 curl http://localhost:8000/v1/embeddings \ -H "Content-Type: application/json" \ -d '{ "model": "vicuna-7b-v1.3", "input": "Hello world!" }'
Running Multiple(TODO TEST 多模型加载) If you want to run multiple models on the same machine and in the same process, you can replace the model_worker
step above with a multi model variant:
1 2 3 4 5 6 7 python3 -m fastchat.serve.multi_model_worker \ --model-path /mnt/models/chatglm2-6b-ptune \ --model-names chatglm2-6b-ptune --model-path /mnt/models/chatglm2-6b \ --model-names chatglm2-6b
Note
同时加载多个模型,设置模型名称路径即可,需要显存支持。这里尝试运行了两个ChatGLM以及微调ChatGLM, 显然24G的显存不支持同时运行两个。故之后的测试步骤暂不摘录。 接下来就愉快的使用openai去对接chatglm应用吧。