vulkpy is a Python package providing GPGPU computation based on Vulkan.
- C++20 compatible compiler
libvulkan
- Vulkan SDK
- Headers (
vulkan/vulkan.hpp
and so on) - Shaderc (
glslc
)
- Headers (
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 packageqt5-default
.
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]
- Element-wise Arithmetic Operators between 2
Array
s.-
+
,-
,*
,/
,**
,+=
,-=
,*=
,/=
,**=
-
- Arithmetic Operators between
Array
andfloat
.-
+
,-
,*
,/
,**
,+=
,-=
,*=
,/=
,**=
-
- Arithmetic Operators between
float
andArray
.-
+
,-
,*
,/
,**
-
- Matrix Multiplication Operator between 1d/2d
Array
s.-
@
-
- 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 atclamp
)
- Special implementations for element-wise arithmetic operators
+
,-
,*
,/
,**
,+=
,-=
,*=
,/=
,**=
- Reduction with re-broadcast
sum
,prod
,maximum
,minimum
,mean
- Explicit broadcast copy (memory inefficient, fallback option)
- 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
- xoshiro128++ (
- 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
- Layers