#python #gpu #dask #cupy
#python #графический процессор #dask #cupy
Вопрос:
Я ищу способы эффективного использования моего кластера GPU для вычисления процентилей в случайно сгенерированных массивах для моего моделирования методом Монте-Карло. Я бы предположил, что графический процессор будет быстрее, чем аналогичные вычисления на процессоре. Когда я сравниваю CuPy и Numpy в однопоточном процессе, очевидно, наблюдается значительное улучшение производительности:
import cupy as cp
sample_size = 9000000
cp_res = cp.random(10,0.1,size=(400*sample_size),dtype=cp.float32)
print(cp.percentile(cp_res, 0.05))
Это выполняется за 226 мс
Каков был бы наиболее эффективный способ запуска процентиля на 4 400 sample_size random на 2 серверах с 2 графическими процессорами на каждом?
Я бегу:
client = Client(cluser_ip_address)
rs = da.random.RandomState(RandomState=cp.random.RandomState)
x = rs.normal(10, 0.1, size=(4*400*sample_size), chunks='auto')
print(dask.array.percentile(x, 0.05).compute())
Я получаю эту ошибку:
Ошибка типа: невозможно преобразовать данные массива из dtype (‘O’) в dtype (‘float64’) в соответствии с правилом «безопасный»
Когда я меняю cupy на numpy, код работает нормально. Я использую это неправильно? Существует ли альтернативный способ использования GPU для генерации большого массива нормально распределенных чисел и вычисления его процентиля?
Комментарии:
1. Вы пытаетесь запустить большее количество симуляций для данных, которые умещаются в памяти одного графического процессора, или одно моделирование для данных, слишком больших для одного графического процессора? В вашем примере Dask все еще выполняется вычисление одного процентиля.
2. Я пытаюсь запустить большое количество симуляций. В основном генерируют 10000 массивов из 9 миллионов элементов и вычисляют процентиль. Я могу разместить только 140 на одном графическом процессоре, поэтому я подумал, что, возможно, смогу распределить вычисления по 4 картам.
3. Завтра я отвечу на этот вопрос небольшим примером, используя Dask. То, что вы описываете, будет работать хорошо.
4. На самом деле, подождите. Вы пытаетесь создать один вектор из 10000 * 9 миллионов элементов и получить его процентиль или 10000 процентилей для каждого вектора из 9 миллионов элементов?
5. Извиняюсь за путаницу. Я хочу сгенерировать 9M * 10000 нормально распределенных чисел и вычислить процентиль этого.