理解最先进模型的起点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度的高温 公寓没有空调 奥运巴士也没空调 连郭晶晶老公霍启刚 这种见惯大场面的也破防了 你可能会问 好不容易搞个奥运会 干嘛还要抠抠搜搜的呀 在咱们看…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...
