Utilizzare l'Nvidia Spark-RAPIDS Accelerator per Spark
Con Amazon EMR rilascio 6.2.0 e successivi, puoi utilizzare il plug-in dell'acceleratore RAPIDS
Le sezioni seguenti guidano l'utente nella configurazione del cluster EMR per l'utilizzo del plug-in SPARK-Rapids per Spark.
Scelta dei tipi di istanza
Per utilizzare il plugin Nvidia Spark-RAPIDS per Spark, i gruppi di istanze principali e attività devono utilizzare i tipi di istanza GPU EC2 che soddisfano i Requisiti hardware
Impostazione delle configurazioni delle applicazioni per il cluster
1. Abilitare Amazon EMR per installare i plug-in nel nuovo cluster
Per installare i plug-in, è necessaria la seguente configurazione durante la creazione del cluster:
{ "Classification":"spark", "Properties":{ "enableSparkRapids":"true" } }
2. Configurazione di YARN per utilizzare la GPU
Per ulteriori informazioni sull'utilizzo della GPU su YARN, consulta Using GPU on YARN (Utilizzo della GPU su YARN)
{ "Classification":"yarn-site", "Properties":{ "yarn.nodemanager.resource-plugins":"yarn.io/gpu", "yarn.resource-types":"yarn.io/gpu", "yarn.nodemanager.resource-plugins.gpu.allowed-gpu-devices":"auto", "yarn.nodemanager.resource-plugins.gpu.path-to-discovery-executables":"/usr/bin", "yarn.nodemanager.linux-container-executor.cgroups.mount":"true", "yarn.nodemanager.linux-container-executor.cgroups.mount-path":"/sys/fs/cgroup", "yarn.nodemanager.linux-container-executor.cgroups.hierarchy":"yarn", "yarn.nodemanager.container-executor.class":"org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor" } }, { "Classification":"container-executor", "Properties":{ }, "Configurations":[ { "Classification":"gpu", "Properties":{ "module.enabled":"true" } }, { "Classification":"cgroups", "Properties":{ "root":"/sys/fs/cgroup", "yarn-hierarchy":"yarn" } } ] }
3. Configurazione di Spark per utilizzare RAPIDS
Seguono le configurazioni necessarie per consentire a Spark di utilizzare il plug-in RAPIDS:
{ "Classification":"spark-defaults", "Properties":{ "spark.plugins":"com.nvidia.spark.SQLPlugin", "spark.executor.resource.gpu.discoveryScript":"/usr/lib/spark/scripts/gpu/getGpusResources.sh", "spark.executor.extraLibraryPath":"/usr/local/cuda/targets/x86_64-linux/lib:/usr/local/cuda/extras/CUPTI/lib64:/usr/local/cuda/compat/lib:/usr/local/cuda/lib:/usr/local/cuda/lib64:/usr/lib/hadoop/lib/native:/usr/lib/hadoop-lzo/lib/native:/docker/usr/lib/hadoop/lib/native:/docker/usr/lib/hadoop-lzo/lib/native" } }
XGBoost4J-Spark library
{ "Classification":"spark-defaults", "Properties":{ "spark.submit.pyFiles":"/usr/lib/spark/jars/xgboost4j-spark_3.0-1.4.2-0.3.0.jar" } }
Per ulteriori configurazioni Spark che è possibile utilizzare per regolare un cluster EMR accelerato da GPU, fai riferimento alla Rapids Accelerator for Apache Spark tuning guide (Guida alla regolazione dell'Accelerator Rapids per Apache Spark)
4. Configurazione del pianificatore di capacità YARN
DominantResourceCalculator
deve essere configurato per abilitare la pianificazione e l'isolamento della GPU. Per ulteriori informazioni, consulta Using GPU on YARN (Utilizzo della GPU su YARN)
{ "Classification":"capacity-scheduler", "Properties":{ "yarn.scheduler.capacity.resource-calculator":"org.apache.hadoop.yarn.util.resource.DominantResourceCalculator" } }
5. Creazione di un file JSON per includere tutte le configurazioni
È possibile creare un file JSON che contiene la configurazione per l'utilizzo del plug-in RAPIDS per il cluster Spark. È possibile fornire il file in un secondo momento all'avvio del cluster.
Il file può essere memorizzato localmente o su S3. Per ulteriori informazioni su come fornire le configurazioni delle applicazioni per i cluster, consulta Configurazione delle applicazioni.
Di seguito è riportato un esempio di file denominato my-configurations.json
. Puoi utilizzarlo come modello per iniziare a creare le tue configurazioni.
[ { "Classification":"spark", "Properties":{ "enableSparkRapids":"true" } }, { "Classification":"yarn-site", "Properties":{ "yarn.nodemanager.resource-plugins":"yarn.io/gpu", "yarn.resource-types":"yarn.io/gpu", "yarn.nodemanager.resource-plugins.gpu.allowed-gpu-devices":"auto", "yarn.nodemanager.resource-plugins.gpu.path-to-discovery-executables":"/usr/bin", "yarn.nodemanager.linux-container-executor.cgroups.mount":"true", "yarn.nodemanager.linux-container-executor.cgroups.mount-path":"/sys/fs/cgroup", "yarn.nodemanager.linux-container-executor.cgroups.hierarchy":"yarn", "yarn.nodemanager.container-executor.class":"org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor" } }, { "Classification":"container-executor", "Properties":{ }, "Configurations":[ { "Classification":"gpu", "Properties":{ "module.enabled":"true" } }, { "Classification":"cgroups", "Properties":{ "root":"/sys/fs/cgroup", "yarn-hierarchy":"yarn" } } ] }, { "Classification":"spark-defaults", "Properties":{ "spark.plugins":"com.nvidia.spark.SQLPlugin", "spark.executor.resource.gpu.discoveryScript":"/usr/lib/spark/scripts/gpu/getGpusResources.sh", "spark.executor.extraLibraryPath":"/usr/local/cuda/targets/x86_64-linux/lib:/usr/local/cuda/extras/CUPTI/lib64:/usr/local/cuda/compat/lib:/usr/local/cuda/lib:/usr/local/cuda/lib64:/usr/lib/hadoop/lib/native:/usr/lib/hadoop-lzo/lib/native:/docker/usr/lib/hadoop/lib/native:/docker/usr/lib/hadoop-lzo/lib/native", "spark.submit.pyFiles":"/usr/lib/spark/jars/xgboost4j-spark_3.0-1.4.2-0.3.0.jar", "spark.rapids.sql.concurrentGpuTasks":"1", "spark.executor.resource.gpu.amount":"1", "spark.executor.cores":"2", "spark.task.cpus":"1", "spark.task.resource.gpu.amount":"0.5", "spark.rapids.memory.pinnedPool.size":"0", "spark.executor.memoryOverhead":"2G", "spark.locality.wait":"0s", "spark.sql.shuffle.partitions":"200", "spark.sql.files.maxPartitionBytes":"512m" } }, { "Classification":"capacity-scheduler", "Properties":{ "yarn.scheduler.capacity.resource-calculator":"org.apache.hadoop.yarn.util.resource.DominantResourceCalculator" } } ]
Aggiunta di un'operazione di bootstrap per il cluster
Per utilizzare YARN sulla GPU, è necessario aprire le autorizzazioni cgroups a YARN sul cluster, operazione che può essere eseguita utilizzando uno script di operazione di bootstrap EMR.
Per ulteriori informazioni su come fornire script dell'operazione di bootstrap durante la creazione del cluster, consulta Nozioni di base sulle operazioni di bootstrap nella Guida alla gestione di Amazon EMR.
Segue uno script di esempio denominato my-bootstap-action.sh
:
#!/bin/bash set -ex sudo chmod a+rwx -R /sys/fs/cgroup/cpu,cpuacct sudo chmod a+rwx -R /sys/fs/cgroup/devices
Avvio del cluster
L'ultimo passaggio consiste nell'avviare il cluster con le configurazioni del cluster menzionate sopra. Segue un esempio del comando per avviare un cluster tramite la CLI EMR:
aws emr create-cluster \ --release-label emr-6.2.0 \ --applications Name=Hadoop Name=Spark \ --service-role EMR_DefaultRole_V2 \ --ec2-attributes KeyName=my-key-pair,InstanceProfile=EMR_EC2_DefaultRole \ --instance-groups InstanceGroupType=MASTER,InstanceCount=1,InstanceType=m4.4xlarge \ InstanceGroupType=CORE,InstanceCount=1,InstanceType=g4dn.2xlarge \ InstanceGroupType=TASK,InstanceCount=1,InstanceType=g4dn.2xlarge \ --configurations file:///my-configurations.json \ --bootstrap-actions Name='My Spark Rapids Bootstrap action',Path=s3://my-bucket/my-bootstrap-action.sh