在大部分模型推理場景中,業務進程通過OSS或NAS將模型文件掛載到本地目錄,進行模型讀取、模型切換以及容器的擴縮容等操作時,會受網絡帶寬的影響,存在較大的延時問題。為了解決這個問題,EAS提供了本地目錄內存緩存加速的功能。通過將模型文件緩存到內存中,可以提高讀取數據的速度,減少延時。本文為您介紹如何配置本地目錄內存緩存并詳細說明其帶來的加速效果。
背景信息
在大部分模型推理場景中,特別是在典型的Stable Diffusion場景中,存在推理耗時長的問題。在這種場景下,推理請求需要頻繁切換基礎模型和lora模型,每次切換都要從OSS或NAS回源讀取模型,導致延時大幅增加。為了解決這個問題,EAS提供了本地目錄內存緩存加速的功能。具體的實現原理如下圖所示:
在大部分推理場景中,業務進程會通過OSS、NAS或Image將模型文件掛載到本地目錄。關于存儲掛載更詳細的內容介紹,請參見高級配置:服務存儲掛載。
EAS提供了本地目錄內存緩存(Memory Cache)加速功能。
在AIGC場景中,內存相對比較空閑。您可以利用空閑內存將本地目錄中的模型文件通過掛載的方式緩存到內存中。
該緩存支持LRU淘汰策略和不同實例間的共享,以文件系統目錄的形式呈現。
無需修改業務代碼,直接讀取緩存配置的目標本地目錄中的文件,即可享受加速效果。
同一服務的不同實例之間會形成一個p2p網絡。在進行實例擴容時,可以通過p2p網絡從其他實例中就近讀取緩存的文件,以加速實例擴容的速度。
注意事項
為保持數據一致性,掛載的加速目錄是只讀的,無法進行寫操作。
如果需要添加模型文件,可以直接在源目錄中新增文件,加速目錄可以直接讀取源目錄中的文件。
不建議直接操作源目錄來更新或刪除模型文件,可能導致讀取到緩存的臟數據。
配置方法
通過控制臺配置本地目錄內存緩存
進入模型在線服務(EAS)頁面。
登錄PAI控制臺。
在左側導航欄單擊工作空間列表,在工作空間列表頁面中單擊待操作的工作空間名稱,進入對應的工作空間。
在工作空間頁面的左側導航欄選擇 ,進入模型在線服務(EAS)頁面。
在模型在線服務(EAS)頁面,單擊部署服務,然后在自定義模型部署區域,單擊自定義部署。
在新建服務頁面,配置以下關鍵參數,其他參數配置說明,請參見服務部署:控制臺。
參數
描述
模型服務信息
填寫模型配置
單擊填寫模型配置,來進行模型配置。以OSS掛載為例:
選擇OSS路徑,例如
oss://path/to/models/
。配置掛載路徑,表示將OSS路徑掛載到容器中的目錄,例如
/data-slow
。
運行命令
您需要在該參數中配置啟動參數
-ckpt-dir
,并將該參數指向加速目錄,例如-ckpt-dir /data-fast
。服務功能配置
內存緩存加速
單擊內存緩存加速,并配置以下參數:
占用最大內存:被加速文件占用的最大內存,單位GB。當加速文件占用的最大內存超過該限制時,默認采用LRU策略淘汰。
源路徑:加速文件的源目錄。該目錄可以是OSS或NAS中的加速文件掛載到容器中的掛載路徑,也可以是掛載路徑下的子目錄,或者是容器內的其他普通文件目錄。例如
/data-slow
。掛載路徑:加速文件的掛載目錄,該目錄內的文件內容和源目錄保持一致,業務程序需從該目錄中讀取模型。例如
/data-fast
。
上述掛載配置表示將OSS路徑掛載到容器中的
/data-slow
目錄,并通過cachefs將源目錄/data-slow
再次掛載到加速目錄/data-fast
。這樣,業務程序可以直接從加速目錄/data-fast
讀取源目錄/data-slow
中的加速文件。參數配置完成后,單擊部署。
通過本地客戶端配置本地目錄內存緩存
步驟一:準備配置文件
您只需要在掛載配置中增加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"
}
]
參數說明
參數
描述
cache
capacity
被加速文件占用的最大內存。當加速文件占用的最大內存超過該限制時,默認采用LRU策略淘汰。
path
加速文件的源目錄。該目錄可以是OSS或NAS中的加速文件掛載到容器中的掛載路徑,也可以是掛載路徑下的子目錄,或者是容器內的其他普通文件目錄。
mount_path
加速文件的掛載目錄,該目錄內的文件內容和源目錄保持一致,業務程序需從該目錄中讀取模型。
配置說明
上述掛載配置表示將OSS路徑掛載到容器中的
/data-slow
目錄,并通過cachefs將源目錄/data-slow
再次掛載到加速目錄/data-fast
。這樣,業務程序可以直接從加速目錄/data-fast
讀取源目錄/data-slow
中的加速文件。
以部署Stable Diffusion模型服務為例,配置本地目錄內存緩存的完整示例如下,您可以根據實際場景需求進行修改。更多關于部署Stable Diffusion推理服務詳細介紹,請參見5分鐘使用EAS部署Stable Diffusion 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
目錄,并通過cachefs將源目錄data-oss/models
掛載到加速目錄data-fast/models
。后續,業務程序可以直接從加速目錄data-fast/models/Stable-diffusion
中讀取源目錄data-oss
中的加速文件。其中OSS的path參數需要配置為您自己的模型文件所在的OSS Bucket路徑。
步驟二:部署模型服務
部署一個模型服務,使其能夠使用本地目錄內存緩存加速的功能。
通過控制臺部署模型服務
通過EASCMD客戶端部署模型服務
服務部署成功后,可以直接從本地目錄的內存緩存中讀取模型文件,以提高模型讀取、模型切換和擴縮容場景的效率。有關加速效果的更多詳細說明,請參見加速效果。
加速效果
以Stable Diffusion場景為例,模型切換場景的加速效果如下,單位:秒。您的最終的加速效果以實際情況為準。
模型 | 模型大小 | OSS掛載 | cachefs本地命中 | cachefs遠端命中 |
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 |
deliberate_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掛載進行讀取的時間相當。
如果服務內有多個實例,這些實例會自動形成一個內存共享集群。當這些實例加載相同的模型時,會直接從遠端內存中的內網進行拉取,以實現遠端命中。在這種情況下,文件的讀取時間和文件大小呈線性相關。
當服務進行擴容時,新的實例會自動加入已有的內存共享集群,并且初始化模型加載時可以直接從遠端進行讀取。因此,彈性擴縮容更快,更適合彈性場景。