ほとんどのモデル推論シナリオでは、サービスはObject Storage service (OSS) バケットまたはApsara File Storage NAS (NAS) ファイルシステムに格納されているモデルファイルをローカルディレクトリにマウントします。 モデルの読み取り、モデルの切り替え、コンテナのスケーリングなどの操作を実行すると、操作がネットワーク帯域幅の影響を受け、遅延する可能性があります。 この問題を解決するために、Elastic Algorithm Service (EAS) はローカルディレクトリのメモリキャッシングを提供します。 システムは、モデルファイルをディスクからメモリにキャッシュして、データの読み取りを高速化し、待ち時間を短縮します。 このトピックでは、ローカルディレクトリのメモリキャッシングの設定方法とアクセラレーションのパフォーマンスについて説明します。
背景情報
ほとんどの場合、特に安定拡散シナリオでは、モデル推論の完了に長い時間が必要です。 推論要求を処理するには、基本モデルとLoRAモデルを頻繁に切り替える必要があります。 システムは、モデルが切り替えられるたびにOSSまたはNASからモデルファイルを読み取ります。これにより、遅延が大幅に増加します。 この問題を解決するために、EASはローカルディレクトリのメモリキャッシングを提供します。 次の図は、原則を示しています。
ほとんどのモデル推論シナリオでは、サービスはOSS、NAS、またはDockerイメージを使用してモデルファイルをローカルディレクトリにマウントします。 ストレージをサービスにマウントする方法については、「ストレージをサービスにマウントする (詳細) 」をご参照ください。
EASは、ローカルディレクトリのメモリキャッシングを提供します。
ほとんどのAI生成コンテンツ (AIGC) シナリオでは、メモリ容量は十分です。 モデルファイルをローカルディレクトリにマウントすることで、ローカルディレクトリ内のモデルファイルをメモリにキャッシュできます。
キャッシュはLRUポリシーをサポートし、インスタンス間でファイルを共有できます。 キャッシュされたファイルは、ファイルシステムディレクトリとして表示されます。
サービスは、メモリ内のキャッシュされたファイルを直接読み取ります。 ビジネスコードを変更することなく、操作を高速化できます。
サービスのインスタンスは、P2Pネットワークを共有する。 サービスクラスターをスケールアウトすると、追加されたインスタンスは、P2Pネットワークを介して他のインスタンスからキャッシュされたファイルを読み取り、クラスターのスケールアウトを高速化できます。
注意
データの一貫性を確保するため、キャッシュディレクトリは読み取り専用です。
モデルファイルを追加する場合は、モデルファイルをソースディレクトリに追加できます。 モデルファイルは、キャッシュディレクトリから直接読み取ることができます。
ソースディレクトリ内のモデルファイルを直接変更または削除しないことを推奨します。 そうでなければ、ダーティデータがキャッシュされ得る。
手順
PAIコンソールでのローカルディレクトリのメモリキャッシングの設定
Elastic Algorithm Service (EAS)ページに移動します。
PAIコンソールにログインします。
左側のナビゲーションウィンドウで、[ワークスペース] をクリックします。 [ワークスペース] ページで、管理するワークスペースの名前をクリックします。
左側のナビゲーションウィンドウで、 を選択します。 Elastic Algorithm Service (EAS) ページが表示されます。
Platform for AI (PAI) コンソールのElastic Algorithm Service (EAS) ページで、[サービスのデプロイ] をクリックします。 [サービスのデプロイ] ページで、[カスタムモデルのデプロイ] セクションの [カスタムデプロイ] をクリックします。
[サービスの作成] ページで、次の表に示すパラメーターを設定します。 その他のパラメーターについては、「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
から直接読み取ることができます。パラメーターを設定したら、[デプロイ] をクリックします。
オンプレミスクライアントのローカルディレクトリのメモリキャッシングの構成
手順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: モデルサービスのデプロイ
モデルサービスをデプロイし、モデルサービスのメモリキャッシュを有効にします。
コンソールでのモデルサービスのデプロイ
[サービスの作成] ページに移動します。 詳細については、「PAIコンソールでのモデルサービスのデプロイ」をご参照ください。
[構成エディター] セクションで、[JSONデプロイ] をクリックします。 エディタフィールドに、ステップ1で準備した構成コードを入力します。
[デプロイ] をクリックします。
EASCMDクライアントを使用したモデルサービスのデプロイ
EASCMDクライアントをダウンロードし、ID認証を実行します。 詳細については、「EASCMDクライアントのダウンロードとID認証の完了」をご参照ください。
手順1の手順に従って、EASCMDクライアントが存在するディレクトリに
test. JSON
という名前のjsonファイルを作成します。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マウントによってファイルを読み取るのに消費される時間と同じです。
サービスに複数のインスタンスがある場合、インスタンスクラスターはメモリを共有します。 インスタンスがモデルをロードすると、インスタンスはクラスター内の他のインスタンスのメモリを直接読み取ることができます。 ファイルの読み取りにかかる時間は、ファイルのサイズによって異なります。
サービスクラスターがスケールアウトされると、追加されたインスタンスは、初期化中にクラスター内の他のインスタンスのメモリからモデルを自動的に読み取ることができます。 このようにして、サービスは、より速くより柔軟な方法でスケールアウトされる。