すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:ECSベースのエラスティック推論

最終更新日:Jan 23, 2025

モデルのトレーニング後、モデルは通常、推論サービスとしてデプロイされます。 推論サービスへの呼び出し回数は、ビジネス要件に基づいて動的に変化します。 さまざまな負荷を処理し、コストを削減するには、エラスティックスケーリングが必要です。 従来の展開ソリューションは、大規模かつ高度に並行するシステムの弾性要件を満たすことができない。 Container Service for Kubernetes (ACK) を使用すると、エラスティックノードプールにワークロードをデプロイして、推論サービスのエラスティックスケーリングを有効にできます。 このトピックでは、elastic Compute Service (ECS) インスタンスでElastic inferenceワークロードを実行する方法について説明します。

前提条件

手順

  1. エラスティックノードプールを作成します。

    1. ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。

    2. [クラスター] ページで、管理するクラスターを見つけ、クラスターの名前をクリックするか、[操作] 列の [詳細] をクリックします。 クラスターの詳細ページが表示されます。

    3. 詳細ページの左側のナビゲーションウィンドウで、[ノード] > [ノードプール] を選択します。

    4. の右上隅にノードプールページをクリックします。ノードプールの作成.

    5. [ノードプールの作成] ダイアログボックスでパラメーターを設定し、[注文の確認] をクリックします。 次の表に、主要なパラメーターを示します。 その他のパラメーターの詳細については、「ノードプールの作成と管理」をご参照ください。

      パラメーター

      説明

      Auto Scaling

      [自動] を選択し、最小値を設定します。 インスタンスMax。 インスタンスの

      Billing Method

      [プリエンプティブルインスタンス] を選択します。

      ノードラベル

      Keyinferenceに、Valuetensorflowに設定します。

      スケーリングポリシー

      [コスト最適化] を選択し、[従量課金インスタンスの割合] を [30%] に設定します。

  2. トレーニング済みモデルをObject Storage Service (OSS) バケットにアップロードします。 詳細については、「オブジェクトのアップロード」をご参照ください。

  3. 永続ボリューム (PV) と永続ボリューム要求 (PVC) を作成します。

    1. pvc.yamlという名前のファイルを作成し、次のコンテンツをファイルにコピーします。

      apiVersion: v1
      kind: PersistentVolume
      metadata:
        name: model-csi-pv
      spec:
        capacity:
          storage: 5Gi
        accessModes:
          - ReadWriteMany
        persistentVolumeReclaimPolicy: Retain
        csi:
          driver: ossplugin.csi.alibabacloud.com
          volumeHandle: model-csi-pv // The value must be the same as the name of the PV. 
          volumeAttributes:
            bucket: "<Your Bucket>"
            url: "<Your oss url>"
            akId: "<Your Access Key Id>"
            akSecret: "<Your Access Key Secret>"
            otherOpts: "-o max_stat_cache_size=0 -o allow_other"
      ---
      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: model-pvc
      spec:
        accessModes:
        - ReadWriteMany
        resources:
          requests:
            storage: 5Gi

      パラメーター

      説明

      バケット

      OSSバケットの名前。OSS内でグローバルに一意です。 詳細については、「バケットの命名規則」をご参照ください。

      url

      バケット内のオブジェクトにアクセスするために使用されるURL。 詳細については、「単一オブジェクトのURLまたは複数オブジェクトのURLの取得」をご参照ください。

      akId

      OSSバケットへのアクセスに使用されるAccessKey IDとAccessKeyシークレット。 Resource access Management (RAM) ユーザーとしてOSSバケットにアクセスすることを推奨します。 詳細については、「アクセスキーの作成」をご参照ください。

      akSecret

      otherOpts

      OSSバケットをマウントするためのカスタムパラメーター。

      • -o max_stat_cache_size=0を設定して、メタデータキャッシュを無効にします。 この機能が無効になっている場合、システムはOSS内のオブジェクトにアクセスしようとするたびに、OSSから最新のメタデータを取得します。

      • -o allow_otherを設定して、マウントしたOSSバケットに他のユーザーがアクセスできるようにします。

      その他のパラメーターの詳細については、「ossfsでサポートされているカスタムパラメーター」をご参照ください。

    2. 次のコマンドを実行して、PVとPVCを作成します。

      kubectl apply -f pvc.yaml
  4. 次のコマンドを実行して、推論サービスをデプロイします。

    arena serve tensorflow \
      --name=bert-tfserving \
      --model-name=chnsenticorp  \
      --selector=inference:tensorflow \
      --gpus=1  \
      --image=tensorflow/serving:1.15.0-gpu \
      --data=model-pvc:/models \
      --model-path=/models/tensorflow \
      --version-policy=specific:1623831335 \
      --limits=nvidia.com/gpu=1 \
      --requests=nvidia.com/gpu=1 

    パラメーター

    説明

    セレクター

    selectorパラメーターは、ラベルに基づいてTensorFlowトレーニングジョブのポッドを選択するために使用されます。 この例では、値はinference: tensorflowに設定されています。

    limits: nvidia.com/gpu

    サービスで使用できるGPUの最大数。

    requests: nvidia.com/gpu

    サービスに必要なGPUの最小数。

    モデル名

    モデルの名前。

    モデルパス

    モデルのパス。

  5. 水平ポッドオートスケーラー (HPA) を設定します。 HPAは、ワークロードに基づいてKubernetesクラスター内のレプリケートされたポッドの数を自動的に調整できます。

    1. hpa.yamlという名前のファイルを作成し、次のコンテンツをファイルにコピーします。

      apiVersion: autoscaling/v2beta1
      kind: HorizontalPodAutoscaler
      metadata:
        name: bert-tfserving-hpa
      spec:
        scaleTargetRef:
          apiVersion: apps/v1
          kind: Deployment
          name: bert-tfserving-202107141745-tensorflow-serving
        minReplicas: 1
        maxReplicas: 10
        metrics:
        - type: External
          external:
            metricName: sls_ingress_qps
            metricSelector:
              matchLabels:
                sls.project: "k8s-log-c210fbedb96674b9eaf15f2dc47d169a8"
                sls.logstore: "nginx-ingress"
                sls.ingress.route: "default-bert-tfserving-202107141745-tensorflow-serving-8501"
            targetAverageValue: 10

      パラメーター

      説明

      scaleTargetRef

      HPAがバインドされているオブジェクト。 この例では、値は推論サービスのデプロイの名前に設定されます。

      minReplicas

      レプリケートされたポッドの最小数。

      maxReplicas

      レプリケートされたポッドの最大数。

      sls.project

      クラスターで使用されるSimple Log Serviceプロジェクトの名前。 パラメーターの値は、k8s-log-{cluster id} の形式である必要があります。

      sls.logstore

      Simple Log Service Logstoreの名前。 デフォルト値はnginx-ingressです。

      sls.ingress.route

      サービスを公開するために使用されるIngress。 この例では、値は {namespace}-{service name}-{service port} に設定されています。

      metricname

      メトリック名 この例では、値はsls_ingress_qpsに設定されています。

      targetaverageValue

      スケールアウトアクティビティをトリガーする1秒あたりのクエリ (QPS) 値。 この例では、このパラメーターの値は10に設定されています。 QPS値が10を超えると、スケールアウトアクティビティがトリガーされます。

    2. 次のコマンドを実行してHPAをデプロイします。

      kubectl apply -f hpa.yaml
  6. インターネットに接続するIngressを設定します。

    デフォルトでは、arena serve tensorflowコマンドを実行してデプロイされる推論サービスには、クラスターIPアドレスのみが割り当てられます。 インターネット経由でサービスにアクセスすることはできません。 したがって、推論サービス用のインターネット向けIngressを作成する必要があります。

    1. ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。

    2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、[ネットワーク] > [Ingress] を選択します。

    3. [Ingress] ページの上部で、[名前空間] ドロップダウンリストから推論サービスが存在する名前空間を選択し、[Ingressの作成] をクリックします。 次の表に示すパラメーターを設定します。 パラメーターの詳細については、「NGINX Ingressの作成」をご参照ください。

      • 名前: この例では、値はbert-tfservingに設定されています。

      • ルール:

        • ドメイン名: test.example.comなどのカスタムドメイン名を入力します。

        • マッピング

          • Path: この例では、ルートパス /が使用されています。

          • Rule: この例では、デフォルトのルール (ImplementationSpecific) が使用されています。

          • サービス名: kubectl get Serviceコマンドによって返されるサービス名を入力します。

          • ポート: この例では、このパラメーターを8501に設定します。

  7. Ingressを作成したら、Ingressページに移動してIngressを見つけます。 [ルール] 列の値には、Ingressのエンドポイントが含まれます。 12

  8. 取得したIngressアドレスを使用して、推論サービスでストレステストを実行します。

  9. AIダッシュボードにログインします。 詳細については、「AIダッシュボードへのアクセス」をご参照ください。

    重要

    AIダッシュボードにログインする前に、クラウドネイティブAIスイートをインストールし、アクセス方法を指定する必要があります。 詳細については、「クラウドネイティブAIスイートのデプロイ」をご参照ください。

  10. AIダッシュボードの左側のナビゲーションウィンドウで、[Elastic Job] > [Job List] を選択します。 [推論ジョブ] タブをクリックして、推論サービスに関する詳細を表示します。

    次の図は、スケールアウトアクティビティで作成されたすべてのポッドがECSインスタンスで実行されることを示しています。 従量課金ECSインスタンスとプリエンプティブECSインスタンスの両方がプロビジョニングされます。 従量課金ECSインスタンスの比率は、ノードプールの作成時に指定したパーセンテージ値と同じです。ESS