기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
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 Spark 플러그인을 사용하도록 EMR 클러스터를 구성하는 방법을 안내합니다.
인스턴스 유형 선택
Spark용 Nvidia Spark-RAPIDS 플러그인을 사용하려면 코어 및 태스크 인스턴스 그룹이 Spark-의 하드웨어 요구 사항을 충족하는 EC2 GPU 인스턴스 유형을 사용해야 합니다RAPIDS. Amazon EMR 지원 GPU 인스턴스 유형의 전체 목록을 보려면 Amazon EMR 관리 안내서의 지원되는 인스턴스 유형을 참조하세요. 기본 인스턴스 그룹의 인스턴스 유형은 유형GPU일 수도 있고 유형이GPU 아닐 수도 있지만 ARM 인스턴스 유형은 지원되지 않습니다.
클러스터의 애플리케이션 구성 설정
1: Amazon이 새 클러스터에 플러그인을 설치EMR하도록 활성화
플러그인을 설치하려면 클러스터를 생성할 때 다음 구성을 제공합니다.
{
"Classification":"spark",
"Properties":{
"enableSparkRapids":"true"
}
}
2. YARN 사용하도록 구성 GPU
GPU 에서 를 사용하는 방법에 대한 자세한 내용은 Apache Hadoop 설명서의 GPU 에서 사용을 YARN YARN참조하세요. 다음 예제에서는 Amazon EMR 6.x 및 7.x 릴리스에 대한 샘플 YARN 구성을 보여줍니다.
- Amazon EMR 7.x
-
Amazon EMR 7.x의 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 EMR 6.x의 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"
}
}
XGBoost4J- 클러스터에서 Spark 플러그인이 활성화된 경우에도 설명서의 스파크 라이브러리를 사용할 수 있습니다. XGBoost 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 설명서의 Apache Spark용 Rapids Accelerator 튜닝 가이드를 참조하세요.
4. YARN 용량 스케줄러 구성
DominantResourceCalculator
는 GPU 예약 및 격리를 활성화하도록 구성되어야 합니다. 자세한 내용은 Apache Hadoop 설명서의 GPU 에서 사용을 YARN 참조하세요.
{
"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 EMR 7.x의 예제 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 EMR 6.x의 예제 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 EMR 7.x의 예제 my-bootstrap-action.sh
파일
YARN 를 사용하여 Amazon EMR 7.x 릴리스로 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 EMR 6.x의 예제 my-bootstrap-action.sh
파일
Amazon EMR 6.x 릴리스의 경우 를 열어야 합니다.CGroup 클러스터YARN의 에 대한 권한. 이 예제처럼 부트스트랩 작업 스크립트를 이용하여 이 작업을 할 수 있습니다.
#!/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.3.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://amzn-s3-demo-bucket/my-bootstrap-action.sh