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

cs336 Lecture2

Memory accounting

在这里插入图片描述

Tensor的内存占用取决于元素的个数以及每个元素的类别
example:

x = torch.zeros(4, 8)
assert x.dtype == torch.float32
assert x.size == torch.Size([4, 8])
assert x.numel() == 32
assert x.element_size() == 4 #float32 is 4 bytes
assert memory_usage(x) == 4 * 8 * 4

Float16在训练过程中由于精度较低的问题,容易出现overflow,underflow。

x = torch.tensor([1e-8], dtype=torch.float16)
assert x == 0 # underflow

为了解决这个问题,开发了bfloat16。
它具有和float32相同的动态范围,但是相应的,精度由小数部分决定,会更差,但是对ML来说不是很重要。

compute

Tensor在pytorch中实际上是指向已分配内存的一些指针。更具体的来说,Tensor是一个高级对象,包含数据指针和一些元数据(shape,dytpe,stride等)

张量的连续性(contiguity)

一个张量是“连续的”,意味着它的内存布局是按行优先(row-major)线性排布的。
例如,下面是一个连续张量的内存排布:

tensor([[1, 2, 3],[4, 5, 6]])   实际内存:[1,2,3,4,5,6]
转置后:内存就不连续了,访问每一个列就要跳着都内存
tensor([[1, 4],[2, 5],[3, 6]])   虽然形状变了,内存并没有被复制,而是通过stride来模拟行列互换
print(a.is_contiguous())   True
print(b.is_contiguous())   False

也就是说转置本质上不会复制数据,只是交换stride步长信息。它们共享同一块底层内存。
用 .contiguous():将非连续张量变为连续的。

b_contig = b.contiguous()
print(b_contig.is_contiguous())   True

这将会复制数据,让它在内存中线性存储。


对不连续的张量进行视图操作的话是行不通的。
这种情况下因为进行连续操作,所以二者不共享内存。

y = x.transpose(1, 0).contiguous().view(2, 3)
assert not same_storage(x, y)

张量操作的计算成本

FLOPs: 浮点数操作(已完成的计算量)
TearFLOP/s:每秒万亿次浮点运算能力,是衡量计算设备(如 GPU、TPU)计算能力的单位。
Intuitions: GPT-3 took 3.14e23 FLOPs、GPT-4 is speculated to take 2e25FLOPs

Linear model

一般的经验法则来说,矩阵相乘的浮点运算为维度的乘积的2倍
前向传播的计算量是参数数量的2倍,反向传播的计算量是参数数量的4倍。总的计算量就是6倍。

import torchB = 16384
D = 32768
K = 8192
device = torch.device('cuda')x = torch.randn(B, D, device=device)
w = torch.randn(D, K, device=device)
y = torch.matmul(x, w)
actual_num_flops = B * D * K * 2

通常来说,所有的运算都不如较大的矩阵运算耗时大,所以很多粗略计算非常简单,我们只需关注模型的矩阵乘法。

Model

模型参数在pytorch中被存储为nn.Parameter对象

http://www.dtcms.com/a/291449.html

相关文章:

  • SQL基础入门② | 运算符篇
  • 【HarmonyOS】ArkTS语法详细解析
  • 阿里云技术三面:java社招面经+面试题分享!
  • rancher使用rke在华为云多网卡的服务器上安装k8s集群问题处理
  • Supervisor 核心原理:如何实现进程管理?
  • 机器视觉的食品包装贴标应用
  • [论文阅读] 人工智能 | ZipMPC:让短视的MPC拥有长远眼光——通过模仿学习压缩长 horizon 智慧
  • A1-静态Mpls
  • 二、计算机网络技术——第2章:物理层
  • [1-01-01].第90节:如何学习新特性:
  • 一文速通《矩阵的特征值和特征向量》
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘pywifi’问题
  • 马斯克布局儿童 AI 领域,xAI 推出 Baby Grok,将带来哪些变革?
  • Windows防火墙配置详解
  • PDF限制功能如何用?简单教程来了!
  • 网络设备功能对照表
  • TipTap 富文本编辑器在小说写作中的应用实践
  • PyCharm 未正确关联 .jpg 为图片格式
  • 重学前端008 --- 响应式网页设计 CSS 无障碍 Quiz
  • React探索高性能Tree树组件实现——react-window、react-vtree
  • 安装cobalt_Strike_4.7
  • B树、B+树的区别及MySQL为何选择B+树
  • Python 使用期物处理并发(使用concurrent.futures模块启动 进程)
  • 【Elasticsearch】BM25的discount_overlaps参数
  • 卷积神经网络(CNN)原理
  • 零拷贝技术(Zero-Copy)
  • OneCode 3.0 @APIEventAnnotation 注解速查手册
  • 从 Hi3861 平台到 WS63 星闪平台的程序移植全解析
  • 网络编程之 UDP:用户数据报协议详解与实战
  • 二分查找:区间内查询数字的频率