モデルを大規模に展開することは、多くのデータ サイエンティストや機械学習エンジニアにとって面倒な作業になる可能性があります。 ただし、Amazon SageMaker エンドポイントは、機械学習 (ML) モデルの推論をデプロイおよびスケーリングするためのシンプルなソリューションを提供します。 私たちの最後の ブログ投稿 および GitHubレポ ホスティングについて YOLOv5 TensorFlowModel
on アマゾンセージメーカー エンドポイント 読者の多くの関心を集めました。 多くの読者は、YOLOv5 モデルをホストする方法についても興味を持っていました。 PyTorch
. この問題に対処するために、最近リリースされた YOLOv8 からのモデル ウルトラリティクス、YOLOv8をホストする方法に関するこの投稿を提示します PyTorchModel
SageMaker エンドポイントで。 GNU GPL8 ライセンスの下で配布される YOLOv3 モデルは、実行効率と検出精度で知られる人気のあるオブジェクト検出モデルです。 Amazon SageMaker エンドポイントは、モデルをデプロイするための簡単にスケーラブルでコストが最適化されたソリューションを提供します。
ソリューションの概要
次の図は、SageMaker エンドポイントを使用して YOLOv8 モデルをホストし、エンドポイントをユーザーとして呼び出すために使用される AWS サービスの概要を示しています。 ソリューションは使用します AWS CloudFormation SageMaker インスタンスの作成を自動化し、 GitHubの インスタンスへのリポジトリ。 SageMaker ノートブックは、YOLOv8 PyTorch モデルにアクセスしてダウンロードし、モデルとともにカスタム推論コードを Amazon シンプル ストレージ サービス (Amazon S3) バケット。 ノートブック内の手順では、YOLOv8 PyTorch モデルとカスタム推論コードをホストする SageMaker エンドポイントの作成が強調されています。 このノートブックは、エンドポイントをテストして結果をプロットする方法も示しています。 このソリューションは、次の手順で構成されています。
- XNUMX つのノートブックを含む GitHub リポジトリを作成しました
1_DeployEndpoint.ipynb
および2_TestEndpoint.ipynb
、下sm-notebook/
ディレクトリにあります。 - AWS CloudFormation テンプレートが実行され、SageMaker Notebook インスタンスが作成され、GitHub リポジトリのクローンが作成されます。
- ノート
1_DeployEndpoint.ipynb
YOLOv8 モデルのダウンロードに使用されます。 - YOLOv8 モデルと推論コードは次のように保存されます。
model.tar.gz
アマゾンS3で。 - SageMaker エンドポイントは、
model.tar.gz
. - ノート
2_TestEndpoint.ipynb
エンドポイントをテストして結果を収集するために使用されます。
前提条件
AWS アカウント AWS Identity and Access Management (IAM) ロール 以下へのアクセスを提供します。
- AWS CloudFormation
- アマゾンセージメーカー
- アマゾンS3
1.SageMaker エンドポイントで YOLOv8 をホストする
Ultralytics には、さまざまな機能を持つ複数の YOLOv8 モデルがあります。 それらは次のように細分されます。
- オブジェクト検出 (
yolov8l.pt, yolov8m.pt, yolov8n.pt, yolov8s.pt, yolov8x.pt, yolov8x6.pt
) - Segmentation (
yolov8l-seg.pt, yolov8m-seg.pt, yolov8n-seg.pt, yolov8s-seg.pt, yolov8x-seg.pt
) - Classification (
yolov8l-cls.pt, yolov8m-cls.pt, yolov8n-cls.pt, yolov8s-cls.pt, yolov8x-cls.pt
)
このブログでは、以下を使用したオブジェクト検出に焦点を当てます。 yolov8l.pt
PyTorch モデル。 SageMaker エンドポイントで YOLOv8 モデルとカスタム推論コードをホストするには、それらを XNUMX つのファイルにまとめて圧縮する必要があります。 model.tar.gz
次の構造で:
model.tar.gz ├─ code/ │ ├── inference.py │ └── requirements.txt └── yolov8l.pt
モデルの重み yolov8l.pt
ファイルは code/
ディレクトリとメインの推論 python スクリプト inference.py
モデルの読み込み、入力の解析、推論の実行、および出力の後処理に必要な関数を含む code/
ディレクトリ。 の詳細 inference.py
次のセクションで説明します。
1.1。 カスタム推論コード
パイプラインとコードのワークフローに応じて、SageMaker エンドポイントへの入力と SageMaker エンドポイントからの出力は異なる場合があります。 この投稿では、 numpy
エンドポイントに配列して処理します。 ただし、エンドポイントへの入力は json
またはテキストも。 ワークフローに応じて、の関数を変更する必要があります。 inference.py
さまざまな入力と出力に対応します。 さらに、最近の YOLOv8 のリリースでは、Ultralytics チームが Python API をリリースしました。これにより、YOLO ライブラリを直接インストールできます。 requirements.txt
モデルをインポートします inference.py
.
1.1.1. の内容 code/inference.py
:
import numpy as np
import torch, os, json, io, cv2, time
from ultralytics import YOLO def model_fn(model_dir): print("Executing model_fn from inference.py ...") env = os.environ model = YOLO("/opt/ml/model/code/" + env['YOLOV8_MODEL']) return model def input_fn(request_body, request_content_type): print("Executing input_fn from inference.py ...") if request_content_type: jpg_original = np.load(io.BytesIO(request_body), allow_pickle=True) jpg_as_np = np.frombuffer(jpg_original, dtype=np.uint8) img = cv2.imdecode(jpg_as_np, flags=-1) else: raise Exception("Unsupported content type: " + request_content_type) return img def predict_fn(input_data, model): print("Executing predict_fn from inference.py ...") device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') model.to(device) with torch.no_grad(): result = model(input_data) return result def output_fn(prediction_output, content_type): print("Executing output_fn from inference.py ...") infer = {} for result in prediction_output: if result.boxes: infer['boxes'] = result.boxes.numpy().data.tolist() if result.masks: infer['masks'] = result.masks.numpy().data.tolist() if result.probs: infer['probs'] = result.probs.numpy().data.tolist() return json.dumps(infer)
1.1.2. の内容 code/requirements.txt
:
すべてのファイルの内容が model.tar.gz
完了したら、次のコマンドを実行して tar ボールを作成します。
$ tar -czvf model.tar.gz code/ yolov8l.pt
1.2.ホスト model.tar.gz
SageMaker エンドポイントへ:
これには、いくつかの手順が含まれます。 model.tar.gz
最初に S3 バケットにアップロードされます。 アップロードされたアーティファクトは、SageMaker PyTorchModel を作成するために使用されます。 最後に、この PyTorchModel を使用して、モデルを SageMaker エンドポイントにデプロイします。
1.2.1. モデルと推論コードを S3 にアップロードします。
from sagemaker import s3 bucket = "s3://NAME_OF_BUCKET"
prefix = "yolov8/demo-custom-endpoint"
model_data = s3.S3Uploader.upload("model.tar.gz", bucket + "/" + prefix)
1.2.2. SageMaker PyTorchModel を作成します。
from sagemaker.pytorch import PyTorchModel model_name = 'yolov8l.pt' model = PyTorchModel(entry_point='inference.py', model_data=model_data, framework_version='1.12', py_version='py38', role=role, env={'TS_MAX_RESPONSE_SIZE':'20000000', 'YOLOV8_MODEL': model_name}, sagemaker_session=sess)
1.2.3. モデルをコンパイルしてエンドポイントにホストします。
from sagemaker.deserializers import JSONDeserializer INSTANCE_TYPE = 'ml.m5.4xlarge'
ENDPOINT_NAME = 'yolov8-pytorch-' + str(datetime.utcnow().strftime('%Y-%m-%d-%H-%M-%S-%f')) predictor = model.deploy(initial_instance_count=1, instance_type=INSTANCE_TYPE, deserializer=JSONDeserializer(), endpoint_name=ENDPOINT_NAME)
2.SageMaker エンドポイントをテストする
エンドポイントが正常にホストされると、それを使用して推論を実行できます。 このステップでは、最初に画像を読み取り、それをバイトに変換し、バイトを入力としてエンドポイントに渡すことで推論を実行します。 生成された結果には、ホスティングに使用された YOLOv8 モデルのタイプに基づいて、バウンディング ボックス、マスク、または信頼スコアが含まれます。 それに応じて出力をプロットできます。
2.1.1. 推論結果を生成し、出力をプロットします。
import cv2, random
import numpy as np
import matplotlib.pyplot as plt orig_image = cv2.imread('bus.jpg') image_height, image_width, _ = orig_image.shape
model_height, model_width = 300, 300
x_ratio = image_width/model_width
y_ratio = image_height/model_height resized_image = cv2.resize(orig_image, (model_height, model_width))
payload = cv2.imencode('.jpg', resized_image)[1].tobytes()
result = predictor.predict(payload) if 'boxes' in result: for idx,(x1,y1,x2,y2,conf,lbl) in enumerate(result['boxes']): # Draw Bounding Boxes x1, x2 = int(x_ratio*x1), int(x_ratio*x2) y1, y2 = int(y_ratio*y1), int(y_ratio*y2) color = (random.randint(10,255), random.randint(10,255), random.randint(10,255)) cv2.rectangle(orig_image, (x1,y1), (x2,y2), color, 4) cv2.putText(orig_image, f"Class: {int(lbl)}", (x1,y1-40), cv2.FONT_HERSHEY_SIMPLEX, 1, color, 2, cv2.LINE_AA) cv2.putText(orig_image, f"Conf: {int(conf*100)}", (x1,y1-10), cv2.FONT_HERSHEY_SIMPLEX, 1, color, 2, cv2.LINE_AA) if 'masks' in result: # Draw Masks mask = cv2.resize(np.asarray(result['masks'][idx]), dsize=(image_width, image_height), interpolation=cv2.INTER_CUBIC) for c in range(3): orig_image[:,:,c] = np.where(mask>0.5, orig_image[:,:,c]*(0.5)+0.5*color[c], orig_image[:,:,c]) if 'probs' in result: # Find Class lbl = result['probs'].index(max(result['probs'])) color = (random.randint(10,255), random.randint(10,255), random.randint(10,255)) cv2.putText(orig_image, f"Class: {int(lbl)}", (20,20), cv2.FONT_HERSHEY_SIMPLEX, 1, color, 2, cv2.LINE_AA) plt.imshow(cv2.cvtColor(orig_image, cv2.COLOR_BGR2RGB))
plt.show()
2.1.2。 結果:
オブジェクト検出とセグメンテーション YOLOv8 モデルの出力を次の画像に示します。
3.クリーンアップ
CloudFormation スタックの削除 最初に作成されたすべてのリソースを削除します。 ただし、CloudFormation は現在、エンドポイント、エンドポイント構成、およびモデルを自動的に削除するように構成されていません。 ホストされたエンドポイントが使用されていない場合は、コストを節約するために削除することをお勧めします。 次のように実行できます。
import boto3 sm_client = boto3.client(service_name="sagemaker") response = sm_client.describe_endpoint_config(EndpointConfigName=endpoint_name)
print(response)
endpoint_config_name = response['EndpointConfigName'] # Delete Endpoint
sm_client.delete_endpoint(EndpointName=endpoint_name) # Delete Endpoint Configuration
sm_client.delete_endpoint_config(EndpointConfigName=endpoint_config_name) # Delete Model
for prod_var in response['ProductionVariants']: model_name = prod_var['ModelName'] sm_client.delete_model(ModelName=model_name)
まとめ
この投稿では、事前トレーニング済みの YOLOv8 をホストする方法を示しました。 PyTorchModel
SageMaker エンドポイントで、エンドポイントを呼び出して推論結果をテストします。 詳細なコードは、 GitHubの、およびテンプレートの CloudFormation スタックは GitHub でも入手できます。
SageMaker エンドポイントの詳細については、こちらをご覧ください エンドポイントを作成してモデルをデプロイする および Amazon SageMaker で PyTorch を使用するを使用して強調表示します PyTorchModel
SageMaker で。 このプロセスは、次を使用して自動化できます。 SageMaker の CloudFormation サポート.
著者について
ケビンソング は、AWS プロフェッショナル サービスのデータ サイエンティストです。 彼は生物物理学の博士号を取得しており、コンピューター ビジョンと機械学習ソリューションの構築において XNUMX 年以上の業界経験があります。
ロミル・シャー は、AWS プロフェッショナル サービスの IoT Edge データ サイエンティストです。 Romil は、コンピューター ビジョン、機械学習、IoT エッジ デバイスの業界で XNUMX 年以上の経験があります。 彼は、顧客が産業用セットアップでエッジ デバイスの機械学習モデルを最適化および展開するのを支援することに携わっています。
- SEO を活用したコンテンツと PR 配信。 今日増幅されます。
- Platoblockchain。 Web3メタバースインテリジェンス。 知識の増幅。 こちらからアクセスしてください。
- 情報源: https://aws.amazon.com/blogs/machine-learning/hosting-yolov8-pytorch-model-on-amazon-sagemaker-endpoints/
- :は
- 1
- 10
- 100
- 7
- a
- 私たちについて
- アクセス
- 対応する
- それに応じて
- 精度
- 添加
- 住所
- すべて
- ことができます
- Amazon
- アマゾンセージメーカー
- および
- API
- です
- 配列
- AS
- At
- 自動化する
- 自動化
- 自動的に
- 利用できます
- AWS
- AWSプロフェッショナルサービス
- 玉
- ベース
- BE
- さ
- 生物物理学
- ブログ
- ボックス
- 建物
- バス
- by
- 缶
- 機能
- チェック
- class
- コード
- カラー
- COM
- コンピュータ
- Computer Vision
- 信頼
- 含まれています
- コンテンツ
- 中身
- 変換
- コスト
- 作ります
- 作成した
- 作成します。
- 創造
- 現在
- カスタム
- Customers
- データ
- データサイエンティスト
- 日付時刻
- 実証
- 実証
- によっては
- 展開します
- 展開する
- 展開
- 詳細な
- 細部
- 検出
- デバイス
- Devices
- 異なります
- 直接に
- 配布
- ダウンロード
- ダウンロード
- ドロー
- 簡単に
- エッジ(Edge)
- 効率
- どちら
- エンドポイント
- エンジニア
- 実行
- 体験
- 少数の
- File
- ファイナライズ済み
- 最後に
- もう完成させ、ワークスペースに掲示しましたか?
- 名
- フォーカス
- フォロー中
- 次
- から
- 機能
- さらに
- 生成する
- 生成された
- GitHubの
- 良い
- 持ってる
- 助け
- 特徴
- ハイライト
- 保持している
- host
- 主催
- ホスティング
- ホスト
- 認定条件
- How To
- しかしながら
- HTML
- HTTPS
- アイデンティティ
- IDX
- 画像
- 画像
- import
- in
- インダストリアル
- 産業を変えます
- install
- 関心
- 興味がある
- 関係する
- IOT
- 問題
- IT
- ITS
- JPG
- JSON
- 既知の
- 姓
- LEARN
- 学習
- 図書館
- ライセンス
- ローディング
- たくさん
- 機械
- 機械学習
- メイン
- 管理
- 多くの
- mask
- マスク
- matplotlib
- ML
- モデル
- 修正する
- 他には?
- の試合に
- 必要
- ノート
- numpy
- オブジェクト
- オブジェクト検出
- of
- on
- 最適化
- 注文
- 元々
- OS
- 輪郭
- 出力
- 外側
- 通過
- パイプライン
- プラトン
- プラトンデータインテリジェンス
- プラトデータ
- お願いします
- 人気
- ポスト
- 練習
- Predictor
- 現在
- PLM platform.
- プロセス
- 処理
- プロ
- 提供します
- は、大阪で
- Python
- パイトーチ
- 上げる
- ランダム
- 読む
- 読者
- 最近
- リリース
- リリース
- 削除します
- 倉庫
- 要件
- リソース
- 応答
- 結果
- 結果
- return
- ラン
- ランニング
- セージメーカー
- Save
- ド電源のデ
- 規模
- スケーリング
- 科学者
- 科学者たち
- 海生まれ
- セクション
- セグメンテーション
- サービス
- 形状
- すべき
- 示す
- 簡単な拡張で
- SIX
- 溶液
- ソリューション
- スタック
- 手順
- ステップ
- ストレージ利用料
- 保存され
- 店舗
- 構造
- 首尾よく
- サポート
- 仕事
- チーム
- template
- test
- それ
- アプリ環境に合わせて
- 時間
- 〜へ
- 一緒に
- トーチ
- トーチビジョン
- 下
- アップロード
- us
- ユーザー
- ビジョン
- WELL
- which
- 意志
- 以内
- でしょう
- 年
- ヨロ
- You
- あなたの
- ゼファーネット