节省内存和矢量化加速
2021-11-1
| 2023-8-6
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
Property
 

节省内存

运行一些操作可能会导致为新结果分配内存。 例如,如果用Y = X + Y,将取消引用Y指向的张量,而是指向新分配的内存处的张量:
这是不可取的,机器学习可能有数百兆的参数,并且一秒内多次更新所有参数。 通常情况下,最好原地执行这些更新。如果不原地更新,其他引用仍然会指向旧的内存位置,这样某些代码可能会无意中引用旧的参数。
 
执行原地操作非常简单,可以用切片表示法将操作的结果分配给先前分配的数组,例如Y[:] = <expression>。 下面创建一个新的矩阵Z,其形状与另一个Y相同, 使用zeros_like来分配一个全0的块
 
如果在后续计算中没有重复使用X, 也可以使用X[:] = X + YX += Y来减少操作的内存开销
 

矢量化加速

在训练模型时,希望能够同时处理整个小批量的样本。为了实现这⼀点,需要对计算进行矢量化量化,从而利用线性代数库,而不是在Python中编写开销高昂的for循环
结果很明显,第⼆种方法第一种方法快得多,矢量化代码通常会带来数量级的加速
 
  • PyTorch
  • 线性代数与自动求导符号式编程
    目录