Skip to main content

GPGPU array on Vulkan

Project description

vulkpy: GPGPU array on Vulkan

GitHub Workflow Status PyPI PyPI - License

vulkpy is a Python package providing GPGPU computation based on Vulkan.

Requirements

  • C++20 compatible compiler
  • libvulkan
  • Vulkan SDK
    • Headers (vulkan/vulkan.hpp and so on)
    • Shaderc (glslc)

On Ubuntu 22.0,

wget -qO - http://packages.lunarg.com/lunarg-signing-key-pub.asc | apt-key add -
wget -qO /etc/apt/sources.list.d/lunarg-vulkan-focal.list http://packages.lunarg.com/vulkan/lunarg-vulkan-focal.list
apt update
apt install -y libvulkan1 libvulkan-dev vulkan-headers shaderc vulkan-validationlayers

Note
vulkan-sdk cannot be installed because it requires obsolete package qt5-default.

Example

import vulkpy as vk

gpu = vk.GPU()

a = vk.Array(gpu, data=[10, 10, 10])
b = vk.Array(gpu, data=[5, 5, 5])

c = a + b
c.wait()

print(c)
# [15, 15, 15]

Features

  • Element-wise Arithmetic Operators between 2 Arrays.
    • +, -, *, /, **, +=, -=, *=, /=, **=
  • Arithmetic Operators between Array and float.
    • +, -, *, /, **, +=, -=, *=, /=, **=
  • Arithmetic Operators between float and Array.
    • +, -, *, /, **
  • Matrix Multiplication Operator between 1d/2d Arrays.
    • @
  • Element-wise math functions as Array's member function
    • max(other, inplace=False), min(other, inplace=False)
    • abs(inplace=False), sign(inplace=False)
    • sin(inplace=False), cos(inplace=False), tan(inplace=False)
    • asin(inplace=False), acos(inplace=False), atan(inplace=False)
    • sinh(inplace=False), cosh(inplace=False), tanh(inplace=False)
    • asinh(inplace=False), acosh(inplace=False), atanh(inplace=False)
    • exp(inplace=False), log(inplace=False)
    • exp2(inplace=False), log2(inplace=False)
    • sqrt(inplace=False), invsqrt(inplace=False)
    • clamp(min, max, inplace=False)
  • Reduction as Array's member function
    • sum(axis=None), prod(axis=None)
    • maximum(axis=None), minimum(axis=None)
    • mean(axis=None)
    • argmax, argmin
    • ...
  • Other Array method
    • gather(idx: U32Array) -> Array
    • tensordot, shuffle
    • ...
  • Bloadcast
    • Explicit broadcast copy (memory inefficient, fallback option)
      • broadcast_to(shape) (used at clamp)
    • Special implementations for element-wise arithmetic operators
      • +, -, *, /, **, +=, -=, *=, /=, **=
    • Reduction with re-broadcast
      • sum, prod, maximum, minimum, mean
  • Pseudo Random Number Generator (PRNG)
    • xoshiro128++ (vulkpy.random.Xoshiro128pp(gpu, *, size=None, data=None))
      • [0, 1) uniform (.random(shape=None, buffer=None))
      • Gaussian with Box-Muller (.normal(shape=None, buffer=None, mean=0.0, stddev=1.0))
    • pcg32
  • Neural Network
    • Layers
      • Dense, ReLU, Sigmoid, Softmax
      • conv, batch norm, layer norm, ...
    • Optimizers
      • SGD, Adam, AdaGrad
      • rmsprop, ...
    • Losses
      • CrossEntropyLoss, SoftmaxCrossEntropyLoss, MSELoss, HuberLoss
      • ...
    • Initializers
      • Constant, HeNormal
      • ...
    • Models
      • Sequance
      • ...
    • Regularization
      • Lasso(coeff=1.0), Ridge(coeff=1.0), Elastic(L1=1.0, L2=1.0)
    • ONNX support
    • Custom user layer with automatic backward() definition.
    • Define by Run API

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

vulkpy-0.0.8.tar.gz (58.3 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page