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

       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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

6-69.鸭子也是鸟

按要求完成下面的程序: 1、定义一个Bird类,包含一个void类型的无参的speak方法,输出“Jiu-Jiu-Jiu”。 2、定义一个Duck类,公有继承自Bird类,其成员包括: (1)私有string类型的成员na…

4个解决特定的任务的Pandas高效代码

在本文中,我将分享4个在一行代码中完成的Pandas操作。这些操作可以有效地解决特定的任务,并以一种好的方式给出结果。 从列表中创建字典 我有一份商品清单,我想看看它们的分布情况。更具体地说:希望得到唯一值以及它们在列表中出…

【高效开发工具系列】jackson入门使用

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

指针的综合运用第二期

1.指针数组 char *arr[5];//字符指针数组 int *arr[5];//整型指针数组 int ADD(int x,int y) { return xy; } int LOSE(int a,int b) { return a-b; } int *pa(int,int)ADD; int *pb(int,int)LOSE;//函数指针 int (*pc[2])(int,int){ADD,LOSE};//函数指针数组 //调用直接按数组…

VisionPro---PatMaxTool工具使用

CogPMAlignTool PatMax是一种图案位置搜索技术(识别定位),PatMax图案不依赖于像素格栅,是基于边缘特征的模板匹配而不是基于像素的模板匹配,支持图像中特征的旋转与缩放,边缘特征表示图像中不同区域间界限…

数据链路层之广域网、PPP协议、HDLC协议

学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持,想组团高效学习… 想写博客但无从下手,急需…

内部培训平台的系统 PlayEdu搭建私有化内部培训平台

PlayEdu是由白书科技团队多年经营的线上教育系统,专为企业提供的全新企业培训方案 我们的目标是为更多的企业机构搭建私有化内部培训平台,以满足不断增长的培训需求 通过PlayEdu,企业可以有效地组织和管理培训资源,提供高质量的…

Leetcode—1423.可获得的最大点数【中等】

2023每日刷题&#xff08;四十八&#xff09; Leetcode—1423.可获得的最大点数 思路&#xff1a;逆向求长为 n−k 的连续子数组和的最小值 参考灵茶山艾府题解 实现代码 class Solution { public:int maxScore(vector<int>& cardPoints, int k) {int mins 0, …

nodejs基于vue的社区物业缴费报修管理系统7vwc6

运行软件:vscode 前端nodejsvueElementUi 语言 node.js 框架&#xff1a;Express/koa 前端:Vue.js 数据库&#xff1a;mysql 开发软件&#xff1a;VScode/webstorm/hbuiderx均可 数据库用MySQL,后台用vue框架 基本要求&#xff1a; 1. 对项目进行详细实际的需求分析。 2. 在网…

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

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

某60区块链安全之Create2实战一学习记录

区块链安全 文章目录 区块链安全Create2实战一实验目的实验环境实验工具实验原理实验内容Create2实战一 实验步骤分析合约源代码漏洞Create2实战一 实验目的 学会使用python3的web3模块 学会分析以太坊智能合约Create2引发的漏洞及其利用 找到合约漏洞进行分析并形成利用 实…

基于SpringBoot + vue的在线视频教育平台

qq&#xff08;2829419543&#xff09;获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;springboot 前端&#xff1a;采用vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xf…

肖sir__mysql之视图__009

mysql之视图 一、什么是视图 视图是一个虚拟表&#xff08;逻辑表&#xff09;&#xff0c;它不在数据库中以存储形式保存&#xff08;本身包含数据&#xff09;&#xff0c;是在使用视图的时候动态生成。 二、视图作用 1、查询数据库中的非常复的数据 例如&#xff1a;多表&a…

微信支付/

微信支付准备工作 3.2.1 如何保证数据安全&#xff1f; 完成微信支付有两个关键的步骤&#xff1a; 第一个就是需要在商户系统当中调用微信后台的一个下单接口&#xff0c;就是生成预支付交易单。 第二个就是支付成功之后微信后台会给推送消息。 这两个接口数据的安全性&#x…

论文解读--Visual Lane Tracking and Prediction for Autonomous Vehicles

自动驾驶汽车视觉车道线跟踪和预测 摘要 我们提出了一种用于自动驾驶汽车跟踪水平道路车道标记位置的可视化方法。我们的方法是基于预测滤波的。预测步骤估计在每个新的图像帧中期望的车道标记位置。它也是基于汽车的运动学模型和嵌入式测程传感器产生的信息。使用适当准备的测…

区块链媒体:Web3.015个方法解析-华媒舍

Web3.0是第三代互联网的发展阶段&#xff0c;相较于Web2.0&#xff0c;它具有更高的可信性、安全性和去中心化特点。在Web3.0时代&#xff0c;推广变得更为重要&#xff0c;因为吸引用户和提高品牌知名度对于在竞争激烈的市场中脱颖而出至关重要。本文将揭秘推广Web3.0的15个秘…

Mysql安全之基础合规配置

一、背景 某次某平台进行安全性符合型评估时&#xff0c;列出了数据库相关安全选项&#xff0c;本文特对此记录&#xff0c;以供备忘参考。 二、安全配置 2.1、数据库系统登录时的用户进行身份标识和鉴别&#xff1b; 1&#xff09;对登录Mysql系统用户的密码复杂度是否有要…

CSS3 修改滚动条样式

上图&#xff1a; 上代码&#xff1a; /* 修改垂直滚动条 */ .right-list::-webkit-scrollbar {width: 2px; /* 修改宽度 */height: 5px; /* 修改高度 */ } /* 修改滚动条轨道背景色 */ .right-list::-webkit-scrollbar-track {background-color: #f1f1f1; } /* 修改滚动条滑块…

2023-12-03 LeetCode每日一题(可获得的最大点数)

2023-12-03每日一题 一、题目编号 1423. 可获得的最大点数二、题目链接 点击跳转到题目位置 三、题目描述 几张卡牌 排成一行&#xff0c;每张卡牌都有一个对应的点数。点数由整数数组 cardPoints 给出。 每次行动&#xff0c;你可以从行的开头或者末尾拿一张卡牌&#x…

吴恩达《机器学习》11-1-11-2:首先要做什么、误差分析

一、首先要做什么 选择特征向量的关键决策 以垃圾邮件分类器算法为例&#xff0c;首先需要决定如何选择和表达特征向量 &#x1d465;。视频提到的一个示例是构建一个由 100 个最常出现在垃圾邮件中的词构成的列表&#xff0c;根据这些词是否在邮件中出现来创建特征向量&…