当前位置: 首页 > article >正文

大模型工程化部署:使用FastChat部署基于OpenAI API兼容大模型服务

图片

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进行统筹管理。主要包括四个部分:

  1. 部署controller用于控制worker。

  2. 部署worker,然后worker注册到controller。

  3. 部署API服务,提供OpenAI API兼容的接口,可以平替OpenAI接口。

  4. FastChat WebUI, Gradio Server,方便通过界面聊天

准备环境(可用智星云云服务器)

图片

克隆代码
git clone https://github.com/lm-sys/FastChat.gitcd FastChat
创建虚拟环境
python -m venv envsource env/bin/activate
设置依赖镜像和版本
pip3 config set global.index-url https://mirrors.bfsu.edu.cn/pypi/web/simplepip3 config set install.trusted-host mirrors.bfsu.edu.cn
安装依赖
pip3 install --upgrade pippip3 install -e ".[model_worker,webui]"pip3 install git+https://github.com/huggingface/transformerspip3 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_hubexport HF_ENDPOINT=https://hf-mirror.comhuggingface-cli download --resume-download Qwen/Qwen-1_8B-Chat --local-dir Qwen/Qwen-1_8B-Chat
export CUDA_VISIBLE_DEVICES=0python -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工程师。在这里,我分享我的感悟和经验,希望能给你带来启发和力量。让我们一起在职场的逆流中,找到自我价值,实现自我超越。


http://www.kler.cn/a/408739.html

相关文章:

  • 3349、检测相邻递增子数组 Ⅰ
  • 【tensorflow的安装步骤】
  • 取电快充协议芯片,支持全协议、内部集成LDO支持从UART串口读取电压电流消息
  • Spring Security @PreAuthorize注解
  • C# NetworkStream用法
  • 如何使用ChatGPT整理和收集论文实验数据?
  • 应用案例 | 西门子能源选用ASPION G-Log 2冲击记录仪,揭秘高压开关设备运输背后的安全保障
  • UG NX二次开发(C++)-UIStyler-指定平面的对象和参数获取
  • 零基础学指针(上)
  • Python爬取豆瓣电影全部分类数据并存入数据库
  • 【大数据学习 | Spark-Core】关于distinct算子
  • STM32完全学习——使用标准库完成PWM输出
  • Spring Cloud Consul实现选举机制
  • springboot 整合 rabbitMQ (延迟队列)
  • js函数声明
  • 在SQLyog中导入和导出数据库
  • 在复现SDXL-Turbo和stable-diffusion-2-1系列大模型过程中遇到的问题以及解决方案
  • 机器学习周志华学习笔记-第5章<神经网络>
  • 自动化运维-Linux通用性日志切割脚本
  • 接口性能优化宝典:解决性能瓶颈的策略与实践
  • neo4j图数据库community-5.50创建多个数据库————————————————
  • velocity unable to find resource ‘xxx.vm‘ in any resource loader
  • Linux 安装 Git 服务器
  • shell编程(6)(7)
  • EdgeNeXt:面向移动视觉应用的高效融合CNN-Transformer架构
  • 微信小程序开发指南:从基础到进阶