Как мне сделать массив графических процессоров из массива? - PullRequest
0 голосов
/ 28 мая 2019

Я работал над данными, которые больше моего графического процессора, и сейчас я пытаюсь использовать dask.

Я помню, как читал этот пост http://matthewrocklin.com/blog/work/2019/01/03/dask-array-gpus-first-steps Мэтью Роклина о том, как делать массивы на основе графических процессоров с использованием cupy. В посте показано, что вы можете создавать массивы, которые больше, чем у gpu, из-за разбитой графики. Тем не менее, моя проблема не включает в себя случайные данные, поэтому она не совсем соответствует посту.

import numpy as np
import cupy as cp
import dask.array as da
from numba import cuda
from dask_cuda import LocalCUDACluster
from dask.distributed import Client

@cuda.jit
def work (array):
    i = cuda.grid(1)
    if i < array.shape[0]:
        for j in range(array.shape[1]):
            array[i][j] = 2


def toCUDA (array):

    arraysize = 100000
    threadsperblock = 64
    blockspergrid = (arraysize + (threadsperblock - 1))
    stream = cuda.stream()

    d_array = cuda.to_device(array, stream)
    work[blockspergrid, threadsperblock, stream](d_array)
    array = d_array.copy_to_host()
    return array

if __name__ == "__main__":

    cluster = LocalCUDACluster()
    client = Client(cluster)
    d = np.ones(shape=(100000,30000), dtype=np.float32)
    x = da.from_array(d, chunks=('auto', -1))
    x = x.persist()

    answer = client.submit(toCUDA, x)

    answer = client.gather(answer)
    print(answer[0])

В приведенном выше коде я пытаюсь отправить 12 ГБ данных в GPU, но мой GPU имеет только 8 ГБ. Прямо сейчас, если я изменю размер моего массива на numy, код будет выполняться, но не с текущим размером массива. В настоящее время я делаю обычный массив dask из ранее существовавшего массива numpy. Затем я запускаю client.submit в своей функции, которая пытается отправить весь массив dask в gpu.

В посте, указанном выше, dask может обрабатывать большой массив из-за его размера чанка, но мне не удалось получить массив dask на основе cupy.

Могу ли я получить массив dask (x) для использования cupy, и могу ли я отправить этот массив в свое ядро?

Спасибо

...