dask_cudf - 不尊重 rmm 配额,粉碎

dask_cudf - not respecting rmm quota, crushes

我是机器学习和使用 GPU 的新手 - 因此我对 RAPID 和 dask 感到很兴奋。

我 运行正在使用 AWS EC2 p3.8xlarge。我正在 运行ning docker 使用 RAPIDs 容器。我正在使用 0.16 版。有一个60GB的EBS。

我有一个包含大约 8000 万条记录的数据集。作为 csv,它大约是 27GB,作为镶木地板(功能少一些),它是 3.4GB(这两种情况都在 AWS S3 上)。

尝试使用 dask_cudf 使用 LocalCUDACluster,我总是遇到崩溃的工作人员并遇到问题。创建核心转储并继续执行,创建新的工作人员并最终占用我机器上的所有存储空间。

请参阅下面的一些示例执行,显示内存在增加,不遵守 rmm_pool_size 并最终崩溃。我尝试了 rmm_pool_size 的许多值,无论是在总 GPU 内存之上还是之下(据我了解,它应该能够溢出到机器内存)。

我正在使用以下初始代码:

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")

导致

total dataset memory: 50.736539436504245GB

然后,执行我的代码(无论是尝试做一些 EDA、运行ning KNN,还是几乎所有其他事情,我都会遇到这种行为/错误。

我阅读了文档,阅读了大量博客(主要来自 RAPIDS),我 运行 通过笔记本,但我仍然无法让它工作。难道我做错了什么?这不适用于我的设置吗?

任何帮助将不胜感激...

设置 RMM 限制时,它是针对每个 GPU 的。因此,如果您的目标是 60GB,请将 RMM 设置为 15。刚刚意识到您只使用了 4 个 GPU