기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
SageMaker Spark for Scala 예제
Amazon SageMaker 은 Apache Spark 애플리케이션을SageMaker
Spark for Scala 다운로드
SageMaker Spark
SageMaker Spark 라이브러리 설치에 대한 자세한 지침은 SageMaker Spark
SageMaker Spark SDK for Scala는 Maven 중앙 리포지토리에서 사용할 수 있습니다. pom.xml
파일에 다음 종속성을 추가하여 프로젝트에 Spark 라이브러리를 추가합니다.
-
프로젝트가 Maven으로 빌드된 경우 pom.xml 파일에 다음을 추가합니다.
<dependency> <groupId>com.amazonaws</groupId> <artifactId>sagemaker-spark_2.11</artifactId> <version>spark_2.2.0-1.0</version> </dependency>
-
프로젝트가 Spark 2.1에 의존하는 경우 pom.xml 파일에 다음을 추가합니다.
<dependency> <groupId>com.amazonaws</groupId> <artifactId>sagemaker-spark_2.11</artifactId> <version>spark_2.1.1-1.0</version> </dependency>
Spark for Scala 예제
이 섹션에서는 에서 제공하는 Apache Spark Scala 라이브러리 SageMaker 를 사용하여 Spark 클러스터의 DataFrame
를 SageMaker 사용하여 에서 모델을 훈련하는 예제 코드를 제공합니다. 그런 다음 Amazon에서 Apache Spark SageMaker 를 사용한 모델 훈련 및 호스팅에 사용자 지정 알고리즘 사용 및 에 대한 예제가 이어집니다Spark 파이프라인에서 사용 SageMakerEstimator .
다음 예제에서는 호스팅 서비스를 사용하여 결과 모델 아티팩트를 SageMaker 호스팅합니다. 이 예제에 대한 자세한 내용은 시작하기: SageMaker 특히 Spark를 SageMaker 사용한 K-Means 클러스터링SDK
-
KMeansSageMakerEstimator
를 사용하여 데이터에 모델을 조정(또는 훈련)이 예제는 에서 제공하는 k-means 알고리즘을 사용하여 모델을 훈련 SageMaker 하기 때문에 를 사용합니다
KMeansSageMakerEstimator
. (MNIST데이터 세트에서) 손으로 쓴 한 자리 숫자의 이미지를 사용하여 모델을 훈련합니다. 이미지를 입력DataFrame
으로 제공합니다. 편의를 위해 는 Amazon S3 버킷에 이 데이터 세트를 SageMaker 제공합니다.그 응답으로 예측기는
SageMakerModel
객체를 반환합니다. -
훈련된
SageMakerModel
를 사용한 추론 얻기에서 호스팅되는 모델에서 추론을 가져오려면
SageMakerModel.transform
메서드를 호출 SageMaker합니다.DataFrame
을 입력으로 전달합니다. 메서드는 입력DataFrame
을 모델에서 가져온 추론을 포함한 또 다른DataFrame
으로 변형합니다.한 자릿수의 수기 이미지의 경우 추론은 이미지가 속하는 클러스터를 식별합니다. 자세한 내용은 k-means 알고리즘 단원을 참조하십시오.
import org.apache.spark.sql.SparkSession import com.amazonaws.services.sagemaker.sparksdk.IAMRole import com.amazonaws.services.sagemaker.sparksdk.algorithms import com.amazonaws.services.sagemaker.sparksdk.algorithms.KMeansSageMakerEstimator val spark = SparkSession.builder.getOrCreate // load mnist data as a dataframe from libsvm val region = "us-east-1" val trainingData = spark.read.format("libsvm") .option("numFeatures", "784") .load(s"s3://sagemaker-sample-data-$region/spark/mnist/train/") val testData = spark.read.format("libsvm") .option("numFeatures", "784") .load(s"s3://sagemaker-sample-data-$region/spark/mnist/test/") val roleArn = "arn:aws:iam::
account-id
:role/rolename
" val estimator = new KMeansSageMakerEstimator( sagemakerRole = IAMRole(roleArn), trainingInstanceType = "ml.p2.xlarge", trainingInstanceCount = 1, endpointInstanceType = "ml.c4.xlarge", endpointInitialInstanceCount = 1) .setK(10).setFeatureDim(784) // train val model = estimator.fit(trainingData) val transformedData = model.transform(testData) transformedData.show
이 예제 코드에서는 다음 작업을 수행합니다.
-
()에서 제공하는 SageMaker S3 버킷에서 Spark(
awsai-sparksdk-dataset
)로 MNIST 데이터 세트를 로드합니다DataFrame
mnistTrainingDataFrame
.// Get a Spark session. val spark = SparkSession.builder.getOrCreate // load mnist data as a dataframe from libsvm val region = "us-east-1" val trainingData = spark.read.format("libsvm") .option("numFeatures", "784") .load(s"s3://sagemaker-sample-data-$region/spark/mnist/train/") val testData = spark.read.format("libsvm") .option("numFeatures", "784") .load(s"s3://sagemaker-sample-data-$region/spark/mnist/test/") val roleArn = "arn:aws:iam::
account-id
:role/rolename
" trainingData.show()show
메서드는 데이터 프레임의 첫 20개 행에 표시됩니다.+-----+--------------------+ |label| features| +-----+--------------------+ | 5.0|(784,[152,153,154...| | 0.0|(784,[127,128,129...| | 4.0|(784,[160,161,162...| | 1.0|(784,[158,159,160...| | 9.0|(784,[208,209,210...| | 2.0|(784,[155,156,157...| | 1.0|(784,[124,125,126...| | 3.0|(784,[151,152,153...| | 1.0|(784,[152,153,154...| | 4.0|(784,[134,135,161...| | 3.0|(784,[123,124,125...| | 5.0|(784,[216,217,218...| | 3.0|(784,[143,144,145...| | 6.0|(784,[72,73,74,99...| | 1.0|(784,[151,152,153...| | 7.0|(784,[211,212,213...| | 2.0|(784,[151,152,153...| | 8.0|(784,[159,160,161...| | 6.0|(784,[100,101,102...| | 9.0|(784,[209,210,211...| +-----+--------------------+ only showing top 20 rows
각 행에서:
-
label
열은 이미지의 레이블을 식별합니다. 예를 들어 수기 숫자 이미지가 숫자 5인 경우 레이블 값은 5입니다. -
features
열은Double
값의 벡터(org.apache.spark.ml.linalg.Vector
)를 저장합니다. 수기 숫자에는 784개의 특징이 있습니다. (각 수기 숫자는 28 x 28픽셀 이미지로 특징이 784개입니다.)
-
-
SageMaker 추정기 생성(
KMeansSageMakerEstimator
)이 추정기의
fit
메서드는 에서 제공하는 k-means 알고리즘 SageMaker 을 사용하여 입력 를 사용하여 모델을 훈련합니다DataFrame
. 그 응답으로 추론을 얻는 데 사용할SageMakerModel
객체를 반환합니다.참고
는 Apache Spark 를
KMeansSageMakerEstimator
SageMaker 확장SageMakerEstimator
하는 를 확장합니다Estimator
.val estimator = new KMeansSageMakerEstimator( sagemakerRole = IAMRole(roleArn), trainingInstanceType = "ml.p2.xlarge", trainingInstanceCount = 1, endpointInstanceType = "ml.c4.xlarge", endpointInitialInstanceCount = 1) .setK(10).setFeatureDim(784)
생성자 파라미터는 모델을 훈련하고 에 배포하는 데 사용되는 정보를 제공합니다 SageMaker.
-
trainingInstanceType
및trainingInstanceCount
- 모델 훈련에 사용할 ML 컴퓨팅 인스턴스의 유형 및 수를 식별합니다. -
endpointInstanceType
- 에서 모델을 호스팅할 때 사용할 ML 컴퓨팅 인스턴스 유형을 식별합니다 SageMaker. 기본적으로 하나의 ML 컴퓨팅 인스턴스가 수임됩니다. -
endpointInitialInstanceCount
- 처음에 에서 모델을 호스팅하는 엔드포인트를 지원하는 ML 컴퓨팅 인스턴스 수를 식별합니다 SageMaker. -
sagemakerRole
- 사용자를 대신하여 작업을 수행할 수 있도록 이 IAM 역할을 SageMaker 가정합니다. 예를 들어 모델 훈련의 경우 S3로부터 데이터를 읽고 훈련 결과(모델 아티팩트)를 S3에 씁니다.참고
이 예제는 암시적으로 SageMaker 클라이언트를 생성합니다. 이 클라이언트를 생성하려면 보안 인증을 입력해야 합니다. 는 이러한 자격 증명을 API 사용하여 에 대한 요청을 인증합니다 SageMaker. 예를 들어 자격 증명을 사용하여 요청을 인증하여 훈련 작업을 생성하고 SageMaker 호스팅 서비스를 사용하여 모델을 배포하도록 API 요청합니다.
-
KMeansSageMakerEstimator
객체가 생성된 이후 모델 훈련에서 사용되는 다음 파라미터를 설정합니다.-
k-means 알고리즘이 모델 훈련 도중 생성해야 하는 클러스터 수입니다. 각 자리마다 하나씩 0~9까지 총 10개의 클러스터를 지정합니다.
-
각 입력 이미지에 784개의 특징이 있는지 식별합니다(각 수기 숫자는 28 x 28픽셀 이미지로 784개의 특징이 있음).
-
-
-
예측기
fit
메서드 호출// train val model = estimator.fit(trainingData)
입력
DataFrame
을 파라미터로 전달합니다. 모델은 모델을 훈련하고 에 배포하는 모든 작업을 수행합니다 SageMaker. 자세한 내용은 Apache Spark 애플리케이션을 와 통합 SageMaker 단원을 참조하십시오. 이에 대한 응답으로 에 배포된 모델에서 추론을 가져오는 데 사용할 수 있는SageMakerModel
객체를 얻을 수 있습니다 SageMaker.DataFrame
만 입력하면 됩니다.. 모델 훈련에 사용되는 k-means 알고리즘에 대한 레지스트리 경로를 지정할 필요가 없습니다.KMeansSageMakerEstimator
가 이를 알고 있기 때문입니다. -
SageMakerModel.transform
메서드를 호출하여 에 배포된 모델에서 추론을 가져옵니다 SageMaker.transform
메서드는DataFrame
을 입력으로 가져오고, 이를 변형하고, 모델에서 가져온 추론을 포함하는 또 다른DataFrame
을 반환합니다.val transformedData = model.transform(testData) transformedData.show
간소화를 위해 이 예제에서 모델 훈련에 대해 사용하는
DataFrame
메서드에 대해 동일한transform
을 입력으로 사용합니다.transform
메서드는 다음을 수행합니다.-
입력의
features
열을 직렬화DataFrame
하여 protobuf하고 추론을 위해 SageMaker 엔드포인트로 전송합니다. -
protobuf 응답을 변형된
DataFrame
의 2개의 추가 열(distance_to_cluster
및closest_cluster
)로 역직렬화합니다.
show
메서드는 추론을 입력DataFrame
에 있는 최초 20개 행으로 전송합니다.+-----+--------------------+-------------------+---------------+ |label| features|distance_to_cluster|closest_cluster| +-----+--------------------+-------------------+---------------+ | 5.0|(784,[152,153,154...| 1767.897705078125| 4.0| | 0.0|(784,[127,128,129...| 1392.157470703125| 5.0| | 4.0|(784,[160,161,162...| 1671.5711669921875| 9.0| | 1.0|(784,[158,159,160...| 1182.6082763671875| 6.0| | 9.0|(784,[208,209,210...| 1390.4002685546875| 0.0| | 2.0|(784,[155,156,157...| 1713.988037109375| 1.0| | 1.0|(784,[124,125,126...| 1246.3016357421875| 2.0| | 3.0|(784,[151,152,153...| 1753.229248046875| 4.0| | 1.0|(784,[152,153,154...| 978.8394165039062| 2.0| | 4.0|(784,[134,135,161...| 1623.176513671875| 3.0| | 3.0|(784,[123,124,125...| 1533.863525390625| 4.0| | 5.0|(784,[216,217,218...| 1469.357177734375| 6.0| | 3.0|(784,[143,144,145...| 1736.765869140625| 4.0| | 6.0|(784,[72,73,74,99...| 1473.69384765625| 8.0| | 1.0|(784,[151,152,153...| 944.88720703125| 2.0| | 7.0|(784,[211,212,213...| 1285.9071044921875| 3.0| | 2.0|(784,[151,152,153...| 1635.0125732421875| 1.0| | 8.0|(784,[159,160,161...| 1436.3162841796875| 6.0| | 6.0|(784,[100,101,102...| 1499.7366943359375| 7.0| | 9.0|(784,[209,210,211...| 1364.6319580078125| 6.0| +-----+--------------------+-------------------+---------------+
다음과 같이 데이터를 해석할 수 있습니다.
-
label
5가 포함된 수기 숫자는 클러스터 4(closest_cluster
)에 속합니다. -
label
0이 포함된 수기 숫자는 클러스터 5에 속합니다. -
label
4가 포함된 수기 숫자는 클러스터 9에 속합니다. -
label
1이 포함된 수기 숫자는 클러스터 6에 속합니다.
-