SageMaker Spark for Scala 예제 - Amazon SageMaker

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

SageMaker Spark for Scala 예제

Amazon SageMaker 은 Apache Spark 애플리케이션을SageMaker 와 통합하는 데 사용할 수 있는 Apache Spark 라이브러리( Spark )를 제공합니다 SageMaker. 이 주제에는 SageMaker Spark with Scala를 시작하는 데 도움이 되는 예제가 포함되어 있습니다. SageMaker Apache Spark 라이브러리에 대한 자세한 내용은 섹션을 참조하세요Amazon을 사용한 Apache Spark SageMaker.

Spark for Scala 다운로드

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

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 데이터 세트를 로드합니다DataFramemnistTrainingDataFrame.

    // 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.

    • trainingInstanceTypetrainingInstanceCount- 모델 훈련에 사용할 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_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에 속합니다.