SageMaker Spark for Scala 예제 - 아마존 SageMaker

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

SageMaker Spark for Scala 예제

SageMaker Amazon은 Apache Spark 애플리케이션을 통합하는 데 사용할 수 있는 Apache SageMakerSpark 라이브러리 (Spark) 를 제공합니다. SageMaker 예를 들어 데이터 전처리와 모델 교육 및 호스팅에 Apache Spark를 사용할 수 있습니다. SageMaker SageMaker Apache Spark 라이브러리에 대한 자세한 내용은 을 참조하십시오. Amazon에서 아파치 스파크를 사용하세요 SageMaker

스칼라용 Spark 다운로드

Spark 리포지토리에서 Python Spark (PySpark) 및 Scala 라이브러리의 소스 코드와 예제를 다운로드할 수 있습니다. SageMaker GitHub

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

    • trainingInstanceTypetrainingInstanceCount- 모델 훈련에 사용할 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 객체를 얻게 되며, 이 객체를 사용하여 배포된 모델에서 추론을 가져올 수 있습니다. SageMaker

    DataFrame만 입력하면 됩니다.. 모델 훈련에 사용되는 k-means 알고리즘에 대한 레지스트리 경로를 지정할 필요가 없습니다.KMeansSageMakerEstimator가 이를 알고 있기 때문입니다.

  • SageMakerModel.transform메서드를 호출하여 배포된 모델에서 추론을 가져옵니다. SageMaker

    transform 메서드는 DataFrame을 입력으로 가져오고, 이를 변형하고, 모델에서 가져온 추론을 포함하는 또 다른 DataFrame을 반환합니다.

    val transformedData = model.transform(testData) transformedData.show

    간소화를 위해 이 예제에서 모델 훈련에 대해 사용하는 DataFrame메서드에 대해 동일한 transform을 입력으로 사용합니다. transform 메서드는 다음을 수행합니다.

    • 입력의 features 열을 protobuf로 직렬화하고 추론을 DataFrame 위해 엔드포인트로 보냅니다. SageMaker

    • protobuf 응답을 변형된 DataFrame의 2개의 추가 열(distance_to_clusterclosest_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에 속합니다.