У меня есть некоторый код, который использует Numba cuda.jit для того, чтобы я мог работать на gpu, и я хотел бы наложить слой dask поверх него, если это возможно.
Пример кода
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from numba import cuda, njit
import numpy as np
from dask.distributed import Client, LocalCluster
@cuda.jit()
def addingNumbersCUDA (big_array, big_array2, save_array):
i = cuda.grid(1)
if i < big_array.shape[0]:
for j in range (big_array.shape[1]):
save_array[i][j] = big_array[i][j] * big_array2[i][j]
if __name__ == "__main__":
cluster = LocalCluster()
client = Client(cluster)
big_array = np.random.random_sample((100, 3000))
big_array2 = np.random.random_sample((100, 3000))
save_array = np.zeros(shape=(100, 3000))
arraysize = 100
threadsperblock = 64
blockspergrid = (arraysize + (threadsperblock - 1))
d_big_array = cuda.to_device(big_array)
d_big_array2 = cuda.to_device(big_array2)
d_save_array = cuda.to_device(save_array)
addingNumbersCUDA[blockspergrid, threadsperblock](d_big_array, d_big_array2, d_save_array)
save_array = d_save_array.copy_to_host()
Если бы моя функция addingNumbersCUDA
не использовала никакой CUDA, я бы просто поставил client.submit
перед моей функцией (вместе со сборкой после), и это сработало бы. Но, так как я использую CUDA, установка submit перед функцией не работает. Документация Dask говорит, что вы можете настроить таргетинг на GPU, но неясно, как на самом деле настроить его на практике. Как настроить свою функцию на использование dask с целевым gpu и cuda.jit, если это возможно?