Hey!
I've been reading your guide about tuning Spark-RAPIDS.
I am currently getting errors running a job due to poor tuning, I assume. The error is
java.lang.OutOfMemoryError: Could not allocate native memory: std::bad_alloc: RMM failure at:/home/jenkins/agent/workspace/jenkins-cudf-release-9-cuda11.0/cpp/build/_deps/rmm-src/include/rmm/mr/device/detail/arena.hpp:382: Maximum pool size exceeded
I am running with one node that has a Tesla P100 16GB, 117GB of RAM, and 14 CPUs.
These are the parameters I have used, with an explanation how I came to choose it:
--driver-memory 8G \ // Reasonable amount as to not bottleneck.
--num-executors 1 \ // Only one GPU means that only one executor.
--conf spark.rapids.sql.concurrentGpuTasks=2 \ // Up to 5 concurrent tasks, a there are 5 cores used.
--conf spark.executor.memory=100G \ // Might aswell use most of the memory to speed up the run.
--conf spark.executor.cores=5 \ // >5 CPUs per executors may slow up the run, so 5 is enough.
--conf spark.task.cpus=1 \ // One core runs one task.
--conf spark.executor.resource.gpu.amount=1 \ // This should not be changed.
--conf spark.task.resource.gpu.amount=0.2 \ // Up to to 5 concurrent tasks per executor
--conf spark.rapids.memory.pinnedPool.size=4G \ // Some amount of pinned memory
--conf spark.locality.wait=0s \ // Default
--conf spark.sql.files.maxPartitionBytes=512m \ //Default
I am still kinda confused what configurations should I try to make the system not run out of memory or even better, get the best possible run time. Can anyone clarify how I should be tuning in this situation? I especially am having issues with seeing how spark.task.resource.gpu.amount, spark.rapids.sql.concurrentGpuTasks, spark.executor.cores and spark.task.cpus should be tuned together. I cant tell the difference between spark.task.resource.gpu.amount and spark.rapids.sql.concurrentGpuTasks, as they both seem to control the amount of concurrent tasks run on a GPU?
For context, my input is about 650GB of strings and output is about 300GB two column tables.
Thanks!
Hey!
I've been reading your guide about tuning Spark-RAPIDS.
I am currently getting errors running a job due to poor tuning, I assume. The error is
I am running with one node that has a Tesla P100 16GB, 117GB of RAM, and 14 CPUs.
These are the parameters I have used, with an explanation how I came to choose it:
I am still kinda confused what configurations should I try to make the system not run out of memory or even better, get the best possible run time. Can anyone clarify how I should be tuning in this situation? I especially am having issues with seeing how
spark.task.resource.gpu.amount,spark.rapids.sql.concurrentGpuTasks,spark.executor.coresandspark.task.cpusshould be tuned together. I cant tell the difference betweenspark.task.resource.gpu.amountandspark.rapids.sql.concurrentGpuTasks, as they both seem to control the amount of concurrent tasks run on a GPU?For context, my input is about 650GB of strings and output is about 300GB two column tables.
Thanks!