InfLLM的笔记

文件中提供的代码是一个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函数。

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

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

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

相关文章

安装测缝计安装事项详解

在建筑和工程领域,测量缝隙和裂缝的准确性对于工程质量和安全性至关重要。测缝计作为一种专业的测量工具,能够帮助工程师和施工人员准确测量和监测建筑结构的缝隙情况,进而采取合适的修复和加固措施,保证建筑物的稳定性和安全性。…

Covalent的CQT质押迁移比率在以太坊上升至13%,超Moonbeam记录

Covalent Network(CQT)作为领先的结构化模块化数据基础设施层,目前其在以太坊上的 CQT 质押比率已超过之前在 Moonbeam 上达到的历史最高水平。自从将质押合约迁移到以太坊不到一个月的时间里,超过总供应量的 13% 的 CQT 代币已被…

Unity中计数器的实现

Unity中计数器的实现 一、前言二、效果与逻辑(一) 实现效果(二)功能逻辑 三、功能代码四、应用实现五、结语 一、前言 最近在开发中用到计数器,但是unity自带的UI组件中没有,所以只好自己手撸了一个&#x…

2024电工杯数学建模选题建议及各题思路来啦!

大家好呀,2024电工杯数学建模竞赛开始了,来说一下初步的选题建议吧: 首先定下主基调, 本次电工杯建议选B。A题目难度较高,只建议有相关专业知识和优化经验的队伍选择,小白队伍无脑选B即可。是比较经典的数…

Python数字比大小获取大的数

目录 一、引言 二、数字比较的基本语法 三、获取较大的数 使用条件语句 使用内置函数 四、处理特殊情况 比较非数字类型 处理无穷大和NaN 五、应用实例 在游戏开发中比较分数 在数据分析中找出最大值 六、优化与性能 七、总结 一、引言 在Python编程的广阔天地中…

JS 实现鼠标框选(页面选择)时返回对应的 HTML 或文案内容

JS 实现鼠标框选(页面选择)时返回对应的 HTML 或文案内容 一、需求背景 1、项目需求 当用户进行鼠标框选选择了页面上的内容时,把选择的内容进行上报。 2、需求解析 虽然这需求就一句话的事,但是很显然,没那么简单…

如何使用maven运行SpringBoot程序?

目录 一、什么是maven 二、什么是SpringBoot 三、如何使用maven运行SpringBoot程序? 一、什么是maven Maven:简化Java项目构建的自动化工具 在软件开发的世界里,Maven以其强大的项目管理和构建自动化功能,为Java开发者提供了…

软件设计师-上午题-计算题汇总

一、存储系统 - 存储容量计算(字节编址、位编址、芯片个数) 内存地址是16进制 内存地址编址的单位是Byte,1K1024B 1B 8 bit 1.计算存储单元个数 存储单元个数 末地址 - 首地址 1 eg. 按字节编址,地址从 A4000H 到 CBFFFH&…

week2腾讯2019 暑期实习提前批笔试——acwing568. 奇妙的数列

568. 奇妙的数列 判断区间起始位置l的奇偶性,若为偶数,则偶奇交替,一对和为1,反之为-1 然后计算区间内元素对数(r - l 1) / 2,区间元素个数为r - l 1,如果区间内总数为偶数,必然是一正一负刚好成对。如果…

速卖通测评揭秘:如何选择安全的渠道操作

许多商家对测评存在误解,认为只需进行几次测评就能迅速打造爆款。实际上,测评是一个需要计划和持久性的过程,以便让平台检测到产品的受众程度并提高产品的曝光和权重。 在进行测评时,安全是首要考虑的问题。平台可以通过设备、网…

新鲜干货|「隐语城市行·成都站 x 蓉数大讲堂」硬核技术分享、多元场景实践、未来趋势洞察及前沿学术探秘

“隐语”是开源的可信隐私计算框架,内置 MPC、TEE、同态等多种密态计算虚拟设备供灵活选择,提供丰富的联邦学习算法和差分隐私机制 开源项目 github.com/secretflow gitee.com/secretflow 5月18日,「隐语城市行成都站 x 蓉数大讲堂」线下活…

AI绘图副业创收,热门擦边变现赛道怎么玩?网友:瑟瑟才是人类前进的动力!

大家好,我是设计师阿威 今天给大家介绍一个用 AI 搞擦边的变现赛道 而且可以说是0 成本变现的 现在真的越来越多的人都想 0 成本变现,那么 0 成本到底能不能变现,变现的上下限又是多少? 今天这个案例就可以很好的进行说明 可以…

【设计模式深度剖析】【1】【结构型】【代理模式】| 玩游戏打怪、升级为例加深理解

👈️上一篇:创建型设计模式对比 | 下一篇:装饰器模式👉️ 目 录 代理模式定义英文原话直译如何理解? 3个角色UML类图1. 抽象主题(Subject)角色2. 代理类:代理主题(Proxy Subject&#xff0…

R实验 随机变量及其分布

实验目的: 掌握常见几种离散性随机变量及其分布在R语言中对应的函数用法;掌握常见几种连续性随机变量及其分布在R语言中对应的函数用法;掌握统计量的定义及统计三大抽样分布在R语言中对应的函数用法。 实验内容: (习题…

【html5】02-语义标签

1 引言 语义标签在用法上面与div标签没有区别&#xff0c;但是比div标签没多了层语义性&#xff01;&#xff01; 低版本的浏览器不支持语义标签&#xff0c;即语义标签失效 2 语义标签 <body><!-- <div class"nav"></div><div class&quo…

探索数值分析的奥秘:掌握NumPy与Pandas基础

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、NumPy&#xff1a;数值计算的效率提升器 二、Pandas&#xff1a;数据处理与分析的利器 …

【真人Q版手办风】线稿手绘+ AI绘图 Stable Diffusion 完整制作过程分享

大家好&#xff0c;我是设计师阿威。 今天给大家分享一篇【真人Q版卡通手办】风格的制作过程&#xff0c;话不多说&#xff0c;进入正题。 成品预览 手绘线稿 首先&#xff0c;我使用的是老款手绘软件【SAI】&#xff0c;用[钢笔工具]进行了人物的线稿Q版描绘。&#x1f447…

每周刷题第二期

个人主页&#xff1a;星纭-CSDN博客 系列文章专栏&#xff1a;刷题 踏上取经路&#xff0c;比抵达灵山更重要&#xff01;一起努力一起进步&#xff01; 目录 一.选择题 1. 2. 二.编程题 1.添加逗号 方法一&#xff1a;递归 方法二&#xff1a;迭代 2.删除公共字符 3…

后端之路第二站(正片)——SprintBoot之:设置请求接口

这一篇讲怎么简单结合模拟云接口&#xff0c;尝试简单的后端接接口、接受并传数据 一、下载Apifox接口文档软件 目前的企业都是采用前后端分离开发的&#xff0c;在开发阶段前后端需要统一发送请求的接口&#xff0c;前端也需要在等待后端把数据存到数据库之前&#xff0c;自己…

.NET快速实现网页数据抓取

网页数据抓取需求 本文我们以抓取博客园10天推荐排行榜第一页的文章标题、文章简介和文章地址为示例&#xff0c;并把抓取下来的数据保存到对应的txt文本中。 请求地址&#xff1a;https://www.cnblogs.com/aggsite/topdiggs 创建控制台应用 创建名为DotnetSpiderExercise的控…