当前位置: 首页 > 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度的高温 公寓没有空调 奥运巴士也没空调 连郭晶晶老公霍启刚 这种见惯大场面的也破防了 你可能会问 好不容易搞个奥运会 干嘛还要抠抠搜搜的呀 在咱们看…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...