Skip to content

ymd-h/vulkpy

Repository files navigation

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