Amazon SageMaker での RStudio による並列データ処理

昨年、Google は の一般提供を発表しました。 AmazonSageMakerのRStudioは、業界初の完全マネージド型 RStudio Workbench 統合開発環境 (IDE) であるクラウドです。 使い慣れた RStudio IDE をすばやく起動し、作業を中断することなく基盤となるコンピューティング リソースをダイヤルアップおよびダイヤルダウンできるため、R で大規模な機械学習 (ML) および分析ソリューションを簡単に構築できます。

生成されるデータ量が増え続ける中、ML と統計分析に使用されるデータセットは並行して増加しています。 これにより、開発時間の増加とコンピューティング インフラストラクチャの管理という課題が生じます。 これらの課題を解決するために、データ サイエンティストは並列データ処理技術の実装を検討してきました。 並列データ処理、または データの並列化、大規模な既存のデータセットを取得し、それらを複数のプロセッサまたはノードに分散して、データを同時に操作します。 これにより、大規模なデータセットの処理時間が短縮され、コンピューティングでの使用が最適化されます。 これは、ML の実践者がデータセット生成用の再利用可能なパターンを作成するのに役立ち、コンピューティング インフラストラクチャの負荷とコストを削減するのにも役立ちます。

ソリューションの概要

中で アマゾンセージメーカー、多くのお客様にご利用いただいています SageMakerの処理 並列データ処理の実装を支援します。 SageMaker Processing を使用すると、SageMaker で簡素化されたマネージド エクスペリエンスを使用して、機能エンジニアリング、データ検証、モデル評価、モデル解釈などのデータ処理ワークロードを実行できます。 これには多くの利点があります。これは、管理するインフラストラクチャが長時間実行されないためです。ジョブが完了するとインスタンスの処理が停止し、環境はコンテナーを介して標準化され、データは内部で管理されます。 Amazon シンプル ストレージ サービス (Amazon S3) はインスタンス間でネイティブに分散され、インフラストラクチャ設定はメモリ、コンピューティング、およびストレージに関して柔軟です。

SageMaker Processing は、データを分散する方法のオプションを提供します。 並列データ処理の場合は、 S3DataDistributionType の ShardedByS3Key オプション. このパラメータが選択されると、SageMaker Processing は提供された n インスタンスと配布オブジェクト 1/n インスタンス全体の入力データ ソースからのオブジェクト。 たとえば、XNUMX つのインスタンスに XNUMX つのデータ オブジェクトが提供されている場合、各インスタンスは XNUMX つのオブジェクトを受け取ります。

SageMaker Processing には、処理ジョブを実行するための XNUMX つのコンポーネントが必要です。

  • データ処理ワークロードを実行するためのコードと依存関係を含むコンテナー イメージ
  • Amazon S3 内の入力データ ソースへのパス
  • Amazon S3 内の出力データ ソースへのパス

このプロセスを次の図に示します。

Amazon SageMaker PlatoBlockchain Data Intelligence 上の RStudio を使用した並列データ処理。垂直検索。あい。

この投稿では、SageMaker で RStudio を使用して一連の SageMaker Processing ジョブと連携し、並列データ処理パイプラインを作成する方法を紹介します。 R プログラミング言語。

このソリューションは、次の手順で構成されています。

  1. RStudio プロジェクトをセットアップします。
  2. 処理コンテナー イメージをビルドして登録します。
  3. XNUMX 段階の処理パイプラインを実行します。
    1. 最初のステップでは、複数のデータ ファイルを取得し、一連の処理ジョブでそれらを処理します。
    2. XNUMX 番目のステップでは、出力ファイルを連結し、トレーニング、テスト、および検証のデータセットに分割します。

前提条件

次の前提条件を完了します。

  1. SageMaker Workbench で RStudio をセットアップします。 詳細については、次を参照してください。 データサイエンティスト向けのAmazonSageMakerでフルマネージドRStudioを発表.
  2. SageMaker で RStudio を使用して、適切なアクセス許可を持つユーザーを作成します。

RStudio プロジェクトをセットアップする

RStudio プロジェクトをセットアップするには、次の手順を実行します。

  1. アカウント設定ページに移動する Amazon SageMakerスタジオ SageMaker コンソールのコントロール パネル。
  2. RStudio 環境でアプリを起動します。
    Amazon SageMaker PlatoBlockchain Data Intelligence 上の RStudio を使用した並列データ処理。垂直検索。あい。
  3. 新しい RStudio セッションを開始します。
  4. セッション名、名前を入力します。
  5. インスタンスタイプ および 画像、デフォルト設定を使用します。
  6. 選択する セッションを開始.
    Amazon SageMaker PlatoBlockchain Data Intelligence 上の RStudio を使用した並列データ処理。垂直検索。あい。
  7. セッションに移動します。
  8. 選択する 新規プロジェクト, バージョン管理、次いで Git を選択.
  9. リポジトリの URL、 入る https://github.com/aws-samples/aws-parallel-data-processing-r.git
  10. 残りのオプションはデフォルトのままにして、 プロジェクトを作成します。.
    Amazon SageMaker PlatoBlockchain Data Intelligence 上の RStudio を使用した並列データ処理。垂直検索。あい。

に移動できます aws-parallel-data-processing-R 上のディレクトリ タブをクリックしてリポジトリを表示します。 リポジトリには、次のファイルが含まれています。

  • Container_Build.rmd
  • /dataset
    • bank-additional-full-data1.csv
    • bank-additional-full-data2.csv
    • bank-additional-full-data3.csv
    • bank-additional-full-data4.csv
  • /docker
  • Dockerfile-Processing
  • Parallel_Data_Processing.rmd
  • /preprocessing
    • filter.R
    • process.R

コンテナを構築する

このステップでは、処理コンテナー イメージをビルドしてプッシュします。 Amazon エラスティック コンテナ レジストリ (アマゾン ECR)。 次の手順を完了します。

  1. に移動します Container_Build.rmd ファイルにソフトウェアを指定する必要があります。
  2. インストール SageMaker Studio イメージビルド CLI 次のセルを実行します。 この手順を完了する前に、必要なアクセス許可があることを確認してください。これは、Studio 内でコンテナー イメージをプッシュおよび登録するように設計された CLI です。
    pip install sagemaker-studio-image-build

  3. 次のセルを実行して、処理コンテナーを構築および登録します。
    /home/sagemaker-user/.local/bin/sm-docker build . --file ./docker/Dockerfile-Processing --repository sagemaker-rstudio-parallel-processing:1.0

ジョブが正常に実行されると、次のような出力が表示されます。

Image URI: <Account_Number>.dkr.ecr.<Region>.amazonaws.com/sagemaker-rstudio- parallel-processing:1.0

処理パイプラインを実行する

コンテナを構築したら、 Parallel_Data_Processing.rmd ファイル。 このファイルには、SageMaker Processing を使用して並列データ処理パイプラインを作成するのに役立つ一連のステップが含まれています。 次の図は、完了するパイプラインのステップを示しています。

Amazon SageMaker PlatoBlockchain Data Intelligence 上の RStudio を使用した並列データ処理。垂直検索。あい。

まず、パッケージのインポート ステップを実行します。 必要な RStudio パッケージを SageMaker SDK と共にインポートします。

suppressWarnings(library(dplyr))
suppressWarnings(library(reticulate))
suppressWarnings(library(readr))
path_to_python <- system(‘which python’, intern = TRUE)

use_python(path_to_python)
sagemaker <- import('sagemaker')

次に、SageMaker 実行ロールと環境の詳細を設定します。

role = sagemaker$get_execution_role()
session = sagemaker$Session()
bucket = session$default_bucket()
account_id <- session$account_id()
region <- session$boto_region_name
local_path <- dirname(rstudioapi::getSourceEditorContext()$path)

前の手順で構築して登録したコンテナーを初期化します。

container_uri <- paste(account_id, "dkr.ecr", region, "amazonaws.com/sagemaker-rstudio-parallel-processing:1.0", sep=".")
print(container_uri)

ここからは、各処理ステップについて詳しく説明します。

データセットをアップロードする

この例では、 UCI の Bank Marketing データセット. データセットはすでに複数の小さなファイルに分割されています。 次のコードを実行して、ファイルを Amazon S3 にアップロードします。

local_dataset_path <- paste0(local_path,"/dataset/")

dataset_files <- list.files(path=local_dataset_path, pattern=".csv$", full.names=TRUE)
for (file in dataset_files){
  session$upload_data(file, bucket=bucket, key_prefix="sagemaker-rstudio-example/split")
}

input_s3_split_location <- paste0("s3://", bucket, "/sagemaker-rstudio-example/split")

ファイルがアップロードされたら、次のステップに進みます。

並列データ処理を実行する

このステップでは、データ ファイルを取得し、特徴エンジニアリングを実行して特定の列を除外します。 このジョブは、一連の処理インスタンス (この例では XNUMX つ使用) に分散されます。

私たちは、使用 filter.R ファイルを作成してデータを処理し、次のようにジョブを構成します。

filter_processor <- sagemaker$processing$ScriptProcessor(command=list("Rscript"),
                                                        image_uri=container_uri,
                                                        role=role,
                                                        instance_count=2L,
                                                        instance_type="ml.m5.large")

output_s3_filter_location <- paste0("s3://", bucket, "/sagemaker-rstudio-example/filtered")
s3_filter_input <- sagemaker$processing$ProcessingInput(source=input_s3_split_location,
                                                        destination="/opt/ml/processing/input",
                                                        s3_data_distribution_type="ShardedByS3Key",
                                                        s3_data_type="S3Prefix")
s3_filter_output <- sagemaker$processing$ProcessingOutput(output_name="bank-additional-full-filtered",
                                                         destination=output_s3_filter_location,
                                                         source="/opt/ml/processing/output")

filtering_step <- sagemaker$workflow$steps$ProcessingStep(name="FilterProcessingStep",
                                                      code=paste0(local_path, "/preprocessing/filter.R"),
                                                      processor=filter_processor,
                                                      inputs=list(s3_filter_input),
                                                      outputs=list(s3_filter_output))

前述のように、並列データ処理ジョブを実行するときは、データのシャーディング方法とデータの種類に合わせて入力パラメーターを調整する必要があります。 したがって、シャーディング方法を次の方法で提供します。 S3Prefix:

s3_data_distribution_type="ShardedByS3Key",
                                                      s3_data_type="S3Prefix")

これらのパラメータを挿入すると、SageMaker Processing は、選択されたインスタンス数にデータを均等に分散します。

必要に応じてパラメーターを調整し、セルを実行してジョブをインスタンス化します。

トレーニング、テスト、および検証のデータセットを生成する

このステップでは、処理されたデータ ファイルを取得して結合し、テスト、トレーニング、および検証のデータセットに分割します。 これにより、データを使用してモデルを構築できます。

私たちは、使用 process.R ファイルを作成してデータを処理し、次のようにジョブを構成します。

script_processor <- sagemaker$processing$ScriptProcessor(command=list("Rscript"),
                                                         image_uri=container_uri,
                                                         role=role,
                                                         instance_count=1L,
                                                         instance_type="ml.m5.large")

output_s3_processed_location <- paste0("s3://", bucket, "/sagemaker-rstudio-example/processed")
s3_processed_input <- sagemaker$processing$ProcessingInput(source=output_s3_filter_location,
                                                         destination="/opt/ml/processing/input",
                                                         s3_data_type="S3Prefix")
s3_processed_output <- sagemaker$processing$ProcessingOutput(output_name="bank-additional-full-processed",
                                                         destination=output_s3_processed_location,
                                                         source="/opt/ml/processing/output")

processing_step <- sagemaker$workflow$steps$ProcessingStep(name="ProcessingStep",
                                                      code=paste0(local_path, "/preprocessing/process.R"),
                                                      processor=script_processor,
                                                      inputs=list(s3_processed_input),
                                                      outputs=list(s3_processed_output),
                                                      depends_on=list(filtering_step))

必要に応じてパラメーターを調整し、セルを実行してジョブをインスタンス化します。

パイプラインを実行する

すべてのステップがインスタンス化されたら、次のセルを実行して処理パイプラインを開始し、各ステップを実行します。

pipeline = sagemaker$workflow$pipeline$Pipeline(
  name="BankAdditionalPipelineUsingR",
  steps=list(filtering_step, processing_step)
)

upserted <- pipeline$upsert(role_arn=role)
execution <- pipeline$start()

execution$describe()
execution$wait()

これらの各ジョブにかかる時間は、選択したインスタンスのサイズと数によって異なります。

SageMaker コンソールに移動して、すべての処理ジョブを表示します。

次のスクリーンショットに示すように、フィルタリング ジョブから始めます。

Amazon SageMaker PlatoBlockchain Data Intelligence 上の RStudio を使用した並列データ処理。垂直検索。あい。

それが完了すると、パイプラインはデータ処理ジョブに移行します。

Amazon SageMaker PlatoBlockchain Data Intelligence 上の RStudio を使用した並列データ処理。垂直検索。あい。

両方のジョブが完了したら、S3 バケットに移動します。 内を見てください sagemaker-rstudio-example フォルダ、下 processed. トレーニング、テスト、および検証データセットのファイルを確認できます。

Amazon SageMaker PlatoBlockchain Data Intelligence 上の RStudio を使用した並列データ処理。垂直検索。あい。

まとめ

ますます洗練されたモデルを構築するために必要となるデータの量が増えるため、データの処理方法に対するアプローチを変更する必要があります。 並列データ処理は、データセット生成を高速化するための効率的な方法であり、SageMaker の RStudio や SageMaker Processing などの最新のクラウド環境やツールと組み合わせると、インフラストラクチャ管理、ボイラープレート コード生成、および環境管理の未分化の重労働の多くを取り除くことができます。 この投稿では、SageMaker の RStudio 内で並列データ処理を実装する方法について説明しました。 GitHub リポジトリのクローンを作成して試してみることをお勧めします。エクスペリエンスを向上させる方法について提案がある場合は、Issue またはプル リクエストを送信してください。

このソリューションで使用される機能とサービスの詳細については、次を参照してください。 AmazonSageMakerのRStudio および Amazon SageMaker処理.


著者について

Amazon SageMaker PlatoBlockchain Data Intelligence 上の RStudio を使用した並列データ処理。垂直検索。あい。 ラジ・パタク は、カナダと米国のFortune 50および中規模FSI(銀行、保険、資本市場)の顧客のソリューションアーキテクトおよびテクニカルアドバイザーです。 Rajは、ドキュメント抽出、コンタクトセンター変換、コンピュータービジョンのアプリケーションを使用した機械学習を専門としています。

Amazon SageMaker PlatoBlockchain Data Intelligence 上の RStudio を使用した並列データ処理。垂直検索。あい。ジェイク・ウェン ML トレーニングと自然言語処理に情熱を傾ける AWS のソリューション アーキテクトです。 Jake は、中小企業のお客様が設計と思考のリーダーシップを発揮して、アプリケーションを大規模に構築およびデプロイできるように支援します。 仕事以外では、ハイキングを楽しんでいます。

Amazon SageMaker PlatoBlockchain Data Intelligence 上の RStudio を使用した並列データ処理。垂直検索。あい。アディティ・ラジニッシュ ウォータールー大学のソフトウェア工学のXNUMX年生です。 彼女の興味には、コンピュータービジョン、自然言語処理、エッジコンピューティングが含まれます。 彼女はまた、コミュニティベースのSTEMアウトリーチとアドボカシーにも情熱を注いでいます。 余暇には、ロッククライミング、ピアノの演奏、完璧なスコーンの焼き方を学ぶことができます。

ショーン・モーガンショーン・モーガン AWSのAI / MLソリューションアーキテクトです。 彼は半導体および学術研究の分野での経験があり、その経験を利用して、お客様がAWSで目標を達成できるように支援しています。 余暇には、Seanはアクティブなオープンソースの寄稿者およびメンテナーであり、TensorFlowアドオンの分科会リーダーです。

Amazon SageMaker PlatoBlockchain Data Intelligence 上の RStudio を使用した並列データ処理。垂直検索。あい。ポール・ウー テキサス州の AWS のグリーンフィールド ビジネスで働くソリューション アーキテクトです。 彼の専門分野には、コンテナと移行が含まれます。

タイムスタンプ:

より多くの AWS機械学習