Использование GPU
При исполнении задач некоторые вычисления могут быть произведены на GPU устройствах. Про планирование GPU ресурсов в YTsaurus можно прочесть в соответствующей статье.
Исполнение задач с использованием GPU опирается на плагин RAPIDS Accelerator. Он переносит часть операций, для которых описаны преобразования, на GPU. Основные параметры описаны в документации плагина.
Настройка GPU при запуске задач напрямую
При запуске задач напрямую необходимо правильно сконфигурировать пулы. Зачастую кроме пула необходимо переопределить и дерево пулов.
Драйверу для работы не требуется GPU, поэтому можно использовать произвольный пул (опция --queue
). Но экзекьюторам GPU устройства необходимы, поэтому им следует указать дерево пулов и пул с GPU ресурсами отдельно.
spark-submit \
... \
--queue no_gpu_pool \
--conf spark.executor.resource.gpu.amount=1 \
--conf spark.task.resource.gpu.amount=0.5 \
--conf spark.rapids.memory.pinnedPool.size=2G \
--conf spark.plugins=com.nvidia.spark.SQLPlugin \
--jars yt:///home/spark/lib/rapids-4-spark_2.12-23.12.2-cuda11.jar \
--conf spark.ytsaurus.executor.operation.parameters="{pool=gpu_pool;pool_trees=[gpu_tree]}" \
yt:///home/spark/examples/smoke_test_raw.py
Каждому экзекьютору может быть выделено только целое количество GPU устройств, однако таски могут делить GPU между собой.
Библиотека должна быть скомпилирована для версии CUDA, поставляемой в окружение джобов. Она указана в //home/spark/conf/global/cuda_toolkit_version
.
Также в репозитории доступен пример задачи в клиентском режиме:
python python-examples/gpu_example/main.py <cluster-name> gpu_pool gpu_tree
Вычисления на Standalone кластере
Запуск кластера
При старте кластера каждому воркеру будет выделено целое количество GPU, указанное в опции --worker-gpu-limit
:
spark-launch-yt ... --pool gpu_pool --params '{operation_spec={pool_trees=[gpu_tree]}}' --worker-gpu-limit 2
Все компоненты кластера будут запущены в указанном пуле, при этом GPU устройства будут запрошены только для воркеров.
Запуск задач
Пример конфигурации Spark задачи:
spark-submit-yt \
... \
--conf spark.executor.resource.gpu.amount=1 \
--conf spark.task.resource.gpu.amount=0.25 \
--conf spark.rapids.memory.pinnedPool.size=2G \
--conf spark.plugins=com.nvidia.spark.SQLPlugin \
--jars yt:///home/spark/lib/rapids-4-spark_2.12-23.12.2-cuda11.jar \
yt:///home/spark/examples/smoke_test_raw.py