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

SageMakerが対応していないアルゴリズムの学習をECRで行ってノーコードAIプラットフォームを作った|株式会社TechSword

 SageMakerが対応していないアルゴリズムの学習をECRで行ってノーコードAIプラットフォームを作った|株式会社TechSword

2022年3月18日開催「AWS Startup Tech Meetup Online #11」の登壇資料です。
https://aws-startup-community.connpass.com/event/237573/

tsmiyamoto

March 08, 2022
Tweet

More Decks by tsmiyamoto

Other Decks in Programming

Transcript

  1. @i7i5 自己紹介 宮本 大輝 みやもと たいき ▪ 株式会社TechSword 取締役CTO ▪

    岡山大学大学院自然科学研究科M1 休学中 ▪ 楕円曲線暗号に関する研究 ▪ ssh-keygen –t ed25519のやつ ▪ 好きなAWSサービス ▪ Amplify ▪ IoT Greengrass ▪ SageMaker
  2. @i7i5 解決する課題 AI人材の供給不足 出典: 経済産業省『IT人材需給に関する調査』 AI人材需給ギャップの見通し 101.8 105.9 111.0 113.3

    +3.4万人 +4.4万人 +8.8万人 +12.4万人 95.0 100.0 105.0 110.0 115.0 120.0 125.0 130.0 2018年 2020年 2025年 2030年 人数 [万人] 供給 需要 0 AI外注コストの相場 AI開発のコストの高さ 内容 費用相場 コンサルティング 40-200 万円 AI化可能性チェック 40-100 万円 プロトタイプ作成 100-数百 万円 AIモデル開発 月額 80-250 万円×人月 システム開発 月額 60-200 万円×人月
  3. @i7i5 SageMaker ▪組み込みアルゴリズム ▪ ResNet-50 ▪ VGG-16 ▪問題点 ▪ モデルの形式がMXNet(使い慣れない)

    ▪ もっと層を深くして精度を上げたい(深くすればするほど良いわけではないが)
  4. @i7i5 ほかにも… ▪要件 ▪ 事前にクラウド側でONNX変換しておきたい ▪ エッジデプロイ後にTensorRT変換するため ▪ Notebookではなく、APIベースで実行したい ▪

    ユーザーが少ない間は利用料に応じた従量課金がよい ▪ インスタンスをずっと保持しておくのはコストに API
  5. @i7i5 サービス Elastic Container Registry (ECR) SageMaker Training Job フルマネージド

    Docker コンテナレジストリ 独自のカスタムアルゴリズムやAWS Marketplaceの アルゴリズムを使ったトレーニング
  6. @i7i5 コンテナの作成 ▪Dockerfile ▪ ENTRYPOINTに 学習開始コマンドを記述 FROM nvidia/cuda:11.3.1-cudnn8-devel RUN apt

    update && apt install -y … COPY darknet/ /opt/darknet/ WORKDIR /opt/darknet RUN sed -i ¥ -e 's/GPU=./GPU=1/'¥ -e 's/CUDNN=./CUDNN=1/' ¥ -e 's/CUDNN_HALF=./CUDNN_HAL=1/' ¥ -e 's/OPENCV=./OPENCV=1/'¥ Makefile ¥ && make -j$(nproc) RUN mkdir -p /opt/darknet/weights ¥ WORKDIR /opt/darknet/weights ¥ RUN wget https://github.com/AlexeyAB/darknet/releases/download/darknet _yolo_v3_optimal/yolov4.conv.137 COPY main.py /opt/darknet/ COPY yolo_to_onnx.py /opt/darknet/ WORKDIR /opt/darknet ENTRYPOINT ["python3.6", "main.py"]
  7. @i7i5 コンテナをECRにプッシュ $ aws ecr get-login-password --region ap-northeast-1 | docker

    login --username AWS --password-stdin 550000000000.dkr.ecr.ap-northeast-1.amazonaws.com $ docker build -t yolov4 . $ docker tag yolov4 550000000000.dkr.ecr.ap-northeast-1.amazonaws.com/yolov4:latest $ docker push 550000000000.dkr.ecr.ap-northeast-1.amazonaws.com/yolov4:latest
  8. @i7i5 実行 ▪boto3 sm = boto3.client("sagemaker") sm.create_training_job( TrainingJobName=job_name, HyperParameters={"data_file": data_file,

    "cfg_file": cfg_file}, AlgorithmSpecification={"TrainingImage": repository_uri, "TrainingInputMode": "File"}, RoleArn=role, InputDataConfig=[ { "ChannelName": "train", "DataSource": { "S3DataSource": { "S3DataType": "S3Prefix", "S3Uri": input_data, "S3DataDistributionType": "FullyReplicated", }, }, "InputMode": "File", } ], OutputDataConfig={"S3OutputPath": output_path}, ResourceConfig={ "InstanceType": "ml.g4dn.8xlarge", "InstanceCount": 1, "VolumeSizeInGB": 10, }, StoppingCondition={ "MaxRuntimeInSeconds": 60 * 60 * 120, }, )
  9. @i7i5 ディレクトリ構成が特殊 ▪ /opt/mlで始まるディレクトリに データやconfigファイルを適切に配置 ▪わかりやすい記事👀 ▪ https://zenn.dev/kazuhito/books/4bfc 0e4e39752c/viewer/56709b opt

    └── ml ├── input │ ├── config │ │ ├── hyperparameters.json │ │ ├── inputdataconfig.json │ │ └── resourceconfig.json │ └── data │ └── train │ └── <input data> ├── model └── output