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

Platform For AI:ローカルディレクトリのメモリキャッシュを有効にする

最終更新日:Aug 14, 2024

ほとんどのモデル推論シナリオでは、サービスはObject Storage service (OSS) バケットまたはApsara File Storage NAS (NAS) ファイルシステムに格納されているモデルファイルをローカルディレクトリにマウントします。 モデルの読み取り、モデルの切り替え、コンテナのスケーリングなどの操作を実行すると、操作がネットワーク帯域幅の影響を受け、遅延する可能性があります。 この問題を解決するために、Elastic Algorithm Service (EAS) はローカルディレクトリのメモリキャッシングを提供します。 システムは、モデルファイルをディスクからメモリにキャッシュして、データの読み取りを高速化し、待ち時間を短縮します。 このトピックでは、ローカルディレクトリのメモリキャッシングの設定方法とアクセラレーションのパフォーマンスについて説明します。

背景情報

ほとんどの場合、特に安定拡散シナリオでは、モデル推論の完了に長い時間が必要です。 推論要求を処理するには、基本モデルとLoRAモデルを頻繁に切り替える必要があります。 システムは、モデルが切り替えられるたびにOSSまたはNASからモデルファイルを読み取ります。これにより、遅延が大幅に増加します。 この問題を解決するために、EASはローカルディレクトリのメモリキャッシングを提供します。 次の図は、原則を示しています。

image
  • ほとんどのモデル推論シナリオでは、サービスはOSS、NAS、またはDockerイメージを使用してモデルファイルをローカルディレクトリにマウントします。 ストレージをサービスにマウントする方法については、「ストレージをサービスにマウントする (詳細) 」をご参照ください。

  • EASは、ローカルディレクトリのメモリキャッシングを提供します。

    • ほとんどのAI生成コンテンツ (AIGC) シナリオでは、メモリ容量は十分です。 モデルファイルをローカルディレクトリにマウントすることで、ローカルディレクトリ内のモデルファイルをメモリにキャッシュできます。

    • キャッシュはLRUポリシーをサポートし、インスタンス間でファイルを共有できます。 キャッシュされたファイルは、ファイルシステムディレクトリとして表示されます。

    • サービスは、メモリ内のキャッシュされたファイルを直接読み取ります。 ビジネスコードを変更することなく、操作を高速化できます。

  • サービスのインスタンスは、P2Pネットワークを共有する。 サービスクラスターをスケールアウトすると、追加されたインスタンスは、P2Pネットワークを介して他のインスタンスからキャッシュされたファイルを読み取り、クラスターのスケールアウトを高速化できます。

注意

  • データの一貫性を確保するため、キャッシュディレクトリは読み取り専用です。

  • モデルファイルを追加する場合は、モデルファイルをソースディレクトリに追加できます。 モデルファイルは、キャッシュディレクトリから直接読み取ることができます。

  • ソースディレクトリ内のモデルファイルを直接変更または削除しないことを推奨します。 そうでなければ、ダーティデータがキャッシュされ得る。

手順

PAIコンソールでのローカルディレクトリのメモリキャッシングの設定

  1. Elastic Algorithm Service (EAS)ページに移動します。

    1. PAIコンソールにログインします。

    2. 左側のナビゲーションウィンドウで、[ワークスペース] をクリックします。 [ワークスペース] ページで、管理するワークスペースの名前をクリックします。

    3. 左側のナビゲーションウィンドウで、[モデル展開] > [Elastic Algorithm Service (EAS)] を選択します。 Elastic Algorithm Service (EAS) ページが表示されます。

  2. Platform for AI (PAI) コンソールのElastic Algorithm Service (EAS) ページで、[サービスのデプロイ] をクリックします。 [サービスのデプロイ] ページで、[カスタムモデルのデプロイ] セクションの [カスタムデプロイ] をクリックします。

  3. [サービスの作成] ページで、次の表に示すパラメーターを設定します。 その他のパラメーターについては、「PAIコンソールでのモデルサービスのデプロイ」をご参照ください。

    パラメーター

    説明

    モデルサービス情報

    モデル設定の指定

    [モデル設定の指定] をクリックして、モデルサービスを設定します。 この例では、OSSパスのマウントが使用されています。

    • OSS: // path/to/models/ などのossパスを選択します。

    • /data-slowなどのマウントパスを設定します。 マウントパスは、OSSパスがコンテナーにマウントされるディレクトリです。

    実行するコマンド

    スタートアップパラメーター -ckpt-dir-ckpt-dir /data-fastなどのキャッシュディレクトリに設定する必要があります。

    サービス設定

    メモリキャッシング

    [メモリキャッシング] をクリックし、次のパラメーターを設定します。

    • Maximum Memory Usage: キャッシュされたファイルによって占有される最大メモリ。 単位は GB です。 キャッシュファイルが最大メモリを超えた場合、LRUポリシーを使用して特定のキャッシュファイルを削除します。

    • ソースパス: キャッシュされたファイルのソースディレクトリ。 ディレクトリは、OSSまたはNASのキャッシュされたファイルがマウントされるコンテナ内のマウントパス、マウントパスのサブディレクトリ、およびコンテナ内の共通ファイルディレクトリのいずれかのパスにすることができます。 例: /data-slow

    • マウントパス: キャッシュされたファイルがマウントされるディレクトリ。 このディレクトリ内のファイルは、ソースディレクトリ内のファイルと同じです。 サービスは、キャッシュされたファイルがマウントされているディレクトリからファイルを読み取る必要があります。 例: /data-fast

    上記のサンプルの設定では、OSSパスがコンテナ内の /data-slowディレクトリにマウントされ、ソースディレクトリ /data-slowがCacheFSコンポーネントを使用してキャッシュディレクトリ /data-fastにマウントされていることを示しています。 これにより、ソースディレクトリ /data-slowに格納されているキャッシュファイルをキャッシュディレクトリ /data-fastから直接読み取ることができます。

  4. パラメーターを設定したら、[デプロイ] をクリックします。

オンプレミスクライアントのローカルディレクトリのメモリキャッシングの構成

手順1: 設定ファイルの準備

cacheおよびmount_pathパラメーターを設定ファイルに追加します。 次の例では、設定のサンプルを示します。 ストレージをサービスにマウントする方法については、「ストレージをサービスにマウントする (詳細) 」をご参照ください。

    "storage": [
        {
            "mount_path": "/data-slow",
            "oss": {
                "path": "oss://path/to/models/",
                "readOnly": false
            },
            "properties": {
                "resource_type": "model"
            }
        },
        {
            "cache": {
                "capacity": "20G",
                "path": "/data-slow"
            },
            "mount_path": "/data-fast"
        }
    ]
  • パラメータ説明

    パラメーター

    説明

    キャッシュ

    容量

    キャッシュされたファイルが占有する最大メモリ。 キャッシュファイルが最大メモリを超えた場合、LRUポリシーを使用して特定のキャッシュファイルを削除します。

    パス

    キャッシュされたファイルのソースディレクトリ。 ディレクトリは、OSSまたはNASのキャッシュされたファイルがマウントされるコンテナ内のマウントパス、マウントパスのサブディレクトリ、およびコンテナ内の共通ファイルディレクトリのいずれかのパスにすることができます。

    mount_path

    キャッシュされたファイルがマウントされるディレクトリ。 このディレクトリ内のファイルは、ソースディレクトリ内のファイルと同じです。 サービスは、キャッシュされたファイルがマウントされているディレクトリからファイルを読み取る必要があります。

  • 設定の説明

    上記のサンプルの設定では、OSSパスがコンテナ内の /data-slowディレクトリにマウントされ、ソースディレクトリ /data-slowがCacheFSコンポーネントを使用してキャッシュディレクトリ /data-fastにマウントされていることを示しています。 これにより、ソースディレクトリ /data-slowに格納されているキャッシュファイルをキャッシュディレクトリ /data-fastから直接読み取ることができます。

次の例は、安定拡散モデルサービスのメモリキャッシュを構成する方法を示しています。 ビジネス要件に基づいて設定を変更します。 安定拡散推論サービスのデプロイ方法については、「EASで安定拡散APIサービスを迅速にデプロイする」をご参照ください。

{
  "cloud": {
    "computing": {
      "instance_type": "ml.gu7i.c8m30.1-gu30"
    }
  },
  "containers": [
    {
      "image": "eas-registry-vpc.cn-hangzhou.cr.aliyuncs.com/pai-eas/stable-diffusion-webui:3.2",
      "port": 8000,
      "script": "./webui.sh --listen --port 8000 --skip-version-check --no-hashing --no-download-sd-model --skip-install --filebrowser --api --no-read-lora-meta --disable-nsfw-censor --public-cache --ckpt-dir data-fast/models/Stable-diffusion"
    }
  ],
  "metadata": {
    "cpu": 32,
    "enable_webservice": true,
    "gpu": 1,
    "instance": 1,
    "name": "sd_cache"
  },
  "storage": [
    {
      "mount_path": "/code/stable-diffusion-webui/data-oss",
      "oss": {
        "path": "oss://examplebucket/data-zf/"
      },
      "properties": {
                "resource_type": "model"
      }
    },
    {
      "mount_path": "/code/stable-diffusion-webui/data-fast/models",
      "cache": {
        "path": "/code/stable-diffusion-webui/data-oss/models",
        "capacity": "15G"
      }
    }
  ]
}

次の重要なパラメータに注意してください。 その他のパラメーターについては、「モデルサービスのパラメーター」をご参照ください。

  • script: 起動パラメーター -ckpt-dirをキャッシュディレクトリに設定します。 例: -ckpt-dir data-fast/models/Stable-diffusion

  • storage: マウント設定。 上記のコードでは、OSSパスはdata-ossディレクトリにマウントされ、ソースディレクトリdata-oss/modelsはCacheFSコンポーネントを使用してキャッシュディレクトリdata-fast/modelsにマウントされます。 このようにして、サービスはソースディレクトリdata-oss内のキャッシュファイルをキャッシュディレクトリdata-fast/models/Stable-diffusionから直接読み取ることができます。

    • OSSパスを、モデルファイルが保存されているOSSバケットのパスに設定します。

手順2: モデルサービスのデプロイ

モデルサービスをデプロイし、モデルサービスのメモリキャッシュを有効にします。

コンソールでのモデルサービスのデプロイ

  1. [サービスの作成] ページに移動します。 詳細については、「PAIコンソールでのモデルサービスのデプロイ」をご参照ください。

  2. [構成エディター] セクションで、[JSONデプロイ] をクリックします。 エディタフィールドに、ステップ1で準備した構成コードを入力します。

  3. [デプロイ] をクリックします。

EASCMDクライアントを使用したモデルサービスのデプロイ

  1. EASCMDクライアントをダウンロードし、ID認証を実行します。 詳細については、「EASCMDクライアントのダウンロードとID認証の完了」をご参照ください。

  2. 手順1の手順に従って、EASCMDクライアントが存在するディレクトリにtest. JSONという名前のjsonファイルを作成します。

  3. JSONファイルが存在するディレクトリで次のコマンドを実行します。 この例では、Windows 64が使用されています。

    eascmdwin64.exe create <test.json>

サービスのデプロイ後、ローカルディレクトリのメモリキャッシュからモデルファイルを直接読み取ることで、モデルの読み取り、モデルの切り替え、およびインスタンススケーリングの効率を向上させることができます。 アクセラレーションパフォーマンスの詳細については、「アクセラレーションパフォーマンス」をご参照ください。

アクセラレーションパフォーマンス

次の表は、例として安定拡散を使用したモデル切り替えシナリオの加速パフォーマンスを示しています。 単位は秒です。 実際の加速性能は、実際の状況に基づいて変化する。

モデル

モデルサイズ

OSSパスのマウント

ローカルインスタンスメモリヒット

リモートインスタンスメモリヒット

anything-v4.5.safetensors

7.2G

89.88

3.845

15.18

Anything-v5.0-PRT-RE.safetensors

2.0G

16.73

2.967

5.46

cetusMix_Coda2.safetensors

3.6G

24.76

3.249

7.13

chilloutmix_NiPrunedFp32Fix.safetensors

4.0G

48.79

3.556

8.47

CounterfeitV30_v30.safetensors

4.0G

64.99

3.014

7.94

devisuate_v2.safetensors

2.0G

16.33

2.985

5.55

DreamShaper_6_NoVae.safetensors

5.6G

71.78

3.416

10.17

pastelmix-fp32.ckpt

4.0G

43.88

4.959

9.23

revAnimated_v122.safetensors

4.0G

69.38

3.165

3.20

  • メモリキャッシュにモデルファイルが見つからない場合、CacheFSは自動的にソースディレクトリからファイルを読み取ります。 たとえば、ファイルがOSSバケットからマウントされている場合、CacheFSはOSSバケットからファイルを読み取ります。 消費される時間は、基本的に、OSSマウントによってファイルを読み取るのに消費される時間と同じです。

  • サービスに複数のインスタンスがある場合、インスタンスクラスターはメモリを共有します。 インスタンスがモデルをロードすると、インスタンスはクラスター内の他のインスタンスのメモリを直接読み取ることができます。 ファイルの読み取りにかかる時間は、ファイルのサイズによって異なります。

  • サービスクラスターがスケールアウトされると、追加されたインスタンスは、初期化中にクラスター内の他のインスタンスのメモリからモデルを自動的に読み取ることができます。 このようにして、サービスは、より速くより柔軟な方法でスケールアウトされる。