SageMaker AI Spark for Scala 예시 - Amazon SageMaker AI

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

SageMaker AI Spark for Scala 예시

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

Spark for Scala 다운로드

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

SageMaker AI Spark 라이브러리 설치에 대한 자세한 지침은 SageMaker AI Spark를 참조하세요.

SageMaker AI 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 예시

이 섹션에서는 Spark 클러스터에서 DataFrame을 사용하여 SageMaker AI에서 모델을 훈련하기 위해 SageMaker AI에서 제공하는 Apache Spark Scala 라이브러리를 사용하는 예시 코드를 제공합니다. 그런 다음 Apache Spark와 함께 Amazon SageMaker AI에서 모델 훈련 및 호스팅을 위해 사용자 지정 알고리즘 사용Spark 파이프라인에서 SageMakerEstimator 사용 방법에 대한 예시가 이어집니다.

다음 예시에서는 SageMaker AI 호스팅 서비스를 사용하여 결과 모델 아티팩트를 호스팅합니다. 이 예시에 대한 자세한 내용은 Getting Started: K-Means Clustering on SageMaker AI with SageMaker AI Spark SDK를 참조하세요. 이 예시에서는 구체적으로 다음을 수행합니다.

  • KMeansSageMakerEstimator를 사용하여 데이터에 모델을 조정(또는 훈련)

    예시에서는 SageMaker AI에서 제공하는 k-means 알고리즘을 사용하여 모형을 훈련하기 때문에 KMeansSageMakerEstimator를 사용합니다. MNIST 데이터세트에서 손으로 쓴 한 자리 숫자의 이미지를 사용하여 모델을 훈련합니다. 이미지를 입력 DataFrame으로 제공합니다. 편의를 위해 SageMaker AI는 이 데이터세트를 Amazon S3 버킷에 제공합니다.

    그 응답으로 예측기는 SageMakerModel객체를 반환합니다.

  • 훈련된 SageMakerModel를 사용한 추론 얻기

    SageMaker AI에서 호스팅된 모델로부터 추론을 얻으려면 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

이 예제 코드에서는 다음 작업을 수행합니다.

  • SageMaker AI(awsai-sparksdk-dataset)에서 제공한 S3 버킷에서 Spark DataFrame(mnistTrainingDataFrame)으로 MNIST 데이터세트를 로드합니다.

    // 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 AI 예측기 생성 (KMeansSageMakerEstimator)

    이 예측기의 fit 메서드는 SageMaker AI에서 제공하는 k-means 알고리즘을 사용하여 입력 DataFrame을 사용해 모델을 훈련합니다. 그 응답으로 추론을 얻는 데 사용할 SageMakerModel객체를 반환합니다.

    참고

    KMeansSageMakerEstimator는 SageMaker AI SageMakerEstimator를 확장하고, 이는 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 AI에 배포하는 데 사용되는 정보를 제공합니다.

    • trainingInstanceTypetrainingInstanceCount- 모델 훈련에 사용할 ML 컴퓨팅 인스턴스의 유형 및 수를 식별합니다.

    • endpointInstanceType - SageMaker AI에서 모델을 호스팅할 때 사용할 ML 컴퓨팅 인스턴스 유형을 식별합니다. 기본적으로 하나의 ML 컴퓨팅 인스턴스가 수임됩니다.

    • endpointInitialInstanceCount - SageMaker AI에서 모델을 호스팅하는 엔드포인트를 처음 지원하는 ML 컴퓨팅 인스턴스의 수를 식별합니다.

    • sagemakerRole - SageMaker AI는 이 IAM 역할을 수임하여 사용자를 대신해 작업을 수행합니다. 예를 들어 모델 훈련의 경우 S3로부터 데이터를 읽고 훈련 결과(모델 아티팩트)를 S3에 씁니다.

      참고

      이 예시는 명시적으로 SageMaker AI 클라이언트를 생성합니다. 이 클라이언트를 생성하려면 보안 인증을 입력해야 합니다. API는 이러한 자격 증명을 사용하여 SageMaker AI에 대한 요청을 인증합니다. 예를 들어, 이 API는 자격 증명을 사용하여 훈련 작업을 생성하기 위한 요청과 SageMaker AI 호스팅 서비스를 사용하여 모델을 배포하기 위한 API 직접 호출을 인증합니다.

    • KMeansSageMakerEstimator 객체가 생성된 이후 모델 훈련에서 사용되는 다음 파라미터를 설정합니다.

      • k-means 알고리즘이 모델 훈련 도중 생성해야 하는 클러스터 수입니다. 각 자리마다 하나씩 0~9까지 총 10개의 클러스터를 지정합니다.

      • 각 입력 이미지에 784개의 특징이 있는지 식별합니다(각 수기 숫자는 28 x 28픽셀 이미지로 784개의 특징이 있음).

  • 예측기 fit메서드 호출

    // train val model = estimator.fit(trainingData)

    입력 DataFrame을 파라미터로 전달합니다. 모델은 모델을 훈련하고 SageMaker AI에 배포하는 모든 작업을 수행합니다. 자세한 내용은 단원을 참조하십시오Apache Spark 애플리케이션과 SageMaker AI 통합. 이에 대한 응답으로 SageMaker AI에 배포된 모델에서 추론을 얻는 데 사용할 수 있는 SageMakerModel 객체를 얻습니다.

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

  • SageMakerModel.transform 메서드를 직접적으로 호출하여 SageMaker AI에 배포된 모델로부터 추론을 얻습니다.

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

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

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

    • 입력 DataFramefeatures 열을 protobuf에 직렬화하고 추론을 위해 이 열을 SageMaker AI 엔드포인트로 전송합니다.

    • 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에 속합니다.