Проблема перемещения данных и нехватки памяти в Dask-Rapids

В своем проекте я использую dask (2021.3.0) и rapids (0.18). В этом случае я выполняю задачу предварительной обработки на ЦП, а затем предварительно обработанные данные передаются в графический процессор для кластеризации K-средних. Но в этом процессе у меня возникает следующая проблема:

Ошибка 1 из 1 рабочих заданий: std :: bad_alloc: ошибка CUDA: ~ / envs / include / rmm / mr / device / cuda_memory_resource.hpp: 69: cudaErrorMemoryAllocation вне памяти (перед тем, как полностью использовать память графического процессора, это дало ошибку, т.е. не использует память GPU полностью)

У меня один графический процессор размером 40 ГБ. Размер оперативной памяти 512 ГБ.

Я использую следующий фрагмент кода:

cluster=LocalCluster(n_workers=1, threads_per_worker=1)
cluster.scale(100)
##perform my preprocessing on data and get output on variable A
# convert A varible to cupy
x = A.map_blocks(cp.asarray)
km =KMeans(n_clusters=4)
predict=km.fit_predict(x).compute()

Я также ищу решение, чтобы можно было предварительно обрабатывать данные, размер которых превышает объем памяти графического процессора, и всякий раз, когда происходит утечка памяти графического процессора, проливные данные передаются во временный каталог или ЦП (как мы делаем с dask, где мы определяем временный каталог, когда есть разлив оперативной памяти).

Любая помощь будет принята.


person Vivek kala    schedule 19.03.2021    source источник


Ответы (1)


Есть несколько способов работать с наборами данных больше, чем графические процессоры.

  1. Посетите блог Ника Беккера, у которого есть несколько хорошо документированных методов
  2. Обратите внимание на BlazingSQL, который построен на основе RAPIDS и может выполнять обработку вне ядра. Вы можете попробовать это на сайте beta.blazingsql.com.
person TaureanDyerNV    schedule 19.03.2021
comment
Уважаемый TaureanDyerNV, Спасибо за внимание к моей проблеме. Однако я использую предварительную обработку на основе ЦП для введенного набора данных, сначала создав LocalCluster, а затем передавая данные на графический процессор, которым можно управлять с помощью LocalCudaCluster. В этой ситуации мне интересно, как перенести данные из LocalCluster в LocalCudaCluster. В моем фрагменте кода я напрямую передаю свои данные из LocalCluster в GPU, не создавая LocalCudaCluster. Не могли бы вы помочь мне и в этом отношении, так как я не получаю никакого решения для этого. - person Vivek kala; 20.03.2021