ゼファーネットのロゴ

Amazon SageMaker JumpStart を使用して、事前トレーニング済みのモデルを 5G エッジで AWS Wavelength にデプロイする

日付:

高速 5G モバイル ネットワークの出現により、企業はこれまで以上に簡単に、通信ネットワークとクラウドの融合を活用する機会を得られるようになりました。 これまでで最も顕著なユース ケースの XNUMX つとして、エッジでの機械学習 (ML) により、企業は ML モデルをエンド カスタマーの近くにデプロイして、レイテンシを短縮し、アプリケーションの応答性を向上させることができました。 例として、 スマート会場ソリューション オンプレミスのハードウェア ネットワーク機器への投資を最小限に抑えながら、ほぼリアルタイムのコンピューター ビジョンを使用して 5G ネットワークを介した群衆分析を行うことができます。 小売業者は、自然言語処理 (NLP)、リアルタイム レコメンデーション システム、および不正検出を使用して、外出先でよりスムーズなエクスペリエンスを提供できます。 平 地上および空中ロボット工学 ML を使用して、より安全で自律的な運用を実現できます。

エッジでの ML への参入障壁を減らすために、事前にトレーニングされたモデルをデプロイする例を示したかったのです。 アマゾンセージメーカー 〜へ AWSの波長、すべて 100 行未満のコードで。 この投稿では、SageMaker モデルを AWS Wavelength にデプロイして、5G ネットワークベースのアプリケーションのモデル推論レイテンシーを削減する方法を示します。

ソリューションの概要

AWS の急速に拡大するグローバル インフラストラクチャ全体で、AWS Wavelength はクラウド コンピューティングとストレージのパワーを 5G ネットワークのエッジにもたらし、よりパフォーマンスの高いモバイル エクスペリエンスを解き放ちます。 AWS Wavelength を使用すると、仮想プライベート クラウド (VPC) を通信事業者のネットワーク エッジに対応する Wavelength Zone に拡張できます。 29の都市 世界中。 次の図は、このアーキテクチャの例を示しています。

AWS Wavelength リファレンス アーキテクチャ

を介して、特定のリージョン内の Wavelength Zone にオプトインできます。 AWSマネジメントコンソール または AWSコマンドラインインターフェイス (AWS CLI)。 AWS Wavelength で地理的に分散されたアプリケーションをデプロイする方法の詳細については、次を参照してください。 地理的に分散された Amazon EKS クラスターを AWS Wavelength にデプロイする.

この投稿で説明した基礎に基づいて、AWS Wavelength にデプロイするためのサンプル ワークロードとして、エッジでの ML に注目します。 サンプル ワークロードとして、事前トレーニング済みのモデルをデプロイします。 Amazon SageMaker ジャンプスタート.

SageMaker は、開発者が ML モデルを AWS 環境に簡単にデプロイできるようにするフルマネージド ML サービスです。 AWS はモデル トレーニングのオプションを多数提供していますが、 AWS Marketplace モデルと SageMaker 組み込みアルゴリズム — オープンソースの ML モデルをデプロイするための多くの手法があります。

JumpStart は、SageMaker エンドポイントにシームレスにデプロイできる事前トレーニング済みモデルを使用して、何百もの組み込みアルゴリズムへのアクセスを提供します。 予知保全やコンピュータ ビジョンから自動運転や不正検出まで、JumpStart は、コンソールでのワンクリック展開で、さまざまな一般的なユース ケースをサポートします。

SageMaker は Wavelength Zone でネイティブにサポートされていないため、モデルのアーティファクトをリージョンから抽出し、エッジに再デプロイする方法を示します。 これを行うには、次を使用します Amazon Elastic Kubernetesサービス Wavelength Zone 内の (Amazon EKS) クラスターとノード グループ。続いて、JumpStart によって生成されたコンテナー イメージを使用してデプロイ マニフェストを作成します。 次の図は、このアーキテクチャを示しています。

AWS Wavelength での Amazon SageMaker JumpStart の参照アーキテクチャ

前提条件

これをできるだけ簡単にするために、AWS アカウントで Wavelength Zone が有効になっていることを確認してください。 この統合は、 us-east-1 & us-west-2を使用します。 us-east-1 デモの期間中。

AWS Wavelength にオプトインするには、次の手順を完了します。

  1. Amazon VPCコンソールで、 ゾーン設定 選択して 米国東部 (Verizon) / us-east-1-wl1.
  2. 選択する 管理 .
  3. 選択 オプトイン.
  4. 選択する ゾーンを更新する.

AWS Wavelength インフラストラクチャを作成する

ローカル SageMaker モデル推論エンドポイントを Kubernetes デプロイメントに変換する前に、Wavelength Zone に EKS クラスターを作成できます。 これを行うには、AWS Wavelength ノード グループを使用して Amazon EKS クラスターをデプロイします。 詳細については、次の URL をご覧ください。 AWS Containers ブログのこのガイド or Verizon の 5GEdgeTutorials リポジトリ そのような例のXNUMXつです。

次に、 AWS クラウド9 環境またはインタラクティブな開発環境 (IDE) を選択し、必要な SageMaker パッケージをダウンロードして、 ドッカーの作成、JumpStart の重要な依存関係です。

pip install sagemaker
pip install 'sagemaker[local]' --upgrade
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version

JumpStart を使用してモデル アーティファクトを作成する

まず、あなたが持っていることを確認してください AWS IDおよびアクセス管理 (IAM) SageMaker の実行ロール。 詳細については、次の URL をご覧ください。 SageMakerの役割.

  1. 使い方 この例、SageMaker ソフトウェア開発キット (SDK) を使用してビルド済みモデルを取得する train_model.py というファイルを作成します ( SageMaker 実行ロールの Amazon リソースネーム (ARN) に置き換えます)。 このファイルでは、 instance_type の属性 model.deploy() 関数は、定義したすべての必要なモデル アーティファクトを使用して、IDE 内で Docker コンテナーを開始します。
#train_model.py
from sagemaker import image_uris, model_uris, script_uris
from sagemaker.model import Model
from sagemaker.predictor import Predictor
from sagemaker.utils import name_from_base
import sagemaker, boto3, json
from sagemaker import get_execution_role aws_role = "<your-sagemaker-execution-role>"
aws_region = boto3.Session().region_name
sess = sagemaker.Session() # model_version="*" fetches the latest version of the model.
infer_model_id = "tensorflow-tc-bert-en-uncased-L-12-H-768-A-12-2"
infer_model_version= "*"
endpoint_name = name_from_base(f"jumpstart-example-{infer_model_id}") # Retrieve the inference docker container uri.
deploy_image_uri = image_uris.retrieve(
region=None,
framework=None,
image_scope="inference",
model_id=infer_model_id,
model_version=infer_model_version,
instance_type="local",
)
# Retrieve the inference script uri.
deploy_source_uri = script_uris.retrieve(
model_id=infer_model_id, model_version=infer_model_version, script_scope="inference"
)
# Retrieve the base model uri.
base_model_uri = model_uris.retrieve(
model_id=infer_model_id, model_version=infer_model_version, model_scope="inference"
)
model = Model(
image_uri=deploy_image_uri,
source_dir=deploy_source_uri,
model_data=base_model_uri,
entry_point="inference.py",
role=aws_role,
predictor_cls=Predictor,
name=endpoint_name,
)
print(deploy_image_uri,deploy_source_uri,base_model_uri)
# deploy the Model.
base_model_predictor = model.deploy(
initial_instance_count=1,
instance_type="local",
endpoint_name=endpoint_name,
)

  1. 次に、設定します infer_model_id を、使用したい SageMaker モデルの ID に置き換えます。

完全なリストについては、を参照してください。 事前トレーニング済みのモデル テーブルを使用した組み込みアルゴリズム. この例では、自然言語処理に一般的に使用される BERT (Bidirectional Encoder Representations from Transformers) モデルを使用します。

  1. 実行する train_model.py スクリプトを使用して JumpStart モデル アーティファクトを取得し、事前トレーニング済みのモデルをローカル マシンにデプロイします。
python train_model.py

このステップが成功すると、出力は次のようになります。

763104351884.dkr.ecr.us-east-1.amazonaws.com/tensorflow-inference:2.8-cpu
s3://jumpstart-cache-prod-us-east-1/source-directory-tarballs/tensorflow/inference/tc/v2.0.0/sourcedir.tar.gz
s3://jumpstart-cache-prod-us-east-1/tensorflow-infer/v2.0.0/infer-tensorflow-tc-bert-en-uncased-L-12-H-768-A-12-2.tar.gz

出力には、次の XNUMX つのアーティファクトが順番に表示されます。TensorFlow 推論のベース イメージ、モデルを提供する推論スクリプト、トレーニング済みモデルを含むアーティファクトです。 これらのアーティファクトを使用してカスタム Docker イメージを作成することもできますが、別の方法として、SageMaker ローカル モードで Docker イメージを作成することもできます。 以降の手順では、ローカルで実行されているコンテナー イメージを抽出し、デプロイします。 Amazon エラスティック コンテナ レジストリ (Amazon ECR) だけでなく、モデル アーティファクトを個別にプッシュして Amazon シンプル ストレージ サービス (Amazon S3)。

ローカル モード アーティファクトをリモート Kubernetes デプロイメントに変換する

SageMaker がローカルで動作していることを確認したので、実行中のコンテナからデプロイ マニフェストを抽出しましょう。 次の手順を完了します。

SageMaker ローカル モードのデプロイ マニフェストの場所を特定します。これを行うには、ルート ディレクトリで次の名前のファイルを検索します。 docker-compose.yaml.

docker_manifest=$( find /tmp/tmp* -name "docker-compose.yaml" -printf '%T+ %pn' | sort | tail -n 1 | cut -d' ' -f2-)
echo $docker_manifest

SageMaker ローカル モード モデル アーティファクトの場所を特定する: 次に、アーティファクトを Amazon s3 にアップロードした後、各 EKS ワーカー ノードで使用される、ローカルの SageMaker 推論コンテナーにマウントされた基礎となるボリュームを見つけます。

model_local_volume = $(grep -A1 -w "volumes:" $docker_manifest | tail -n 1 | tr -d ' ' | awk -F: '{print $1}' | cut -c 2-) # Returns something like: /tmp/tmpcr4bu_a7</p>

実行中の SageMaker 推論コンテナーのローカル コピーを作成する: 次に、機械学習推論モデルを実行している現在実行中のコンテナー イメージを見つけて、コンテナーのコピーをローカルに作成します。 これにより、Amazon ECR からプルするコンテナ イメージの独自のコピーが確保されます。

# Find container ID of running SageMaker Local container
mkdir sagemaker-container
container_id=$(docker ps --format "{{.ID}} {{.Image}}" | grep "tensorflow" | awk '{print $1}')
# Retrieve the files of the container locally
docker cp $my_container_id:/ sagemaker-container/

行動する前に model_local_volumeこれを Amazon S3 にプッシュし、実行中の Docker イメージのコピーをプッシュします。 sagemaker-container ディレクトリ、Amazon Elastic Container Registry へ。 必ず交換してください region, aws_account_id, docker_image_id & my-repository:tag またはに従ってください Amazon ECR ユーザーガイド. また、最終的な ECR イメージ URL (aws_account_id.dkr.ecr.region.amazonaws.com/my-repository:tag)、これを EKS デプロイで使用します。

aws ecr get-login-password --region region | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com
docker build .
docker tag <docker-image-id> aws_account_id.dkr.ecr.region.amazonaws.com/my-repository:tag
docker push aws_account_id.dkr.ecr.region.amazonaws.com/my-repository:tag

推論エンドポイントに対応する ECR イメージができたので、新しい Amazon S3 バケットを作成し、SageMaker Local アーティファクトをコピーします (model_local_volume) をこのバケットに追加します。 並行して、バケット内のオブジェクトを読み取るための Amazon EC2 インスタンス アクセスを提供する Identity Access Management (IAM) を作成します。 必ず交換してください Amazon S3 バケットにグローバルに一意の名前を付けます。

# Create S3 Bucket for model artifacts
aws s3api create-bucket --bucket <unique-bucket-name>
aws s3api put-public-access-block --bucket <unique-bucket-name> --public-access-block-configuration "BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true"
# Step 2: Create IAM attachment to Node Group
cat > ec2_iam_policy.json << EOF
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::sagemaker-wavelength-demo-app/*", "arn:aws:s3:::sagemaker-wavelength-demo-app" ] } ]
} # Create IAM policy
policy_arn=$(aws iam create-policy --policy-name sagemaker-demo-app-s3 --policy-document file://ec2_iam_policy.json --query Policy.Arn)
aws iam attach-role-policy --role-name wavelength-eks-Cluster-wl-workers --policy-arn $policy_arn # Push model artifacts to S3
cd $model_local_volume
tar -cvf sagemaker_model.tar .
aws s3 cp sagemaker_model.tar s3://

次に、各 EC2 インスタンスが起動時にモデル アーティファクトのコピーを取得するように、EKS ワーカー ノードのユーザー データを編集します。 ユーザー データ スクリプトで、各ノードが起動時に S3 API を使用してモデル アーティファクトを取得するようにします。 必ず交換してください Amazon S3 バケットにグローバルに一意の名前を付けます。 ノードのユーザー データに EKS ブートストラップ スクリプトも含まれている場合、完全なユーザー データは次のようになります。

#!/bin/bash
mkdir /tmp/model</p><p>cd /tmp/model
aws s3api get-object --bucket sagemaker-wavelength-demo-app --key sagemaker_model.tar  sagemaker_model.tar
tar -xvf sagemaker_model.tar
set -o xtrace
/etc/eks/bootstrap.sh <your-eks-cluster-id>

これで、既存の docker マニフェストを検査し、それを Kubernetes に適したマニフェスト ファイルに変換できます。 コンポゼ、有名な変換ツールです。 注: バージョンの互換性エラーが発生した場合は、 version docker-compose.yml の 27 行目の属性を “2”.

curl -L https://github.com/kubernetes/kompose/releases/download/v1.26.0/kompose-linux-amd64 -o kompose
chmod +x kompose && sudo mv ./kompose /usr/local/bin/compose
cd "$(dirname "$docker_manifest")"
kompose convert 

Kompose を実行すると、次の XNUMX つの新しいファイルが表示されます。 Deployment オブジェクト、 Service オブジェクト、 PersistentVolumeClaim オブジェクト、および NetworkPolicy 物体。 これで、エッジで Kubernetes への進出を開始するために必要なものがすべて揃いました!

SageMaker モデルアーティファクトをデプロイする

kubectl と aws-iam-authenticator が AWS Cloud9 IDE にダウンロードされていることを確認してください。 そうでない場合は、インストール ガイドに従ってください。

ここで、次の手順を完了します。

修正します service/algo-1-ow3nv サービス タイプを切り替えるオブジェクト ClusterIP 〜へ NodePort. この例では、ポート 30,007 を選択しました。 NodePort:

# algo-1-ow3nv-service.yaml
apiVersion: v1
kind: Service
metadata: annotations: kompose.cmd: kompose convert kompose.version: 1.26.0 (40646f47) creationTimestamp: null labels: io.kompose.service: algo-1-ow3nv name: algo-1-ow3nv
spec: type: NodePort ports: - name: "8080" port: 8080 targetPort: 8080 nodePort: 30007 selector: io.kompose.service: algo-1-ow3nv
status: loadBalancer: {}

次に、ノードのセキュリティ グループで NodePort を許可する必要があります。 これを行うには、セキュリティ グループ ID を取得し、NodePort を許可リストに登録します。

node_group_sg=$(aws ec2 describe-security-groups --filters Name=group-name,Values='wavelength-eks-Cluster*' --query "SecurityGroups[0].GroupId" --output text)
aws ec2 authorize-security-group-ingress --group-id $node_group_sg --ip-permissions IpProtocol=tcp,FromPort=30007,ToPort=30007,IpRanges='[{CidrIp=0.0.0.0/0}]'

次に、 algo-1-ow3nv-deployment.yaml マニフェストをマウントする /tmp/model hostPath ディレクトリをコンテナに。 交換 前に作成した ECR イメージを使用します。

# algo-1-ow3nv-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata: annotations: kompose.cmd: kompose convert kompose.version: 1.26.0 (40646f47) creationTimestamp: null labels: io.kompose.service: algo-1-ow3nv name: algo-1-ow3nv
spec: replicas: 1 selector: matchLabels: io.kompose.service: algo-1-ow3nv strategy: type: Recreate template: metadata: annotations: kompose.cmd: kompose convert kompose.version: 1.26.0 (40646f47) creationTimestamp: null labels: io.kompose.network/environment-sagemaker-local: "true" io.kompose.service: algo-1-ow3nv spec: containers: - args: - serve env: - name: SAGEMAKER_CONTAINER_LOG_LEVEL value: "20" - name: SAGEMAKER_PROGRAM value: inference.py - name: SAGEMAKER_REGION value: us-east-1 - name: SAGEMAKER_SUBMIT_DIRECTORY value: /opt/ml/model/code image: <your-ecr-image> name: sagemaker-test-model ports: - containerPort: 8080 resources: {} stdin: true tty: true volumeMounts: - mountPath: /opt/ml/model name: algo-1-ow3nv-claim0 restartPolicy: Always volumes: - name: algo-1-ow3nv-claim0 hostPath: path: /tmp/model
status: {}

Kompose から作成したマニフェスト ファイルを使用して、kubectl を使用して構成をクラスターに適用します。

$ kubectl apply -f algo-1-ow3nv-deployment.yaml algo-1-ow3nv-service.yaml
deployment.apps/algo-1-ow3nv created
service/algo-1-ow3nv created

5G エッジ モデルに接続する

モデルに接続するには、次の手順を実行します。

Amazon EC2 コンソールで、EKS ワーカー ノードのキャリア IP を取得するか、AWS CLI を使用してキャリア IP アドレスを直接クエリします。

aws ec2 describe-instances --filters "Name=tag:aws:autoscaling:groupName,Values=eks-EKSNodeGroup*" --query 'Reservations[*].Instances[*].[Placement.AvailabilityZone,NetworkInterfaces[].Association.CarrierIp]' --output text
# Example Output: 155.146.1.12

これで、キャリア IP アドレスが抽出されたので、NodePort を使用してモデルに直接接続できます。 というファイルを作成します。 invoke.py センチメント アナライザーに対して実行されるテキストベースの入力を提供することで、BERT モデルを直接呼び出して、トーンがポジティブかネガティブかを判断します。

import json
endpoint_name="jumpstart-example-tensorflow-tc-bert-en-uncased-L-12-H-768-A-12-2"
request_body = "simply stupid , irrelevant and deeply , truly , bottomlessly cynical ".encode("utf-8")
import requests
r2=requests.post(url="http://155.146.1.12:30007/invocations", data=request_body, headers={"Content-Type":"application/x-text","Accept":"application/json;verbose"})
print(r2.text)

出力は次のようになります。

{"probabilities": [0.998723, 0.0012769578], "labels": [0, 1], "predicted_label": 0}

クリーンアップ

作成されたすべてのアプリケーション リソースを破棄するには、AWS Wavelength ワーカー ノード、EKS コントロール プレーン、および VPC 内で作成されたすべてのリソースを削除します。 さらに、コンテナ イメージをホストするために使用される ECR リポジトリ、SageMaker モデル アーティファクトをホストするために使用される S3 バケット、および sagemaker-demo-app-s3 IAM ポリシー。

まとめ

この投稿では、Amazon EKS と AWS Wavelength を使用して SageMaker モデルをネットワーク エッジにデプロイする新しいアプローチを示しました。 AWS Wavelength での Amazon EKS のベスト プラクティスについては、以下を参照してください。 地理的に分散された Amazon EKS クラスターを AWS Wavelength にデプロイする. また、ジャンプスタートの詳細については、次の Web サイトにアクセスしてください。 Amazon SageMaker JumpStart 開発者ガイド または JumpStart使用可能なモデルテーブル.


著者について

 ロバート・ベルソン AWS ワールドワイド テレコム ビジネス ユニットのデベロッパー アドボケイトであり、AWS エッジ コンピューティングを専門としています。 彼は、自動化、ハイブリッド ネットワーキング、およびエッジ クラウドを使用してビジネス上の課題を解決するために、開発者コミュニティおよび大企業の顧客と協力することに重点を置いています。

モハメド・アルメダール AWS のワールドワイド テレコム ビジネス ユニットのシニア ソリューション アーキテクトです。 彼の主な焦点は、顧客が AWS で Telco および Enterprise IT ワークロードを構築およびデプロイできるようにすることです。 AWS に入社する前は、Mohammed は通信業界で 13 年以上働いており、LTE パケット コア、5G、IMS、WebRTC の分野で豊富な経験を持っています。 Mohammed は、コンコーディア大学で電気通信工学の学士号を取得しています。

エヴァン・クラヴィッツ アマゾンウェブサービスのソフトウェアエンジニアであり、SageMakerJumpStartに取り組んでいます。 彼はニューヨーク市で料理やランニングを楽しんでいます。

ジャスティン・セント・アーナウド IT 業界で 15 年以上の経験を持つ、ベライゾンの公共部門向けソリューション アーキテクトであるアソシエイト ディレクターです。 彼はエッジ コンピューティングと 5G ネットワークの力を熱心に支持しており、これらのテクノロジを活用する革新的なテクノロジ ソリューションの開発の専門家です。 ジャスティンは、クライアントに最先端のソリューションを提供するためにアマゾン ウェブ サービス (AWS) が提供する機能に特に熱心です。 余暇には、ジャスティンは最新のテクノロジー トレンドを把握し、知識と洞察を業界の他のユーザーと共有することを楽しんでいます。

スポット画像

最新のインテリジェンス

スポット画像