LLM大模型预测耗时的粗略估计以及sft和continue pre-train的区别
目录
预训练(Pretraining)与微调(SFT, Supervised Fine-Tuning)的区别
训练方式
数据组成
特殊标记(Special Tokens)
Prompt处理
Session数据处理
训练目的
小结
LLM大模型预测耗时的粗略估计
1. 首个 Token 的生成耗时(b)
2. 后续 Token 的生成耗时(k)
详细过程
近似估算公式的应用
预训练(Pretraining)与微调(SFT, Supervised Fine-Tuning)的区别
训练方式
- 相同点:预训练和微调在训练方式上没有任何区别,都是通过梯度下降等优化算法来调整模型参数。
- 不同点:主要区别在于数据的组成形式和训练目标。
数据组成
-
预训练(Pretraining):
- 每条数据通常是满编的,例如4K或8K长度的文本。
- 数据来源广泛,通常是无标签的海量文本数据。
- 主要目的是让模型学习语言的基本结构和广泛知识。
-
微调(SFT, Supervised Fine-Tuning):
- 每条数据的长度根据原始数据的实际长度决定,不一定是满编的。
- 数据通常是有标签的,并且包含特定任务的标注信息。
- 引入预训练阶段未见过的特殊标记(special_token),如system、user、assistant等,以帮助模型学习新的语义和角色。
- 微调数据中会包含最重要的eos_token,以便模型在生成时知道何时停止。
特殊标记(Special Tokens)
-
预训练(Pretraining):
- 通常不包含特殊标记,模型主要学习通用的语言模式。
-
微调(SFT, Supervised Fine-Tuning):
- 引入特殊标记(special_token),如system、user、assistant等,根据业务需求也可以有“背景”、“旁白”、“事件”等。
- 这些标记帮助模型理解和区分不同的角色和语境。
Prompt处理
-
预训练(Pretraining):
- 通常不涉及prompt,模型学习的是通用的语言知识。
-
微调(SFT, Supervised Fine-Tuning):
- Prompt的同质化比较严重,所以通常不计算prompt的loss,但如果确保每条prompt都是独一无二的,可以省去prompt的loss_mask环节。
Session数据处理
- 在微调过程中,需要明确是每一个answer都算loss,还是只对最后一轮的answer算loss。
训练目的
-
预训练(Pretraining):
- 主要是让模型背书,纯粹学习语言的广泛知识和结构。
-
微调(SFT, Supervised Fine-Tuning):
- 主要是让模型做题,学习指令跟随能力(instruction-following ability)。
- 不建议在微调阶段进行知识注入,因为这会显著降低模型的通用能力。知识注入工作应该采用继续预训练(continue-pretraining)的思路进行,控制在10%~20%的比例,而不是100%某个知识。
小结
- 预训练:使用大量无标签数据进行训练,主要学习语言的基本结构和广泛知识。
- 微调:使用有标签数据进行训练,主要学习特定任务的指令跟随能力和语义理解。
通过预训练和微调的结合,LLM能够在广泛的语言理解和生成任务中表现出色,同时也能在特定任务中达到高水平的性能。
LLM大模型预测耗时的粗略估计
在自然语言处理模型,特别是生成式模型(如GPT系列)中,预测时间的近似估算可以表示为:
y=kx+b
其中:
- y 是总预测时间。
- x 是生成的 token 总数量。
- k 是生成每个 token 的平均耗时。
- b 是生成首个 token 的耗时。
这个公式中的 b 和 k 主要受到以下几个因素的影响:
1. 首个 Token 的生成耗时(b)
首个 token 的生成耗时较长,主要原因如下:
1.1 编码阶段
- 在生成第一个 token 时,模型需要对输入的 prompt 进行编码。这涉及到将输入序列通过多层 Transformer 编码器进行处理,以生成上下文向量。
1.2 KV Cache 初始化
- 在生成第一个 token 时,模型需要初始化 Key-Value (KV) 缓存。KV 缓存用于存储每一层 Transformer 的键和值,以便在生成后续 token 时,可以快速访问这些缓存,减少重复计算。初始化 KV 缓存的过程较为耗时,因为需要对整个输入序列进行计算。
1.3 长度相关性
- 首个 token 的生成耗时与输入 prompt 的长度呈正相关,因为较长的输入序列需要更多的计算资源和时间来进行编码和初始化缓存。
2. 后续 Token 的生成耗时(k)
生成后续 token 的耗时较短,主要原因如下:
2.1 KV Cache 利用
- 在生成后续 token 时,模型可以利用之前生成的 KV 缓存,从而避免对整个输入序列进行重复计算。这样,生成每个新 token 只需要在现有缓存的基础上进行增量计算,大大减少了计算量和时间。
2.2 自回归生成
- 生成每个新 token 时,模型会将前一个 token 的输出作为输入,结合 KV 缓存,快速生成下一个 token。这种自回归生成方式在时间复杂度上相对较低。
详细过程
- 输入编码:模型首先对输入 prompt 进行编码,生成上下文向量。这一步包括嵌入层和多层 Transformer 编码器的计算。
- KV 缓存初始化:在生成第一个 token 时,模型会初始化 KV 缓存,用于存储每一层 Transformer 的键和值。
- 首个 token 生成:利用上下文向量和初始化的 KV 缓存,生成第一个 token。
- 后续 token 生成:在生成每个新 token 时,模型利用之前的 KV 缓存和前一个 token 的输出,进行增量计算,快速生成下一个 token。
近似估算公式的应用
通过公式 y=kx+b,我们可以近似估算模型的预测时间:
- 首个 token 的耗时 b:与 prompt 的长度和 KV 缓存的初始化有关,通常是生成每个 token 耗时 k 的十几倍或更多。
- 每个 token 的平均耗时 k:由于利用了 KV 缓存,生成每个新 token 的耗时较短且相对稳定。
相关文章:
LLM大模型预测耗时的粗略估计以及sft和continue pre-train的区别
目录 预训练(Pretraining)与微调(SFT, Supervised Fine-Tuning)的区别 训练方式 数据组成 特殊标记(Special Tokens) Prompt处理 Session数据处理 训练目的 小结 LLM大模型预测耗时的粗略估计 1. …...
go和python打包项目对比
go源码 package mainimport ("fmt" )func main() {fmt.Println(" _____ _____ _____ _____")fmt.Println(" |2 ||2 ||2 ||2 |")fmt.Println(" | ^ || & || v || o |")fmt.Println(" | …...
EmEditor传奇脚本编辑器
主程序:EmEditor.exe 目前已有功能 可以自己指定一个快捷键 实现以下功能(默认快捷键为:F1) 以下全功能 都是鼠标所在行 按快捷键 (默认快捷键:F1) 1.在Merchant.txt中 一键打开NPC 没有…...
基于JAVA+SpringBoot+Vue的实习管理系统
基于JAVASpringBootVue的实习管理系统 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末附源码下载链接🍅 哈喽兄…...
Python自定义异常类:实际应用示例之最佳实践
Python自定义异常类:实际应用示例之最佳实践 前言 在软件开发中,合理处理异常是保证程序稳定性的重要环节。虽然 Python 内置了丰富的异常类型,但在处理复杂业务逻辑时,自定义异常类能够使代码更加清晰且具备可扩展性。 本文将…...
创新设计大师项骅:用卓越才华打造医疗科技新未来
项骅,这位在设计界声名鹊起的才俊,正准备在其璀璨的职业生涯中开启一个激动人心的新篇章。近日,他宣布即将进军医疗科技领域,这一决定在设计圈和医疗界引起了广泛关注。项骅计划以UX设计师的身份,致力于改善医疗服务的用户体验。谈到这个新挑战,他显得兴致勃勃:"我期待将我…...
云计算第四阶段 CLOUD2周目 01-03
国庆假期前,给小伙伴们更行完了云计算CLOUD第一周目的内容,现在为大家更行云计算CLOUD二周目内容,内容涉及K8S组件的添加与使用,K8S集群的搭建。最重要的主体还是资源文件的编写。 (*^▽^*) 环境准备: 主机清单 主机…...
Linux搭建Hadoop集群(详细步骤)
前言 Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。 说白了就是实现一个任务可以在多个电脑上计算的过程。 一:准备工具 1.1 VMware 1.2L…...
MongoDB中如何实现相似度查询
在 MongoDB 中,进行相似度查询通常涉及文本搜索或基于特定字段的相似度计算。以下是几种常见的方法: 1. 使用文本索引和文本搜索 MongoDB 提供了文本索引功能,可以对字符串字段进行全文搜索。你可以使用 $text 操作符来执行文本搜索查询。 …...
F开头的词根词缀:ful
60.-ful (1)表形容词,“有…的” grateful a 感激的(grate感激) rueful a 后悔的(rue悔恨) willful a 任性的(will意志…任意办事) tactful a 圆滑的(tact手腕…...
【python开发笔记】-- python装饰器
装饰器: 不修改被装饰对象的源代码,也不修改调用方式的前提下,给被装饰对象添加新的功能 原则:开放封闭原则 开放:对扩展功能(增加功能开放),扩展功能的意思是在源代码不做任何改变…...
WEB攻防-python考点CTF与CMS-SSTI模板注入PYC反编译
知识点: 1、PYC(python编译后的文件)文件反编译; 2、Python-Web-SSTI; 3、SSTI模板注入利用分析; (Server-Side Template Injection) SSTI 就是服务器端模板注入 当前使用的一…...
Open3D实现点云数据的序列化与网络传输
转载自个人博客:Open3D实现点云数据的序列化与网络传输 在处理点云数据的时候,有时候需要实现点云数据的远程传输。当然可以利用传输文件的方法直接把点云数据序列化成数据流进行传输,但Open3D源码在实现RPC功能时就提供了一套序列化及传输的…...
【C++11】右值引用
前言: 在C11中引入的右值引用(rvalue references)是现代C的一个重要特性,它允许开发者以更高效的方式处理临时对象(右值),避免不必要的拷贝,提升性能。右值引用通常与C11的**移动语义…...
CSS元素显示类型
display 属性是 CSS 中最重要的属性之一,主要用来控制元素的布局,通过 display 属性您可以设置元素是否显示以及如何显示。 根据元素类型的不同,每个元素都有一个默认的 display 属性值,例如<div>默认的 display 属性值为 …...
Flink 介绍(特性、概念、故障容错、运维部署、应用场景)
概述 特性 概念 数据流 状态 时间 savepoint 故障容错 运维部署 部署应用到任意地方 Flink能够更方便地升级、迁移、暂停、恢复应用服务 监控和控制应用服务 运行任意规模应用 应用场景 事件驱动型应用 什么是事件驱动型应用? 事件驱动型应用的优势 Flink如何…...
Python+Flask接口判断身份证省份、生日、性别、有效性验证+docker部署+Nginx代理运行
这里写目录标题 一、接口样式二、部署流程2.1 镜像打包2.1.1 准备工作2.1.2 build打包2.1.3 dokcer部署运行2.1.4 Nginx代理 三、代码及文件3.1 index.py3.2 areaCodes.json3.3 Dockerfile 一、接口样式 https://blog.henryplus.cn/idcardApi/idCard/query?idcard{idcard} 二、…...
门店收银营销活动打折特价-收银系统源码
1.功能描述 功能描述:连锁店总部/门店可以将商品设置第二件打折,如保温杯第一件10元,第二件5折; 2.适用场景 ☑新店开业、门店周年庆、节假日等特定时间促销; ☑会员拉新,设置会员专享套餐; …...
QTabWidget的每个tab居中显示图标和文本
使用QTabWidget,给每个tab添加了图标之后,文字和图标之间有间距,没有完美居中显示。 遇到此问题,尝试了多种办法,均不理想,最终自定义QTabBar,重绘tab,完美解决。 #include <QT…...
Ubuntu20.04如何安装Microsoft Edge浏览器?
Microsoft Edge是由微软开发的一款网页浏览器,首次发布于2015年,作为Windows 10操作系统的默认浏览器,取代了之前的Internet Explorer。 基于Chromium内核:自2019年起,Microsoft Edge转向了使用开源的Chromium内核,这使得它与Google Chrome在性能和兼容性方面有很多相似之…...
【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
Unity UGUI Button事件流程
场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...
永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器
一、原理介绍 传统滑模观测器采用如下结构: 传统SMO中LPF会带来相位延迟和幅值衰减,并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF),可以去除高次谐波,并且不用相位补偿就可以获得一个误差较小的转子位…...
WPF八大法则:告别模态窗口卡顿
⚙️ 核心问题:阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程,导致后续逻辑无法执行: var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题:…...
阿里云Ubuntu 22.04 64位搭建Flask流程(亲测)
cd /home 进入home盘 安装虚拟环境: 1、安装virtualenv pip install virtualenv 2.创建新的虚拟环境: virtualenv myenv 3、激活虚拟环境(激活环境可以在当前环境下安装包) source myenv/bin/activate 此时,终端…...
WEB3全栈开发——面试专业技能点P7前端与链上集成
一、Next.js技术栈 ✅ 概念介绍 Next.js 是一个基于 React 的 服务端渲染(SSR)与静态网站生成(SSG) 框架,由 Vercel 开发。它简化了构建生产级 React 应用的过程,并内置了很多特性: ✅ 文件系…...
