当前位置: 首页 > web >正文

论文笔记:AnImitation Learning Approach for Cache Replacement

ICML 2020

代码:kato1628/cache_replacement: A transformer-based cache replacement model for CDNs using imitation learning technique with Belady's optimal policy

google-research/cache_replacement at master · google-research/google-research

1 INTRO

  • 大致而言,提升缓存命中率的手段主要有两种
    • 通过预取(prefetching)机制主动将未来需要的数据提前加载到缓存中,避免未来的未命中
    • 在缓存需要为新数据腾出空间时,策略性地选择要从缓存中移除哪些数据(即缓存替换)
  • 本研究专注于单层缓存替换
    • 当由于缓存未命中而需要向缓存中添加一个新的数据块(称为 line)时,必须从缓存中移除一个已有的缓存行以腾出空间
    • 在缓存未命中时,缓存替换策略会接收当前访问的数据行以及当前缓存中的所有数据行作为输入,并输出应当被移除的缓存行
    •  
  • 已有的研究经常依赖人工设计的启发式规则,以捕捉最常见的缓存访问模式
    • 这些启发式方法在它们针对的简单访问模式上表现良好,但它们只能覆盖所有可能访问模式中的一小部分,因此在面对更加多样和复杂的访问模式时效果不佳
  • 论文提出一种新的方法PARROT通过模仿学习(Imitation Learning, IL)框架借助 Belady 最优策略来学习缓存替换策略
    • Belady 的最优策略(简称 Belady 策略)是一种理想的“预知未来”的策略,能基于未来的访问序列做出最优的替换决策
    • 论文提出用只依赖历史访问数据的策略去近似它
      • 首次将缓存替换问题表述为一个模仿学习问题
      • 设计了一种用于端到端缓存替换的神经网络结构,并引入了若干监督学习任务以进一步提升其在标准模仿学习上的表现

2 将缓存替换建模为模仿学习(Imitation Learning)

  • 将缓存替换问题建模为一个带有终止状态的马尔可夫决策过程上的策略学习任务 \langle \mathcal{S}, \mathcal{A}, \mathcal{R}, \mathcal{P} \rangle
    • 在第 t个时间步中,状态 s_t = (s^c_t, s^a_t, s^h_t) \in \mathcal{S}由三个部分组成
      • s^a_t = (m_t, pc_t):当前的缓存访问,包含当前访问的缓存行地址 mt以及该访问对应的唯一程序计数器 pct。
      • s^c_t = \{l_1, \dots, l_W\}:表示当前缓存组中的 W 个缓存行地址组成的集合,替换策略将根据当前访问s^a_t 决定驱逐哪个行
      • s^h_t = (\{m_1, \dots, m_{t-1}\}, \{pc_1, \dots, pc_{t-1}\}):所有过去的缓存访问的历史。实际上,我们仅在过去的 H 次访问上进行条件建模。
  • 动作集合\mathcal{A}_{s_t}是针对状态 s_t = (s^c_t, s^a_t, s^h_t)可选的动作定义:

    • 如果发生缓存未命中,即 m_t \notin s^c_t,则动作集合\mathcal{A}_{s_t}是整数集合\{1, \dots, W\},其中 w表示驱逐缓存行 lw。

    • 如果发生缓存命中,则动作集合 \mathcal{A}_{s_t} 仅包含一个空操作动作 a_{\text{no-op}}​,因为没有行需要被替换。

  • 状态转移函数\mathcal{P}(s_{t+1} \mid a_t, s_t)由状态中三个部分的动态变化决定:

    • 下一步的访问 s^a_{t+1} = (m_{t+1}, pc_{t+1})是程序所访问的下一个地址及其对应的 PC;

    • 访问历史更新为 s^h_{t+1} = (\{m_1, \dots, m_t\}, \{pc_1, \dots, pc_t\})

    • 缓存状态的转移由替换策略决定

      • 若缓存命中,则s^c_{t+1} = s^c_t,因为访问的数据已经在缓存中;

      • 若缓存未命中,动作 a_t = w表示驱逐第 w 个缓存行,新的缓存状态为:

        • s^c_{t+1} = \{l_1, \dots, l_{w-1}, m_t, l_{w+1}, \dots, l_W\}

  • 奖励函数 R(s_t)定义如下:

    • 如果缓存未命中(即 mt∉st​),则 R(st)=0;

    • 如果缓存命中,则 R(st)=1。

  • 目标是学习一个策略 \pi_\theta(a_t \mid s_t)。对于一个长度为 T 的缓存访问序列(m_1, pc_1), \dots, (m_T, pc_T),最大化整个访问序列的累计命中次数,即\sum_{t=0}^{T} R(s_t)

  • 在训练阶段,可以利用未来访问信息是已知的这一事实,计算出最优策略(即 Belady 策略):

    • π∗(at​∣st​,(mt+1​,pct+1​),…,(mT​,pcT​))

      然后,我们学习一个策略\pi_\theta(a_t \mid s_t) 来逼近这个最优策略,而不依赖未来访问信息,因为在测试阶段未来访问是未知的。

  • 为了展示该问题的难度,在图 2 中展示了:要达到 Belady 策略性能所需的未来信息量

    • ​​​​​​​

3 方法

每进行 5000 次参数更新,就会重新使用当前策略采集一次状态集 B

3.1预测复用距离

  • 为了在训练过程中提供更多监督信号,提出将预测每个缓存行的复用距离作为一个辅助任务
    • 在 PARROT 的网络中添加了一个第二个全连接预测头
    • 以每个缓存行为单位的上下文表示 gw作为输入,输出预测的对数复用距离 \hat{d}(g_w)
http://www.xdnf.cn/news/15413.html

相关文章:

  • Prometheus Operator:Kubernetes 监控自动化实践
  • 深入解析Hadoop架构设计:原理、组件与应用
  • Java 高级特性实战:反射与动态代理在 spring 中的核心应用
  • ADB 调试日志全攻略:如何开启与关闭 `ADB_TRACE` 日志
  • 面试150 二叉树展开为链表
  • Redis面试精讲 Day 2:Redis数据类型全解析
  • 【操作系统-Day 5】通往内核的唯一桥梁:系统调用 (System Call)
  • 【DVWA系列】——File Upload——low详细教程(webshell工具冰蝎)
  • MySQL SQL语句精要:DDL、DML与DCL的深度探究
  • ROS2---NodeOptions
  • 01.深入理解 Python 中的 if __name__ == “__main__“
  • vue是什么
  • 【PyMuPDF】PDF图片处理过程内存优化分析
  • 基于Prompt结构的语校解析:3H日本语学校信息建模实录(4/500)
  • idea docker插件连接docker失败
  • 文心大模型4.5开源测评:轻量化部署实践与多维度能力验证
  • TASK2 夏令营:用AI做带货视频评论分析
  • 电路分析基础(01)
  • C#接口进阶:继承与多态实战解析
  • FusionOne HCI 23 超融合实施手册(超聚变超融合)
  • ConcurrentHashMap笔记
  • Docker Compose文件内容解释
  • jdk1.8 nio相关。java对象和epoll三大函数怎么关联的?(有点乱有点跳)
  • Redis技术笔记-从三大缓存问题到高可用集群落地实战
  • 【计算机网络架构】环型架构简介
  • 【保姆级图文详解】Spring AI 中的工具调用原理解析,工具开发:文件操作、联网搜索、网页抓取、资源下载、PDF生成、工具集中注册
  • DETRs与协同混合作业训练之CO-DETR论文阅读
  • spring--@Autowired
  • Wireshark的安装和基本使用
  • 第七章 算法题