基于tmpfs配置内存缓存(可选)
场景描述
在大模型推理场景中,模型权重文件通常体积庞大,从磁盘加载会导致显著的 I/O 延迟,影响服务启动速度。为优化这一过程,可参考Linux的tmpfs(temporary filesystem)内存文件系统,利用其基于内存的高速读写特性,实现模型权重的快速加载与缓存。以下将“/mnt/deepseek/tmpfs_model/DeepSeek-R1/”作为参考目录进行说明。
注意事项
- 每个节点都需要配置tmpfs文件系统。
- 系统重启后tmpfs文件系统中的数据会丢失。
- 确保复制到tmpfs文件系统的权重文件是正确的。
- tmpfs占用系统内存,需根据模型大小合理规划。调整tmpfs大小命令如下:
mount -o remount,size=xxG /mnt/deepseek/tmpfs_model/DeepSeek-R1/
使用说明
在从tmpfs文件系统加载权重时,会首先检查指定tmpfs目录下是否存在一个名为"_SUCCESS"的空文件。该文件作为权重完整性的验证标志:若存在,则表明权重文件已完整就绪,将直接加载;若不存在,此次将从权重源路径进行加载。
由于tmpfs是基于内存的临时文件系统,其内容在节点重启后会完全丢失。为解决上述问题,通过创建一个 systemd 服务以实现在系统启动过程中、kubelet 启动前,自动完成权重文件拷贝的操作。需要在所有节点完成以下配置:
- 创建目录,并将该目录挂载为tmpfs文件系统,tmpfs大小应至少大于模型权重文件的总大小,并预留一定余量。
mkdir -p /mnt/deepseek/tmpfs_model/DeepSeek-R1/ mount -t tmpfs -o size=660G tmpfs /mnt/deepseek/tmpfs_model/DeepSeek-R1/
可以执行以下命令查看tmpfs文件系统是否创建成功。df -h
- 配置tmpfs自动挂载,编辑“/etc/fstab”文件,tmpfs配置样例如下:
tmpfs /mnt/deepseek/tmpfs_model/DeepSeek-R1/ tmpfs defaults,size=660G 0 0
- 创建 systemd 服务文件,实现节点重启后自动复制权重文件。
vi /etc/systemd/system/copy-model.service
在copy-model.service文件中,添加以下配置内容,并根据实际路径修改MODEL_PATH和TMPFS_PATH的值:[Unit] Description=Copy model to tmpfs After=local-fs.target Requires=local-fs.target StartLimitBurst=3 StartLimitIntervalSec=300 [Service] Type=oneshot TimeoutSec=3600 Restart=on-failure RestartSec=10 Environment=MODEL_PATH=/mnt/deepseek/model/DeepSeek-R1 # 权重原始路径,路径不能以"/"结尾 Environment=TMPFS_PATH=/mnt/deepseek/tmpfs_model/DeepSeek-R1 # tmpfs权重路径,路径不能以"/"结尾 ExecStart=/bin/sh -c ' \ if [ -f "${TMPFS_PATH}/_SUCCESS" ]; then \ echo "Model already copied. Skipping..."; \ exit 0; \ fi; \ echo "Attempt to copy model..."; \ if cp -R "${MODEL_PATH}/." "${TMPFS_PATH}/" && touch "${TMPFS_PATH}/_SUCCESS"; then \ echo "Copy model to tmpfs successfully..."; \ exit 0; \ else \ echo "Copy model to tmpfs failed..." >&2; \ exit 1; \ fi \ ' [Install]
copy-model服务说明:
- 等待文件系统挂载完成。
- 检查tmpfs目录是否已存在模型权重文件(通过"_SUCCESS"文件判断)。
- 如果不存在,则从权重原始路径复制权重到tmpfs路径。
- 复制完成以后创建"_SUCCESS"标记文件,避免重复拷贝。
- 如果拷贝失败后会重试3次。
- 启用服务并配置系统重启后自动执行。
# 保存文件后,重载 systemd 配置以识别新服务 systemctl daemon-reload # 执行以下命令启用服务,使其在系统重启后自动执行 systemctl enable copy-model.service
- 确认tmpfs目录在部署推理服务yaml文件中,能够挂载到容器内,即确保该目录是创建并挂载SFS Turbo中挂载的目录的子目录。
- (可选)如果首次部署服务可以选择启动服务执行拷贝,拷贝完成后会自动写入"_SUCCESS"空文件。
# 启动服务进行拷贝 systemctl start copy-model.service # 检查服务状态确认执行成功 systemctl status copy-model.service # 如果tmpfs已经手动拷贝好权重文件,需要写入"_SUCCESS"文件 touch /mnt/deepseek/tmpfs_model/DeepSeek-R1/_SUCCESS
- 参考生成部署定义yaml介绍,将tmpfs文件路径指定为部署启动参数,并部署推理服务。