スキップしてコンテンツを表示

Amazon SageMaker AI サーバーレス推論エンドポイントでの問題をトラブルシューティングする方法を教えてください。

所要時間2分
0

ワークロードに Amazon SageMaker AI サーバーレス推論エンドポイントを使用する際、エラーが発生します。

解決策

表示されたエラーメッセージに応じて、問題をトラブルシューティングします。

サーバーレス推論エンドポイント用のイメージコンテナのサイズが大きすぎる

サーバーレス推論エンドポイントは、リアルタイムエンドポイントと同様に、持ち込みコンテナ (BYOC) をサポートしています。AWS Lambda はこの特定のタイプの推論をサポートしているため、この特定のタイプの推論では、コンテナサイズは 10 GB 未満である必要があります。

コンテナが 10 GB の制限を超えると、次のようなエラーメッセージが表示されます。

「Image size 11271073144 is greater than the supported size 10737418240」

この問題を解決するには、次のいずれかの操作を行います。

  • 使用していないパッケージを削除し、Docker ファイル内のレイヤー数を最小限に抑えてイメージサイズを削減し、Docker コンテナを最適化します。
  • 小容量のベースイメージを使用して新しいエンドポイント設定を作成します。リアルタイムエンドポイントをホストするために必要なインスタンスタイプおよび、その他の関連するパラメータを指定します。
  • サーバーレスエンドポイントからリアルタイムエンドポイントに移行します。新しいエンドポイント設定を作成し、リアルタイムエンドポイントをホストするインスタンスタイプおよび、その他のパラメータを指定します。次に、既存のエンドポイントを新しい設定で更新します。
  1. 新しいエンドポイント設定を作成するには、次のテンプレートを使用します。
    import boto3
    
    client = boto3.client('sagemaker', region_name = 'us-east-1')
    
    endpoint_config_name = 'new-endpoint-config'
    production_variants = [
        {
            'VariantName': 'AllTraffic',
            'ModelName': 'ModelName',
            'InitialInstanceCount': 1,
            'InstanceType': 'ml.m5.xlarge',
            'InitialVariantWeight': 1.0
        }
    ]
    
    create_endpoint_config_response = client.create_endpoint_config(
        EndpointConfigName=endpoint_config_name,
        ProductionVariants=production_variants
    )
    注: 実際のものでそれぞれ、YourVariantName をインスタンスのバリアント名に、YourModelName をモデル名に置き換えます。1 を最初のインスタンス数に置き換えます。ml.m5.xlarge を実際のインスタンスタイプに置き換えます。1.0 をインスタンスの初期バリアントの重みに置き換えます。
  2. 新しい設定で新しいエンドポイントを作成し、サーバーレスエンドポイントからリアルタイムエンドポイントに移行します。または、既存のサーバーレスエンドポイントを新しい構成で更新します。
    新しいエンドポイント作成例:
    endpoint_name = 'new-endpoint'
    
    create_endpoint_response = client.create_endpoint(
        EndpointName=endpoint_name,
        EndpointConfigName=endpoint_config_name
    )
    既存のエンドポイントの更新例:
    endpoint_name = 'my-old-endpoint'
    
    update_endpoint_response = client.update_endpoint(
        EndpointName=endpoint_name,
        EndpointConfigName=endpoint_config_name
    )

コンテナサイズを判断するために、Amazon Elastic Container Registry (ECR) からイメージ URI を取得します。次に、以下の Docker コマンドを実行して Docker イメージの詳細を取得します。

docker images

サーバーレス推論エンドポイントのメモリまたはディスク容量が不十分

SageMaker AI サーバーレスエンドポイントの最大メモリ割り当ては 6 GB で、エフェメラルディスクのストレージ容量は 5 GB です。

サーバーレスエンドポイントのメモリが制限を超えると、次のようなエラーメッセージが表示されます。

「UnexpectedStatusException: Error hosting endpoint: Failed.Reason: Ping failed due to insufficient memory」

次のいずれかの方法で問題を解決します。

  • MemorySizeInMB パラメータを調整します。
  • ワーカーの構成を最適化します。
  • エンドポイントをリアルタイムエンドポイントとしてデプロイし、必要なインスタンスの詳細を指定します。

MemorySizeInMB パラメータを調整する

  1. MemorySizeInMB を増やし、新しいサーバーレスエンドポイントの構成を作成します。
    例:
    import boto3
    
    client = boto3.client('sagemaker', region_name='us-east-1')
    
    endpoint_config_name = "new-endpoint-config"
    
    endpoint_config_response = client.create_endpoint_config(
        EndpointConfigName=endpoint_config_name,
        ProductionVariants=[
            {
                "VariantName": YourVariantName,
                "ModelName": YourModelName,
                "ServerlessConfig": {
                    "MemorySizeInMB": NewMemorySize,
                    "MaxConcurrency": 1,
                },
            },
        ],
    )
    注: 実際のものでそれぞれ、YourVariantName をバリアント名に、YourModelName をモデル名に置き換えます。NewMemorySize を実際のメモリサイズ制限に置き換えます。使用できる最大値は 6 GB です。
  2. サーバーレスエンドポイントを新しい設定で更新します。
    例:
    endpoint_name = 'my-old-endpoint'
    
    update_endpoint_response = client.update_endpoint(
        EndpointName=endpoint_name,
        EndpointConfigName=endpoint_config_name
    )

ワーカー構成を最適化する

メモリエラーを回避するには、使用可能なすべての CPU リソースを使用するワーカーをコンテナに 1 つだけ作成します。このアプローチは、リアルタイムエンドポイントとは異なります。リアルタイムエンドポイントでは、一部の SageMaker AI コンテナが vCPU ごとにワーカーを作成する場合があります。

SageMaker AI 推論ツールキットを含むビルド済みコンテナでは、SAGEMAKER_MODEL_SERVER_WORKERS を 1 に設定し、推論のモデル生成を変更します。

例:

import boto3

client = boto3.client('sagemaker', region_name='us-east-1')

response = client.create_model(
    ModelName='YourModelName',
    Containers=[
    {
        'Image': "YourImage"
        'Mode': 'SingleModel',
        'ModelDataUrl': "YourModelDataURL",
        'Environment': {
            'SAGEMAKER_CONTAINER_LOG_LEVEL': '20',
            'SAGEMAKER_MODEL_SERVER_WORKERS': '1'
        }
    }
    ],
    ExecutionRoleArn=role
)

注: 実際のものでそれぞれ、YourModelName をモデル名に、YourImage をイメージ名に、YourModelDataUrl をモデルデータの URL に置き換えます。

** エンドポイントをリアルタイムエンドポイントとしてデプロイし、必要なインスタンスの詳細を指定する**

エンドポイントをリアルタイムエンドポイントとしてデプロイする方法については、この記事の「サーバーレスエンドポイントからリアルタイムエンドポイントに移行します」を参照してください。

ディスク容量が不十分

サーバーレスエンドポイントに使用可能なディスク容量がない場合、次のエラーメッセージが表示されることがあります。

「OSError: [Errno 28] No space left on device」

この問題を解決するには、次の手順を実行します。

  • 圧縮したモデルサイズを解凍した際に、使用可能なディスク容量を超えないようにしてください。ファイルは圧縮サイズの 3 倍に解凍されます。
  • 小容量のモデルアーティファクトを使用し、.tar アーカイブ内のすべてのファイルがデプロイに必須のものであることを確認してください。
  • サーバーレス推論を行えない場合は、リアルタイムエンドポイントにデプロイしてインスタンスの仕様をカスタマイズします。

サーバーレス推論エンドポイントのコールドスタートシナリオ

リソースのプロビジョニングはオンデマンドであることと、SageMaker AI サーバーレス推論の制限により、SageMaker AI サーバーレス推論エンドポイントを事前にウォーミングする明確な方法はありません。詳細については、「コールドスタートの最小化」を参照してください。

割り当てられた ProvisionedConcurrency に対し、SageMaker AI はミリ秒単位で応答するために、エンドポイントをウォーム状態に保ちます。コールドスタートによる遅延の問題を最小限に抑えるには、ProvisionedConcurrency を使用してエンドポイントを更新します。詳細については、「Amazon CloudWatch で Amazon SageMaker AI を監視するためのメトリクス」を参照してください。

次の手順を実行します。

  1. ProvisionedConcurrencyMaxConcurrency 以内に指定し、新しいサーバーレスエンドポイント設定を作成します。
    設定例
    import boto3
    client = boto3.client('sagemaker', region_name='us-east-1')
    
    endpoint_config_name = "new-endpoint-config"
    
    endpoint_config_response = client.create_endpoint_config(
        EndpointConfigName=endpoint_config_name,
        ProductionVariants=[
            {
                "VariantName": YourVariantName,
                "ModelName": YourModelName,
                "ServerlessConfig": {
                    "MemorySizeInMB": NewMemorySize,
                    "MaxConcurrency": 1,
                    "ProvisionedConcurrency": 1,
                },
            },
        ],
    )
    注: 実際のものでそれぞれ、YourVariantName をバリアント名に、YourModelName をモデル名に置き換えます。NewMemorySize を実際のメモリサイズ制限に置き換えます。使用できる最大値は 6 GB です。
  2. エンドポイントを新しい設定で更新します。
    例:
    endpoint_name = 'my-serverless-endpoint'
    update_endpoint_response = client.update_endpoint(
        EndpointName=endpoint_name,
        EndpointConfigName=endpoint_config_name
    )

注: SageMaker AI Serverless Inference Benchmarking Toolkit を使用して、サーバーレスエンドポイントの効率を最大化できる設定を判断することをおすすめします。

関連情報

Amazon SageMaker AI サーバーレス推論を使用してモデルをデプロイする

AWS公式更新しました 1年前
コメントはありません

関連するコンテンツ