如何让 Python 代码在 GPU 而不是 CPU 上执行

数据挖掘 Python python-3.x 显卡 图像预处理
2021-09-30 18:52:22

我正在使用 Python 3 进行一些图像预处理。据我所知,代码是在 CPU 上执行的,其进程有点慢,最好让它在 GPU 上运行以加快进程,因为 GPU 可以做图形运算速度比 CPU 快得多。有没有办法让它在 GPU 上运行而不使用库?

请注意,它需要使它像 Keras 或 TensorFlow 的 GPU 版本。

1个回答

您可以将Wolfram 语言应用到您的项目中。有一个免费的Wolfram 引擎供开发人员使用,您可以通过 Python 的Wolfram 客户端库在 Python中使用这些函数。

概述指南CUDALink概述指南将使您能够在 GPU 上运行代码。但是,指南图像处理功能是内置的,因此最好从那里开始您的项目。CUDALinkOpenCLLinkOpenCLLinkCUDALink

from wolframclient.evaluation import WolframLanguageSession
from wolframclient.language import wl, wlexpr

启动 Wolfram 会话。

wolfSession = WolframLanguageSession()

CUDA 包包含在 Wolfram 引擎中,但必须显式加载。

wolfSession.evaluate(wl.Needs('CUDALink`'))

然后您可以检查引擎是否已找到一个或多个兼容的 GPU 与CUDAQ.

print(wolfSession.evaluate(wl.CUDALink.CUDAQ()))
True

CUDAQ评估时会一次性下载 CUDA 二进制文件。您可以直接在内核中进行第一次调用来跟踪一次性下载,而不是通过 Python 进行第一次调用。在终端中运行并在输入提示符处woframscript评估Needs和函数。CUDAQ

在此处输入图像描述

可以返回详细信息CUDAInformation

print(wolfSession.evaluate(wl.CUDALink.CUDAInformation(1,'Core Count')))
160

获取一些 CUDA 图像函数示例的图像。

imgWolfram=wolfSession.evaluate(
    wl.Rasterize(
        wl.Import('https://i2.wp.com/oemscorp.com/wp-content/uploads/2015/07/wolfram-language-logo.png'),
        'Image'
    )
);

图像可以采用Export受支持的光栅图像格式矢量图形格式之一进行编辑。

wolfSession.evaluate(
    wl.Export(
        '<path with image filename>', 
        imgWolfram
        )
    )
)

Wolfram 语言徽标

一些示例 CUDA 图像函数包括

  • CUDAImageConvolve

    wolfSession.evaluate(
        wl.Export(
            '<path with image filename>', 
            wl.CUDALink.CUDAImageConvolve(imgWolfram,  [[-1,0,1],[-2,0,2],[-1,0,1]])
        )
    )
    

数学图形

  • CUDAErosion

    wolfSession.evaluate(
        wl.Export(
            '<path with image filename>', 
            wl.CUDALink.CUDAErosion(imgWolfram,6)
        )
    )
    

数学图形

  • CUDAOpening

    wolfSession.evaluate(
        wl.Export(
            '<path with image filename>', 
            wl.CUDALink.CUDAOpening(imgWolfram,6)
        )
    )
    

数学图形

终止 Wolfram 会话。

wolfSession.terminate()

由于您处理了许多图像文件,因此通过使用 Wolfram 引擎直接在wolfram 脚本中进行处理,而不是从 Python 调用引擎,您将获得更好的性能。

希望这可以帮助。