全部產品
Search
文件中心

Platform For AI:記憶體緩衝本地目錄

更新時間:Dec 03, 2024

模型推理時,通過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中的加速檔案,具體配置方式如下:

控制台配置

  1. 登入PAI控制台,在頁面上方選擇目標地區,並在右側選擇目標工作空間,然後單擊進入EAS

  2. 單擊部署服務,然後在自訂模型部署地區,單擊自訂部署

  3. 自訂部署頁面,配置以下關鍵參數,其他參數配置說明,請參見服務部署:控制台

    參數

    描述

    樣本

    環境資訊

    模型配置

    選擇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

  4. 參數配置完成後,單擊部署

本地用戶端配置

步驟一:準備設定檔

在掛載配置中增加cachemount_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

配置啟動參數-ckpt-dir,並將該參數指向加速目錄。

cache

capacity

被加速檔案佔用的最大記憶體,單位GB。被加速檔案佔用的最大記憶體,超過限制時採用LRU策略淘汰。

path

加速檔案的來源目錄。該目錄可以是OSS或NAS中的加速檔案掛載到容器中的掛載路徑,也可以是掛載路徑下的子目錄,或者是容器內的其他普通檔案目錄。

mount_path

加速檔案的掛載目錄,該目錄內的檔案內容和來源目錄保持一致,業務程式需從該目錄中讀模數型。

步驟二:部署模型服務

部署一個模型服務,使其能夠使用本地目錄記憶體緩衝加速的功能。

通過控制台部署模型服務

  1. 登入PAI控制台,在頁面上方選擇目標地區,並在右側選擇目標工作空間,然後單擊進入EAS

  2. 模型線上服務(EAS)頁面,單擊部署服務,然後在自訂模型部署地區,單擊JSON獨立部署。將步驟一準備好的配置內容粘貼到編輯框中。

  3. 單擊部署

通過EASCMD用戶端部署模型服務

  1. 下載EASCMD用戶端並進行身份認證。具體操作,請參見下載並認證用戶端

  2. 按照步驟一中的配置要求,在EASCMD用戶端所在目錄建立一個名為test.json的JSON檔案。

  3. 在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掛載進行讀取相當。

  • 服務內的多個執行個體會形成記憶體共用叢集,載入相同模型時直接從遠端記憶體拉取,讀取時間與檔案大小呈線性相關。

  • 服務擴容時,新執行個體會加入記憶體共用叢集,初始化模型可直接從遠端讀取,彈性擴縮容更快,適合彈性情境。