模型推理时,通过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挂载进行读取相当。
服务内的多个实例会形成内存共享集群,加载相同模型时直接从远端内存拉取,读取时间与文件大小呈线性相关。
服务扩容时,新实例会加入内存共享集群,初始化模型可直接从远端读取,弹性扩缩容更快,适合弹性场景。