理解最先进模型的起点GPT-2 源码 配置的解释
理解最先进模型的起点GPT-2 源码 配置的解释
flyfish
为训练GPT模型设置和管理配置参数、日志记录以及实验的可重复性
理解最先进模型的起点GPT-2 理论知识
理解最先进模型的起点GPT-2 源码 注释 模型部分(from mingpt.model)
utils.py
import os
import sys
import json
import random
from ast import literal_evalimport numpy as np # 导入numpy库,用于数值计算
import torch # 导入PyTorch库,用于深度学习模型# -----------------------------------------------------------------------------def set_seed(seed):""" 设置随机种子,以确保实验的可重复性 """random.seed(seed)np.random.seed(seed)torch.manual_seed(seed)torch.cuda.manual_seed_all(seed)def setup_logging(config):""" 设置日志记录功能 """work_dir = config.system.work_dir# 如果工作目录不存在,则创建os.makedirs(work_dir, exist_ok=True)# 记录命令行参数(如果有)with open(os.path.join(work_dir, 'args.txt'), 'w') as f:f.write(' '.join(sys.argv))# 记录配置信息with open(os.path.join(work_dir, 'config.json'), 'w') as f:f.write(json.dumps(config.to_dict(), indent=4))class CfgNode:""" 轻量级的配置类,灵感来自yacs """# TODO: 转换为像yacs那样从字典子类化# TODO: 实现冻结功能以防止自伤# TODO: 在读写参数时增加存在性/覆盖性检查?def __init__(self, **kwargs):# 更新实例的字典属性self.__dict__.update(kwargs)def __str__(self):# 返回配置的字符串表示return self._str_helper(0)def _str_helper(self, indent):""" 辅助方法,支持嵌套缩进以美观打印 """parts = []for k, v in self.__dict__.items():if isinstance(v, CfgNode):parts.append("%s:\n" % k)parts.append(v._str_helper(indent + 1))else:parts.append("%s: %s\n" % (k, v))parts = [' ' * (indent * 4) + p for p in parts]return "".join(parts)def to_dict(self):""" 返回配置的字典表示 """return { k: v.to_dict() if isinstance(v, CfgNode) else v for k, v in self.__dict__.items() }def merge_from_dict(self, d):# 从字典中更新配置self.__dict__.update(d)def merge_from_args(self, args):"""从字符串列表更新配置,通常来自命令行参数,即sys.argv[1:].参数格式预期为 `--arg=value`,arg可以使用.表示嵌套子属性。例如:--model.n_layer=10 --trainer.batch_size=32"""for arg in args:keyval = arg.split('=')assert len(keyval) == 2, "每个覆盖参数的格式应为 --arg=value,当前为 %s" % argkey, val = keyval # 解包# 首先将val转换为Python对象try:val = literal_eval(val)"""这里需要一些解释。- 如果val只是一个字符串,literal_eval将抛出ValueError- 如果val表示某种对象(如3, 3.14, [1,2,3], False, None等),它将被创建"""except ValueError:pass# 找到适当的对象以插入属性assert key[:2] == '--'key = key[2:] # 去掉'--'keys = key.split('.')obj = selffor k in keys[:-1]:obj = getattr(obj, k)leaf_key = keys[-1]# 确保该属性存在assert hasattr(obj, leaf_key), f"{key} 不是配置中存在的属性"# 覆盖属性print("命令行覆盖配置属性 %s 为 %s" % (key, val))setattr(obj, leaf_key, val)
- 设置随机种子 :
set_seed(seed)
函数设置了Python、Numpy和PyTorch的随机种子,以确保实验的结果是可重复的。这对于调试和验证模型是非常重要的。
- 日志记录 :
setup_logging(config)
函数用于设置日志记录。它会创建一个工作目录(如果不存在),并将命令行参数和配置信息记录在文件中。这样可以方便地跟踪和重现实验。
- 配置管理 :
-
CfgNode
类是一个轻量级的配置类,用于管理实验中的各种参数。它支持从字典、命令行参数等不同来源更新配置,便于灵活地设置和修改参数。 -
__init__(self, **kwargs)
:初始化配置节点,将传入的参数更新为实例属性。 -
__str__(self)
:返回配置的字符串表示,用于打印配置。 -
_str_helper(self, indent)
:辅助方法,支持嵌套缩进以美观打印。 -
to_dict(self)
:将配置转换为字典表示,便于序列化和存储。 -
merge_from_dict(self, d)
:从字典中更新配置参数。 -
merge_from_args(self, args)
:从命令行参数中更新配置参数,支持嵌套结构。
配置举例
{"system": {"seed": 3407,"work_dir": "./out/adder"},"data": {"ndigit": 2},"model": {"model_type": "gpt-nano","n_layer": null,"n_head": null,"n_embd": null,"vocab_size": null,"block_size": null,"embd_pdrop": 0.1,"resid_pdrop": 0.1,"attn_pdrop": 0.1},"trainer": {"device": "auto","num_workers": 4,"max_iters": null,"batch_size": 64,"learning_rate": 0.0005,"betas": [0.9,0.95],"weight_decay": 0.1,"grad_norm_clip": 1.0}
}
如果想看GPT-2的地基Transformer,可以看下面的链接
Transformer - 注意⼒机制 Scaled Dot-Product Attention 计算过程
Transformer - 注意⼒机制 代码实现
Transformer - 注意⼒机制 Scaled Dot-Product Attention不同的代码比较
Transformer - 注意⼒机制 代码解释
Transformer - 注意⼒机制 Attention 中的 Q, K, V 解释(1)
Transformer - 注意⼒机制 Attention 中的 Q, K, V 解释(2)
Transformer的Encoder和Decoder之间的交互
Transformer - Self-Attention层的复杂度的计算
Transformer - 《Attention is All You Need》中的Scaled Dot-Product Attention,为什么要Scaled
Transformer - Layer Normalization
Transformer - Teacher Forcing
Transformer - Outputs(Shifted Right)
Transformer - model architecture
Transformer - Positional Encoding 位置编码 代码实现
Transformer - 注意⼒机制 代码实现
Transformer - 掩码张量
Vanilla Transformer
Transformer - 注意⼒机制 Attention Scaled Dot-Product Attention不同的代码比较
Transformer中的FeedForward
Transformer中的 Add Norm
相关文章:
理解最先进模型的起点GPT-2 源码 配置的解释
理解最先进模型的起点GPT-2 源码 配置的解释 flyfish 为训练GPT模型设置和管理配置参数、日志记录以及实验的可重复性 理解最先进模型的起点GPT-2 理论知识 理解最先进模型的起点GPT-2 源码 注释 模型部分(from mingpt.model) utils.py import os import sys import json im…...

C++11 可变参数模板
C11的新特性可变参数模板能够创建可以接受可变参数的函数模板和类模板,相比C98/03,类模版和函数模版中只能含固定数量的模版参数,可变模版参数无疑是一个巨大的改进。然而由于可变模版参数比较抽象,使用起来需要一定的技巧&#x…...

项目实战——外挂开发(30小时精通C++和外挂实战)
项目实战——外挂开发(30小时精通C和外挂实战) 外挂开发1-监控游戏外挂开发2-秒杀僵尸外挂开发3-阳光地址分析外挂开发4-模拟阳光外挂开发5-无限阳光 外挂开发1-监控游戏 外挂的本质 有两种方式 1,修改内存中的数据 2,更改内存中…...
【人工智能专栏】Constructive损失解析
Constructive Loss 相比较于 MSE Loss \text{MSE Loss} MSE Loss 和 MAE Loss \text{MAE Loss} MAE Loss 直接将结果与目标数值比较的做法,使用 Constru...

PHP经销商订货管理系统小程序源码
经销商订货管理系统:重塑供应链效率的利器 🚀 开篇:解锁供应链管理的新纪元 在竞争激烈的商业环境中,经销商作为供应链的关键一环,其订货效率直接影响到整个供应链的流畅度和响应速度。传统的订货方式往往繁琐、易出…...

【网络世界】HTTPS协议
目录 🌈前言🌈 📁 HTTP缺陷 📁 HTTPS 📂 概念 📂 加密 📂 加密方式 📁 中间人攻击 📁 CA机构和证书 📂 数据摘要(数据指纹) &…...

根据空域图信息构造飞机航线图以及飞行轨迹模拟matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 航路网络建模 4.2 航线图构建 4.3 飞行轨迹模拟的具体步骤 5.完整程序 1.程序功能描述 空域图是指航空领域中的一种图形表示方式,它涵盖了空中交通管理所需要的各种信息&a…...
llama-factory 系列教程 (五),SFT 微调后的模型,结合langchain进行推理
背景 微调了一个 glm4-9B的大模型。微调后得到Lora权重,部署成vllm 的API,然后通过langchain接入完成相关任务的推理。 关于SFT 微调模型的部分就不做介绍了,大家可以参考前面的文章,将自己的数据集 在 Llamafactory 的 dataset…...

hive 中编写生成连续月sql
记录一下 sql 编写生成从一个确定的起始月份到当前月份的连续月份序列 SELECT substr(add_months(table1.start_dt,table2.pos),1,4) AS INDICT_YEAR,substr(add_months(table1.start_dt,table2.pos),1,7) AS INDICT_MON FROM (SELECT 2024-01-01 AS start_dt,substr(CURRE…...

前端开发实用的网站合集
文章目录 一、技能提升篇vueuseJavaScript中文网JavaScript.infoRxJsWeb安全学习书栈网码农之家 二、UI篇iconfont:阿里巴巴矢量图标库IconPark3dicons美叶UndrawError 404摹克 三、CSS篇You-need-to-know-cssCSS TricksAnimate.cssCSS ScanCSS Filter 四、颜色篇中…...

蓄势赋能 数智化转型掌舵人百望云杨正道荣膺“先锋人物”
2024年,在数据与智能的双涡轮驱动下,我们迎来了一个以智能科技为核心的新质生产力大爆发时代。在数智化浪潮的推动下,全球企业正站在转型升级的十字路口。在这个充满变革的时代,企业转型升级的道路充满挑战,但也孕育着…...
(七)前端javascript中的函数式编程技巧2
函数式编程范式的技巧 迭代算法-可以替代for in let count 10;while (count--) {console.log(count); }斐波拉契的实现 function fabci(n) {console.log("🚀 ~ fabci ~ n:", n);if (n 1 || n 2) {return 1;}return fabci(n - 1) fabci(n - 2);}cons…...

LeetCode热题 翻转二叉树、二叉树最大深度、二叉树中序遍历
目录 一、翻转二叉树 1.1 题目链接 1.2 题目描述 1.3 解题思路 二、二叉树最大深度 2.1 题目链接 2.2 题目描述 2.3 解题思路 三、二叉树中序遍历 3.1 题目链接 3.2 题目描述 3.3 解题思路 一、翻转二叉树 1.1 题目链接 翻转二叉树 1.2 题目描述 1.3 解题思路 根…...

DNS查询服务器的基本流程以及https的加密过程
DNS查询服务器的基本流程,能画出图更好,并说明为什么DNS查询为什么不直接从单一服务器查询ip,而是要经过多次查询,多次查询不会增加开销么(即DNS多级查询的优点)? 用户发起请求:用户…...

后台管理系统(springboot+vue3+mysql)
系列文章目录 1.SpringBoot整合RabbitMQ并实现消息发送与接收 2. 解析JSON格式参数 & 修改对象的key 3. VUE整合Echarts实现简单的数据可视化 4. List<HashMap<String,String>>实现自定义字符串排序(key排序、Val…...

Android经典面试题之Kotlin中 if 和 let的区别
本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 在Kotlin中,if和let虽然有时候用来处理相似的情景,但它们实际上是用于不同的场景并具有不同的性质。下面我们来详细对比…...

python inf是什么意思
INF / inf:这个值表示“无穷大 (infinity 的缩写)”,即超出了计算机可以表示的浮点数的范围(或者说超过了 double 类型的值)。例如,当用 0 除一个整数时便会得到一个1.#INF / inf值;相应的,如果…...

Cursor搭配cmake实现C++程序的编译、运行和调试
Cursor搭配cmake实现C程序的编译、运行和调试 Cursor是一个开源的AI编程编辑器,开源地址https://github.com/getcursor/cursor ,它其实是一个集成了Chat-GPT的VS Code。 关于VS Code和VS的对比可以参考这篇文章VS Code 和 Visual Studio 哪个更好&…...
C#-了解ORM框架SqlSugar并快速使用(附工具)
目录 一、配置 二、操作步骤 1、根据配置映射数据库对象 2、实体配置 3、创建表 4、增删改查 增加数据 删除数据 更新数据 查询数据 5、导航增删改查 增加数据 删除数据 更新数据 查询数据 6、雪花ID 三、工具 SqlLite可视化工具 MySQL安装包 MySQL可视化…...

巴黎奥运会 为啥这么抠?
文|琥珀食酒社 作者 | 朱珀 你是不是挺无语的 这奥运会还没有开始呢 吐槽大会就停不下来了 接近40度的高温 公寓没有空调 奥运巴士也没空调 连郭晶晶老公霍启刚 这种见惯大场面的也破防了 你可能会问 好不容易搞个奥运会 干嘛还要抠抠搜搜的呀 在咱们看…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...

uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...

【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...

3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...

排序算法总结(C++)
目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指:同样大小的样本 **(同样大小的数据)**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !
我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...

软件工程 期末复习
瀑布模型:计划 螺旋模型:风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合:模块内部功能紧密 模块之间依赖程度小 高内聚:指的是一个模块内部的功能应该紧密相关。换句话说,一个模块应当只实现单一的功能…...
规则与人性的天平——由高考迟到事件引发的思考
当那位身着校服的考生在考场关闭1分钟后狂奔而至,他涨红的脸上写满绝望。铁门内秒针划过的弧度,成为改变人生的残酷抛物线。家长声嘶力竭的哀求与考务人员机械的"这是规定",构成当代中国教育最尖锐的隐喻。 一、刚性规则的必要性 …...

【记录坑点问题】IDEA运行:maven-resources-production:XX: OOM: Java heap space
问题:IDEA出现maven-resources-production:operation-service: java.lang.OutOfMemoryError: Java heap space 解决方案:将编译的堆内存增加一点 位置:设置setting-》构建菜单build-》编译器Complier...