2

两个占用内存大小 20G+的矩阵做相乘, 10 块 GPU

 2 years ago
source link: https://www.v2ex.com/t/821528
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

V2EX  ›  Python

两个占用内存大小 20G+的矩阵做相乘, 10 块 GPU

  gckend · 15 小时 2 分钟前 · 1356 次点击

计算逻辑很简单就是: a@b 想使用 pytorch 做 GPU 计算,10 块 GPU 的显存都是 10G ,想问问大家有好办法吗?

13 条回复    2021-12-12 04:51:13 +08:00

Scirocco

Scirocco      14 小时 44 分钟前

说实话没怎么看明白。。就是普通的矩阵作乘法吗?那感觉没必要用 pytorch 呀?

gckend

gckend      14 小时 42 分钟前

@Scirocco 主要是为了方便做 GPU 计算,其他框架也可以

Scirocco

Scirocco      14 小时 39 分钟前

@gckend #2 或许可以考虑直接用 C 写 cuda 程序?

不过我也不知道 20G 这么大的矩阵怎么处理,以及多 GPU 怎么一起用。。只能提供思路,抛砖引玉 2333

miracleyin

miracleyin      14 小时 20 分钟前

如果是稀疏矩阵的话可以通过 TORCH.SPARSE 这样的 api 来写,如果是非稠密的可能得思考为什么会有那么大的矩阵乘法了。

gckend

gckend      13 小时 40 分钟前

@mingl0280 谢谢,不过这个并不适合我的场景。

@miracleyin 是稠密矩阵,应用场景如此,直接乘可能不行,想要找个合适的切割矩阵的方案。

Juszoe

Juszoe      12 小时 11 分钟前   ❤️ 1

可以考虑用矩阵分块乘法,可以将一次矩阵乘法分步计算,用 pytorch 应该不难实现,同时还能利用多块 GPU

hbdh5

hbdh5      11 小时 27 分钟前

简单分个块不就可以么,20g+的话分成 2x2 就行了,数据算完就取回内存或者先暂存到磁盘,乘的时候可以用 strassen 算法能减少一次子块乘

woctordho

woctordho      9 小时 0 分钟前 via Android

原理无非就是分块,可以试试 Dask 这个包

c0xt30a

c0xt30a      8 小时 19 分钟前

ABx = A(Bx)
如果有 x 这个向量的话

zhoujinjing09

zhoujinjing09      5 小时 48 分钟前

分块就行了呀,就要手动分一下

zhoujinjing09

zhoujinjing09      2 小时 15 分钟前

或者精度要求不高的话可以考虑半精度,bfloat16 或者 tf32

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK