Upgrade to Pro — share decks privately, control downloads, hide ads and more …

プロダクション環境でフル活用するSageMaker

DeNA_Tech
September 08, 2020

 プロダクション環境でフル活用するSageMaker

DeNA では、Amazon SageMaker をフル活用して実際のプロダクトの実装に取り入れています。本セッションでは、バッチ推論と Processing を Airflow と組み合わせてスケーラブルなバッチ推論パイプラインを構築した事例と、Amazon SageMaker 上にデプロイした推論エンドポイントで完全サーバレスな推論アプリケーションを構築した事例を紹介します。 これらの事例を通して、プロダクション環境で Amazon SageMaker を利用する方法と、それによってどのような利点があったのかを考えます。

DeNA_Tech

September 08, 2020
Tweet

More Decks by DeNA_Tech

Other Decks in Technology

Transcript

  1. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. プロダクション環境でフル活用する Amazon SageMaker takumi otani Engineer DeNA Co., Ltd. 1
  2. 大谷 拓海 (Takumi Otani) 経歴 - 2019/04 DeNA新卒入社 - 2019/04~

    AIシステム部共通インフラ開発 - 2019/05~ 横浜DeNAベイスターズ強化プロジェクト: 機械学習パイプラインの開発運用 - 2019/07~ Nota(社内アノテーションツール): インフラ開発運用 - 2019/12~ : リアルタイム音声合成APIの構築 AIシステム部MLエンジニアリンググループ 2
  3. DeNA AIシステム部とは? 機械学習システムの提案/開発/運用を一気通貫に担う全社横断組織 - 研究領域から、プロダクションでのシステム運用までをすべて行う 2つの役割を持つ - リサーチ: AIシステムの核となる機械学習モデルを研究開発し、その精度を保つ -

    エンジニアリング: モデルをサービスとして仕立て、効率的に運用する 単にモデルを開発するだけでなく、 プロダクトとして継続的・効率的に運用していくことが求められている https://dena.ai/ 5
  4. Amazon SageMaker Endpoint import sagemaker model = sagemaker.pytorch.model.PyTorchModel( name=‘model_name’, model_data=‘s3://your-bucket/model.tar.gz’,

    # モデルパラメータ entry_point=‘src/serving.py’, # ローカルにあるファイルがuploadされる image='999999999999.dkr.ecr.ap-northeast-1.amazonaws.com/custom-image:latest’, role='arn:aws:iam::999999999999:role/custom-role', ) model.deploy( instance_type='ml.t2.medium’, endpoint_name=‘endpoint_name’, initial_instance_count=1, ) デプロイコード例 12
  5. Amazon SageMaker Endpoint model = sagemaker.pytorch.model.PyTorchModel( name=‘model_name’, model_data=‘file://model/path’, # ローカルファイルも指定可能

    entry_point=‘src/serving.py’, image='999999999999.dkr.ecr.ap-northeast-1.amazonaws.com/custom-image:latest’, role=‘/’, # roleはダミー model.deploy( instance_type=‘local’, # ‘local’を指定 initial_instance_count=1, endpoint_name=‘endpoint_name' ) LocalMode: エンドポイントをローカルで実行 13
  6. Amazon SageMaker Endpoint client = boto3.session.Session().client('sagemaker-runtime') response = client.invoke_endpoint( EndpointName=‘endpoint-name’,

    # リクエストするエンドポイント ContentType='application/json', Body=json.dumps({‘data’: ‘hello’}), # モデルへの入力 ) エンドポイントの呼び出し - boto3からエンドポイント名指定で呼び出せる - 生のhttpインタフェースを叩くこともできる 14
  7. Multi Model Endpoints - 単一エンドポイント(instance)内に複数のモデルをホストできる - モデルごとの負荷が少ないユースケースでは大幅にコスト削減が可能 通常のEndpoint instance instance

    instance instance instance instance instance Multi Model Endpoint 15 Amazon SageMaker Amazon SageMaker Amazon SageMaker Amazon SageMaker Amazon SageMaker Amazon SageMaker Amazon SageMaker Amazon SageMaker Amazon SageMaker Amazon SageMaker Amazon SageMaker Amazon SageMaker
  8. アーキテクチャ - Amazon API Gateway + AWS Lambdaで構成されたweb APIが認証などを行い、 Amazon

    Sagemaker Endpointを叩いてレスポンスを作成 - 開発用webUIはAmazon S3に静的ホスト deploy Amazon SageMaker Endpoint API Key リサーチャー 学習用 EC2 instance 認証などの処理を実装 学習済みモデル 開発者/ユーザ WebUIの提供 16 AWS Lambda Amazon API Gateway
  9. メリット 運用コスト最適化 - 複数のモデルを運用する必要があるが、モデルごとのリクエスト数は多くない - Multi Model Endpointsでコスト削減 - API

    Gateway + Lambdaの完全サーバレスで定常コストやメンテナンスコストを削減 更新容易性 - モデルパラメータを置き換え、エンドポイントをデプロイし直すだけでいい - デプロイプロセスがシンプルなため、リサーチャーはモデルの改良に集中できる 17
  10. 事例2: 初期のアーキテクチャ - 映像がAmazon S3にアップロードされるとSQSにメタデータが格納され、 オートスケールするEC2インスタンスがパイプラインを実行する - 困難な並列化、遊んでしまうGPU、低いメンテナンス性 推論結果 Developer

    研究開発環境 Gateway経由でssh 試合動画 パイプライン実行 EC2 instance SQSメッセージ数で auto scaling CloudWatchで監視 SQS Amazon S3 学習済みモデル us-east-1 さらなる解析へ 20
  11. Amazon SageMaker BatchTransform Amazon S3上にあるデータに対してバッチ処理による推論を実行する - リアルタイム性の必要ない推論に使う - モデル実装はEndpointと全く同じものをそのまま使える -

    追加の実装コスト無しに、一つの実装でAPI化にもバッチ処理にも対応できる Amazon SageMaker BatchTransform モデル/データの読み込み 結果の書き込み 推論リクエスト モデルを使用してバッチ処理を実行する 21
  12. Amazon SageMaker BatchTransform transformer = model.transformer( instance_count=1, instance_type='ml.c5.2xlarge', output_path=‘s3://your-bucket/outputs’ ,

    # 結果が書き出されるパス ) transformer.transform( data=‘s3://your-bucket/inputs’, # 入力データが置いてあるパス ) transformer.wait() # 終了待機 - 入力データは1データ1ファイルで置いておく - 出力も1ファイルごとに出力される - ローカルモードもある 22
  13. 新アーキテクチャ AirFlow + Amazon SageMaker BatchTransform - ECSにAirflowを建て、SQSをポーリングしてパイプラインが起動 - 一つの機械学習モデルが一つのオペレータに対応

    - 各オペレータでの処理はBatchTransformで実装 推論結果 Developer 研究開発環境 Gateway経由でssh 試合動画 SQS Amazon S3 学習済みモデル us-east-1 さらなる解析へ BatchTransform Amazon Elastic Container Service 24
  14. しかし、新たな問題が・・・ BatchTansformは内部的にEndpointを起動してリクエストを投げている - HTTP通信がパフォーマンスのボトルネックになりがち - 本来不要なはずのHTTPレイヤーに配慮する必要が生じる - エラー時のスタックトレースの分かりにくさにもつながっていた データ読み込みが隠蔽されていて、最適化出来ない -

    ナイーブな使い方では1データずつ処理されるので低速 - ミニバッチ化も可能だが、呼び出し元で行う必要があり手間 - ミニバッチ化したとしてもデータ読み込みとシリアライズがボトルネックになる - 特に動画・画像系のデータは工夫すればもっと速くロードできるはず パフォーマンスがでない? 26
  15. Amazon SageMaker Processing from sagemaker.processing import Processor, ProcessingInput, ProcessingOutput proc

    = Processor(role, image_uri, instance_count, instance_type) # 単に入力と出力を指定して任意のコードを実行する proc.run( inputs=[ ProcessingInput( source='s3://your-bucket/inputs', destination='/opt/ml/processing/input/’ ) ], outputs=[ ProcessingOutput( source='/opt/ml/processing/output', destination='s3://your-bucket/outputs’ ) ], ) 29
  16. さらに新たなソリューション Amazon SageMaker Training jobsの利用 - Processingは使用できるインスタンスタイプに制限があり、スポットインスタンスも使えない - AWSと共にコスト最適なソリューションを調査した結果、推論にもTraining Jobsを使うのがベ

    ストであることが分かった - コスト削減のため、継続的にシステムを改良している DeNAは、機能要望やフィードバックを通してAWSと密に コミュニケーションを取り、 システムやAmazon SageMaker自体の改善に協力して取り組んでいます 31