LLM推理部署(四):一个用于训练、部署和评估基于大型语言模型的聊天机器人的开放平台FastChat

news2025/1/24 11:47:12

       FastChat是用于对话机器人模型训练、部署、评估的开放平台。体验地址为:https://chat.lmsys.org/,该体验平台主要是为了收集人类的真实反馈,目前已经支持30多种大模型,已经收到500万的请求,收集了10万调人类对比大模型的数据,可以在排行榜(https://huggingface.co/spaces/lmsys/chatbot-arena-leaderboard)进行查看。

FastChat核心特性包括:

  • 提供了SOTA模型(比如Vicuna,FastChat-T5)的模型权重,训练代码,评估代码;
  • 分布式多模型部署系统,自带Web UI和OpenAI兼容的RESTful APIs。

一、FastChat安装

方法一:pip安装

pip3 install "fschat[model_worker,webui]"

方法二:源码安装

Step1 克隆源码并切换到对应的目录下

git clone https://github.com/lm-sys/FastChat.gitcd FastChat

如果是mac,还需要执行如下代码

brew install rust cmake

Step2 安装相关的包​​​​​​​

pip3 install --upgrade pip  # enable PEP 660 supportpip3 install -e ".[model_worker,webui]"

二、FastChat聊天应用

下面展示一下不同模型以及不同大小启用聊天功能

Vicuna模型

模型大小聊天命令Hugging Face 
7Bpython3 -m fastchat.serve.cli --model-path lmsys/vicuna-7b-v1.5lmsys/vicuna-7b-v1.5
7B-16kpython3 -m fastchat.serve.cli --model-path lmsys/vicuna-7b-v1.5-16klmsys/vicuna-7b-v1.5-16k
13Bpython3 -m fastchat.serve.cli --model-path lmsys/vicuna-13b-v1.5lmsys/vicuna-13b-v1.5
13B-16kpython3 -m fastchat.serve.cli --model-path lmsys/vicuna-13b-v1.5-16klmsys/vicuna-13b-v1.5-16k
33Bpython3 -m fastchat.serve.cli --model-path lmsys/vicuna-33b-v1.3lmsys/vicuna-33b-v1.3

PS:对于16k模型,需要transformers>=4.31。

LongChat

模型大小聊天命令Hugging Face
7Bpython3 -m fastchat.serve.cli --model-path lmsys/longchat-7b-32k-v1.5lmsys/longchat-7b-32k

FastChat-T5

模型大小聊天命令Hugging Face
3Bpython3 -m fastchat.serve.cli --model-path lmsys/fastchat-t5-3b-v1.0lmsys/fastchat-t5-3b-v1.0

三、FastChat使用命令行进行推理

图片

PS:可以使用 --style rich 来启用富文本输出,提高某些非 ASCII 内容的文本流传输质量。在某些终端上可能无法正常工作。

支持的模型

      支持的模型有LLama 2, Vicuna, Alpaca, Baize, ChatGLM, Dolly, Falcon, FastChat-T5, GPT4ALL, Guanaco, MTP, OpenAssistant, OpenChat, RedPajama, StableLM, WizardLM等。查看支持的全部模型和如何添加新模型可以参考:https://github.com/lm-sys/FastChat/blob/main/docs/model_support.md

单GPU

       在单GPU下,执行如下命令:

python3 -m fastchat.serve.cli --model-path lmsys/vicuna-7b-v1.5

      对于Vicuna-7B 模型大概需要14G显存,对于Vicuna-13B模型大概需要28G显存,如果显存不够,可以参考:https://github.com/lm-sys/FastChat#not-enough-memory

多GPU

       支持多GPU并行推理,命令如下:

python3 -m fastchat.serve.cli --model-path lmsys/vicuna-7b-v1.5 --num-gpus 2

       有时候”auto“策略在huggingface/transformers不能在多GPU间平衡,因此最好增加参数”--max-gpu-memory“,该参数可以指定每个gpu用于存储模型权重的最大内存。这允许它为激活分配更多的内存,因此可以使用更长的上下文长度或更大的批处理大小。最好的命令是:

python3 -m fastchat.serve.cli --model-path lmsys/vicuna-7b-v1.5 --num-gpus 2 --max-gpu-memory 8GiB

仅CPU

      在单CPU下,执行如下命令:

python3 -m fastchat.serve.cli --model-path lmsys/vicuna-7b-v1.5 --device cpu

      对于Vicuna-7B 模型大概需要30G内存,对于Vicuna-13B模型大概需要60G内存。

        如果使用AVX512_BF16/AMX加速CPU推理,命令如下:

CPU_ISA=amx python3 -m fastchat.serve.cli --model-path lmsys/vicuna-7b-v1.5 --device cpu

Metal Backend (带苹果Silicon 或AMD GPU的Mac电脑)

python3 -m fastchat.serve.cli --model-path lmsys/vicuna-7b-v1.5 --device mps --load-8bit

       参数”--device mps“在torch>2.0情况下,可以加速mac GPU运算;参数”--load-8bit“可以量化为int8。Vicuna-7B在32GB内存的M1 Mac电脑 上推理时,每秒会生成1 - 2个词。

Intel XPU(Intel Data Center和Arc A-Series GPU)

    安装Intel Extension for PyTorch(https://intel.github.io/intel-extension-for-pytorch/xpu/latest/tutorials/installation.html)。设置OneAPI环境变量:

source /opt/intel/oneapi/setvars.sh

使用 --device xpu 启用XPU/GPU加速。

python3 -m fastchat.serve.cli --model-path lmsys/vicuna-7b-v1.3 --device xpu

Vicuna-7B 可以在Intel Arc A770 16GB上运行。

显存不足

       对于显存不够的情况,可以参考量化或者offload策略来部分解决,比如在命令行加入参数”--load-8bit“或者”--cpu-offloading“

python3 -m fastchat.serve.cli --model-path lmsys/vicuna-7b-v1.5 --load-8bit

四、FastChat使用WEB GUI进行推理

图片

       使用web UI提供服务,需要三个主要组件:与用户接口的web服务器、托管一个或多个模型的模型worker,以及协调web服务器和模型worker的controller。更多信息可以参考:https://github.com/lm-sys/FastChat/blob/main/docs/server_arch.md

启动controller

python3 -m fastchat.serve.controller

启动模型worker

python3 -m fastchat.serve.model_worker --model-path lmsys/vicuna-7b-v1.5

       启动成功后,会看到"Uvicorn running on ...",也可以通过如下命令来测试模型worker是否正确连接controller

python3 -m fastchat.serve.test_message --model-name vicuna-7b-v1.5

启动Gradio Web服务器

python3 -m fastchat.serve.gradio_web_server

五、FastChat模型评估

      FastChat使用多轮开放式问题来评估模型。为了实现评估过程的自动化,建议采用像GPT-4这样的强大LLM评估模型的回复(https://github.com/lm-sys/FastChat/blob/main/fastchat/llm_judge)。

具体步骤如下

  1. 从不同的模型生成回答:使用 qa_baseline_gpt35.py 获取ChatGPT的回答,或者指定模型检查点并运行 get_model_answer.py 获取 Vicuna 和其他模型的回答;

  2. 使用 GPT-4 生成评论:使用 GPT-4 自动生成评论。如果您无法使用 GPT-4 API,则可以手动执行此步骤;

  3. 生成可视化数据:运行 generate_webpage_data_from_table.py 生成静态网站的数据,以便您可以可视化评估数据;

  4. 可视化数据:在 webpage 目录下提供一个静态网站。您可以使用 python3 -m http.server 在本地提供网站服务。

数据格式和贡献

      采用JSON Lines 编码的数据格式进行评估,该格式包括有关模型、提示、评论者、问题、回答和评论的信息。

六、FastChat模型微调

6.1 数据

       Vicuna 是通过使用从 ShareGPT.com 上收集的约 7 万个用户共享对话使用 LLaMA 基础模型进行微调而创建的,使用了公共的 API。为了确保数据质量,将 HTML 转换回 Markdown,并过滤掉一些不适当或低质量的样本。此外,将较长的对话分割成适合模型最大上下文长度的较小段落(https://github.com/lm-sys/FastChat/blob/main/docs/commands/data_cleaning.md)。

      目前可能不会发布 ShareGPT 数据集,如果想尝试微调代码,可以使用 dummy_conversation.json(https://github.com/lm-sys/FastChat/blob/main/data/dummy_conversation.json)中的一些虚拟对话来运行它,可以按照相同的格式插入自己的数据。

6.2 代码和超参数

HyperparameterGlobal Batch SizeLearning rateEpochsMax lengthWeight decay
Vicuna-13B1282e-5320480

6.3 使用本地GPU微调Vicuna-7B模型

pip3 install -e ".[train]"

使用以下命令使用 4 个 A100 (40GB) 对 Vicuna-7B 进行训练​​​​​​​

torchrun --nproc_per_node=4 --master_port=20001 fastchat/train/train_mem.py \    --model_name_or_path meta-llama/Llama-2-7b-hf \    --data_path data/dummy_conversation.json \    --bf16 True \    --output_dir output_vicuna \    --num_train_epochs 3 \    --per_device_train_batch_size 2 \    --per_device_eval_batch_size 2 \    --gradient_accumulation_steps 16 \    --evaluation_strategy "no" \    --save_strategy "steps" \    --save_steps 1200 \    --save_total_limit 10 \    --learning_rate 2e-5 \    --weight_decay 0. \    --warmup_ratio 0.03 \    --lr_scheduler_type "cosine" \    --logging_steps 1 \    --fsdp "full_shard auto_wrap" \    --fsdp_transformer_layer_cls_to_wrap 'LlamaDecoderLayer' \    --tf32 True \    --model_max_length 2048 \    --gradient_checkpointing True \    --lazy_preprocess True

参考文献:

[1] https://github.com/lm-sys/FastChat

[2] https://github.com/lm-sys/FastChat/blob/main/docs/openai_api.md

[3] https://github.com/lm-sys/FastChat/blob/main/fastchat/serve/huggingface_api.py

[4] https://github.com/lm-sys/FastChat/blob/main/docs/langchain_integration.md

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1279367.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java项目调用C/C++ SDK的方案汇总

Java项目调用C/C SDK的方案汇总 背景调研JNIJNativeJNAJavaCPP 背景 Java项目中需要调用到一个C项目,于是对目前通用的解决方案做了一些调研,这里做一个汇总。 调研 JNI JNI:Java Native Interface,JNI是一套编程接口&#xf…

盘点25个Html游戏Game源码网页爱好者不容错过

盘点25个Html游戏Game源码网页爱好者不容错过 学习知识费力气,收集整理更不易。 知识付费甚欢喜,为咱码农谋福利。 下载链接:https://pan.baidu.com/s/1lSNLjWB4xMuLV8m_kDtczw?pwd6666 提取码:6666 项目名称 21点游戏 H5…

影刀实例五,网页表单中多下拉框填写问题

一,背景 网页表单中,经常有这样一个场景,填写籍贯.并且是以三个下拉框表示,分别代表省,市,县.并且都是非标准的,不能直接使用影刀内置命令.常规思路是:分别处理省,市&…

P2 Linux系统目录结构

前言 🎬 个人主页:ChenPi 🐻推荐专栏1: 《C_ChenPi的博客-CSDN博客》✨✨✨ 🔥 推荐专栏2: 《Linux C应用编程(概念类)_ChenPi的博客-CSDN博客》✨✨✨ 🛸推荐专…

面试题:说说 Cookie、Session、Token、JWT?

文章目录 什么是认证(Authentication)什么是授权(Authorization)什么是凭证(Credentials)什么是 Cookiecookie 重要的属性 什么是 Sessionsession 认证流程 Cookie 和 Session 的区别什么是 Token&#xff…

matlab操作方法(一)——向量及其操作

1.向量及其操作 matlab是英文Matrix Laboratory(矩阵实验室)的简称,是基于矩阵运算的操作环境。matlab中的所有数据都是以矩阵或多维数组的形式存储的。向量和标量是矩阵的两种特殊形式 向量是指单行或者单列的矩阵,它是构成矩阵…

23种设计模式之C++实践(二)

23种设计模式之C++实践 3. 设计模式(二)组合型模式7. 适配器模式——不兼容结构的协调7.2:类适配器模式7.3:双向适配器模式适配器模式总结8.桥接模式——处理多维度变化桥接模式总结9. 组合模式——树形结构的处理9.2 透明组合模式9.3 安全组合模式组合模式总结10. 装饰模式…

【数据库】数据库基于封锁机制的调度器,使冲突可串行化,保障事务和调度一致性

封锁使可串行化 ​专栏内容: 手写数据库toadb 本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。 本专栏会定期更…

MySQL 教程 1.5

MySQL 创建数据表 创建 MySQL 数据表需要以下信息: 表名表字段名定义每个表字段的数据类型 语法 以下为创建 MySQL 数据表的 SQL 通用语法: CREATE TABLE table_name (column1 datatype,column2 datatype,... ); table_name 是你要创建的表的名称。…

鸿蒙基础入门与高频知识点梳理

介绍鸿蒙高频知识点,持续更新中 一、鸿蒙代码结构 ├──entry/src/main/ets // 代码区 │ ├──common │ │ └──Constant.ets // 常量类 │ ├──entryability │ │ └──EntryAbility.ts // 程序入口类 │ ├──p…

学习-java多线程面试题

为什么不建议用Executors启动线程池 *队列LinkedBlockingQueue是没有边界的队列,请求多会造成OOM *建议使用ThreadPoolExecutors 线程池中提交一个任务的流程? 1先判断线程池是否有线程,如果与就直接执行,没有就放队列 2如果队列满了&#…

【ArcGIS Pro微课1000例】0041:Pro强大的定位搜索功能、定位窗格、地图上查找地点

一谈到搜索,你是不是还停留在矢量数据的属性表中呢?今天给大家介绍ArcGIS Pro中定位搜索强大功能的使用,可以基于在线地图、矢量数据等多种数据源,进行地址、地名、道路、坐标等的查找。 文章目录 一、定位工具介绍二、在线地图搜索三、本地矢量数据搜索四、无地图搜索五、…

Makefile初学之谜之隐式规则

刚开始学习Make教程:https://makefiletutorial.vercel.app/#/docs/fancy-rules,里面有个sample: objects foo.o bar.o all.o all: $(objects)# These files compile via implicit rules foo.o: foo.c bar.o: bar.c all.o: all.call.c:echo "int…

分布式事务有哪些解决方案?

本文我们来讨论下分布式事务的相关知识点。 分布式事务是分布式系统中非常重要的一部分,最典型的例子是银行转账和扣款,A 和 B 的账户信息在不同的服务器上,A 给 B 转账 100 元,要完成这个操作,需要两个步骤&#xff0…

java蚁群算法的物流管理系统eclipse定制开发mysql数据库BS模式java编程百度地图

一、源码特点 java 基于蚁群算法的物流管理系统是一套完善的web设计系统 ,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,eclipse开发,数据库为Mysql5.0&a…

Debian下载安装教程

目录 一.前言二.下载三.安装 一.前言 这篇文章展示如何使用VMware Workstation Player安装Debian12虚拟机。 二.下载 官网地址:官网 进入官网之后可以直接点击下载Debian选项,这样下载的是最新版的网络安装镜像。 三.安装 使用VMware Workstation P…

听GPT 讲Rust源代码--src/tools(5)

File: rust/src/tools/rust-analyzer/crates/hir-ty/src/mir/lower.rs 在Rust源代码中,lower.rs文件位于Rust Analyzer项目的hir-ty子库中,其目的是将高级中间表示(HIR)降低为中间表示(MIR)。下面对文件及其…

一、Zookeeper基本知识

目录 1、ZooKeeper概述 2、ZooKeeper特性 3、ZooKeeper集群角色 ​​​​​​​1、ZooKeeper概述 Zookeeper是一个分布式协调服务的开源框架。主要用来解决分布式集群中应用系统的一致性问题。 ZooKeeper本质上是一个分布式的小文件存储系统。提供基于类似于文件系统的目录…

3D模型材质编辑

在线工具推荐: 三维数字孪生场景工具 - GLTF/GLB在线编辑器 - Three.js AI自动纹理化开发 - YOLO 虚幻合成数据生成器 - 3D模型在线转换 - 3D模型预览图生成服务 如今,3D 纹理、打印和建模都非常流行。使用可用的高级工具,创建 3D 模型…

vscode插件离线下载

离线下载插件地址:https://marketplace.visualstudio.com/VSCode