V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
gckend
V2EX  ›  Python

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

  •  
  •   gckend · 2021-12-11 16:04:10 +08:00 · 4260 次点击
    这是一个创建于 1079 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    14 条回复    2021-12-13 13:19:54 +08:00
    Scirocco
        1
    Scirocco  
       2021-12-11 16:22:36 +08:00
    说实话没怎么看明白。。就是普通的矩阵作乘法吗?那感觉没必要用 pytorch 呀?
    gckend
        2
    gckend  
    OP
       2021-12-11 16:24:08 +08:00
    @Scirocco 主要是为了方便做 GPU 计算,其他框架也可以
    Scirocco
        3
    Scirocco  
       2021-12-11 16:27:37 +08:00
    @gckend #2 或许可以考虑直接用 C 写 cuda 程序?

    不过我也不知道 20G 这么大的矩阵怎么处理,以及多 GPU 怎么一起用。。只能提供思路,抛砖引玉 2333
    miracleyin
        5
    miracleyin  
       2021-12-11 16:45:49 +08:00
    如果是稀疏矩阵的话可以通过 TORCH.SPARSE 这样的 api 来写,如果是非稠密的可能得思考为什么会有那么大的矩阵乘法了。
    gckend
        6
    gckend  
    OP
       2021-12-11 17:26:39 +08:00
    @mingl0280 谢谢,不过这个并不适合我的场景。

    @miracleyin 是稠密矩阵,应用场景如此,直接乘可能不行,想要找个合适的切割矩阵的方案。
    Juszoe
        7
    Juszoe  
       2021-12-11 18:55:27 +08:00   ❤️ 1
    可以考虑用矩阵分块乘法,可以将一次矩阵乘法分步计算,用 pytorch 应该不难实现,同时还能利用多块 GPU
    hbdh5
        8
    hbdh5  
       2021-12-11 19:39:31 +08:00
    简单分个块不就可以么,20g+的话分成 2x2 就行了,数据算完就取回内存或者先暂存到磁盘,乘的时候可以用 strassen 算法能减少一次子块乘
    woctordho
        9
    woctordho  
       2021-12-11 22:06:36 +08:00 via Android
    原理无非就是分块,可以试试 Dask 这个包
    c0xt30a
        10
    c0xt30a  
       2021-12-11 22:46:51 +08:00
    ABx = A(Bx)
    如果有 x 这个向量的话
    zhoujinjing09
        11
    zhoujinjing09  
       2021-12-12 01:17:50 +08:00
    分块就行了呀,就要手动分一下
    dayeye2006199
        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
    zhoujinjing09
        13
    zhoujinjing09  
       2021-12-12 04:51:13 +08:00
    或者精度要求不高的话可以考虑半精度,bfloat16 或者 tf32
    necomancer
        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|
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2986 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 13:21 · PVG 21:21 · LAX 05:21 · JFK 08:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.