Amazon Web Services ブログ

Amazon SageMaker が基盤モデルのデプロイコストとレイテンシーの低減に役立つ新しい推論機能を追加

11月29日、デプロイコストの最適化とレイテンシーの低減に役立つ新しい Amazon SageMaker の推論機能を発表しました。新しい推論機能を使用すると、同じ SageMaker エンドポイントに 1 つ以上の基盤モデル (FM) をデプロイし、各 FM のために予約されるアクセラレーターの数とメモリの量を制御できます。これは、リソースの使用率を改善し、モデルのデプロイコストを平均 50% 削減するのに役立つとともに、お客様がユースケースに合わせてエンドポイントをスケールするのを可能にします。

各 FM のために個別のスケーリングポリシーを定義して、インフラストラクチャコストをさらに最適化しながら、モデルの使用パターンに適応させることができます。さらに、SageMaker は、推論リクエストを処理しているインスタンスをアクティブにモニタリングし、使用可能なインスタンスに基づいてリクエストをインテリジェントにルーティングすることで、推論レイテンシーを平均 20% 削減するのをサポートします。

主要なコンポーネント
新しい推論機能は、SageMaker リアルタイム推論エンドポイントに基づいて構築されています。以前と同様に、エンドポイントのインスタンスタイプと初期インスタンス数を定義するエンドポイントの設定を使用して SageMaker エンドポイントを作成します。モデルは、新しいコンストラクトである推論コンポーネントで設定されます。ここでは、モデルの各コピーに割り当てるアクセラレーターの数とメモリの量を、モデルアーティファクト、コンテナイメージ、デプロイするモデルコピーの数とともに指定します。

Amazon SageMaker - MME

これがどのように機能するかを見ていきましょう。

新しい推論機能の実際の動作
SageMaker StudioSageMaker Python SDKAWS SDK、および AWS コマンドラインインターフェイス (AWS CLI) から新しい推論機能の使用を開始できます。これらは、AWS CloudFormation によってもサポートされています。

このデモでは、AWS SDK for Python (Boto3) を使用して、新しい推論機能で SageMaker リアルタイムエンドポイント上の Hugging Face モデルハブから、Dolly v2 7B モデルのコピーと FLAN-T5 XXL モデルのコピーをデプロイします。

SageMaker エンドポイントの設定を作成する

import boto3
import sagemaker

role = sagemaker.get_execution_role()
sm_client = boto3.client(service_name="sagemaker")

sm_client.create_endpoint_config(
    EndpointConfigName=endpoint_config_name,
    ExecutionRoleArn=role,
    ProductionVariants=[{
        "VariantName": "AllTraffic",
        "InstanceType": "ml.g5.12xlarge",
        "InitialInstanceCount": 1,
		"RoutingConfig": {
            "RoutingStrategy": "LEAST_OUTSTANDING_REQUESTS"
        }
    }]
)

SageMaker エンドポイントを作成する

sm_client.create_endpoint(
    EndpointName=endpoint_name,
    EndpointConfigName=endpoint_config_name,
)

推論コンポーネントを作成する前に、SageMaker 互換モデルを作成し、使用するコンテナイメージを指定する必要があります。どちらのモデルでも、Amazon SageMaker 用の Hugging Face LLM Inference Container を使用します。 これらの深層学習コンテナ (DLC) には、SageMaker で大規模なモデルをホストするために必要なコンポーネント、ライブラリ、およびドライバーが含まれています。

Dolly v2 モデルを準備する

from sagemaker.huggingface import get_huggingface_llm_image_uri

# コンテナイメージの URI を取得します
hf_inference_dlc = get_huggingface_llm_image_uri(
  "huggingface",
  version="0.9.3"
)

# モデルコンテナを設定します
dolly7b = {
    'Image': hf_inference_dlc,
    'Environment': {
        'HF_MODEL_ID':'databricks/dolly-v2-7b',
        'HF_TASK':'text-generation',
    }
}

# SageMaker モデルを作成します
sagemaker_client.create_model(
    ModelName        = "dolly-v2-7b",
    ExecutionRoleArn = role,
    Containers       = [dolly7b]
)

FLAN-T5 XXL モデルを準備する

# モデルコンテナを設定します
flant5xxlmodel = {
    'Image': hf_inference_dlc,
    'Environment': {
        'HF_MODEL_ID':'google/flan-t5-xxl',
        'HF_TASK':'text-generation',
    }
}

# SageMaker モデルを作成します
sagemaker_client.create_model(
    ModelName        = "flan-t5-xxl",
    ExecutionRoleArn = role,
    Containers       = [flant5xxlmodel]
)

これで、推論コンポーネントを作成する準備が整いました。

各モデルの推論コンポーネントを作成する
エンドポイントにデプロイする各モデルの推論コンポーネントを指定します。推論コンポーネントを使用すると、SageMaker 互換モデルと、割り当てるコンピューティングリソースおよびメモリリソースを指定できます。CPU ワークロードについては、割り当てるコアの数を定義します。アクセラレーターワークロードについては、アクセラレーターの数を定義します。RuntimeConfig は、デプロイするモデルコピーの数を定義します。

# Dolly v2 7B の推論コンポーネント
sm_client.create_inference_component(
    InferenceComponentName="IC-dolly-v2-7b",
    EndpointName=endpoint_name,
    VariantName=variant_name,
    Specification={
        "ModelName": "dolly-v2-7b",
        "ComputeResourceRequirements": {
		    "NumberOfAcceleratorDevicesRequired": 2,
			"NumberOfCpuCoresRequired": 2,
			"MinMemoryRequiredInMb": 1024
	    }
    },
    RuntimeConfig={"CopyCount": 1},
)

# FLAN-T5 XXL の推論コンポーネント
sm_client.create_inference_component(
    InferenceComponentName="IC-flan-t5-xxl",
    EndpointName=endpoint_name,
    VariantName=variant_name,
    Specification={
        "ModelName": "flan-t5-xxl",
        "ComputeResourceRequirements": {
		    "NumberOfAcceleratorDevicesRequired": 2,
			"NumberOfCpuCoresRequired": 1,
			"MinMemoryRequiredInMb": 1024
	    }
    },
    RuntimeConfig={"CopyCount": 1},
)

推論コンポーネントが正常にデプロイされると、モデルを呼び出すことができます。

推論を実行する
エンドポイントでモデルを呼び出すには、対応する推論コンポーネントを指定します。

import json
sm_runtime_client = boto3.client(service_name="sagemaker-runtime")
payload = {"inputs": "Why is California a great place to live?"}

response_dolly = sm_runtime_client.invoke_endpoint(
    EndpointName=endpoint_name,
    InferenceComponentName = "IC-dolly-v2-7b",
    ContentType="application/json",
    Accept="application/json",
    Body=json.dumps(payload),
)

response_flant5 = sm_runtime_client.invoke_endpoint(
    EndpointName=endpoint_name,
    InferenceComponentName = "IC-flan-t5-xxl",
    ContentType="application/json",
    Accept="application/json",
    Body=json.dumps(payload),
)

result_dolly = json.loads(response_dolly['Body'].read().decode())
result_flant5 = json.loads(response_flant5['Body'].read().decode())

次に、スケーリングターゲットを登録し、スケーリングポリシーを推論コンポーネントに適用することで、各モデルのために個別のスケーリングポリシーを定義できます。詳細な手順については、「SageMaker デベロッパーガイド」をご覧ください。

新しい推論機能は、モデルごとの CloudWatch メトリクスと CloudWatch Logs を提供し、SageMaker CPU および GPU ベースのコンピューティングインスタンス全体において、SageMaker 互換のコンテナイメージで使用できます。コンテナイメージのサポートにより、応答ストリーミングを使用することもできます。

今すぐご利用いただけます
Amazon SageMaker の新しい推論機能は、米国東部 (オハイオ、バージニア北部)、米国西部 (オレゴン)、アジアパシフィック (ジャカルタ、ムンバイ、ソウル、シンガポール、シドニー、東京)、カナダ (中部)、欧州 (フランクフルト、アイルランド、ロンドン、ストックホルム)、中東 (UAE)、南米 (サンパウロ) の AWS リージョンで現在ご利用いただけます。料金の詳細については、Amazon SageMaker の料金をご覧ください。詳細については、Amazon SageMaker にアクセスしてください。

始めましょう
今すぐ AWS マネジメントコンソール にログインして、SageMaker の新しい推論機能を使用して FM をデプロイしましょう!

– Antje

原文はこちらです。