FastChat是加州大学伯克利分校LM-SYS发布的一个用于训练、服务和评估基于大型语言模型的聊天机器人的开放平台。
项目地址:https://github.com/lm-sys/FastChat.git
其核心功能包括:
-
最先进 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等。
优点:
Fastchat除了WebUI让大家便捷的使用和测试大模型外,还提供了restful API的服务调用方式,并且它提供的API与OpenAI开放出的API完全兼容,意味着以前大家基于OpenAI的API构建的一系列应用都可以无需任何改动,直接运行在FastChat框架上。
一个显而易见的好处就是,通过OpenAI的GPT模型已经获得原型验证甚至商业成功的应用,都可以采用这个框架将应用服务完整迁移到本地,通过选择开源的大模型即可实现私有化大模型服务部署,避免了数据出域、隐私安全等一系列问题。
FastChat Server架构
Fastchat的部署采用的架构是master-slave的模式, 由一个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参数来修改端口,如果想查看该命令的更多信息可以执行python -m fastchat.serve.model_worker --help命令,首次启动会下载模型,比较慢。
第三步是启动 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,可以用来生成内容。
接口参数含义:
-
temperature:大于等于零的浮点数。果取值为0,此时推理几乎没有随机性;取值为正无穷时接近于取平均。一般temperature取值介于[0, 1]之间。取值越高输出效果越随机。如果该问答只存在确定性答案,则T值设置为0。反之设置为大于0。
-
top_k:大于0的正整数。从k个概率最大的结果中进行采样。k越大多样性越强,越小确定性越强。一般设置为20~100之间。
-
实际实验中可以先从100开始尝试,逐步降低top_k直到效果达到最佳。
-
-
top_p:大于0的浮点数。使所有被考虑的结果的概率和大于p值,p值越大多样性越强,越小确定性越强。一般设置0.7~0.95之间。
-
实际实验中可以先从0.95开始降低,直到效果达到最佳。
-
top_p比top_k更有效,应优先调节这个参数。
-
-
repetition_penalty:大于等于1.0的浮点数。如何惩罚重复token,默认1.0代表没有惩罚。
————关于作者:————
我是书上的蜗牛,一个在职场和生活中不断探索和成长的普通AIGC工程师。在这里,我分享我的感悟和经验,希望能给你带来启发和力量。让我们一起在职场的逆流中,找到自我价值,实现自我超越。