dask_cudf — не соблюдает квоту rmm, подавляет

#dask-distributed #rapids

#dask-распределенный #пороги

Вопрос:

Я новичок в машинном обучении и использовании GPU — по этой причине я был в восторге от RAPIDs и dask.

Я работаю на AWS EC2 p3.8xlarge. На нем я запускаю docker с контейнером RAPIDs. Я использую версию 0.16. Существует EBS с 60 ГБ.

У меня есть набор данных с примерно 80 миллионами записей. В формате csv он составляет около 27 ГБ, а в формате parquet (с чуть меньшими возможностями) — 3,4 ГБ (оба случая на AWS S3).

Пытаясь использовать dask_cudf using a LocalCUDACluster , я всегда сталкиваюсь и сталкиваюсь с сбоями рабочих. Создаются дампы ядра, и выполнение продолжается, создавая новых рабочих и, в конечном итоге, занимая все хранилище на моем компьютере.

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

Я использую следующий начальный код:

 from dask_cuda import LocalCUDACluster
from distributed import Client, LocalCluster
import dask_cudf


cluster = LocalCUDACluster(
    rmm_pool_size="60GB"  # I've tried 64, 100, 150 etc. No luck
)
# I also tried setting rmm_managed_memory... 
# I know there are other parameters (ucx, etc) but don't know whether relevant and how to use

client = Client(cluster)

df = dask_cudf.read_parquet("s3://my-bucket/my-parquet-dir/")
  

Я печатаю использование памяти:

 mem = df.memory_usage().compute()
print(f"total dataset memory: {mem.sum() / 1024**3}GB")
  

В результате

общий объем памяти набора данных: 50,736539436504245 ГБ

Затем, выполняя мой код (независимо от того, пытается ли он выполнить какой-либо EDA, запустить KNN или почти все остальное, я получаю это поведение / ошибку.

Я читаю документы, я читаю многочисленные блоги (в основном из RAPIDS), я просматриваю записные книжки, но я все еще не могу заставить его работать. Я делаю что-то не так? Не будет ли это работать с настройкой, которая у меня есть?

Любая помощь будет оценена…

Пример выполнения - knn

Пример выполнения - сохраняется

Ответ №1:

При установке ограничений RMM это зависит от графического процессора. Итак, если ваша цель — 60 ГБ, установите RMM равным 15. только что понял, что вы используете только 4 GPU

Комментарии:

1. Я следовал примеру lile medium.com/rapids-ai /… который, кажется, создает пул памяти — больше, чем во всей памяти устройства… вы уверены, что это для каждого устройства? В первом примере есть device_memory_limit параметр, который, как я предполагаю, имеет значение, превышающее значение памяти устройства (40 ГБ), но теперь я вижу, что GPU имеет 48 ГБ памяти…

2. Положительно, это для каждого устройства. Все RAPIDS соответствуют парадигме одного процесса на GPU.

3. @TomerCagan Я обновил суть этих ноутбуков, чтобы явно указать, что каждый графический процессор имеет 48 ГБ памяти. Надеюсь, это поможет сделать его более понятным!