当前位置: 首页 > news >正文

理解最先进模型的起点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)
  1. 设置随机种子
  • set_seed(seed)函数设置了Python、Numpy和PyTorch的随机种子,以确保实验的结果是可重复的。这对于调试和验证模型是非常重要的。
  1. 日志记录
  • setup_logging(config)函数用于设置日志记录。它会创建一个工作目录(如果不存在),并将命令行参数和配置信息记录在文件中。这样可以方便地跟踪和重现实验。
  1. 配置管理
  • 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度的高温 公寓没有空调 奥运巴士也没空调 连郭晶晶老公霍启刚 这种见惯大场面的也破防了 你可能会问 好不容易搞个奥运会 干嘛还要抠抠搜搜的呀 在咱们看…...

idea大量爆红问题解决

问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...