Slide 1

Slide 1 text

©2024 CyberAgent Inc. Distribution prohibited 極AI 素材生成 吉野哲平 MLOps応用編

Slide 2

Slide 2 text

©2024 CyberAgent Inc. Distribution prohibited 自己紹介 極AI素材生成 吉野哲平 業務 NLP 画像生成 MLOps 2 所属 極AI 素材生成 NLPゼミ

Slide 3

Slide 3 text

©2024 CyberAgent Inc. Distribution prohibited 3 本研修で皆さんに作成してもらう構成

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

©2024 CyberAgent Inc. Distribution prohibited 本講義のゴール (本音) Amazon Elastic Container Service (ECS) はフルマネージドのコンテナオー ケストレーションサービスであり、コン テナ化されたアプリケーションをより効 率的にデプロイ、管理、スケールするの に役立ちます。AWS 環境と深く統合さ れ、Amazon ECS Anywhere を使用した 高度なセキュリティ機能を備えた、クラ ウドとオンプレミスでコンテナワーク ロードを実行するための使いやすいソ リューションを提供します。 ECS ECS これDockerコンテナ動かすのに 使ったやつだ! ※AWS公式の ECSのページを引用 5

Slide 6

Slide 6 text

©2024 CyberAgent Inc. Distribution prohibited 本日皆さんが触れる技術スタック 6 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 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

©2024 CyberAgent Inc. Distribution prohibited ハンズオンレポジトリ 9 $ git clone https://github.com/Tyaba/aws-mlops-handson.git ハンズオンレポジトリをクローン

Slide 10

Slide 10 text

©2024 CyberAgent Inc. Distribution prohibited Python環境構築 10 pyenvでPython 3.11.7の環境を用意する 依存関係のインストール $ pyenv install 3.11.7 $ pyenv local 3.11.7 $ poetry env use 3.11.7 $ poetry install --no-root

Slide 11

Slide 11 text

©2024 CyberAgent Inc. Distribution prohibited 環境変数の設定 11 direnvの設定 $ cp .env.example .env $ vi .env USER_NAME=****** AWS_ACCOUNT_ID=****** AWS_ALB_DNS= AWS_BUCKET=${USER_NAME}-mlops-handson AWS_REGION=ap-northeast-1 AWS_PROFILE=ai24-mlops VERSION=2024-05-14 MODEL=sgd_classifier_ctr_model $ direnv allow . USER_NAME your-name フルネームハイフン区切り(ex. yoshino-teppei) AWS_ACCOUNT_ID 123412341234 アカウント IDをコピーして貼り付け

Slide 12

Slide 12 text

©2024 CyberAgent Inc. Distribution prohibited 環境変数の設定 12 direnvの設定 $ echo $AWS_BUCKET yoshino-teppei-mlops-handson $ eval "$(direnv hook zsh)" >> ~/.zshrc 環境変数が設定できているか確認 設定できていない場合 $ eval "$(direnv hook bash)" >> ~/.bashrc bashを使っている場合 zshを使っている場合

Slide 13

Slide 13 text

©2024 CyberAgent Inc. Distribution prohibited terraformの準備 ネットワーク・権限作成 $ cd infra/training $ terraform init 作成リソースの事前確認 .terraformと.terraform.lock.hclができる $ terraform plan 意図していないリソースを生成していないか確認 リソースの作成 $ terraform apply terraformのinstall $ brew install terraform 13

Slide 14

Slide 14 text

©2024 CyberAgent Inc. Distribution prohibited 使用するデータ 14 Avazu Dataset

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

©2024 CyberAgent Inc. Distribution prohibited 学習データの準備 18 $ unzip data/train_data.zip 学習データをunzipしてtrain_data.csvを取り出す

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

©2024 CyberAgent Inc. Distribution prohibited モデリングを行う 23 jupyter notebookで分析 $ cd aws-mlops-handson $ poetry run jupyter notebook jupyter notebookに限らず、 vscode等 ipynbを開ける好きなeditorで aws-mlops-handsonを開いても良いです

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

©2024 CyberAgent Inc. Distribution prohibited MLパイプラインをローカル実行する 25 コマンド確認 $ make help $ make build-ml MLパイプラインのimage build MLパイプラインの実行 $ make run-ml ※Docker Desktopを起動してから 5分程かかります

Slide 26

Slide 26 text

©2024 CyberAgent Inc. Distribution prohibited Dockerfileでx86_64を指定してしまっているのでローカルで走らない。下記の 通り一時的に修正する FROM --platform=linux/x86_64 python:3.11.7-slim as ml ↓ FROM --platform=linux/arm64 python:3.11.7-slim as ml 以上を編集したあと、 $ make build-ml $ make run-ml してgrid searchが走ればOKです (macの方向け)make run-mlでこける問題

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

©2024 CyberAgent Inc. Distribution prohibited デプロイ方法 1. モデルビルドパターン a. Dockerのビルド時にモデルを含めてしまう 2. モデルロードパターン a. 外部ストレージから実行時に取得 $ make logs predict-api | 2024-05-08 07:16:44 ml.aws.controller INFO: Start downloading model file: sgd_classifier_ctr_model/2024-05-14/model, file_path: files/sgd_classifier_ctr_model/2024-05-14/model predict-api | 2024-05-08 07:16:45 ml.aws.controller INFO: Completely downloaded model file: sgd_classifier_ctr_model/2024-05-14/model, file_path: files/sgd_classifier_ctr_model/2024-05-14/model predict-api | 2024-05-08 07:16:45 ml.model.sgd_classifier_ctr_model INFO: Load sgd_classifier_ctr_model as files/sgd_classifier_ctr_model/2024-05-14/model. 29

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

©2024 CyberAgent Inc. Distribution prohibited ローカル開発を体験する 33 実装 /aws-mlops-handson/ml/model/models.py from ml.model import BaseModel, SGDClassifierCTRModel, SGDClassifierCTROptunaModel 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 34

Slide 34 text

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

Slide 35

Slide 35 text

©2024 CyberAgent Inc. Distribution prohibited ローカル開発を体験する 35 テストの追加 $ 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 36

Slide 36 text

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

Slide 37

Slide 37 text

©2024 CyberAgent Inc. Distribution prohibited ローカル開発を体験する 37 追加したモデルの学習を実行する $ make build-ml $ vi .env $ make run-ml AWS_BUCKET=yoshino-teppei-mlops-handson AWS_ACCOUNT_ID=123412341234 AWS_PROFILE=ai24-mlops AWS_ALB_DNS= USER_NAME=yoshino-teppei VERSION=2024-04-01 MODEL=sgd_classifier_ctr_optuna_model 追加したモデル名 optunaによって学習率αが調整される様子が見られます $ echo $MODEL > sgd_classifier_ctr_optuna_model

Slide 38

Slide 38 text

©2024 CyberAgent Inc. Distribution prohibited ローカル開発を体験する 38 推論サーバーに複数モデルを乗せる 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 ] /aws-mlops-handson/predictor/routers.pyオレンジ線の実装を追加

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

©2024 CyberAgent Inc. Distribution prohibited 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.11 uses: actions/setup-python@v2 with: python-version: 3.11 - 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 コード品質管理の自動化 44 /aws-mlops-handson/.github/workflows/test-mlops-handson.yaml 実行環境の設定 pysen, pytestの実行

Slide 45

Slide 45 text

©2024 CyberAgent Inc. Distribution prohibited リリースの自動化 45 /aws-mlops-handson/.github/workflows/deploy-mlops-handson.yaml 実行環境の設定 image build/push name: deploy-mlops-handson on: push: branches: [main] paths: ['3-mlops-handson/**'] jobs: build: runs-on: ubuntu-latest permissions: id-token: write contents: read defaults: run: working-directory: ./3-mlops-handson steps: - uses: actions/checkout@v3 - uses: aws-actions/configure-aws-credentials@v2 with: role-to-assume: arn:aws:iam::123412341234:role/iam_role_for_github_actions aws-region: ap-northeast-1 - name: Login to Amazon ECR id: login-ecr uses: aws-actions/amazon-ecr-login@v1 - name: Build, tag, and push image to Amazon ECR for ml-pipeline 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 $ECR_REGISTRY/$ECR_REPOSITORY:latest docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG && docker push $ECR_REGISTRY/$ECR_REPOSITORY:latest - 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 $ECR_REGISTRY/$ECR_REPOSITORY:latest docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG && docker push $ECR_REGISTRY/$ECR_REPOSITORY:latest

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

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

Slide 48

Slide 48 text

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

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

©2024 CyberAgent Inc. Distribution prohibited MLパイプライン構成 50

Slide 51

Slide 51 text

©2024 CyberAgent Inc. Distribution prohibited terraformで用意したネットワーク 51

Slide 52

Slide 52 text

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

Slide 53

Slide 53 text

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

Slide 54

Slide 54 text

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

Slide 55

Slide 55 text

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

Slide 56

Slide 56 text

©2024 CyberAgent Inc. Distribution prohibited ECRレポジトリの作成 56 ECRのプライベートレジストリ ページで「リポジトリ作成」をクリック {name}-mlops-handson/ml-pipelineと名付 けてリポジトリ作成 ※{name}は.envのUSER_NAMEと統一してください。 ex.) yoshino-teppei

Slide 57

Slide 57 text

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

Slide 58

Slide 58 text

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

Slide 59

Slide 59 text

©2024 CyberAgent Inc. Distribution prohibited mac利用者で一時的にDockerfileを書き換えた場合は、 ECSで動くようにDockerfileのplatform指定を元に戻す FROM --platform=linux/arm64 python:3.11.7-slim as ml ↓ FROM --platform=linux/x86_64 python:3.11.7-slim as ml の前に・・・ ECRにimageを保存

Slide 60

Slide 60 text

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

Slide 61

Slide 61 text

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

Slide 62

Slide 62 text

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

Slide 63

Slide 63 text

©2024 CyberAgent Inc. Distribution prohibited MLパイプライン作成手順 ECS Clusterの作成 63

Slide 64

Slide 64 text

©2024 CyberAgent Inc. Distribution prohibited MLパイプライン作成手順 64 ECS Clusterの作成 クラスター名 {name}-mlops-handson-ecs

Slide 65

Slide 65 text

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

Slide 66

Slide 66 text

©2024 CyberAgent Inc. Distribution prohibited ECS Task定義を作成 66 ECS Task定義のページで「新しいタスク定義の作成」をクリック タスク定義ファミリー {name}-ml-pipeline

Slide 67

Slide 67 text

©2024 CyberAgent Inc. Distribution prohibited ECS Task定義を作成 タスクロール {name}-mlops-handson-ecs-ta sk-role タスク実行ロール {name}-mlops-handson-ecs-ta sk-execution-role 67

Slide 68

Slide 68 text

©2024 CyberAgent Inc. Distribution prohibited ECS Task定義を作成 名前 ml-pipeline イメージURI 作成した自分のECRレポジトリのURI

Slide 69

Slide 69 text

©2024 CyberAgent Inc. Distribution prohibited ECS Task定義を作成 69 環境変数 - VERSION 2024-05-14 - MODEL sgd_classifier_ctr_model - AWS_BUCKET {name}-mlops-handson

Slide 70

Slide 70 text

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

Slide 71

Slide 71 text

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

Slide 72

Slide 72 text

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

Slide 73

Slide 73 text

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

Slide 74

Slide 74 text

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

Slide 75

Slide 75 text

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

Slide 76

Slide 76 text

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

Slide 77

Slide 77 text

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

Slide 78

Slide 78 text

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

Slide 79

Slide 79 text

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

Slide 80

Slide 80 text

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

Slide 81

Slide 81 text

©2024 CyberAgent Inc. Distribution prohibited StepFunctionsを作成 81

Slide 82

Slide 82 text

©2024 CyberAgent Inc. Distribution prohibited StepFunctionsを作成 ドラッグ&ドロップ 82

Slide 83

Slide 83 text

©2024 CyberAgent Inc. Distribution prohibited StepFunctionsを作成 83 名前 {name}-mlops-pipeline 実行ロール {name}-mlops-handson-step- functions-role

Slide 84

Slide 84 text

©2024 CyberAgent Inc. Distribution prohibited StepFunctionsを作成 APIパラメータをdefaultから 編集していく(次ページ参照) 84

Slide 85

Slide 85 text

©2024 CyberAgent Inc. Distribution prohibited StepFunctionsを作成 85 { "LaunchType": "FARGATE", "Cluster": "arn:aws:ecs:ap-northeast-1:123412341234:cluster/yoshino-teppei-mlops-handson-ecs", "TaskDefinition": "arn:aws:ecs:ap-northeast-1:123412341234:task-definition/yoshino-ml-pipeline:5", "NetworkConfiguration": { "AwsvpcConfiguration": { "AssignPublicIp": "DISABLED", "SecurityGroups": [ "sg-0047823863c206f2f" ], "Subnets": [ "subnet-05ba3c551f4ebc52f" ] } } } APIパラメータ 作成した自分の ClusterのARNに変更 ECS Task定義のARNに変更 セキュリティグループ {name}-mlops-handson-ml-pipeline-sgのID サブネット mlops-handson-private-subnet-1aのID (Amazon ECS > クラスター > {name}-mlops-handson-ecs) (Amazon ECS > タスク定義 > {name}-ml-pipeline) (VPC > セキュリティグループ) (VPC > サブネット)

Slide 86

Slide 86 text

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

Slide 87

Slide 87 text

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

Slide 88

Slide 88 text

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

Slide 89

Slide 89 text

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

Slide 90

Slide 90 text

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

Slide 91

Slide 91 text

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

Slide 92

Slide 92 text

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

Slide 93

Slide 93 text

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

Slide 94

Slide 94 text

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

Slide 95

Slide 95 text

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

Slide 96

Slide 96 text

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

Slide 97

Slide 97 text

©2024 CyberAgent Inc. Distribution prohibited 推論サーバー構成 97

Slide 98

Slide 98 text

©2024 CyberAgent Inc. Distribution prohibited terraformが用意したネットワーク 98

Slide 99

Slide 99 text

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

Slide 100

Slide 100 text

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

Slide 101

Slide 101 text

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

Slide 102

Slide 102 text

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

Slide 103

Slide 103 text

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

Slide 104

Slide 104 text

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

Slide 105

Slide 105 text

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

Slide 106

Slide 106 text

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

Slide 107

Slide 107 text

©2024 CyberAgent Inc. Distribution prohibited ECS Task定義を作成 107 ECS Task定義のページで「新しいタスク定義の作成」をクリック タスク定義ファミリー {name}-predict-api

Slide 108

Slide 108 text

©2024 CyberAgent Inc. Distribution prohibited ECS Task定義を作成 タスクロール {name}-mlops-handson-ecs-ta sk-role タスク実行ロール {name}-mlops-handson-ecs-ta sk-execution-role 108

Slide 109

Slide 109 text

©2024 CyberAgent Inc. Distribution prohibited ECS Task定義を作成 名前 predict-api イメージURI 作成した自分のECRレポジトリのURI

Slide 110

Slide 110 text

©2024 CyberAgent Inc. Distribution prohibited ECS Task定義を作成 コンテナポート 8080 ポート名 predict-api-8080-tcp 110

Slide 111

Slide 111 text

©2024 CyberAgent Inc. Distribution prohibited ECS Task定義を作成 111 環境変数 - VERSION 2024-05-14 - AWS_BUCKET {name}-mlops-handson

Slide 112

Slide 112 text

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

Slide 113

Slide 113 text

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

Slide 114

Slide 114 text

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

Slide 115

Slide 115 text

©2024 CyberAgent Inc. Distribution prohibited ターゲットグループの作成 115 EC2/ターゲットグループの「ターゲットグループの作成」をクリック

Slide 116

Slide 116 text

©2024 CyberAgent Inc. Distribution prohibited ターゲットグループの作成 116 ターゲットタイプの選択 IP addresses ターゲットグループ名 {name}-mlops-handson-tg プロトコル:ポート HTTP : 8080

Slide 117

Slide 117 text

©2024 CyberAgent Inc. Distribution prohibited ターゲットグループの作成 117 VPC {name}-mlops-handson ヘルスチェックパス /healthcheck 他の設定は変更せず 「次へ」「ターゲットグループの作成」をクリック

Slide 118

Slide 118 text

©2024 CyberAgent Inc. Distribution prohibited ロードバランサーの作成 118 EC2/ロードバランサーの「ロードバランサーの作成」をクリック

Slide 119

Slide 119 text

©2024 CyberAgent Inc. Distribution prohibited 119 ロードバランサータイプ Application Load Balancerを作成 ロードバランサーの作成

Slide 120

Slide 120 text

©2024 CyberAgent Inc. Distribution prohibited 120 Load balancer name {name}-mlops-hanson-alb ロードバランサーの作成

Slide 121

Slide 121 text

©2024 CyberAgent Inc. Distribution prohibited Load Balancerの作成 121 VPC {name}-mlops-handson ネットワークマッピング ap-northeast-1a → mlops-handson-public-subnet-1a ap-northeast-1c → mlops-handson-public-subnet-1c ※右記の警告が出ている人はprivateサブ ネットを選んでいる。publicに変更する

Slide 122

Slide 122 text

©2024 CyberAgent Inc. Distribution prohibited Load Balancerの作成 122 セキュリティグループ {name}-mlops-handson-alb-sg リスナーとルーティング プロトコル: HTTP ポート: 8080 デフォルトアクション: 作成した自分のtaget group {name}-mlops-handson-tg 他の設定は変更せず 「ロードバランサーの作成」 をクリック

Slide 123

Slide 123 text

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

Slide 124

Slide 124 text

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

Slide 125

Slide 125 text

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

Slide 126

Slide 126 text

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

Slide 127

Slide 127 text

©2024 CyberAgent Inc. Distribution prohibited ECS Serviceの作成 127 ロードバランサーの種類 Application Load Balancer ロードバランサー 作成した自分のALB {name}-mlops-handson-alb

Slide 128

Slide 128 text

©2024 CyberAgent Inc. Distribution prohibited ECS Serviceの作成 リスナー 既存のリスナーを使用 > 8080:HTTP ターゲットグループ 既存のターゲットグループを使用 >{name}-mlops-handson-tg 128

Slide 129

Slide 129 text

©2024 CyberAgent Inc. Distribution prohibited ECS Serviceの作成 129 サービスの自動スケーリングを使用 ONに変更 タスクの最小数 2 タスクの最大数 6 ポリシー名 {name}-auto-scaling-policy ECSサービスメトリクス ALBRequestCountPerTarget ターゲット値 50 スケールアウトクールダウン期間 30 スケールインクールダウン期間 30 「作成」をクリック

Slide 130

Slide 130 text

©2024 CyberAgent Inc. Distribution prohibited ECS Serviceの作成 130 数分後、推論サーバーのECS Serviceを作成できていることを確認

Slide 131

Slide 131 text

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

Slide 132

Slide 132 text

©2024 CyberAgent Inc. Distribution prohibited 推論リクエストを送る 132 $ vi .env USER_NAME=yoshino-teppei AWS_ACCOUNT_ID=123412341234 AWS_ALB_DNS=yoshino-teppei-mlops-handson-alb-1312358109.ap-northeast-1.elb.amazonaws.com AWS_BUCKET=${USER_NAME}-mlops-handson AWS_REGION=ap-northeast-1 AWS_PROFILE=ai24-mlops VERSION=2024-05-14 MODEL=sgd_classifier_ctr_optuna_model ローカルからECS Serviceにリクエストを送る ALBのDNS名 $ make predict-ecs

Slide 133

Slide 133 text

©2024 CyberAgent Inc. Distribution prohibited オートスケーリングを確認する 133 $ cd aws-mlops-handson/bin heyでリクエストを送る $ sh test-scale.sh http://$AWS_ALB_DNS:8080/healthcheck hey: https://github.com/rakyll/hey

Slide 134

Slide 134 text

©2024 CyberAgent Inc. Distribution prohibited 推論リクエストを送る 134 オートスケーリングを確認する 少し待ってタスク数が増加していることを確認 (2 -> 6)

Slide 135

Slide 135 text

©2024 CyberAgent Inc. Distribution prohibited 135 作成したMLシステム

Slide 136

Slide 136 text

©2024 CyberAgent Inc. Distribution prohibited MLOps応用編は以上です 作成したリソースを削除しましょう 136

Slide 137

Slide 137 text

©2024 CyberAgent Inc. Distribution prohibited ● S3 ● ECR ● ECS (cluster) ● step functions ● event bridge (schedule) ● ALB ● EC2 target group ● terraformリソース 削除するもの一覧 $ cd infra/training $ terraform destroy 137 MLOps応用編は以上です おつかれさまでした