在大部分模型推理情境中,業務進程通過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掛載進行讀取的時間相當。
如果服務內有多個執行個體,這些執行個體會自動形成一個記憶體共用叢集。當這些執行個體載入相同的模型時,會直接從遠端記憶體中的內網進行拉取,以實現遠端命中。在這種情況下,檔案的讀取時間和檔案大小呈線性相關。
當服務進行擴容時,新的執行個體會自動加入已有的記憶體共用叢集,並且初始化模型載入時可以直接從遠端進行讀取。因此,彈性擴縮容更快,更適合彈性情境。