Pyomo 解决了 NVIDIA Cuda 问题

oak*_*kca 0 python cuda gpu numpy pyomo

我想知道是否有办法使用 NVIDIA Cuda 通过 GPU 求解 Pyomo 具体模型。

我查看了https://developer.nvidia.com/how-to-cuda-python,并看到了有关它的视频。事实证明你的输入参数是否可以被 numpy 识别,例如;np.float32、np.float64 等...可以通过 GPU 进行编译/求解,

我们使用一个函数来创建所有模型并用以下方法求解:

optim = SolverFactory('glpk')
optim = setup_solver(optim, logfile=log_filename)
result = optim.solve(prob, tee=True)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我们求解函数的输入将是 prob(一个 pyomo 具体模型)。有没有办法通过 GPU 而不是 CPU 来解决这个问题?

谢谢你!

sas*_*cha 6

不,你不能。

公平地说,人们可以写一本关于这个想法有多么误导的书,但让我们把它简单化,只指出一些基本的东西(并忽略许多其他细节):

  • GPU 的工作方式不同,并且使用与 CPU 不同的指令
  • GPU 需要一些驱动程序/编译器来使某些代码可运行
  • 虽然可能有一些简化的高级语言可以使用通用代码生成 GPU 兼容的代码,但这是高度实验性的、有限的,当然:比手动调整的代码差得多
  • GPU 并不是在所有事情上都更快(更严格地说:它们只是在某些事情上更快,而且很难实现这一点)
    • 而且您还需要为延迟和数据副本付费
    • 一般来说,GPU 的 RAM 也较少
  • 线性规划和整数规划通过高度复杂的算法来解决
    • 理论表明:单纯形算法(GLPK 使用)很难并行化(哎哟;对 GPU 不利)
    • 理论表明:IPM 方法(也可以解决 LP)很容易并行化
    • 目前还没有已知的具有竞争力的基于 GPU 的单纯形求解器!(实际上我不知道 GPU 的任何 Simplex 实现,并且可以想到很多原因)
    • GPU 有一些专门的基于 IPM 的方法,不与 pyomo 接口;并且没有基于 GPU 的商业求解器
      • IPM 对于整数编程非常不利
  • GLPK,你的解算器,除了被 python 调用之外,与 python 无关(所以整个 python-cuda 链接我们没用)