기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
SageMaker Spark for Scala 예제
SageMaker Amazon은 Apache Spark 애플리케이션을 통합하는 데 사용할 수 있는 Apache SageMakerSpark 라이브러리 (Spark
스칼라용 Spark 다운로드
Spark 리포지토리에서 Python Spark (PySpark) 및 Scala 라이브러리의 소스 코드와 예제를 다운로드할 수 있습니다. SageMaker
Spark 라이브러리 설치에 대한 자세한 지침은 SageMaker Spark를 참조하십시오. SageMaker
SageMaker SDK스칼라용 Spark는 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>
스칼라용 스파크 예제
이 섹션에서는 에서 제공하는 Apache Spark Scala 라이브러리를 SageMaker 사용하여 Spark 클러스터에서 DataFrame
s를 사용하도록 모델을 SageMaker 훈련시키는 예제 코드를 제공합니다. 그런 다음, 를 사용하는 방법에 대한 예제가 이어집니다. Apache Spark를 사용하여 SageMaker Amazon에서 모델 교육 및 호스팅을 위한 사용자 지정 알고리즘 사용 스파크 파이프라인에서 사용 SageMakerEstimator
다음 예제에서는 SageMaker 호스팅 서비스를 사용하여 결과 모델 아티팩트를 호스팅합니다. 이 예제에 대한 자세한 내용은 시작하기: SDK 특히 SageMaker Spark를 SageMaker 사용한 K-Means 클러스터링을
-
KMeansSageMakerEstimator
를 사용하여 데이터에 모델을 조정(또는 훈련)이 예제에서는 에서 제공하는 k-means 알고리즘을 사용하여 모델을 SageMaker 훈련시키기 때문에 를 사용합니다.
KMeansSageMakerEstimator
데이터셋에서 손으로 쓴 한 자리 숫자의 이미지를 사용하여 모델을 훈련시킵니다. MNIST 이미지를 입력DataFrame
으로 제공합니다. 편의를 위해 Amazon S3 버킷에 이 데이터세트를 SageMaker 제공합니다.그 응답으로 예측기는
SageMakerModel
객체를 반환합니다. -
훈련된
SageMakerModel
를 사용한 추론 얻기에 호스팅된 모델에서 추론을 가져오려면 SageMaker 메서드를 호출합니다.
SageMakerModel.transform
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
이 예제 코드에서는 다음 작업을 수행합니다.
-
() 에서 제공한 S3 버킷에서 Spark SageMaker
DataFrame
(awsai-sparksdk-dataset
) 로 MNIST 데이터세트를 로드합니다.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-평균 알고리즘을 사용하여 입력값을 사용하여 모델을 SageMaker 훈련시킵니다.DataFrame
그 응답으로 추론을 얻는 데 사용할SageMakerModel
객체를 반환합니다.참고
는 를
KMeansSageMakerEstimator
확장하고 SageMakerSageMakerEstimator
, 이는 Apache Spark를 확장합니다.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 예를 들어 자격 증명을 사용하여 교육 작업 생성 요청을 인증하고 API 호스팅 서비스를 사용하여 SageMaker 모델을 배포하도록 요청합니다.
-
KMeansSageMakerEstimator
객체가 생성된 이후 모델 훈련에서 사용되는 다음 파라미터를 설정합니다.-
k-means 알고리즘이 모델 훈련 도중 생성해야 하는 클러스터 수입니다. 각 자리마다 하나씩 0~9까지 총 10개의 클러스터를 지정합니다.
-
각 입력 이미지에 784개의 특징이 있는지 식별합니다(각 수기 숫자는 28 x 28픽셀 이미지로 784개의 특징이 있음).
-
-
-
예측기
fit
메서드 호출// train val model = estimator.fit(trainingData)
입력
DataFrame
을 파라미터로 전달합니다. 모델은 모델을 학습시키고 모델을 배포하는 모든 작업을 수행합니다. SageMaker 자세한 내용은 Apache Spark 애플리케이션을 다음과 통합하십시오. SageMaker 단원을 참조하십시오. 이에 대한 응답으로SageMakerModel
객체를 얻게 되며, 이 객체를 사용하여 배포된 모델에서 추론을 가져올 수 있습니다. SageMakerDataFrame
만 입력하면 됩니다.. 모델 훈련에 사용되는 k-means 알고리즘에 대한 레지스트리 경로를 지정할 필요가 없습니다.KMeansSageMakerEstimator
가 이를 알고 있기 때문입니다. -
SageMakerModel.transform
메서드를 호출하여 배포된 모델에서 추론을 가져옵니다. SageMakertransform
메서드는DataFrame
을 입력으로 가져오고, 이를 변형하고, 모델에서 가져온 추론을 포함하는 또 다른DataFrame
을 반환합니다.val transformedData = model.transform(testData) transformedData.show
간소화를 위해 이 예제에서 모델 훈련에 대해 사용하는
DataFrame
메서드에 대해 동일한transform
을 입력으로 사용합니다.transform
메서드는 다음을 수행합니다.-
입력의
features
열을 protobuf로 직렬화하고 추론을DataFrame
위해 엔드포인트로 보냅니다. 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에 속합니다.
-