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

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

云计算——弹性云计算器(ECS)

弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...