计算逻辑很简单就是: a@b 想使用 pytorch 做 GPU 计算,10 块 GPU 的显存都是 10G ,想问问大家有好办法吗?
1
Scirocco 2021-12-11 16:22:36 +08:00
说实话没怎么看明白。。就是普通的矩阵作乘法吗?那感觉没必要用 pytorch 呀?
|
3
Scirocco 2021-12-11 16:27:37 +08:00
|
4
mingl0280 2021-12-11 16:45:35 +08:00
|
5
miracleyin 2021-12-11 16:45:49 +08:00
如果是稀疏矩阵的话可以通过 TORCH.SPARSE 这样的 api 来写,如果是非稠密的可能得思考为什么会有那么大的矩阵乘法了。
|
6
gckend OP |
7
Juszoe 2021-12-11 18:55:27 +08:00 1
可以考虑用矩阵分块乘法,可以将一次矩阵乘法分步计算,用 pytorch 应该不难实现,同时还能利用多块 GPU
|
8
hbdh5 2021-12-11 19:39:31 +08:00
简单分个块不就可以么,20g+的话分成 2x2 就行了,数据算完就取回内存或者先暂存到磁盘,乘的时候可以用 strassen 算法能减少一次子块乘
|
9
woctordho 2021-12-11 22:06:36 +08:00 via Android
原理无非就是分块,可以试试 Dask 这个包
|
10
c0xt30a 2021-12-11 22:46:51 +08:00
ABx = A(Bx)
如果有 x 这个向量的话 |
11
zhoujinjing09 2021-12-12 01:17:50 +08:00
分块就行了呀,就要手动分一下
|
12
dayeye2006199 2021-12-12 02:26:39 +08:00
这个需要 out of core computation
不考虑用 GPU 的话可以考虑 http://xarray.pydata.org/en/stable/dask.html 或者 https://docs.dask.org/en/stable/array.html |
13
zhoujinjing09 2021-12-12 04:51:13 +08:00
或者精度要求不高的话可以考虑半精度,bfloat16 或者 tf32
|
14
necomancer 2021-12-13 13:19:54 +08:00
矩阵分块
|A B| |E F| = | AE+BG AF +BH| |C D| |G H| |CE+DG CF+DH| |