機械学習における前後処理と評価処理を担う、Amazon SageMaker Processingが発表されました #reinvent

どうも、DA事業本部の大澤です。

現在開催中のre:Invent2019でAmazon SageMakerに関連した新サービス/アップデートが続々と発表されています。 そんな中でAmazon SageMaker Processingが発表されました!

Amazon SageMakerが対応しているリージョン全てで利用可能です。東京リージョンでも利用可能です!

概要

Amazon SageMakerを用いた機械学習モデル作成時におけるデータの流れは一般的に次のような流れになります。

今回発表されたAmazon SageMaker Processingは前処理と評価処理の部分を担ったサービスです。

これまでの場合、前処理や評価処理の部分については別で用意する必要がありましたが、Amazon SageMaker Processingを利用することでAmazon SageMakerに統合することができます。また、検証時においてもノートブック環境で実行するには時間がかかりすぎる、重たい処理をAmazon SageMaker Processingに任せることもできます。

コード例

AWS公式ブログにscikit-learnを用いる例が載っているので、紹介します。

まずはsagemaker.sklearn.processing.SKLearnProcessorを用いて、処理を実行する環境情報を設定し、sklearn_processorを作成します。

from sagemaker.sklearn.processing import SKLearnProcessor
sklearn_processor = SKLearnProcessor(framework_version='0.20.0',
                                     role=role,
                                     instance_count=1,
                                     instance_type='ml.m5.xlarge')

前処理を実装してあるスクリプトpreprocessing.pyや入出力情報を先ほど作成したsklearn_processorに設定して、前処理を実行します。

from sagemaker.processing import ProcessingInput, ProcessingOutput

sklearn_processor.run(
    code='preprocessing.py',
    # arguments = ['arg1', 'arg2'],
    inputs=[ProcessingInput(
        source='dataset.csv',
        destination='/opt/ml/processing/input')],
    outputs=[ProcessingOutput(source='/opt/ml/processing/output/train'),
        ProcessingOutput(source='/opt/ml/processing/output/validation'),
        ProcessingOutput(source='/opt/ml/processing/output/test')]
)

preprocessing.pyは次のような形で書けます。

import pandas as pd
from sklearn.model_selection import train_test_split
# Read data locally 
df = pd.read_csv('/opt/ml/processing/input/dataset.csv')
# Preprocess the data set
downsampled = apply_mad_data_science_skills(df)
# Split data set into training, validation, and test
train, test = train_test_split(downsampled, test_size=0.2)
train, validation = train_test_split(train, test_size=0.2)
# Create local output directories
try:
    os.makedirs('/opt/ml/processing/output/train')
    os.makedirs('/opt/ml/processing/output/validation')
    os.makedirs('/opt/ml/processing/output/test')
except:
    pass
# Save data locally
train.to_csv("/opt/ml/processing/output/train/train.csv")
validation.to_csv("/opt/ml/processing/output/validation/validation.csv")
test.to_csv("/opt/ml/processing/output/test/test.csv")
print('Finished running processing job')

sklearn_processor.run()の実行後は次のように処理後のデータがS3に出力されます。

料金

料金は使用するインスタンスに応じた従量課金となります。東京リージョンにおける料金は次の通りです。

Standard Instances - Current Generation Price per Hour
ml.t2.medium $0.0608
ml.t2.large $0.1702
ml.t2.xlarge $0.3405
ml.t2.2xlarge $0.681
ml.t3.medium $0.0762
ml.t3.large $0.1523
ml.t3.xlarge $0.3046
ml.t3.2xlarge $0.6093
ml.m4.xlarge $0.361
ml.m4.2xlarge $0.722
ml.m4.4xlarge $1.445
ml.m4.10xlarge $3.612
ml.m4.16xlarge $5.779
ml.m5.large $0.174
ml.m5.xlarge $0.347
ml.m5.2xlarge $0.694
ml.m5.4xlarge $1.389
ml.m5.12xlarge $4.166
ml.m5.24xlarge $8.333
ml.m5d.xlarge $0.409
ml.m5d.large $0.204
ml.m5d.4xlarge $1.635
ml.m5d.2xlarge $0.818
ml.m5d.24xlarge $9.811
ml.m5d.12xlarge $4.906
Compute Optimized Instances - Current Generation Price per Hour
ml.c4.xlarge $0.353
ml.c4.2xlarge $0.706
ml.c4.4xlarge $1.411
ml.c4.8xlarge $2.822
ml.c5.xlarge $0.3
ml.c5.2xlarge $0.599
ml.c5.4xlarge $1.198
ml.c5.9xlarge $2.696
ml.c5.18xlarge $5.393
ml.c5d.xlarge $0.342
ml.c5d.large $0.171
ml.c5d.9xlarge $3.074
ml.c5d.4xlarge $1.366
ml.c5d.2xlarge $0.683
ml.c5d.18xlarge $6.149
Memory Optimized Instances - Current Generation Price per Hour
ml.r5.large $0.213
ml.r5.xlarge $0.426
ml.r5.2xlarge $0.851
ml.r5.4xlarge $1.702
ml.r5.8xlarge $3.405
ml.r5.12xlarge $5.107
ml.r5.16xlarge $6.81
ml.r5.24xlarge $10.214
ml.r5d.xlarge $0.487
ml.r5d.large $0.244
ml.r5d.4xlarge $1.949
ml.r5d.2xlarge $0.974
ml.r5d.24xlarge $11.693
ml.r5d.12xlarge $5.846
Accelerated Computing - Current Generation Price per Hour
ml.p2.xlarge $2.159
ml.p2.8xlarge $17.27
ml.p2.16xlarge $34.541
ml.p3.2xlarge $5.872
ml.p3.8xlarge $23.489
ml.p3.16xlarge $46.978

さいごに

新しくリリースされたAmazon SageMaker Processingについてご紹介しました。機械学習の検証、運用どちらにおいても前後処理、評価は重要な要素です。Amazon SageMaker Processingを活用することで、検証の高速化と運用負荷の軽減ができそうです。

参考