Slide 1

Slide 1 text

©2023 CyberAgent Inc. Distribution prohibited Dynalyst 長江 五月 MLOps応用編

Slide 2

Slide 2 text

©2023 CyberAgent Inc. Distribution prohibited Today’s Schedule 10: 00 - 12: 30: Container編 13: 45 - 14: 45: MLOps基礎編 15: 00 - 18: 30: MLOps応用編

Slide 3

Slide 3 text

©2023 CyberAgent Inc. Distribution prohibited ハンズオンリポジトリ 3 https://github.com/nsakki55/aws-mlops-handson

Slide 4

Slide 4 text

©2023 CyberAgent Inc. Distribution prohibited 4 皆さんに作成してもらうMLシステム 学習パイプライン 推論サーバー

Slide 5

Slide 5 text

©2023 CyberAgent Inc. Distribution prohibited 自己紹介 長江五月 Dynalyst Data Scientist 業務 MLモデリング データ分析 MLOps 保有AWS認定証 5 @nsakki55 @nsakki55

Slide 6

Slide 6 text

©2023 CyberAgent Inc. Distribution prohibited 本講義のゴール 6 持続可能なMLシステム を Portableな実験環境 Scalableな推論App Container編 MLOps基礎編 を使って 作る MLOps応用編

Slide 7

Slide 7 text

©2023 CyberAgent Inc. Distribution prohibited 本日皆さんが触れる技術スタック 7 ML SGDClassifier Feature Hashing Python静的解析 isort black flake8 mypy pytest CI/CD Docker GitHub Actions ECS ECR Fargate S3 StepFunctions Event Bridge Auto Scaling ALB AWS

Slide 8

Slide 8 text

©2023 CyberAgent Inc. Distribution prohibited 目次 8 1. 前準備 2. ローカルでML基盤を開発 3. CI/CD 4. MLパイプラインをAWS上で実行する 5. 推論サーバーをAWS上に立てる

Slide 9

Slide 9 text

©2023 CyberAgent Inc. Distribution prohibited 目次 9 1. 前準備 2. ローカルでML基盤を開発 3. CI/CD 4. MLパイプラインをAWS上で実行する 5. 推論サーバーをAWS上に立てる

Slide 10

Slide 10 text

©2023 CyberAgent Inc. Distribution prohibited Prerequisites 10 1. Docker Desktop 2. pyenv 3. poetry 4. awscli (認証含む) 5. hey 6. direnv 7. terraform

Slide 11

Slide 11 text

©2023 CyberAgent Inc. Distribution prohibited ハンズオンリポジトリ 11 $ git clone https://github.com/nsakki55/aws-mlops-handson $ cd aws-mlops-handson ハンズオンリポジトリをクローン https://github.com/nsakki55/aws-mlops-handson

Slide 12

Slide 12 text

©2023 CyberAgent Inc. Distribution prohibited 環境変数の設定 12 direnvの設定 $ cp .env.example .env $ vi .env AWS_REGION=ap-northeast-1 AWS_ACCOUNT_ID=012345678901 AWS_PROFILE=mlops-handson TF_VAR_aws_region=${AWS_REGION} TF_VAR_aws_profile=${AWS_PROFILE} TF_VAR_aws_account_id=${AWS_ACCOUNT_ID} AWSリージョン名 $ direnv allow . AWSアカウントID 使用するAWS Profile名 使用するAWS Profile名 Terraform実行変数 (変更しない)

Slide 13

Slide 13 text

©2023 CyberAgent Inc. Distribution prohibited 環境変数の設定 13 direnvの設定 $ echo $TF_VAR_aws_region ap-northeast-1 $ eval "$(direnv hook zsh)" >> ~/.zshrc 環境変数が設定できているか確認 設定できていない場合

Slide 14

Slide 14 text

©2023 CyberAgent Inc. Distribution prohibited AWSリソースの作成 14 $ cd infra $ terraform init TerraformでAWSリソースを作成する $ terraform apply $ cd ..

Slide 15

Slide 15 text

©2023 CyberAgent Inc. Distribution prohibited Python環境構築 15 pyenvでPython 3.9.0の環境を用意する 依存関係のインストール $ pyenv install 3.9.0 $ pyenv local 3.9.0 $ poetry install

Slide 16

Slide 16 text

©2023 CyberAgent Inc. Distribution prohibited S3 16 Simple Storage Service オブジェクトストレージサービス 非構造化データを低コストで保存できる

Slide 17

Slide 17 text

©2023 CyberAgent Inc. Distribution prohibited 学習データの準備 17 S3 Bucket作成 S3→バケットページの「バケットを作成」をクリック

Slide 18

Slide 18 text

©2023 CyberAgent Inc. Distribution prohibited 学習データの準備 18 S3 Bucket作成 バケット名 {name}-mlops-handson

Slide 19

Slide 19 text

©2023 CyberAgent Inc. Distribution prohibited 学習データの準備 19 $ unzip train_data.zip 学習データを解凍

Slide 20

Slide 20 text

©2023 CyberAgent Inc. Distribution prohibited 学習データの準備 20 学習データをアップロード 作成した自分のバケットページの「アップロード」をクリック

Slide 21

Slide 21 text

©2023 CyberAgent Inc. Distribution prohibited 学習データの準備 21 学習データをアップロード train_dataをアップロード

Slide 22

Slide 22 text

©2023 CyberAgent Inc. Distribution prohibited 環境変数の設定 22 direnvの設定 $ vi .env AWS_BUCKET=nagae-mlops-handson USER_NAME=nagae 自分の名前 作成したS3 Bucket名

Slide 23

Slide 23 text

©2023 CyberAgent Inc. Distribution prohibited 目次 23 1. 前準備 2. ローカルでML基盤を開発 3. CI/CD 4. MLパイプラインをAWS上で実行する 5. 推論サーバーをAWS上に立てる

Slide 24

Slide 24 text

©2023 CyberAgent Inc. Distribution prohibited MLOpsの要件 24 広告クリック率をリアルタイム予測するML基盤を作成する

Slide 25

Slide 25 text

©2023 CyberAgent Inc. Distribution prohibited MLOpsの要件 25 データ kaggle avazu ctr prediction dataset

Slide 26

Slide 26 text

©2023 CyberAgent Inc. Distribution prohibited モデリングを行う 26 jupyter notebookで分析 $ poetry run jupyter lab

Slide 27

Slide 27 text

©2023 CyberAgent Inc. Distribution prohibited スクリプトで管理する 27 /aws-mlops-handson ├ Dockerfile - - - - - - - - - -MLパイプライン・推論サーバー用 Dockerfile ├ Makefile - - - - - - - - - - -ローカル実行コマンド ├ docker-compose.yaml - - -推論サーバー用 docker-compose.yaml ├ infra - - - - - - - - - - - - - MLシステムのインフラ用Terraform ├ ml - - - - - - - - - - - - - - -MLパイプラインの実装 ├ predictor - - - - - - - - - - 推論サーバーの実装 ├ pyproject.toml - - - - - - -poetry, pysen設定 └ tests - - - - - - - - - - - - -テストの実装 ファイル説明(全体)

Slide 28

Slide 28 text

©2023 CyberAgent Inc. Distribution prohibited MLパイプラインをローカル実行する 28 /aws-mlops-handson └ ml ├ aws - - - - - - - - - - AWSリソース操作 ├ dataset - - - - - - - -データ読み込み操作 ├ logger- - - - - - - - - ロギング ├ model - - - - - - - - - MLモデル ├ path - - - - - - - - - - ディレクトリ操作 ├ preprocessor- - - - - 前処理 └ main.py - - - - - - - - MLパイプライン ファイル説明(MLパイプライン)

Slide 29

Slide 29 text

©2023 CyberAgent Inc. Distribution prohibited 学習ワークフロー概略(MLOps基礎編再掲) 学習ワークフローを構成するstep ● Extract step ● Validate data step ● Preprocess step ● Train step ● Evaluate step ● Validate model step 黄色step: ハンズオンで実行するstep

Slide 30

Slide 30 text

©2023 CyberAgent Inc. Distribution prohibited MLパイプラインをローカル実行する 30 実行するMLパイプライン データ取得 前処理 学習 モデル保存 データ保存

Slide 31

Slide 31 text

©2023 CyberAgent Inc. Distribution prohibited MLパイプラインをローカル実行する 31 コマンド確認 $ make $ make build-ml MLパイプラインのimage build MLパイプラインの実行 $ make run-ml

Slide 32

Slide 32 text

©2023 CyberAgent Inc. Distribution prohibited MLパイプラインをローカル実行する 32 S3にモデルがアップロードされてることを確認

Slide 33

Slide 33 text

©2023 CyberAgent Inc. Distribution prohibited 推論サーバーをローカル実行する 33 推論サーバーを起動 $ make up $ make logs docker-composeのログを確認する

Slide 34

Slide 34 text

©2023 CyberAgent Inc. Distribution prohibited デプロイ方法(MLOps基礎編再掲) 1. モデルビルドパターン a. Dockerのビルド時にモデルを含めてしまう 2. モデルロードパターン a. 外部ストレージから実行時に取得

Slide 35

Slide 35 text

©2023 CyberAgent Inc. Distribution prohibited 推論サーバーをローカル実行する 35 推論サーバーにリクエストを投げる $ make predict $ make down 推論サーバーを停止する

Slide 36

Slide 36 text

©2023 CyberAgent Inc. Distribution prohibited ローカル開発を体験する 36 Optunaでハイパラチューニングを行うモデルを追加する /3-mlops-handson └ ml └ model - - - - - - - - - MLモデル ├ sgd_classifier_ctr_model.py └ sgd_classifier_ctr_optuna_model.py MLパイプライン・推論サーバーに追加

Slide 37

Slide 37 text

©2023 CyberAgent Inc. Distribution prohibited ローカル開発を体験する 37 ローカル開発の流れ 1. 実装 2. 静的解析チェック 3. テストの追加

Slide 38

Slide 38 text

©2023 CyberAgent Inc. Distribution prohibited ローカル開発を体験する 38 実装 /3-mlops-handson/ml/model/__init__.py from .base_model import BaseModel from .sgd_classifier_ctr_model import SGDClassifierCTRModel from .sgd_classifier_ctr_optuna_model import SGDClassifierCTROptunaModel __all__ = ["BaseModel", "SGDClassifierCTRModel", "SGDClassifierCTROptunaModel"] /3-mlops-handson/ml/model/models.py class MODELS(Enum): sgd_classifier_ctr_model = Model( …. ) sgd_classifier_ctr_optuna_model = Model( name="sgd_classifier_ctr_optuna_model", model=SGDClassifierCTROptunaModel, preprocessor=CTRModelPreprocessor, ) オレンジ線の実装を追加

Slide 39

Slide 39 text

©2023 CyberAgent Inc. Distribution prohibited ローカル開発を体験する 39 静的解析チェック $ make lint pysenによって以下のチェックが実行されます ・isort - - - -import文チェック ・black - - - -コードスタイル整形 ・flake8 - - - コード品質チェック ・mypy - - - - 静的型チェック $ make format エラーが出た場合は... isort・blackによるコード整形が自動で行われます

Slide 40

Slide 40 text

©2023 CyberAgent Inc. Distribution prohibited ローカル開発を体験する 40 テストの追加 $ make test FAILED tests/ml/model/test_models.py::test_all_models_are_tested - AssertionError: assert ['sgd_classifier_ctr_model'] == ['sgd_classif...optuna_model'] 追加したモデルのテストがないエラーがでます テストを実行

Slide 41

Slide 41 text

©2023 CyberAgent Inc. Distribution prohibited ローカル開発を体験する 41 テストの追加 params = { "sgd_classifier_ctr_model": ("sgd_classifier_ctr_model", SGDClassifierCTRModel, CTRModelPreprocessor), "sgd_classifier_ctr_optuna_model": ("sgd_classifier_ctr_optuna_model", SGDClassifierCTROptunaModel, CTRModelPreprocessor), } /3-mlops-handson/ml/tests/ml/model/test_models.py $ make test テストが通るか確認 オレンジ線の実装を追加

Slide 42

Slide 42 text

©2023 CyberAgent Inc. Distribution prohibited ローカル開発を体験する 42 追加したモデルの学習を実行する $ make build-ml $ vi .env $ make run-ml AWS_BUCKET=nagae-mlops-handson AWS_ACCOUNT_ID=012345678901 AWS_PROFILE=mlops-handson AWS_ALB_DNS= USER_NAME=nagae VERSION=2023-04-01 MODEL=sgd_classifier_ctr_optuna_model 追加したモデル名

Slide 43

Slide 43 text

©2023 CyberAgent Inc. Distribution prohibited ローカル開発を体験する 43 推論サーバーに複数モデルを乗せる model_candidates = ["sgd_classifier_ctr_model", "sgd_classifier_ctr_optuna_model"] model_preprocessor_list = [ get_model_preprocessor(bucket=BUCKET, model_name=model_name, version=VERSION) for model_name in model_candidates ] /3-mlops-handson/predictor/routers.py オレンジ線の実装を追加

Slide 44

Slide 44 text

©2023 CyberAgent Inc. Distribution prohibited ローカル開発を体験する 44 推論サーバーに複数モデルを乗せる $ make up 推論サーバーを起動 $ make predict {"prediction":0.18150064819518077,"model":"sgd_classifier_ctr_optuna_model"} 推論リクエスト 複数のモデルの予測値を返す →ABテストが可能

Slide 45

Slide 45 text

©2023 CyberAgent Inc. Distribution prohibited A/B基盤(MLOps基礎編再掲) 何かの施策の効果検証の際、A/Bテストが使われるがA/Bの基盤パターンも いくつか存在 CTR予測モデルAとBのA/Bテストをしたい時 ● トラフィックレベルの振り分け ● アプリケーションレベルの振り分け

Slide 46

Slide 46 text

©2023 CyberAgent Inc. Distribution prohibited 目次 46 1. 前準備 2. ローカルでML基盤を開発 3. CI/CD 4. MLパイプラインをAWS上で実行する 5. 推論サーバーをAWS上に立てる

Slide 47

Slide 47 text

©2023 CyberAgent Inc. Distribution prohibited CI/CD 47 静的解析・テストがない場合 バグの混入 可読性の低下 誰も触れないMLシステム リリース自動化がない場合 手作業によるリリース MLシステムの属人化

Slide 48

Slide 48 text

©2023 CyberAgent Inc. Distribution prohibited CI/CD 48 GitHub Actionsの活用 ・静的解析チェック ・テスト実行 ・image build/push コードの品質管理・リリースの自動化

Slide 49

Slide 49 text

©2023 CyberAgent Inc. Distribution prohibited コード品質管理の自動化 49 /aws-mlops-handson/.github/workflows/test-mlops-handson.yml name: Run tests and linters on: push: branches: - main jobs: tests: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Set up Python 3.9 uses: actions/setup-python@v2 with: python-version: 3.9 - name: Install dependencies run: | pip install --upgrade pip pip install poetry=="1.4.2" poetry install - name: Run pysen lint run: | poetry run pysen run lint - name: Run tests run: | poetry run pytest 実行環境の設定 pysen, pytestの実行

Slide 50

Slide 50 text

©2023 CyberAgent Inc. Distribution prohibited リリースの自動化 50 /aws-mlops-handson/.github/workflows/deploy-mlops-handson.yml name: Run creating docker image on: push: branches: - main jobs: build: runs-on: ubuntu-latest permissions: id-token: write contents: read steps: - uses: actions/checkout@v3 - uses: aws-actions/configure-aws-credentials@v2 with: role-to-assume: ${{ secrets.GTIHUB_ACTIONS_AWS_ROLE }} aws-region: ap-northeast-1 - name: Login to Amazon ECR id: login-ecr uses: aws-actions/amazon-ecr-login@v1 実行環境の設定 GitHub Action用のAWS Role名を GitHub RepositoryのSecret変数で管理

Slide 51

Slide 51 text

©2023 CyberAgent Inc. Distribution prohibited リリースの自動化 51 /aws-mlops-handson/.github/workflows/deploy-mlops-handson.yml - name: Build, tag, and push image to Amazon ECR for ml env: ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }} ECR_REPOSITORY: mlops-handson/ml-pipeline run: | IMAGE_TAG=$(git rev-parse --short "$GITHUB_SHA") docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG --target ml . docker tag $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG - name: Build, tag, and push image to Amazon ECR for predict-api env: ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }} ECR_REPOSITORY: mlops-handson/predict-api run: | IMAGE_TAG=$(git rev-parse --short "$GITHUB_SHA") docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG --target predictor ./ docker tag $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG image build/push

Slide 52

Slide 52 text

©2023 CyberAgent Inc. Distribution prohibited デモ 52 Pull Requestをマージして GitHub Actionが実行されるのを確認

Slide 53

Slide 53 text

©2023 CyberAgent Inc. Distribution prohibited 目次 53 1. 前準備 2. ローカルでML基盤を開発 3. CI/CD 4. MLパイプラインをAWS上で実行する 5. 推論サーバーをAWS上に立てる

Slide 54

Slide 54 text

©2023 CyberAgent Inc. Distribution prohibited 技術選定の前に... 54 ○ MLを本当に使うべきかを考える ○ ゴールはビジネス課題の解決であって、MLサービスを作ることではない ○ MLを導入した時のコストと解決できるコストを評価する ○ 小さく作り始める ○ いきなり完成系を目指すのではなく、小さく作り始める ■ デプロイは手動から ■ 簡単な線形モデルから ○ 人と向き合う ○ 守備範囲が広く1人ではできないからこそ、チームメンバー(Biz、SWE、DS)と 適切にコミュニケーションを取り、すり合わせる (MLOps基礎編再掲)最後に

Slide 55

Slide 55 text

©2023 CyberAgent Inc. Distribution prohibited 技術選定 55 ・チームにML/DSは1人 ・既存システムのサーバーはECSでホスティング ・既存システムのオフライン処理をECS Taskで実行してる ・既存システムのワークフローツールにStepFunctionsを使用してる 前提状況

Slide 56

Slide 56 text

©2023 CyberAgent Inc. Distribution prohibited 技術選定 56 ・チームにML/DSは1人 ・既存システムのサーバーはECSでホスティング ・既存システムのオフライン処理をECS Taskで実行してる ・ワークフローツールにStepFunctionsを既に使用してる 前提状況 → 他メンバーの協力が得られるように、既存システムに乗っかる → SageMakerよりチームナレッジがあるECSを優先する → 最初はシンプルに、コンテナを実行するだけの構成にする → チームで面倒をみるワークフローツールは1つにする

Slide 57

Slide 57 text

©2023 CyberAgent Inc. Distribution prohibited MLパイプライン構成 57

Slide 58

Slide 58 text

©2023 CyberAgent Inc. Distribution prohibited 運営が用意したネットワーク 58

Slide 59

Slide 59 text

©2023 CyberAgent Inc. Distribution prohibited ハンズオンで作成する要素 59

Slide 60

Slide 60 text

©2023 CyberAgent Inc. Distribution prohibited MLパイプライン作成手順 60 ・ECRレポジトリの作成 ・ECRにMLパイプラインのimage push ・ECS Task定義作成 ・ECS Task実行 ・StepFunctionsの作成 ・EventBridgeの設定

Slide 61

Slide 61 text

©2023 CyberAgent Inc. Distribution prohibited MLパイプライン作成手順 61 ・ECRレポジトリの作成 ・ECRにMLパイプラインのimage push ・ECS Task定義作成 ・ECS Task実行 ・StepFunctionsの作成 ・EventBridgeの設定

Slide 62

Slide 62 text

©2023 CyberAgent Inc. Distribution prohibited ECR 62 Elastic Container Registory Docker コンテナイメージを管理する マネージドサービス

Slide 63

Slide 63 text

©2023 CyberAgent Inc. Distribution prohibited ECRレポジトリの作成 63 ECRのページで「リポジトリ作成」をクリック {name}-mlops-handson/ml-pipelineで作成

Slide 64

Slide 64 text

©2023 CyberAgent Inc. Distribution prohibited ECRレポジトリの作成 64 自分のECRリポジトリがあることを確認

Slide 65

Slide 65 text

©2023 CyberAgent Inc. Distribution prohibited MLパイプライン作成手順 65 ・ECRレポジトリの作成 ・ECRにMLパイプラインのimage push ・ECS Task定義作成 ・ECS Task実行 ・StepFunctionsの作成 ・EventBridgeの設定

Slide 66

Slide 66 text

©2023 CyberAgent Inc. Distribution prohibited ECRにimageを保存 66 mlパイプラインのimageをECRにpush $ make build-ml $ make push-ml ECRにimageが保存されていることを確認

Slide 67

Slide 67 text

©2023 CyberAgent Inc. Distribution prohibited MLパイプライン作成手順 67 ・ECRレポジトリの作成 ・ECRにMLパイプラインのimage push ・ECS Task定義作成 ・ECS Task実行 ・StepFunctionsの作成 ・EventBridgeの設定

Slide 68

Slide 68 text

©2023 CyberAgent Inc. Distribution prohibited ECS 68 Elastic Container Service Docker コンテナを実行する マネージド型のコンテナ オーケストレーションサービス

Slide 69

Slide 69 text

©2023 CyberAgent Inc. Distribution prohibited MLパイプライン作成手順 69 ECS Clusterの作成 クラスター名 mlops-handson-ecs VPC mlops-handson

Slide 70

Slide 70 text

©2023 CyberAgent Inc. Distribution prohibited ECS Task定義を作成 70 ECR Task定義のページで「新しいタスク定義の作成」をクリック

Slide 71

Slide 71 text

©2023 CyberAgent Inc. Distribution prohibited ECS Task定義を作成 71 タスク定義ファミリー {name}-ml-pipeline コンテナ: 名前 ml-pipeline コンテナ: イメージURI 作成した自分のECRレポジトリのURI

Slide 72

Slide 72 text

©2023 CyberAgent Inc. Distribution prohibited ECS Task定義を作成 72 環境変数 - VERSION 2023-05-11 - MODEL sgd_classifier_ctr_model - AWS_BUCKET 作成した自分のS3バケット名

Slide 73

Slide 73 text

©2023 CyberAgent Inc. Distribution prohibited ECS Task定義を作成 73 アプリケーション環境 AWS Fargate タスクロール mlops-handson-ecs-task-role タスク実行ロール mlops-handson-ecs-task-execution-role

Slide 74

Slide 74 text

©2023 CyberAgent Inc. Distribution prohibited ECS Task定義を作成 74 ECS Task定義が作成できていることを確認

Slide 75

Slide 75 text

©2023 CyberAgent Inc. Distribution prohibited MLパイプライン作成手順 75 ・ECRレポジトリの作成 ・ECRにMLパイプラインのimage push ・ECS Task定義作成 ・ECS Task実行 ・StepFunctionsの作成 ・EventBridgeの設定

Slide 76

Slide 76 text

©2023 CyberAgent Inc. Distribution prohibited ECS Taskを実行 76 自分で作成した「mlops-handson-ecs」 クラスターをクリック

Slide 77

Slide 77 text

©2023 CyberAgent Inc. Distribution prohibited ECS Taskを実行 77 タスクページの「新しいタスクの実行」をクリック

Slide 78

Slide 78 text

©2023 CyberAgent Inc. Distribution prohibited ECS Taskを実行 78 タスク定義: ファミリー 作成した自分のECS Task定義 {name}-ml-pipeline

Slide 79

Slide 79 text

©2023 CyberAgent Inc. Distribution prohibited ECS Taskを実行 79 VPC mlops-handson サブネット mlops-handson-private-subnet-1a セキュリティグループ mlops-handson-ml-pipeline-sg パブリックIP オフに変更

Slide 80

Slide 80 text

©2023 CyberAgent Inc. Distribution prohibited ECS Taskを実行 80 作成したECS TaskのタスクIDをクリック

Slide 81

Slide 81 text

©2023 CyberAgent Inc. Distribution prohibited ECS Taskを実行 81 ECS Taskのログページで、学習ログが出力されていることを確認

Slide 82

Slide 82 text

©2023 CyberAgent Inc. Distribution prohibited MLパイプライン作成手順 82 ・ECRレポジトリの作成 ・ECRにMLパイプラインのimage push ・ECS Task定義作成 ・ECS Task実行 ・StepFunctionsの作成 ・EventBridgeの設定

Slide 83

Slide 83 text

©2023 CyberAgent Inc. Distribution prohibited StepFunctions 83 ワークフローを作成・実行できる マネージドサービス

Slide 84

Slide 84 text

©2023 CyberAgent Inc. Distribution prohibited StepFunctionsを作成 84 StepFunctionsのページで「ステートマシンの作成」をクリック

Slide 85

Slide 85 text

©2023 CyberAgent Inc. Distribution prohibited StepFunctionsを作成 85

Slide 86

Slide 86 text

©2023 CyberAgent Inc. Distribution prohibited StepFunctionsを作成 86

Slide 87

Slide 87 text

©2023 CyberAgent Inc. Distribution prohibited StepFunctionsを作成 87 { "LaunchType": "FARGATE", "Cluster": "arn:aws:ecs:ap-northeast-1:123456789101:cluster/mlops-handson-ecs", "TaskDefinition": "arn:aws:ecs:ap-northeast-1:123456789101:task-definition/nagae-ml-pipeline:2", "NetworkConfiguration": { "AwsvpcConfiguration": { "AssignPublicIp": "DISABLED", "SecurityGroups": [ "sg-0076849cc3bc59502" ], "Subnets": [ "subnet-0afd71e0a510d7b94" ] } } } APIパラメータ 作成した自分の ClusterのARNに変更 ECS Task定義のARNに変更 mlops-handson-ml-pipeline-sg セキュリティグループ mlops-handson-ml-pipeline-sg のID サブネット mlops-handson-private-subnet-1a のID

Slide 88

Slide 88 text

©2023 CyberAgent Inc. Distribution prohibited StepFunctionsを作成 88 タスク定義ページからARNを確認できる

Slide 89

Slide 89 text

©2023 CyberAgent Inc. Distribution prohibited StepFunctionsを作成 89 APIパラメータを変更

Slide 90

Slide 90 text

©2023 CyberAgent Inc. Distribution prohibited StepFunctionsを作成 90

Slide 91

Slide 91 text

©2023 CyberAgent Inc. Distribution prohibited StepFunctionsを作成 91 名前 {name}-mlops-pipeline 実行ロール mlops-handson-step-functions-role 設定したら画面下にある「ステートマシンの作成」をクリック

Slide 92

Slide 92 text

©2023 CyberAgent Inc. Distribution prohibited StepFunctionsを実行 92 作成したステートマシンページの「実行を開始」をクリック

Slide 93

Slide 93 text

©2023 CyberAgent Inc. Distribution prohibited StepFunctionsを実行 93 ECS Taskが実行できていることを確認

Slide 94

Slide 94 text

©2023 CyberAgent Inc. Distribution prohibited MLパイプライン作成手順 94 ・ECRレポジトリの作成 ・ECRにMLパイプラインのimage push ・ECS Task定義作成 ・ECS Task実行 ・StepFunctionsの作成 ・EventBridgeの設定

Slide 95

Slide 95 text

©2023 CyberAgent Inc. Distribution prohibited EventBridge 95 AWSリソースのイベント実行を行う マネージドサービス

Slide 96

Slide 96 text

©2023 CyberAgent Inc. Distribution prohibited EventBridgeを作成 96 作成したステートマシンページの アクション→「EventBridgeルールを作成」をクリック

Slide 97

Slide 97 text

©2023 CyberAgent Inc. Distribution prohibited EventBridgeを作成 97 名前 {name}-mlops-pipeline-schedule ルールタイプ スケジュール

Slide 98

Slide 98 text

©2023 CyberAgent Inc. Distribution prohibited EventBridgeを作成 98 頻度 定期的なスケジュール スケジュールの種類 cronベースのスケジュール cron式 */2 * * * ? * フレックスタイムウィンドウ オフ

Slide 99

Slide 99 text

©2023 CyberAgent Inc. Distribution prohibited EventBridgeを作成 99 ターゲットAPI AWS StepFunctions StartExecution ステートマシン 作成した自分のステートマシンを選択 {name}-ml-pipeline

Slide 100

Slide 100 text

©2023 CyberAgent Inc. Distribution prohibited EventBridgeを作成 100 実行ロール mlops-handson-event-bridge-role 他の設定は変更せず「スケジュールを作成」をクリック

Slide 101

Slide 101 text

©2023 CyberAgent Inc. Distribution prohibited スケジュール実行を確認 101 StepFunctionsが定期実行されていることを確認します

Slide 102

Slide 102 text

©2023 CyberAgent Inc. Distribution prohibited 目次 102 1. 前準備 2. ローカルでML基盤を開発 3. CI/CD 4. MLパイプラインをAWS上で実行する 5. 推論サーバーをAWS上に立てる

Slide 103

Slide 103 text

©2023 CyberAgent Inc. Distribution prohibited 推論サーバー構成 103

Slide 104

Slide 104 text

©2023 CyberAgent Inc. Distribution prohibited 運営が用意したネットワーク 104

Slide 105

Slide 105 text

©2023 CyberAgent Inc. Distribution prohibited ハンズオンで作成する要素 105

Slide 106

Slide 106 text

©2023 CyberAgent Inc. Distribution prohibited 推論サーバー作成手順 106 ・ECRレポジトリの作成 ・ECRに推論サーバーのimage push ・ECS Task定義作成 ・Load Balancerの作成 ・ECS Service作成

Slide 107

Slide 107 text

©2023 CyberAgent Inc. Distribution prohibited 推論サーバー作成手順 107 ・ECRレポジトリの作成 ・ECRに推論サーバーのimage push ・ECS Task定義作成 ・Load Balancerの作成 ・ECS Service作成

Slide 108

Slide 108 text

©2023 CyberAgent Inc. Distribution prohibited ECRレポジトリの作成 108 ECRのページで「リポジトリ作成」をクリック {name}-mlops-handson/predict-apiで作成

Slide 109

Slide 109 text

©2023 CyberAgent Inc. Distribution prohibited 推論サーバー作成手順 109 ・ECRレポジトリの作成 ・ECRに推論サーバーのimage push ・ECS Task定義作成 ・Load Balancerの作成 ・ECS Service作成

Slide 110

Slide 110 text

©2023 CyberAgent Inc. Distribution prohibited ECRにimageを保存 110 推論サーバーのimageをECRにpush $ make build-predictor $ make push-predictor ECRにimageが保存されていることを確認

Slide 111

Slide 111 text

©2023 CyberAgent Inc. Distribution prohibited 推論サーバー作成手順 111 ・ECRレポジトリの作成 ・ECRに推論サーバーのimage push ・ECS Task定義作成 ・Load Balancerの作成 ・ECS Service作成

Slide 112

Slide 112 text

©2023 CyberAgent Inc. Distribution prohibited ECS Task定義を作成 112 ECR Task定義のページで「新しいタスク定義の作成」をクリック

Slide 113

Slide 113 text

©2023 CyberAgent Inc. Distribution prohibited ECS Task定義を作成 113 タスク定義ファミリー {name}-predict-api コンテナ: 名前 prdict-api コンテナ: イメージURI 作成した自分のECRレポジトリのURI ポートマッピング 8080

Slide 114

Slide 114 text

©2023 CyberAgent Inc. Distribution prohibited ECS Task定義を作成 114 環境変数 - VERSION 2023-05-11 - AWS_BUCKET 作成した自分のS3バケット名

Slide 115

Slide 115 text

©2023 CyberAgent Inc. Distribution prohibited ECS Task定義を作成 115 アプリケーション環境 AWS Fargate タスクロール mlops-handson-ecs-task-role タスク実行ロール mlops-handson-ece-task-execution-role

Slide 116

Slide 116 text

©2023 CyberAgent Inc. Distribution prohibited ECS Task定義を作成 116 ECS Task定義が作成できていることを確認

Slide 117

Slide 117 text

©2023 CyberAgent Inc. Distribution prohibited 推論サーバー作成手順 117 ・ECRレポジトリの作成 ・ECRに推論サーバーのimage push ・ECS Task定義作成 ・Load Balancerの作成 ・ECS Service作成

Slide 118

Slide 118 text

©2023 CyberAgent Inc. Distribution prohibited ALB 118 Application Load Balancer アプリケーションレイヤーで負荷分散を 行うマネージドサービス

Slide 119

Slide 119 text

©2023 CyberAgent Inc. Distribution prohibited Target Groupの作成 119 EC2/ターゲットグループの「Create target group」をクリック

Slide 120

Slide 120 text

©2023 CyberAgent Inc. Distribution prohibited Target Groupの作成 120 Target type IP addresses Target group name {name}-mlops-handson-tg Protocol Port HTTP : 8080

Slide 121

Slide 121 text

©2023 CyberAgent Inc. Distribution prohibited Target Groupの作成 121 VPC mlops-handson Health check path /healthcheck 他の設定は変更せず 「Create Target」をクリック

Slide 122

Slide 122 text

©2023 CyberAgent Inc. Distribution prohibited Load Balancerの作成 122 EC2/ロードバランサーの「Create load balancer」をクリック

Slide 123

Slide 123 text

©2023 CyberAgent Inc. Distribution prohibited Load Balancerの作成 123 Load balancer types Application Load Balcanerを選択

Slide 124

Slide 124 text

©2023 CyberAgent Inc. Distribution prohibited Load Balancerの作成 124 Load balancer name {name}-mlops-hanson-alb

Slide 125

Slide 125 text

©2023 CyberAgent Inc. Distribution prohibited Load Balancerの作成 125 VPC mlops-handson Mappings ap-northeast-1a → mlops-handson-public-subnet-1a ap-northeast-1c → mlops-handson-public-subnet-1c

Slide 126

Slide 126 text

©2023 CyberAgent Inc. Distribution prohibited Load Balancerの作成 126 Security Group mlops-handson-alb-sg Listeners and routing Protocol: HTTP Port: 8080 Foward to: 作成した自分のtaget group {name}-mlops-handson-tg 他の設定は変更せず 「Create Load Balancer」 をクリック

Slide 127

Slide 127 text

©2023 CyberAgent Inc. Distribution prohibited 推論サーバー作成手順 127 ・ECRレポジトリの作成 ・ECRに推論サーバーのimage push ・ECS Task定義作成 ・Load Balancerの作成 ・ECS Service作成

Slide 128

Slide 128 text

©2023 CyberAgent Inc. Distribution prohibited ECS Serviceの作成 128 mlops-handson-ecsクラスターのサービビスページの「作成」をクリック

Slide 129

Slide 129 text

©2023 CyberAgent Inc. Distribution prohibited ECS Serviceの作成 129 アプリケーションタイプ サービス ファミリー 作成した自分のECS Task定義 {name}-predict-api サービス名 {name}-predict-api-service 必要タスク 2

Slide 130

Slide 130 text

©2023 CyberAgent Inc. Distribution prohibited ECS Serviceの作成 130 VPC mlops-handson サブネット mlops-handson-private-subnet-1a mlops-handson-private-subnet-1c セキュリティグループ mlops-handson-predict-api-sg パブリックIP オフ

Slide 131

Slide 131 text

©2023 CyberAgent Inc. Distribution prohibited ECS Serviceの作成 131 ロードバランサーの種類 Application Load Balancer ロードバランサー 作成した自分のALB {name}-mlops-handson-alb ターゲットグループ 作成した自分のTarget Group {name}-mlops-handson-tg

Slide 132

Slide 132 text

©2023 CyberAgent Inc. Distribution prohibited ECS Serviceの作成 132 サービスのオートスケーリングを使用 ONに変更 タスクの最小数 2 タスクの最大数 6 ポリシー名 {name}-auto-scaling-policy ECSサービスメトリクス ALBRequestCountPerTarget 他の設定は変更せず「作成」をクリック

Slide 133

Slide 133 text

©2023 CyberAgent Inc. Distribution prohibited ECS Serviceの作成 133 推論サーバーのECS Serviceを作成できているを確認

Slide 134

Slide 134 text

©2023 CyberAgent Inc. Distribution prohibited 推論リクエストを送る 134 推論サーバーのECS Service→ネットワークタブのDNS名をコピー

Slide 135

Slide 135 text

©2023 CyberAgent Inc. Distribution prohibited 推論リクエストを送る 135 $ vi .env AWS_ALB_DNS=nagae-mlops-handson-alb-354533381.ap-northeast-1.elb.amazonaws.com ローカルからECS Serviceにリクエストを送る ALBのDNS名 $ make predict-ecs

Slide 136

Slide 136 text

©2023 CyberAgent Inc. Distribution prohibited オートスケーリングを確認する 136 $ make check-scale heyでリクエストを送る (注意) リクエストを送りすぎるとIP バンされる可能性があります

Slide 137

Slide 137 text

©2023 CyberAgent Inc. Distribution prohibited 推論リクエストを送る 137 オートスケーリングを確認する タスク数が増加していることを確認

Slide 138

Slide 138 text

©2023 CyberAgent Inc. Distribution prohibited 138 作成したMLシステム terraform: aws-mlops-handson/infra

Slide 139

Slide 139 text

©2023 CyberAgent Inc. Distribution prohibited 139 MLOpsとしてまだできることは? 推論サーバーの自動更新 複数モデルの学習 モデル監視 データ監視 インフラ監視 実験管理 A/Bテスト基盤 インフラのコード管理 レイテンシーの改善 閉鎖網での推論APIの提供 ドキュメント作成 …

Slide 140

Slide 140 text

©2023 CyberAgent Inc. Distribution prohibited MLOps実践編は以上です 作成したリソースを削除しましょう 140