Tensor

总览:Tensor对象中包含Storage对象,Storage完成对原数据的抽象:Storage中包含指向原始数据的指针以及用于内存分配的Allocator
[深度学习框架] Pytorch源码学习之Tensor
pytorch虽然是python first的设计,但所有heavy work都是由C++实现的

在python 中,C++代码的集成由extension完成

pytorch使用基础张量操作库ATen,其他都在ATen基础上建立

Autograd就是在ATen上实现的,它能进行自动微分。

python中,万物皆对象

[深度学习框架] Pytorch源码学习之Tensor

zero-copy操作

numpy和pytorch的tensor很方便相互转换,但是torch.tensor(np_array)torch.from_numpy(np_array)对数据的拷贝有些不同
[深度学习框架] Pytorch源码学习之Tensor
[深度学习框架] Pytorch源码学习之Tensor
[深度学习框架] Pytorch源码学习之Tensor

数据指针

Tensor中并不储存数据,而是存储有对应numpy数组的数据指针的拷贝
[深度学习框架] Pytorch源码学习之Tensor

Tensor Storage

数据的抽象是在Storage中
[深度学习框架] Pytorch源码学习之Tensor
[深度学习框架] Pytorch源码学习之Tensor

CPU和GPU上内存分配

[深度学习框架] Pytorch源码学习之Tensor

【参考文献】
1、https://speakerdeck.com/perone/pytorch-under-the-hood

相关文章: