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

CyberAgent AI事業本部MLOps研修応用編

CyberAgent AI事業本部MLOps研修応用編

CybagerAgent AI事業本部 2023年度新卒研修 MLOps 応用編で使用したスライドです。
ハンズオンで使用したGitHub Repository: https://github.com/nsakki55/aws-mlops-handson

Satsuki Nagae

May 24, 2023
Tweet

More Decks by Satsuki Nagae

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  7. ©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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  11. ©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

    View Slide

  12. ©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実行変数
    (変更しない)

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  27. ©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 - - - - - - - - - - - - -テストの実装
    ファイル説明(全体)

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  36. ©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パイプライン・推論サーバーに追加

    View Slide

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

    View Slide

  38. ©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,
    )
    オレンジ線の実装を追加

    View Slide

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

    View Slide

  40. ©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']
    追加したモデルのテストがないエラーがでます
    テストを実行

    View Slide

  41. ©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
    テストが通るか確認
    オレンジ線の実装を追加

    View Slide

  42. ©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 追加したモデル名

    View Slide

  43. ©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 オレンジ線の実装を追加

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  49. ©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の実行

    View Slide

  50. ©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変数で管理

    View Slide

  51. ©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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  87. ©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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  125. ©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

    View Slide

  126. ©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」
    をクリック

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  130. ©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
    オフ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  135. ©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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide