模型推理時,通過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掛載進行讀取相當。
服務內的多個執行個體會形成記憶體共用叢集,載入相同模型時直接從遠端記憶體拉取,讀取時間與檔案大小呈線性相關。
服務擴容時,新執行個體會加入記憶體共用叢集,初始化模型可直接從遠端讀取,彈性擴縮容更快,適合彈性情境。