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

:Fluid と ASM 上の KServe 機能を統合して、データアクセスを高速化する AI サービングを実装する

最終更新日:Jan 13, 2025

KServe(旧称 KFServing)は、クラウドネイティブ環境向けの AI モデルサービスおよび推論エンジンです。自動スケーリング、スケールツーゼロ、カナリアデプロイメントをサポートしています。 サービスメッシュ(ASM)は、コンテナサービス Kubernetes 版(ACK)クラスターまたはサーバーレス Kubernetes(ASK)クラスターのいずれかにデプロイされた Knative Serving コンポーネントの機能を統合します。 さらに、ASM は ASM 上の KServe 機能を提供し、数回クリックするだけで KServe と ASM を統合して AI サービングを実現できます。 Fluid は、ビッグデータアプリケーションや AI アプリケーションなどのクラウドネイティブシナリオにおけるデータ集約型アプリケーション向けの、オープンソースの Kubernetes ネイティブ分散データセットオーケストレーターおよびアクセラレーターです。 Fluid を ASM 上の KServe 機能と直接統合して、モデルの読み込みを高速化できます。 このトピックでは、Fluid と ASM 上の KServe 機能を統合して、データアクセスを高速化する AI サービングを実装する方法について説明します。

前提条件

  • バージョン 1.17 以降の ASM インスタンスが作成され、Kubernetes クラスターが ASM インスタンスに追加されています。 詳細については、「ASM インスタンスの作成」および「ASM インスタンスへのクラスターの追加」をご参照ください。

    説明
    • ASM インスタンスの更新方法の詳細については、「ASM インスタンスの更新」をご参照ください。

    • Kubernetes クラスターの場合:

      • ACK クラスターを使用する場合、クラスターのバージョンは 1.22 以降である必要があります。 詳細については、「ACK マネージドクラスターの作成」または「ACK クラスターの更新」をご参照ください。 AI サービングにグラフィック処理装置(GPU)を使用する場合は、ACK クラスターに ecs.gn6i-c16g1.4xlarge などの GPU アクセラレーションノードが含まれていることを確認してください。

      • ASK クラスターを使用する場合、クラスターのバージョンは 1.18 以降である必要があり、CoreDNS コンポーネントがクラスターにインストールされている必要があります。 詳細については、「ACK Serverless クラスターの作成」および「システムコンポーネントの管理」をご参照ください。

  • データプレーン上のクラスターの Kubernetes API を使用して Istio リソースにアクセスする機能が、ASM インスタンスで有効になっています。 詳細については、「データプレーン上のクラスターの Kubernetes API を使用して Istio リソースにアクセスする」をご参照ください。

  • クラスターのイングレスゲートウェイが作成されています。 この例では、クラスターの ASM イングレスゲートウェイが作成されます。 ASM イングレスゲートウェイはデフォルト名 ingressgateway を使用し、ポート 80 と 443 が公開されます。 詳細については、「イングレスゲートウェイの作成」をご参照ください。

  • Knative Serving コンポーネントが ACK または ASK クラスターにデプロイされ、ASM 上の Knative 機能が有効になっています。 詳細については、「ASM 上の Knative を使用してサーバーレスアプリケーションをデプロイする」をご参照ください。

    Knative Serving コンポーネントのデプロイ方法を表示

    • ACK クラスターに Knative コンポーネントをインストールする方法の詳細については、「Knative のデプロイ」をご参照ください。

    • ASK クラスターに Knative コンポーネントをインストールする方法の詳細については、「Knative の有効化」をご参照ください。

    説明

    Knative コンポーネントをインストールするためのゲートウェイとして [kourier] を選択した場合は、Knative コンポーネントのインストール後に Kourier をアンインストールすることをお勧めします。 Knative コンポーネントをインストールし、Kourier をアンインストールするには、次の手順を実行します。ACK コンソールの [クラスター] ページで、クラスターをクリックします。 左側のナビゲーションペインで、[アプリケーション] > [knative] を選択します。 表示されるページで、Knative コンポーネントをインストールし、ゲートウェイとして Kourier を選択します。 Knative コンポーネントがインストールされたら、[コンポーネント] タブをクリックし、[アドオンコンポーネント] セクションで [kourier] をアンインストールします。

    ASM 上の Knative を有効にする方法を表示

    1. ASM コンソール にログインします。 左側のナビゲーションペインで、[サービスメッシュ] > [メッシュ管理] を選択します。

    2. [メッシュ管理] ページで、ASM インスタンスの名前をクリックします。 左側のナビゲーションペインで、[エコシステム] > [ASM 上の Knative] を選択します。

    3. [ASM 上の Knative] ページで、[ASM 上の Knative を有効にする] をクリックします。

  • オブジェクトストレージサービス(OSS)がアクティブ化され、バケットが作成されています。 詳細については、「OSS のアクティブ化」および「バケットの作成」をご参照ください。

手順 1:ASM 上の KServe 機能を有効にする

  1. ASM コンソール にログインします。 左側のナビゲーションペインで、[サービスメッシュ] > [メッシュ管理] を選択します。

  2. [メッシュ管理] ページで、ASM インスタンスの名前をクリックします。 左側のナビゲーションペインで、[エコシステム] > [ASM 上の Kserve] を選択します。

  3. ASM 上の KServeクラスターに Certmanager コンポーネントを自動的にインストールするASM で KServe を有効にする ページで、 スイッチをオンまたはオフにして、 をクリックします。

    cert-manager は、証明書の発行とデプロイに使用できる証明書ライフサイクル管理システムです。 ASM 上の KServe 機能のデプロイと使用は、CertManager コンポーネントに依存します。 KServe をインストールすると、CertManager コンポーネントが自動的にインストールされます。

    • クラスターに CertManager をインストールしていない場合は、[クラスターに Certmanager コンポーネントを自動的にインストールする] をオンにします。

    • データプレーン上のクラスターに CertManager をインストール済みの場合は、[クラスターに Certmanager コンポーネントを自動的にインストールする] をオフにします。

手順 2:ack-fluid コンポーネントをインストールし、AI モデルのキャッシュと高速化を有効にする

  1. バージョン 0.9.10 以降の ack-fluid コンポーネントをクラスターにデプロイします。

    • データプレーン上のクラスターが ACK クラスターの場合は、クラウドネイティブ AI スイートをインストールし、ack-fluid コンポーネントをクラスターにデプロイします。

      説明

      オープンソースの Fluid をインストールしている場合は、ack-fluid コンポーネントをインストールする前にアンインストールする必要があります。

      • クラウドネイティブ AI スイートをインストールしていない場合は、スイートをインストールするときに [fluid アクセラレーション] を有効にします。 詳細については、「クラウドネイティブ AI スイートのデプロイ」をご参照ください。

      • クラウドネイティブ AI スイートをすでにインストールしている場合は、ACK コンソール にログインし、目的のクラスターをクリックして、[アプリケーション] > [クラウドネイティブ AI スイート] を選択し、[ack-fluid] コンポーネントをデプロイします。

    • データプレーン上のクラスターが ASK クラスターの場合は、ack-fluid コンポーネントをクラスターにデプロイします。 詳細については、「ジョブの高速化」トピックの「Fluid のコントロールプレーンコンポーネントのデプロイ」セクションをご参照ください。

  2. AI モデルを準備し、OSS バケットにアップロードします。

    1. AI SavedModel を準備します。

      このトピックでは、PyTorch ベースのオープンソースの Transformer 大規模言語モデル(LLM)である BLOOM モデルを使用します。 モデルデータの詳細については、Hugging Face をご参照ください。

    2. ダウンロードしたモデルデータファイルを OSS バケットにアップロードし、モデルデータファイルの格納場所を記録します。

      格納場所の形式は、oss://{bucket}/{path} です。 たとえば、fluid-demo という名前のバケットを作成し、すべてのモデルデータファイルをバケットの models/bloom ディレクトリにアップロードする場合、モデルデータファイルの格納場所は oss://fluid-demo/models/bloom です。

      説明

      OSS が提供する ossutil ツールを使用してデータをアップロードできます。 詳細については、「ossutil のインストール」をご参照ください。

  3. Fluid キャッシュと AI サービングをデプロイするための名前空間を作成し、OSS アクセス権限を設定します。

    1. kubectl を使用して、データプレーン上のクラスターに接続します。 詳細については、「kubectl を使用して ACK クラスターに接続する」をご参照ください。

    2. 次のコマンドを実行して、Fluid キャッシュと KServe ベースの AI サービングをデプロイするための kserve-fluid-demo という名前の名前空間を作成します。

      kubectl create ns kserve-fluid-demo
    3. oss-secret.yaml という名前のファイルを作成し、次の内容をファイルにコピーします。

      fs.oss.accessKeyId は、OSS にアクセスできるアカウントの AccessKey ID で、fs.oss.accessKeySecret はアカウントの AccessKey シークレットです。

      apiVersion: v1
      kind: Secret
      metadata:
        name: access-key
      stringData:
        fs.oss.accessKeyId: xxx # OSS にアクセスできる Alibaba Cloud アカウントの AccessKey ID に置き換えます。
        fs.oss.accessKeySecret: xxx # Alibaba Cloud アカウントの AccessKey シークレットに置き換えます。
    4. 次のコマンドを実行して、OSS AccessKey ペアを適用します。

      kubectl apply -f oss-secret.yaml -n kserve-fluid-demo
  4. Fluid でアクセスする AI モデルデータを宣言します。

    Dataset カスタムリソース(CR)と JindoRuntime CR を送信する必要があります。 Dataset CR は、外部ストレージシステム内のデータの URL を記述します。 JindoRuntime CR は、キャッシュシステムとその具体的な構成を記述します。

    1. oss-jindo.yaml という名前のファイルを作成し、次の内容をファイルにコピーします。

      Dataset CR では、oss://{bucket}/{path}手順 2.b で記録したモデルデータファイルの格納場所に置き換え、{endpoint} を OSS へのアクセスに使用できるエンドポイントに置き換えます。 さまざまなリージョンで OSS にアクセスするために使用できるエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。

      oss-jindo.yaml の内容を表示

      apiVersion: data.fluid.io/v1alpha1
      kind: Dataset
      metadata:
        name: oss-data
      spec:
        mounts:
        - mountPoint: "oss://{bucket}/{path}" # モデルデータファイルの格納場所に置き換えます。
          name: bloom-560m
          path: /bloom-560m
          options:
            fs.oss.endpoint: "{endpoint}" # OSS にアクセスするために使用できる実際のエンドポイントに置き換えます。
          encryptOptions:
            - name: fs.oss.accessKeyId
              valueFrom:
                secretKeyRef:
                  name: access-key
                  key: fs.oss.accessKeyId
            - name: fs.oss.accessKeySecret
              valueFrom:
                secretKeyRef:
                  name: access-key
                  key: fs.oss.accessKeySecret
        accessModes:
          - ReadOnlyMany
      ---
      apiVersion: data.fluid.io/v1alpha1
      kind: JindoRuntime
      metadata:
        name: oss-data
      spec:
        replicas: 2
        tieredstore:
          levels:
            - mediumtype: SSD
              volumeType: emptyDir
              path: /mnt/ssd0/cache
              quota: 50Gi
              high: "0.95"
              low: "0.7"
        fuse:
          properties:
            fs.jindofsx.data.cache.enable: "true"
          args:
            - -okernel_cache
            - -oro
            - -oattr_timeout=7200
            - -oentry_timeout=7200
            - -ometrics_port=9089
          cleanPolicy: OnDemand
      
    2. 次のコマンドを実行して、Dataset CR と JindoRuntime CR をデプロイします。

      kubectl create -f oss-jindo.yaml -n kserve-fluid-demo
    3. 次のコマンドを実行して、Dataset CR と JindoRuntime CR のデプロイを確認します。

      kubectl get jindoruntime,dataset -n kserve-fluid-demo

      予期される出力:

      NAME                                  MASTER PHASE   WORKER PHASE   FUSE PHASE   AGE
      jindoruntime.data.fluid.io/oss-data   Ready          Ready          Ready        3m
      
      NAME                             UFS TOTAL SIZE   CACHED   CACHE CAPACITY   CACHED PERCENTAGE   PHASE   AGE
      dataset.data.fluid.io/oss-data   3.14GiB          0.00B    100.00GiB        0.0%                Bound   3m

      出力は、Dataset CR の PHASEBound で、JindoRuntime CR の FUSE PHASEReady であることを示しています。 これは、Dataset CR と JindoRuntime CR がデプロイされていることを示しています。

  5. Fluid でデータをプリフェッチして、データアクセス性能を向上させます。

    1. oss-dataload.yaml という名前のファイルを作成し、次の内容をファイルにコピーします。

      apiVersion: data.fluid.io/v1alpha1
      kind: DataLoad
      metadata:
        name: oss-dataload
      spec:
        dataset:
          name: oss-data
          namespace: kserve-fluid-demo
        target:
          - path: /bloom-560m
            replicas: 2
    2. 次のコマンドを実行して、Dataload をデプロイし、データをプリフェッチします。

      kubectl create -f oss-dataload.yaml -n kserve-fluid-demo
    3. 次のコマンドを実行して、データプリフェッチの進捗状況をクエリします。

      kubectl get dataload -n kserve-fluid-demo

      予期される出力:

      NAME           DATASET    PHASE      AGE     DURATION
      oss-dataload   oss-data   Complete   1m      45s

      出力は、データプリフェッチに約 45 秒 かかることを示しています。 データがプリフェッチされるまで待つ必要があります。

手順 3:AI モデルに基づいて推論サービスをデプロイする

  1. クラスターに基づいて oss-fluid-isvc.yaml という名前のファイルを作成し、次の内容をファイルにコピーします。

    ACK クラスター

    apiVersion: "serving.kserve.io/v1beta1"
    kind: "InferenceService"
    metadata:
      name: "fluid-bloom"
    spec:
      predictor:
        timeout: 600
        minReplicas: 0
        containers:
          - name: kserve-container
            image: registry.cn-hangzhou.aliyuncs.com/acs/kserve-fluid:bloom-gpu
            resources:
              limits:
                cpu: "12"
                memory: 48Gi
                nvidia.com/gpu: 1 # GPU を使用する場合は、必要な GPU の数に設定します。そうでない場合は、値を設定する必要はありません。
              requests:
                cpu: "12"
                memory: 48Gi
            env:
              - name: STORAGE_URI
                value: "pvc://oss-data/bloom-560m"
              - name: MODEL_NAME
                value: "bloom"
                # GPU を使用する場合は、このパラメーターを True に設定します。そうでない場合は、このパラメーターを False に設定します。
              - name: GPU_ENABLED
                value: "True"

    ASK クラスター

    apiVersion: "serving.kserve.io/v1beta1"
    kind: "InferenceService"
    metadata:
      name: "fluid-bloom"
      labels:
        alibabacloud.com/fluid-sidecar-target: "eci"
      annotations:
        k8s.aliyun.com/eci-use-specs : "ecs.gn6i-c16g1.4xlarge" # 使用する Elastic Compute Service(ECS)インスタンスの仕様に置き換えます。
        knative.aliyun.com/reserve-instance-eci-use-specs: "ecs.gn6i-c16g1.4xlarge" # 使用する ECS インスタンスの仕様に置き換えます。
    spec:
      predictor:
        timeout: 600
        minReplicas: 0
        containers:
          - name: kserve-container
            image: registry.cn-hangzhou.aliyuncs.com/acs/kserve-fluid:bloom-gpu
            resources:
              limits:
                cpu: "12"
                memory: 48Gi
              requests:
                cpu: "12"
                memory: 48Gi
            env:
              - name: STORAGE_URI
                value: "pvc://oss-data/bloom-560m"
              - name: MODEL_NAME
                value: "bloom"
                # GPU を使用する場合は、このパラメーターを True に設定します。そうでない場合は、このパラメーターを False に設定します。
              - name: GPU_ENABLED
                value: "True"
    説明
    • このトピックでは、LLM を使用します。 したがって、12 コアと 48 GiB のリソースが適用されます。 クラスターの負荷に基づいて、InferenceServiceresources フィールドを変更します。

    • この例では、image フィールドは registry.cn-hangzhou.aliyuncs.com/acs/kserve-fluid:bloom-gpu サンプルイメージに設定されています。 このイメージは、モデルと推論サービスを読み込むためのインターフェースを提供します。 このサンプルイメージのコードは、KServe オープンソースコミュニティで表示し、イメージをカスタマイズできます。 詳細については、Docker をご参照ください。

  2. 次のコマンドを実行して、AI モデルに基づいて推論サービスをデプロイします。

    kubectl create -f oss-fluid-isvc.yaml -n kserve-fluid-demo
  3. 次のコマンドを実行して、AI モデルに基づいて推論サービスのデプロイを確認します。

    kubectl get inferenceservice -n kserve-fluid-demo

    予期される出力:

    NAME          URL                                                READY   PREV   LATEST   PREVROLLEDOUTREVISION   LATESTREADYREVISION           AGE
    fluid-bloom   http://fluid-bloom.kserve-fluid-demo.example.com   True           100                              fluid-bloom-predictor-00001   2d

    出力では、READY フィールドは True です。これは、AI モデルに基づく推論サービスがデプロイされていることを示しています。

手順 4:AI モデルに基づく推論サービスにアクセスする

  1. ASM イングレスゲートウェイのアドレスを取得します。

    1. ASM コンソール にログインします。 左側のナビゲーションペインで、[サービスメッシュ] > [メッシュ管理] を選択します。

    2. [メッシュ管理] ページで、ASM インスタンスの名前をクリックします。 左側のナビゲーションペインで、[ASM ゲートウェイ] > [イングレスゲートウェイ] を選択します。

    3. サービスアドレスイングレスゲートウェイ の セクションで、ASM ゲートウェイのサービスアドレスを表示して取得します。

  2. 次のコマンドを実行して、サンプル AI モデルに基づく推論サービス fluid-bloom にアクセスし、ASM ゲートウェイのサービスアドレスを サブステップ 1 で取得したアドレスに置き換えます。

    curl -v -H "Content-Type: application/json" -H "Host: fluid-bloom.kserve-fluid-demo.example.com" "http://{ASM ゲートウェイのサービスアドレス}:80/v1/models/bloom:predict" -d '{"prompt": "It was a dark and stormy night", "result_length": 50}'

    予期される出力:

    *   Trying xxx.xx.xx.xx :80...
    * Connected to xxx.xx.xx.xx  (xxx.xx.xx.xx ) port 80 (#0)
    > POST /v1/models/bloom:predict HTTP/1.1
    > Host: fluid-bloom-predictor.kserve-fluid-demo.example.com
    > User-Agent: curl/7.84.0
    > Accept: */*
    > Content-Type: application/json
    > Content-Length: 65
    > 
    * Mark bundle as not supporting multiuse
    < HTTP/1.1 200 OK
    < content-length: 227
    < content-type: application/json
    < date: Thu, 20 Apr 2023 09:49:00 GMT
    < server: istio-envoy
    < x-envoy-upstream-service-time: 1142
    < 
    {
      "result": "It was a dark and stormy night, and the wind was blowing in the\ndirection of the west. The wind was blowing in the direction of the\nwest, and the wind was blowing in the direction of the west. The\nwind was"
    }
    * Connection # 0 to host xxx.xx.xx.xx left intact

    出力は、AI モデルに基づく推論サービスがサンプル入力を更新し、推論結果が返されることを示しています。

関連情報