InfLLM的笔记

news2024/11/18 15:41:48

文件中提供的代码是一个Python函数chat_loop,它是聊天系统的核心循环。以下是对这段代码逻辑的梳理:

函数定义与参数

  • chat_loop函数接收多个参数,用于配置聊天模型和聊天环境。
  • 参数包括模型路径、设备类型、GPU数量、最大GPU内存、数据类型、是否加载8位模型、CPU卸载、对话模板、系统消息、温度参数、重复惩罚、最大新token数量、聊天IO对象等。

加载模型

  • 使用load_model函数加载模型和分词器(tokenizer),这个函数根据提供的参数配置模型。
  • 如果提供了inf_llm_config,则使用patch_hf函数对模型进行补丁处理。

设置模型类型和默认参数

  • 根据模型类型(如T5、codet5p、xft等),可能需要设置特定的默认参数,例如T5模型的重复惩罚默认值设为1.2。

设置上下文长度

  • 根据模型配置获取上下文长度,如果使用InfLLM补丁,则设置一个非常大的上下文长度。

新建和重新加载对话

  • new_chat函数用于创建一个新的对话实例,根据是否提供conv_template来选择对话模板。
  • reload_conv函数用于重新打印对话内容。

主聊天循环

  • 使用while True创建一个无限循环,代表聊天系统的持续运行。
  • 使用chatio.prompt_for_input函数提示用户输入,如果输入为空或者为退出命令(如"!!exit"),则退出循环。
  • 支持对话控制命令,如"!!reset"重置对话,"!!remove"删除最后一条消息,"!!regen"重新生成最后一条消息,"!!save"保存对话,"!!load"加载对话。

生成输出

  • 将用户输入添加到对话中,并生成提示(prompt)。
  • 根据模型类型(如codet5p),可能需要特别处理提示。
  • 设置生成文本的参数gen_params
  • 调用generate_stream_func函数生成输出流。
  • 使用chatio.stream_output函数处理输出流并生成最终的文本输出。
  • 如果设置了调试模式,将打印调试信息,包括对话模板、提示、输出和生成速度。

异常处理

  • 使用try-except结构捕获KeyboardInterrupt异常,以便在用户尝试中断生成时处理。

清理和缓存管理

  • 在生成输出后,根据需要清理缓存或更新对话状态。

整体而言,chat_loop函数是聊天系统的主控函数,负责管理聊天会话的流程,包括加载模型、处理用户输入、生成和输出文本、以及异常处理。

——————————————————————

该文件是一个Python脚本,它包含了一个基于FastChat模型的聊天系统,FastChat模型最初由LMSYS团队开发。这个脚本在原有代码的基础上进行了修改,增加了对InfLLM补丁的支持。以下是代码逻辑的梳理:

  1. 导入依赖:脚本开始部分导入了所需的所有库和模块,包括torchjsonargparse等。

  2. Inference for FastChat models:这部分代码提供了FastChat模型的推理功能,定义了generate_stream函数,该函数用于生成聊天的输出流。

  3. 参数读取:在generate_stream函数内部,首先读取了一系列参数,包括prompttemperaturerepetition_penaltytop_ptop_kmax_new_tokens等,这些参数控制生成文本的行为。

  4. 日志概率处理器:使用prepare_logits_processor函数准备一个日志概率处理器,用于处理生成文本时的逻辑。

  5. 编码输入:将prompt转换为模型可理解的编码格式。

  6. 生成文本流:在generate_stream函数中,通过迭代的方式生成文本。在每次迭代中,模型都会生成一个或多个token,并根据设置的条件(如stream_intervalstop_token_ids等)决定是否输出这些token。

  7. 聊天循环:定义了chat_loop函数,该函数初始化模型和分词器,设置聊天环境,并进入一个循环,不断接收输入并生成输出,直到接收到退出命令。

  8. 模型加载:在chat_loop函数中,调用load_model函数来加载指定路径的模型。

  9. 聊天界面:根据命令行参数,初始化不同类型的聊天界面(SimpleChatIORichChatIOProgrammaticChatIO)。

  10. 命令行参数解析:脚本末尾部分定义了命令行参数解析逻辑,允许用户通过命令行指定模型路径、设备类型、温度参数、重复惩罚、最大新token数量等。

  11. 主函数:定义了main函数,它处理命令行参数,并启动聊天循环。

  12. 对话模板:定义了一个Llama3Conv类,用于生成和管理对话模板。

  13. 注册对话模板:通过register_conv_template函数注册了Llama3Conv类的一个实例,这个实例定义了对话的格式和角色。

  14. 入口点:脚本包含一个标准的Python入口点,即if __name__ == "__main__":部分,它解析命令行参数并调用main函数。

整体来看,这个脚本是一个聊天机器人的后端逻辑,负责处理用户输入,生成响应,并管理聊天会话的状态。

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

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

相关文章

K8s的kubectl的基本操作

K8s的kubectl的基本操作 K8s基本信息的查看 查看版本信息 kubectl versio查看资源对象简写 kubectl api-resources查看集群信息 kubectl cluster-info配置kubectl自动补全 source <(kubectl completion bash)查看master节点状态 kubectl get cs查看命名空间 kubectl…

Elastic Cloud 将 Elasticsearch 向量数据库优化配置文件添加到 Microsoft Azure

作者&#xff1a;来自 Elastic Serena Chou, Jeff Vestal, Yuvraj Gupta 今天&#xff0c;我们很高兴地宣布&#xff0c;我们的 Elastic Cloud Vector Search 优化硬件配置文件现已可供 Elastic Cloud on Microsoft Azure 用户使用。 此硬件配置文件针对使用 Elasticsearch 作…

<el-table>根据后端返回数据决定合并单元格的数量(521特别版)

文章目录 一、需求说明二、用到的方法三、代码&#xff08;只展示了本文章重点代码&#xff09; 一、需求说明 &#x1f49d;仅合并第一列&#xff0c;其余为固定列 二、用到的方法 &#x1f48c;合并单元格可以采用三种方法 &#x1f495;1. 手写表格 简单 但没有饿了么写…

力扣HOT100 - 136. 只出现一次的数字

解题思路&#xff1a; class Solution {public int singleNumber(int[] nums) {int single 0;for (int num : nums) {single ^ num;}return single;} }

生命在于学习——Python人工智能原理(1.1)

说明&#xff1a;今年学一部分人工智能方向的知识&#xff0c;网安也会穿插&#xff0c;看后续如何将二者结合起来。 一、人工智能的基本知识 1、人工智能的起源 1956年美国达特茅斯学院召开了一个夏季论班&#xff0c;首次提出人工智能的概念。 1950年图灵提出了图灵测试&a…

Jenkins + github 自动化部署配置

1 Jenkins安装 AWS EC2安装Jenkins&#xff1a;AWS EC2 JDK11 Jenkins-CSDN博客 AWS EC2上Docker安装Jenkins&#xff1a;https://blog.csdn.net/hhujjj2005/article/details/139078402 2 登录jenkins http://192.168.1.128:8080/ $ docker exec -it d1851d9e3386 /bin/ba…

ChatGPT-4o 实战 如何快速分析混淆加密和webpack打包的源码

ChatGPT-4o 几个特点 一个对话拥有长时间的记忆&#xff0c;可以连续上传文件&#xff0c;让其分析&#xff0c;最大一个代码文件只能3M&#xff0c;超出3M的文件&#xff0c;可以通过split-file可以进行拆分 其次ChatGPT-4o可以生成文件的下载链接&#xff0c;这有利于大文件的…

Nginx 的原理解析 worker 配置及相关问题 -细节狂魔

文章目录 前言Nginx 的最基本的执行过程&#xff08;master & worker&#xff09;worker 是如何进行工作的 一个 master 和 多个 woker 有哪些好处1、可以使用 nginx 热部署2、节省资源 && worker 进程之间互不影响 && nginx 服务不会中断 woker 设置多少才…

如何查看哪些组策略应用于你的电脑和用户帐户?这里有详细步骤

如果你希望在电脑上查看所有有效的组策略设置,以下是操作方法。 什么是Windows中的组策略 在Windows世界中,组策略为网络管理员提供了一种将特定设置分配给用户组或计算机组的方法。然后,无论何时组中的用户登录到联网的PC,或无论何时启动组中的PC,都会应用这些设置。 …

Linux系统之GoAccess实时Web日志分析工具的基本使用

Linux系统之GoAccess实时Web日志分析工具的基本使用 一、GoAccess介绍1.1 GoAccess简介1.2 GoAccess功能1.3 Web日志格式 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、检查本地环境3.1 检查本地操作系统版本3.2 检查系统内核版本3.3 检查系统镜像源3.4 更新软件列表…

【课程作业】嵌入式系统与设计上机作业(作业三)

个人名片&#xff1a; &#x1f393;作者简介&#xff1a;嵌入式领域优质创作者&#x1f310;个人主页&#xff1a;妄北y &#x1f4de;个人QQ&#xff1a;2061314755 &#x1f48c;个人邮箱&#xff1a;[mailto:2061314755qq.com] &#x1f4f1;个人微信&#xff1a;Vir2025WB…

基于机器学习判断面部微表情发现哪些人更容易诊有帕金森病

1. 概述 帕金森病&#xff08;Parkinson’s disease&#xff0c;PD&#xff09;是一种慢性、进展性的神经退行性疾病&#xff0c;主要影响运动系统。该病症以大脑中黑质致密部多巴胺能神经元的逐渐丧失为特征&#xff0c;导致多巴胺&#xff08;一种重要的神经递质&#xff09…

XX数字中台技术栈及能力

XX数字中台技术栈及能力 1 概述 XX数字中台面向数据开发者、数据管理者和数据应用者&#xff0c;提供数据汇聚、融合、治理、开发、挖掘、共享、可视化、智能化等能力&#xff0c;实现数据端到端的全生命周期管理&#xff0c;以共筑数字基础底座&#xff0c;共享数据服务能力…

插入排序(概述)

描述 插入排序为将一个数插入到以排序好的数组中 目录 描述 原理 特性 代码 原理 我们以升序为例 先将新数插入到数组的最后一位&#xff0c;记录下新数的值 从新数的位置开始往前遍历&#xff0c;如果前一位大于新数的值 则将当前位置修改为前一位的值 如果前一位小…

前端:音频可视化(H5+js版本)

一、效果展示 HTML5JS实现一个简单的音频可视化 二、代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><title>音频可视化</title><style></style></head><body><divs…

python mp3转mp4工具

成品UI 安装moviepy库 pip install moviepy 转换demo from moviepy.editor import *# 创建一个颜色剪辑&#xff0c;时长与音频相同 audioclip AudioFileClip(r"C:\Users\Administrator\PycharmProjects\pythonProject44\test4\赵照 - 灯塔守望人.mp3") videoclip…

P6160 [Cnoi2020] 向量

[Cnoi2020] 向量 题目背景 向量(vector)&#xff0c;指具有大小(Magnitude)和方向(Direction) 的量。 与向量对应的量叫做数量(Scalar)&#xff0c;数量只有大小&#xff0c;没有方向。 对于 Cirno 来说&#xff0c;整天环绕氷屋的旋转 Sangetsusei 们是向量而不是数量。 Sun…

Spring Cloud 项目中使用 Swagger

Spring Cloud 项目中使用 Swagger 关于方案的选择 在 Spring Cloud 项目中使用 Swagger 有以下 4 种方式&#xff1a; 方式一 &#xff1a;在网关处引入 Swagger &#xff0c;去聚合各个微服务的 Swagger。未来是访问网关的 Swagger 原生界面。 方式二 &#xff1a;在网关处引…

关于C的\r回车在不同平台的问题

首先我们需要搞明白\r和\n是两回事 \r是回车&#xff0c;前者使光标到行首&#xff0c;&#xff08;carriage return&#xff09; \n是换行&#xff0c;后者使光标下移一格&#xff0c;&#xff08;line feed&#xff09; Linux平台下 #include <stdio.h> int main()…

C++的AVL树

目录 基本概念 插入的语言分析 LL右旋 RR左旋 额外结论及问题1 LR左右旋 RL右左旋 额外结论及问题2 插入结点 更新bf与判断旋转方式 旋转代码实现 准备工作一 LL右旋的实现 RR左旋的实现 准备工作二 LR左右旋的实现 RL右左旋的实现 完整代码 基本概念 1、…