更新时间:2025-09-08 GMT+08:00
分享

基于tmpfs配置内存缓存(可选)

场景描述

在大模型推理场景中,模型权重文件通常体积庞大,从磁盘加载会导致显著的 I/O 延迟,影响服务启动速度。为优化这一过程,可参考Linux的tmpfs(temporary filesystem)内存文件系统,利用其基于内存的高速读写特性,实现模型权重的快速加载与缓存。以下将“/mnt/deepseek/tmpfs_model/DeepSeek-R1/”作为参考目录进行说明。

注意事项

  1. 每个节点都需要配置tmpfs文件系统。
  2. 系统重启后tmpfs文件系统中的数据会丢失。
  3. 确保复制到tmpfs文件系统的权重文件是正确的。
  4. tmpfs占用系统内存,需根据模型大小合理规划。调整tmpfs大小命令如下:
    mount -o remount,size=xxG /mnt/deepseek/tmpfs_model/DeepSeek-R1/

使用说明

在从tmpfs文件系统加载权重时,会首先检查指定tmpfs目录下是否存在一个名为"_SUCCESS"的空文件。该文件作为权重完整性的验证标志:若存在,则表明权重文件已完整就绪,将直接加载;若不存在,此次将从权重源路径进行加载。

由于tmpfs是基于内存的临时文件系统,其内容在节点重启后会完全丢失。为解决上述问题,通过创建一个 systemd 服务以实现在系统启动过程中、kubelet 启动前,自动完成权重文件拷贝的操作。需要在所有节点完成以下配置:

  1. 创建目录,并将该目录挂载为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

  2. 配置tmpfs自动挂载,编辑“/etc/fstab”文件,tmpfs配置样例如下:

    tmpfs /mnt/deepseek/tmpfs_model/DeepSeek-R1/ tmpfs defaults,size=660G 0 0

  3. 创建 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服务说明:

    1. 等待文件系统挂载完成。
    2. 检查tmpfs目录是否已存在模型权重文件(通过"_SUCCESS"文件判断)。
    3. 如果不存在,则从权重原始路径复制权重到tmpfs路径。
    4. 复制完成以后创建"_SUCCESS"标记文件,避免重复拷贝。
    5. 如果拷贝失败后会重试3次。

  4. 启用服务并配置系统重启后自动执行。

    # 保存文件后,重载 systemd 配置以识别新服务
    systemctl daemon-reload
    
    # 执行以下命令启用服务,使其在系统重启后自动执行
    systemctl enable copy-model.service

  5. 确认tmpfs目录在部署推理服务yaml文件中,能够挂载到容器内,即确保该目录是创建并挂载SFS Turbo中挂载的目录的子目录。
  6. (可选)如果首次部署服务可以选择启动服务执行拷贝,拷贝完成后会自动写入"_SUCCESS"空文件。

    # 启动服务进行拷贝
    systemctl start copy-model.service
    
    # 检查服务状态确认执行成功
    systemctl status copy-model.service
    
    # 如果tmpfs已经手动拷贝好权重文件,需要写入"_SUCCESS"文件
    touch /mnt/deepseek/tmpfs_model/DeepSeek-R1/_SUCCESS
    

  7. 参考生成部署定义yaml介绍,将tmpfs文件路径指定为部署启动参数,并部署推理服务。

相关文档