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在性能和兼容性方面有很多相似之…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...
Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...
【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
Vue 模板语句的数据来源
🧩 Vue 模板语句的数据来源:全方位解析 Vue 模板(<template> 部分)中的表达式、指令绑定(如 v-bind, v-on)和插值({{ }})都在一个特定的作用域内求值。这个作用域由当前 组件…...
