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