大模型工程化部署:使用FastChat部署基于OpenAI API兼容大模型服务
大模型部署这件事,说穿了无非是两难:想用高端模型就得忍受云端依赖,想本地化又常常面临接口不兼容的尴尬。而今天聊的这个框架,恰好把这两条路给打通了。
FastChat,出自加州大学伯克利分校的LM-SYS团队,定位是训练、服务和评估大模型聊天机器人的开放平台。它真正厉害的地方,不是堆功能,而是做了三件很关键的事:提供了最先进模型的权重、训练与评估代码;做了一个带WebUI且与OpenAI接口完全兼容的RESTful API,能够直接平替GPT接口;还让用户通过浏览器就能轻松使用各种模型。
其核心功能,可以归结为三点:
- 提供最先进LLM模型的权重、训练代码和评估代码。
- 带有WebUI和与OpenAI兼容的RESTful API的分布式多模型服务系统,可以平替,无缝迁移OpenAI GPT接口。
- 提供WebUI界面,方便用户通过浏览器来使用LLM。
支持主流模型部署
FastChat支持的模型清单相当可观,包括LLama 2、Vicuna、Alpaca、Baize、ChatGLM、Dolly、Falcon、FastChat-t5、GPT4ALL、Guanaco、MTP、OpenAssistant、RedPajama、StableLM、WizardLM等。
优点
除了WebUI带来的便捷体验,FastChat最亮眼的还是它的RESTful API。它提供的API与OpenAI的API完全兼容,这意味着以前基于OpenAI API构建的一系列应用,几乎不需要改动任何代码,就能直接跑在FastChat上。一个现实的好处就是:通过OpenAI的GPT模型已经获得原型验证甚至商业成功的应用,可以用这个框架完整地迁移到本地。选择开源大模型,就能实现私有化大模型服务部署,从根本上避免数据出域、隐私安全等一系列问题。
说到架构,FastChat采用的是经典的master-sla ve模式,由一个controller统筹管理多个worker。整套部署体系包含了四个部分:
- 部署controller用于控制worker。
- 部署worker,然后worker注册到controller。
- 部署API服务,提供OpenAI API兼容的接口,可以平替OpenAI接口。
- FastChat WebUI,即Gradio Server,方便通过界面聊天。
准备环境
克隆代码
git clone https://github.com/lm-sys/FastChat.git cd FastChat
创建虚拟环境
python -m venv env source env/bin/activate
设置依赖镜像和版本
pip3 config set global.index-url https://mirrors.bfsu.edu.cn/pypi/web/simple pip3 config set install.trusted-host mirrors.bfsu.edu.cn
安装依赖
pip3 install --upgrade pip pip3 install -e ".[model_worker,webui]" pip3 install git+https://github.com/huggingface/transformers pip3 install transformers_stream_generator einop
安装成功
注意:HuggingFace在国内不能访问,可以切换到使用ModelScope的镜像。环境变量需要设置:export FASTCHAT_USE_MODELSCOPE=True。
FastChat API 部署
第一步是启动控制器服务,启动命令:
python -m fastchat.serve.controller --host 0.0.0.0
用这种方式,可以后台运行:
python -m fastchat.serve.controller --host 0.0.0.0 &
这里运行的是FastChat的fastchat.serve.controller命令,--host参数设置服务的主机地址为0.0.0.0,表示可以通过任何地址访问。服务启动后默认端口是21001,端口可以通过--port参数指定。想查看更多信息的话,执行python -m fastchat.serve.controller --help命令查看即可。
第二步是启动Model Worker服务,启动命令:
pip install -U huggingface_hub export HF_ENDPOINT=https://hf-mirror.com huggingface-cli download --resume-download Qwen/Qwen-1_8B-Chat --local-dir Qwen/Qwen-1_8B-Chat
export CUDA_VISIBLE_DEVICES=0 python -m fastchat.serve.model_worker --model-path Qwen/Qwen-1_8B-Chat --model-names gpt-3.5-turbo --port 21002 --worker-address http://localhost:21002
使用FastChat的fastchat.serve.model_worker命令来启动服务,通过--model-path参数指定LLM的路径,服务启动后默认端口是21002,可以通过--port参数修改。首次启动会下载模型,速度会比较慢。
第三步是启动RESTFul API服务,启动命令(后面加&符号表示后台运行):
python -m fastchat.serve.openai_api_server --host 0.0.0.0 --port 8800
服务启动后,默认端口是8000,可以通过--port参数修改。在浏览器中访问http://127.0.0.1:8800/docs可以查看接口信息。这个服务就是最终要用的LLM API服务,它的接口与OpenAI的接口是兼容的。我们可以在Swagger里面直接请求对应的接口。
第四步,FastChat WebUI部署(不是必须启动)。
pip install openai
定义api_endpoints.json:
{
"gpt-3.5-turbo": {
"model_name": "gpt-3.5-turbo",
"api_type": "openai",
"api_base": "http://127.0.0.1:8800/v1",
"api_key": "sk-******",
"anony_only": false,
"recommended_config": {
"temperature": 0.7,
"top_p": 1.0
},
"text-arena": true,
"vision-arena": false
}
}
启动gradio_web_server:
python3 -m fastchat.serve.gradio_web_server --port 8801 --controller "" --share --register api_endpoints.json
如果遇到OPENAI_API_KEY错误,运行:export OPENAI_API_KEY='api_key'。如果遇到markupsafe错误,按这个版本安装:pip install markupsafe==2.0.1。
服务默认端口是7860,可以通过--port参数指定。添加--share参数可以开启Gradio的共享模式,这样就能通过外网访问WebUI服务。启动后会得到一个类似ChatGPT的界面,可以用来生成内容。
接口参数含义
- :大于等于零的浮点数。取值为0时几乎没有随机性;取值越高,输出越随机。如果该问答只有确定性答案,T值设置为0,反之设置为大于0。
temperature
- :大于0的正整数。从k个概率最大的结果中进行采样。k越大,多样性越强;k越小,确定性越强。一般设置在20~100之间。实践中,可以从100开始逐步调低,直到效果达到最佳。
top_k
- :大于0的浮点数。使所有被考虑的结果的概率和大于p值。p值越大,多样性越强;p值越小,确定性越强。一般设置在0.7~0.95之间。实践中,可以从0.95开始降低,直到效果达到最佳。需要特别说明的是,top_p比top_k更有效,应优先调节这个参数。
top_p
- :大于等于1.0的浮点数。用于惩罚重复token,默认1.0代表没有惩罚。
repetition_penalty
-
- 关于宇宙的好的网名有哪些
- 角色扮演 | 1
- 网名