模型推理時,通過OSS或NAS掛載模型文件到本地目錄,受網絡帶寬影響,存在延時問題。EAS提供本地目錄內存緩存加速功能。將模型文件緩存到內存中,提高讀取速度,減少延時。本文介紹如何配置本地目錄內存緩存及其加速效果。
背景信息
在大部分模型推理場景中,業務進程會通過OSS、NAS或Image將模型文件掛載到本地目錄。請參見服務存儲掛載。業務進程中模型讀取、模型切換、容器的擴縮容等操作都會受網絡帶寬影響。比較典型的如StableDiffusion場景中,推理請求會涉及到頻繁切換基礎模型和lora模型,每次切換都需從OSS/NAS回源讀取模型,導致延時增加。
為了解決這個問題,EAS提供了本地目錄內存緩存(Memory Cache)加速功能。具體的實現原理如下圖所示:
利用空閑內存將本地目錄中的模型文件緩存到內存中。
該緩存支持LRU淘汰策略和實例間共享,以文件系統目錄形式呈現。
無需修改業務代碼,直接讀取緩存配置的目標本地目錄中的文件,即可享受加速效果。
同一服務的不同實例會形成p2p網絡,實例擴容時可通過p2p網絡就近讀取緩存文件,加速擴容速度。
注意事項
為保持數據一致性,掛載的加速目錄是只讀的,無法寫操作。
如需添加模型文件,請在源目錄中新增文件,加速目錄會讀取源目錄中的文件。
不建議直接更新或刪除源目錄中的模型文件,這可能導致讀取到緩存的臟數據。
配置方法
假設當前服務部署已有配置的參數如下:
鏡像啟動命令:
python /run.py
模型文件OSS路徑:
oss://path/to/models/
模型文件掛載到容器中的目錄:
/data-slow
那么/data-slow
就是需要被加速的文件的源目錄,先將其再次掛載到加速目錄/data-fast
。這樣,業務程序可以直接從加速目錄/data-fast
讀取源目錄/data-slow
中的加速文件,具體配置方式如下:
控制臺配置
登錄PAI控制臺,在頁面上方選擇目標地域,并在右側選擇目標工作空間,然后單擊進入EAS。
單擊部署服務,然后在自定義模型部署區域,單擊自定義部署。
在自定義部署頁面,配置以下關鍵參數,其他參數配置說明,請參見服務部署:控制臺。
參數
描述
示例
環境信息
模型配置
選擇OSS類型的掛載方式。
OSS路徑:
oss://path/to/models/
掛載路徑:
/data-slow
運行命令
配置啟動參數
-ckpt-dir
,指向加速目錄。python /run.py -ckpt-dir /data-fast
服務功能
內存緩存加速
打開開關,并配置以下參數:
占用最大內存:被加速文件占用的最大內存,單位GB。被加速文件占用的最大內存,超過限制時采用LRU策略淘汰。
源路徑:加速文件的源目錄,可以是OSS或NAS中的加速文件掛載到容器中的掛載路徑,也可以是掛載路徑下的子目錄,或者是容器內的其他普通文件目錄。
掛載路徑:加速文件的掛載目錄,業務程序需從該目錄中讀取模型。
占用最大內存:20 GB
源路徑:
/data-slow
掛載路徑:
/data-fast
參數配置完成后,單擊部署。
本地客戶端配置
步驟一:準備配置文件
在掛載配置中增加cache和mount_path參數,在script參數中配置啟動參數-ckpt-dir
,同時配置示例如下。其他參數配置說明,請參見服務模型所有相關參數說明。
{
"containers": [
{
"image": "****",
"port": 8000,
"script": "python /run.py -ckpt-dir /data-fast"
}
],
"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"
}
]
}
參數說明:
參數 | 描述 | |
script | 配置啟動參數 | |
cache | capacity | 被加速文件占用的最大內存,單位GB。被加速文件占用的最大內存,超過限制時采用LRU策略淘汰。 |
path | 加速文件的源目錄。該目錄可以是OSS或NAS中的加速文件掛載到容器中的掛載路徑,也可以是掛載路徑下的子目錄,或者是容器內的其他普通文件目錄。 | |
mount_path | 加速文件的掛載目錄,該目錄內的文件內容和源目錄保持一致,業務程序需從該目錄中讀取模型。 |
步驟二:部署模型服務
部署一個模型服務,使其能夠使用本地目錄內存緩存加速的功能。
通過控制臺部署模型服務
登錄PAI控制臺,在頁面上方選擇目標地域,并在右側選擇目標工作空間,然后單擊進入EAS。
在模型在線服務(EAS)頁面,單擊部署服務,然后在自定義模型部署區域,單擊JSON獨立部署。將步驟一準備好的配置內容粘貼到編輯框中。
單擊部署。
通過EASCMD客戶端部署模型服務
下載EASCMD客戶端并進行身份認證。具體操作,請參見下載并認證客戶端。
按照步驟一中的配置要求,在EASCMD客戶端所在目錄創建一個名為
test.json
的JSON文件。在JSON文件所在的當前目錄執行以下命令,以Windows 64版本為例。
eascmdwin64.exe create <test.json>
加速效果
以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掛載進行讀取相當。
服務內的多個實例會形成內存共享集群,加載相同模型時直接從遠端內存拉取,讀取時間與文件大小呈線性相關。
服務擴容時,新實例會加入內存共享集群,初始化模型可直接從遠端讀取,彈性擴縮容更快,適合彈性場景。