跳转到主要内容

WebGPU for Python

项目描述

CI Documentation Status PyPI version

wgpu-py

WebGPU的Python实现——下一代GPU API。🚀

简介

wgpu-py的目的是为Python提供一个强大且可靠的GPU API。

它作为构建各种与可视化和GPU计算相关的应用程序和库的基础。我们在pygfx中使用它来创建一个现代的Pythonic渲染引擎。

要了解此API的外观,请参阅triangle.py和其他示例

状态

  • 在WebGPU成为一个标准之前,其规范可能会更改,我们的API也可能随之更改。在升级时检查变更日志
  • WebGPU规范的覆盖已经足够完整,可以构建例如pygfx
  • API的测试覆盖率接近100%。
  • 支持Windows、Linux(x86和aarch64)和MacOS(Intel和M1)。

什么是WebGPU / wgpu?

WGPU是GPU图形的未来;OpenGL的后继者。

WebGPU是一个具有良好定义的规范的JavaScript API,是WebGL的后继者。较广泛的术语“wgpu”用于指代各种语言中WebGPU的“桌面”实现。

OpenGL已经过时,开始出现裂痕。新的API如Vulkan、Metal和DX12提供了控制GPU的现代方式,但它们对于通用用途来说太低级。WebGPU遵循相同的概念,但具有更简单(更高级)的API。通过wgpu-py,我们将WebGPU带到了Python。

从技术角度讲,wgpu-py是wgpu-native的包装器,使用与WebGPU规范相似的Pythonic API暴露其功能。

安装

pip install wgpu glfw

Linux用户应确保

pip >= 20.3。这应该在大多数系统上有效。有关详细信息,请参阅入门

用法

请参阅在线文档示例

完整的API可以通过主命名空间访问

import wgpu

要将内容渲染到屏幕上,您可以使用各种GUI工具包

# The auto backend selects either the glfw, qt or jupyter backend
from wgpu.gui.auto import WgpuCanvas, run, call_later

# Visualizations can be embedded as a widget in a Qt application.
# Import PySide6, PyQt6, PySide2 or PyQt5 before running the line below.
# The code will detect and use the library that is imported.
from wgpu.gui.qt import WgpuCanvas

# Visualizations can be embedded as a widget in a wx application.
from wgpu.gui.wx import WgpuCanvas

原始wgpu-native API中的一些函数是异步的。在Python API中,默认函数都是同步(阻塞)的,这使得通用使用变得简单。这些函数的异步版本也是可用的,因此wgpu也可以很好地与Asyncio或Trio一起工作。

许可证

此代码在2条款BSD许可证下分发。

使用wgpu-py的项目

  • pygfx - 在wgpu上运行的Python渲染引擎。
  • shadertoy - 使用wgpu-py实现的Shadertoy。
  • tinygrad - 深度学习框架
  • fastplotlib - 一个快速的绘图库
  • xdsl - 一个Python编译器设计工具包(可选wgpu解释器)

开发者

  • 克隆存储库。
  • 使用pip install -r dev-requirements.txt安装开发工具(您可以将pip替换为pipenv以在虚拟环境中安装)。
  • 通过运行pip install -e .以可编辑模式安装wgpu-py,这将根据需要安装运行时依赖项。
  • 运行python download-wgpu-native.py下载上游wgpu-native二进制文件。
    • 或者,可以将环境变量WGPU_LIB_PATH指向自定义构建。
  • 使用black .应用自动格式化。
  • 使用flake8 .检查flake错误。
  • 使用pytest .运行测试。
  • 使用pip wheel --no-deps .构建wheel。

更新到WebGPU或wgpu-native的较新版本

要更新到上游更改,我们使用自动代码生成和手动更新的组合。有关更多信息,请参阅代码生成实用程序

测试

测试套件分为多个部分

  • pytest -v tests运行核心单元测试。
  • pytest -v examples测试示例。
  • pytest -v wgpu/__pyinstaller测试wgpu是否被pyinstaller正确支持。
  • pytest -v codegen检查生成的绑定代码。

示例中包含两种类型的测试

类型1:检查示例是否可运行

在运行测试套件时,pytest会在子进程中运行每个示例,以检查它是否可以干净地运行和退出。您可以通过在模块中包含注释# run_example = false来退出此机制。

类型2:检查示例是否输出图像

您还可以(独立地)通过在模块中包含注释# test_example = true来选择输出测试示例。输出测试意味着测试套件将尝试从您的示例中导入全局的canvas实例,并调用它以检查是否生成图像。

为了支持此类测试,请确保满足以下要求

  • wgpu.gui.auto模块导入WgpuCanvas类。
  • canvas实例在模块中公开为全局。
  • 已使用canvas.request_draw(fn)注册了渲染回调。

参考截图存储在examples/screenshots文件夹中,测试套件将比较渲染的图像与参考。

注意:在CI上运行时将跳过此步骤。由于图像的渲染将根据渲染它们的系统产生细微差异,这会使测试不可靠。

对于每个在截图验证中失败的测试,将生成rgb和alpha通道的差异,并在examples/screenshots/diffs文件夹中提供。在CI上,examples/screenshots文件夹将作为构建工件发布,以便您可以下载和检查差异。

如果您想更新特定示例的参考截图,您也可以从构建工件中获取它们并将其提交到您的分支。

项目详情


下载文件

下载您平台的文件。如果您不确定选择哪一个,请了解有关安装包的更多信息。

源代码分发

wgpu-0.18.1.tar.gz (174.4 kB 查看哈希值)

上传时间: 源代码

构建分发

wgpu-0.18.1-py3-none-win_amd64.whl (3.2 MB 查看哈希值)

上传于 Python 3 Windows x86-64

wgpu-0.18.1-py3-none-win32.whl (2.9 MB 查看哈希值)

上传于 Python 3 Windows x86

wgpu-0.18.1-py3-none-manylinux_2_28_x86_64.whl (3.1 MB 查看哈希值)

上传于 Python 3 manylinux: glibc 2.28+ x86-64

wgpu-0.18.1-py3-none-manylinux_2_28_aarch64.whl (3.2 MB 查看哈希值)

上传于 Python 3 manylinux: glibc 2.28+ ARM64

wgpu-0.18.1-py3-none-macosx_11_0_arm64.whl (2.2 MB 查看哈希值)

上传于 Python 3 macOS 11.0+ ARM64

wgpu-0.18.1-py3-none-macosx_10_9_x86_64.whl (2.3 MB 查看哈希值)

上传于 Python 3 macOS 10.9+ x86-64

由以下组织支持