FastChat工作原理解析

  在了解FastChat如何完成大模型部署前,先了解下Huggingface提供的Transformer库。
Hugggingface提供的Transformer库

  Hugging Face 的 Transformers 库是一个用于自然语言处理(NLP)任务的 Python 库,旨在简化和加速使用预训练语言模型(如BERT、GPT-2等)的开发和应用。这个库的主要作用包括:
预训练模型的加载和使用: Transformers 库提供了易于使用的接口,允许用户加载各种预训练语言模型,如BERT、GPT-2、T5等。这些模型在大规模文本数据上进行了预训练,并可以用于各种自然语言处理任务,如文本分类、命名实体识别、文本生成等。
文本编码和解码: Transformers 库提供了文本编码和解码功能,可以将文本数据转换为模型可以理解的输入,并将生成的输出转换回文本。这对于处理不同任务的输入和输出数据非常有用。
支持多种任务: 该库支持多种自然语言处理任务,并提供了预训练模型的封装,以便用户可以轻松地在这些任务上进行微调和应用。这些任务包括文本分类、情感分析、命名实体识别、机器翻译等。
模型微调: Transformers 库允许用户对预训练模型进行微调,以适应特定的任务或领域。这使得用户可以在有限的数据集上实现高性能的自然语言处理应用。
模型交流和共享: Hugging Face 的 Transformers Hub 提供了一个平台,允许用户分享、发布和发现预训练模型和相关资源。这有助于加速 NLP 社区的发展和合作。
支持多种深度学习框架 Transformers 库支持多种深度学习框架,包括PyTorch、TensorFlow和JAX,以满足不同用户的需求。

  以通过HuggingFace提供的Tranformer加载和使用预训练大模型为例,下面的代码加载了Bert模型,首先是加载了Bert模型的BertTokennizer用户后面对输入输出新的encode和decode,接着是通过model_name来加载大模型。

# 安装 Transformers 库(如果尚未安装)
# pip install transformersfrom transformers import BertTokenizer, BertForSequenceClassification
import torch# 1. 加载预训练的BERT模型和标记器
model_name = "bert-base-uncased"  # 预训练模型的名称
tokenizer = BertTokenizer.from_pretrained(model_name)
model = BertForSequenceClassification.from_pretrained(model_name)# 2. 准备输入文本
text = "Hugging Face Transformers库使自然语言处理变得非常容易。"# 3. 使用标记器对文本进行编码
inputs = tokenizer(text, return_tensors="pt")# 4. 使用模型进行文本分类
outputs = model(**inputs)
logits = outputs.logits# 5. 打印分类结果
print(logits)

  再看国内开源大模型的部署加载命令,以ChatGLM大模型为例。通过下面的代码可以看到,实际也是通过Huggingface提供的transformer库完成的模型下载和使用。即先将大模型相关信息上传到huggingface,后续任何人要下载启动大模型,就可以通过下面的两行代码完成大模型的下载和部署。

AutoTokenizer.from_pretrained 是 Hugging Face Transformers 库中的一个方法,用于从预训练模型的名称或路径加载适当的标记器(Tokenizer)。
AutoModel.from_pretrained 是 Hugging Face Transformers 库中的一个方法,用于从预训练模型的名称或路径加载适当的模型。

from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().cuda()
model = model.eval()
response, history = model.chat(tokenizer, "你好", history=[])
print(response)

  查看HuggingFace上面的ChatGLM大模型上传的信息,可以看到大模型的参数文件都可以在Huggingface上查询到,具体如下图所示:

理解了前面的信息后,再来看FastChat如何完成各种开源大模型的部署,本质上就是对原来的开源模型部署命令进行了二次封装。FastChat是通过执行“python3 -m fastchat.serve.model_worker --model-path lmsys/vicuna-7b-v1.3”命令部署模型的,所以先来看一下model_worker这个文件的大致内容。

查看model_worker.py中的内容,部分内容如下图所示,可以看到在接口/v1/chat/completions里面又继续进行的请求调用。

按照调用的方法一层一层往下看,会发现model_work.py中的代码调用了controller文件中的代码。controller.py文件中的部分代码内容如下图所示:

在查看controller.py中的代码时,会发现该文件中方法调用了model_adapter.py文件中的方法,而model_adapter又调用了model_chatglm.py文件中方法。以初始化model为例子,层层往下看后,会发现最终load_model方法中的内容,和直接编写脚本load model的方式一样,具体内容如下图红框所示,红框中的内容和大模型官网本身提供的部署命令相同。

除了初始化加载启动大模型,FastChat还封装了api,如果从model_work中查看,一层层往下看,最终会看到如下的代码,下面的代码通过调用model.chat()方法与大模型交互。FastChat提供了兼容OpenAPI的接口,本质上也是进行了二次封装而已。

查看FastChat官网给出的架构图,可以知道,当有用户的请求发送过来时,首先到Gradio Server,也就是前端UI服务,再通过Controller与Worker交互。

从源代码层面来看,主要的代码集中在controller.py,model_worker.py,model_adapter.py,model_xxx.py几个文件中。

  通过上面的分析可以看到,FastChat在支持大模型部署和提供兼容OpenAPI的接口方面,主要是对原有的开源大模型进行了二次封装,让用户在通过FastChat进行大模型部署和使用时更加方便。

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

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

相关文章

手写Spring:第5章-注入属性和依赖对象

文章目录 一、目标:注入属性和依赖对象二、设计:注入属性和依赖对象三、实现:注入属性和依赖对象3.0 引入依赖3.1 工程结构3.2 注入属性和依赖对象类图3.3 定义属性值和属性集合3.3.1 定义属性值3.3.2 定义属性集合 3.4 Bean定义补全3.5 Bean…

android 注解详解

1,注解的概念 注解现在广泛的应用于android的各个开源框架中,不理解注解,我们就无法更好的提升我们的架构能力。那么什么是注解呢?注解(Annotation),是JDK5.0 引入的一种注释机制。 注解是元数…

go的iris框架进行本地资源映射到服务端

我这里使用的是HandleDirapi,有其他的请补充 package mainimport ("github.com/kataras/iris/v12" )type Hello struct{Status int json:"status"Message string json:"message" }func main(){app : iris.New()//第一个api:相当于首页app.Get(&q…

飞猪店铺小管家软件需求分析说明书

飞猪店铺小管家软件 项目背景: 在飞猪店铺运营过程中,客服人数不足导致客服团队忙不过来,容易出现订票信息错误,进而客户无法顺利参观景点,频繁投诉。这种情况不仅影响客户体验,还可能导致商家因赔付而承受…

出行类APP商业化路径解决方案

当下市场主流的商业化路径和方法相比于之前区别不大,开发者们都是在现有商业化体系下,制定更加详细、优质的策略,以期获得更高利益。 出行类App用户结构分析 年龄层次:出行类App用户的年龄分布比较广泛,主要集中在20…

苹果电脑版虚拟机推荐 VMware Fusion Pro for mac(vm虚拟机)

VMware Fusion Pro是一款功能强大的虚拟化软件,专为Mac用户设计。它允许用户在Mac上创建、运行和管理虚拟机,以便同时运行多个操作系统和应用程序。 以下是VMware Fusion Pro的一些主要特点和功能: 1. 多操作系统支持:VMware Fu…

MySQL--数据库基础

数据库分类 数据库大体可以分为 关系型数据库 和 非关系型数据库 常用数据类型 数值类型: 分为整型和浮点型: 字符串类型 日期类型

试图替代 Python 的下一代AI编程语言:Mojo

文章目录 为什么叫 Mojo ?Python 家族的一员,MojoPython 的好处:Python 兼容性Python 的问题移动和服务器部署:Python 子集和其他类似 Python 的语言: Mojo 是一种创新的编程语言,结合了 Python 的可用性和…

组件以及组件间的通讯

组件 & 组件通讯 :::warning 注意 阅读本文章之前,你应该先要了解 ESM 模块化的 import export,如需要请查看 ESM 模块化。 ::: 上一篇有介绍到什么是组件化,就是把一个页面拆分成若干个小模块,然后重新组成一个页面。其中的…

BL110设备支持Modbus TCP协议接入

随着物联网技术的不断发展,越来越多的工业设备被连接到云平台上,以实现远程监控和管理。在这篇文章中,我们将介绍如何方便用户快速把多种工业设备接入几个主流的云平台,如华为云 IoT、AWS IoT、阿里云 IoT、ThingsBoard、金鸽云等…

基于 Transformation-Equivariant 的自动驾驶 3D 目标检测

论文地址:https://arxiv.org/abs/2211.11962 论文代码:https://github.com/hailanyi/TED 论文背景 三维场景中的物体分布有不同的方向。普通探测器不明确地模拟旋转和反射变换的变化。需要大的网络和广泛的数据增强来进行鲁棒检测。 equivariant netw…

项目01—基于nignx+keepalived双vip的负载均衡高可用Web集群

文章目录 一.项目介绍1.拓扑图2.详细介绍 二.前期准备1.项目环境2.IP划分 三. 项目步骤1.ansible部署软件环境1.1 安装ansible环境1.2 建立免密通道1.3 批量部署nginx 2.配置NFS服务器和负载均衡器搭建keepalived2.1 修改nginx的index.html界面2.2 nginx实现七层负载均衡2.4 使…

《C++设计模式》——创建型

前言 创建型为了创建东西才是有用的,创建型设计模式使用的场景: 1、创建一个东西; 2、可重复利用; 3、灵活性高,代码可因地制宜。 Factory Method(工厂模式) 工厂模式将目的将创建对象的具体过程屏蔽隔离起来&#…

三维模型3DTile格式轻量化压缩处理工具常用几款软件介绍

三维模型3DTile格式轻量化压缩处理工具常用几款软件介绍 三维模型3DTile格式的轻量化处理旨在减少模型的存储空间和提高渲染性能。以下是一些推荐的工具软件,可以用于实现这个目的: MeshLab:MeshLab是一个开源的三维模型处理软件&#xff0c…

RBTree(红黑树)模拟实现(插入)

目录 红黑树的性质 红黑树的模拟插入 叔叔存在且为红色 叔叔不存在 旋转情况​​​​​​​ 叔叔存在且为黑色 总结 插入实现 节点 插入逻辑 左单旋 右单旋 红黑树是一颗平衡搜索二叉树,但是红黑树并不像 AVL 树一样是高度平衡二叉树,任意一…

自动化运维——ansible (五十二) (01)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 一、概述 1.1 为什么要用自动化运维软件 1.2 自动化运维 1.3 自动化运维要注意的方面 1.4 自动化运维主要关注的方面 1.5 常见的开源自动化运维软件 1.6 自动化运维软件…

华为OD机试 - 单词接龙 - 数据结构map、list (Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、输入示例1、输入:2、输出3、说明 五、解题思路1、核心思想:2、核心算法是构建一个map: 六、Java算法源码七、效果展示1、输入2、输出3、说明4、没有移除后再次拼接的情况,改…

Vue中实现3D得球自动旋转

具体实现 安装echarts 在终端下安装echarts npm install -D echarts 安装echarts-gl 在终端下安装echarts-gl npm install -D echarts-gl earth3D组件 earth3D.vue <template><div class"globe3d-earth-container" ><div class"globe3d-earth&qu…

CK_Label-V23货架标签(电池版本)接口文档

查询标签信息接口 接口类型&#xff1a;POST, 参数格式&#xff1a;json array 链接形式&#xff1a; http://localhost/wms/associate/getTagsMsg 代码形式&#xff1a; { url : http://localhost/wms/associate/getTagsMsg, requestMethed : GET, requestParameter :…

AKF拆分原则

在分布式软件环境下&#xff0c;为了保障分布式架构的可靠性、可扩展、高性能&#xff0c;通常会通过集群、扩容、数据分治等思想来实现&#xff0c;比如很多中间件的使用Redis、ZK、Kafka等&#xff0c;都可以通过这种设计思想来提高系统架构吞吐量。AKF是一个系统化的拓展思想…