【问题标题】:Symbolic matrix multiplication on GPU using sympy?使用 sympy 在 GPU 上进行符号矩阵乘法?
【发布时间】:2021-03-24 12:50:33
【问题描述】:

我有一个矩阵M,大约有 300 行和列。每个条目都包含一个符号表达式,总共大约有 40 个符号。执行M*M 之类的操作可能需要很长时间(数小时)。有没有办法在 gpu 上使用 sympy 或更一般地在 python 中进行这种符号矩阵乘法?

【问题讨论】:

  • 符号表达是什么意思?输入/代码 sn-p 的示例在这里很有用。尽管如此,使用 pytorch 库对于 GPU 上的线性代数运算来说可能是非常简单的
  • 我对此表示怀疑。除非您可以在 sympy 文档中找到有关 gpu 的内容。对于矩阵中的符号,GPU 处理的图像/数字计算类型是无关紧要的。
  • Sympy 不使用 GPU,但 Matrix 类很慢。有一个新的主要是内部矩阵类可能会起作用,但这取决于你有什么样的表达式(例如,它们是有理系数的多项式吗?)。性能还取决于它是否稀疏。此外,您可能更喜欢使用 symengine。
  • 矩阵的各项确实是有理系数的多项式,但矩阵不是很稀疏。您所指的矩阵类是 sympy 的一部分吗?

标签: python sympy


【解决方案1】:

你很幸运!我几分钟前刚刚升级了这个。在 [G|T]PU 硬件上并行化 SymPy 表达式的最佳解决方案是(截至 2021 年年中)Aesarathe now-defunct Theano package foolishly discontinued in the mistaken belief that Tensorflow was better 的一个维护良好的分支。 剧透警告:不是。

由于 OP 遗憾地未能提供一个最小长度示例 (MLE) 供我们破坏,我们将只是复制一个几乎无用的示例来展示核心 API 概念:

# SymPy -> Aesara translater, bundled with SymPy.
from sympy.printing.aesaracode import aesara_function

# Arbitrary SymPy expression.
from sympy import sin
from sympy.abc import x
expr = sin(x)/x

# GPU-parallelized Aesara function compiled from that expression! Yup.
f = aesara_function([x], [expr])

一般来说,最优解是whatever SymPy's "Numeric Computation" documentation says it is。目前,这意味着Aesara;由于 Python 中的数据科学的变化速度比眼镜王蛇咬村庄的手要快,所以当阅读本文时,一切可能已经发生了变化。既然the aforementioned documentation is surprisingly intelligible,那就先去那里吧。这是您优化 SymPy 的所有事情的最佳登录页面。

【讨论】:

    猜你喜欢
    • 2018-02-12
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-30
    相关资源
    最近更新 更多