翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Nvidia RAPIDS Accelerator for Apache Spark を使用する
Amazon EMRリリース 6.2.0 以降では、Nvidia の RAPIDS Accelerator for Apache Spark プラグインを使用して、EC2グラフィック処理ユニット (GPU) インスタンスタイプを使用して Spark を高速化できます。RAPIDS Accelerator は、コードを変更せずに Apache Spark 3.0 データサイエンスパイプラインをGPU高速化し、データ処理とモデルトレーニングを高速化しながら、インフラストラクチャコストを大幅に削減します。
以下のセクションでは、Spark-RAPIDS Plugin for Spark を使用するようにEMRクラスターを設定する方法について説明します。
インスタンスタイプの選択
Spark 用の Nvidia Spark-RAPIDS プラグインを使用するには、コアインスタンスグループとタスクインスタンスグループが Spark- のハードウェア要件を満たすEC2GPUインスタンスタイプを使用する必要がありますRAPIDS。Amazon がEMRサポートするGPUインスタンスタイプの詳細なリストを確認するには、「Amazon EMR管理ガイド」の「サポートされているインスタンスタイプ」を参照してください。プライマリインスタンスグループのインスタンスタイプは、 GPUまたは GPU以外のタイプのいずれかになりますが、ARMインスタンスタイプはサポートされていません。
クラスターのアプリケーション設定のセットアップ
1. Amazon が新しいクラスターEMRにプラグインをインストールできるようにする
プラグインをインストールするには、クラスターの作成時に次の設定を指定します。
{
"Classification":"spark",
"Properties":{
"enableSparkRapids":"true"
}
}
2。を使用するYARNように を設定する GPU
GPU で を使用する方法の詳細についてはYARN、Apache Hadoop ドキュメントの「GPUUsing onYARN」を参照してください。次の例は、Amazon 6.x EMR および 7.x リリースYARNの設定例を示しています。
- Amazon EMR 7.x
-
Amazon 7.x EMR 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":"/spark-rapids-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":"/spark-rapids-cgroup",
"yarn-hierarchy":"yarn"
}
}
]
}
- Amazon EMR 6.x
-
Amazon 6.x EMR 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. を使用するように Spark を設定する RAPIDS
Spark が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"
}
}
- XGBoost ドキュメントの XGBoost4JSpark ライブラリは、クラスターで Spark RAPIDSプラグインが有効になっている場合にも利用できます。次の設定を使用して、Spark ジョブXGBoostと統合できます。
{
"Classification":"spark-defaults",
"Properties":{
"spark.submit.pyFiles":"/usr/lib/spark/jars/xgboost4j-spark_3.0-1.4.2-0.3.0.jar"
}
}
GPU高速EMRクラスターのチューニングに使用できるその他の Spark 設定については、Nvidia.github.io ドキュメントの「Rapids Accelerator for Apache Spark チューニングガイド」を参照してください。
4. YARNキャパシティスケジューラの設定
DominantResourceCalculator
は、GPUスケジューリングと分離を有効にするように設定する必要があります。詳細については、Apache Hadoop ドキュメントの「GPUUsing onYARN」を参照してください。
{
"Classification":"capacity-scheduler",
"Properties":{
"yarn.scheduler.capacity.resource-calculator":"org.apache.hadoop.yarn.util.resource.DominantResourceCalculator"
}
}
5。設定を含めるJSONファイルを作成する
Spark クラスターのRAPIDSプラグインを使用するための設定を含むJSONファイルを作成できます。このファイルは、後でクラスターの起動時に指定します。
ファイルはローカルまたは S3 に保存できます。クラスターにアプリケーション設定を指定する方法の詳細については、アプリケーションの設定 を参照してください。
以下のサンプルファイルをテンプレートとして使用して、独自の設定を構築してください。
- Amazon EMR 7.x
-
Amazon 7.x EMR のサンプルmy-configurations.json
ファイル
[
{
"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":"/spark-rapids-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":"/spark-rapids-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"
}
}
]
- Amazon EMR 6.x
-
Amazon 6.x EMR のサンプルmy-configurations.json
ファイル
[
{
"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"
}
}
]
クラスターのブートストラップアクションを追加する
クラスターの作成時にブートストラップアクションスクリプトを指定する方法の詳細については、「Amazon EMR管理ガイド」の「ブートストラップアクションの基本」を参照してください。
次のスクリプト例は、Amazon 6.x および EMR 7.x のブートストラップアクションファイルを作成する方法を示しています。
- Amazon EMR 7.x
-
Amazon 7.x EMR のサンプルmy-bootstrap-action.sh
ファイル
YARN を使用して Amazon 7.x EMR リリースでGPUリソースを管理するには、クラスターCGroup v1に手動でマウントする必要があります。この例のように、ブートストラップアクションスクリプトとしてこれを実行できます。
#!/bin/bash
set -ex
sudo mkdir -p /spark-rapids-cgroup/devices
sudo mount -t cgroup -o devices cgroupv1-devices /spark-rapids-cgroup/devices
sudo chmod a+rwx -R /spark-rapids-cgroup
- Amazon EMR 6.x
-
Amazon 6.x EMR のサンプルmy-bootstrap-action.sh
ファイル
Amazon 6.x EMR リリースでは、クラスターYARNで へのアクセスCGroup許可を開く必要があります。これは、この例のようにブートストラップアクションスクリプトを使用して実行できます。
#!/bin/bash
set -ex
sudo chmod a+rwx -R /sys/fs/cgroup/cpu,cpuacct
sudo chmod a+rwx -R /sys/fs/cgroup/devices
クラスターを起動する
最後のステップは、上記のクラスター設定を使用してクラスターを起動することです。Amazon からクラスターを起動するコマンドの例を次に示しますEMRCLI。
aws emr create-cluster \
--release-label emr-7.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