簡報連結

https://gamma.app/docs/Lecture-6-Real-Life-Application-ufinpabnkarrk77

Pytorch for GPU programmer

很多人會使用 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 ,以不同的角度詮釋資料,達成一樣的效果