https://gamma.app/docs/Lecture-6-Real-Life-Application-ufinpabnkarrk77
很多人會使用 Pytorch,但不是所有人都知道
y = a + b
背後其實會經過:
最後才跑在 GPU 上
而這整條 Pipeline 的設計,其實都圍繞著同一件事:如何讓 Tensor Operation 在各種 shape、dtype、layout、device 下都能高效執行。
在開始之前,先簡單介紹一下什麼是 Tensor, 可能有人以為 Tensor 就是一塊連續 Memory,但 Pytorch 的 Tensor 實際上是一種帶有 Metadata 的資料結構,具體來說,以 CUDA 語法舉例一個張量會有這些欄位
struct Tensor {
void* data_ptr; // device memory
DType dtype; // float32 / float16 / int8 / ...
Device device; // cuda:0 / cpu / ...
IntArrayRef sizes; // shape, e.g. [B, C, H, W]
IntArrayRef strides; // 每個 dim 在 memory 中跨多少個 element
Layout layout; // strided / sparse / ...
};
而當你試著操作資料時,有些操作不必真的動到 Memory ,而是可以透過改變 Metadata ,以不同的角度詮釋資料,達成一樣的效果