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

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

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

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

----------------------- 以下是精选回复-----------------------

答:说实话没怎么看明白。。就是普通的矩阵作乘法吗?那感觉没必要用 pytorch 呀?
答:https://chiemon.github.io/2020/02/06/CUDA-%E7%9F%A9%E9%98%B5%E4%B9%98%E6%B3%95-%E4%BC%98%E5%8C%96%E5%8F%8A%E6%80%A7%E8%83%BD%E5%88%86%E6%9E%90-%E4%B8%8A.html
答:如果是稀疏矩阵的话可以通过 TORCH.SPARSE 这样的 api 来写,如果是非稠密的可能得思考为什么会有那么大的矩阵乘法了。
答:可以考虑用矩阵分块乘法,可以将一次矩阵乘法分步计算,用 pytorch 应该不难实现,同时还能利用多块 GPU
答:简单分个块不就可以么,20g+的话分成 2x2 就行了,数据算完就取回内存或者先暂存到磁盘,乘的时候可以用 strassen 算法能减少一次子块乘
答:原理无非就是分块,可以试试 Dask 这个包
答:ABx = A(Bx)
如果有 x 这个向量的话
答:分块就行了呀,就要手动分一下
答:这个需要 out of core computation
不考虑用 GPU 的话可以考虑

http://xarray.pydata.org/en/stable/dask.html
或者
https://docs.dask.org/en/stable/array.html
答:或者精度要求不高的话可以考虑半精度,bfloat16 或者 tf32
答:矩阵分块

|A B| |E F| = | AE+BG AF +BH|
|C D| |G H| |CE+DG CF+DH|

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 两个占用内存大小 20G+的矩阵做相乘, 10 块 GPU

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情