- 基础概念
- input:a set of set of n knobs: θ1……θn,范围是Θ1……Θn
- configuration space:Θ1×……×Θn
- performance metric is an objective function f:Θ→R ,为参数空间中的每一个配置分配一个性能值
- 常用的指标有吞吐量、延迟
- 目标:给定一个工作负载,寻找到一个配置θ*使得性能指标最大(最小)
- 架构
- 知识库(KB)
- 拥有所以之前评估过的样本记录D = {θj,f(θj)},在每次评估新配置时更新
- 依据优化开始时KB有多少先验知识可用分类
- 拥有先验知识
- 初始KB为空
- 配置优化器
- 利用知识库来推荐配置(希望能够得到更好的性能)
- 分类
- 基于搜索
- 例如BestConfig,启发式方法将搜索空间分为多个部分,通过剪枝技术选择,可以较快选择下一个评估点但是没有使用知识库,对性能会有损害
- 基于强化学习
- 深度策略梯度算法(DDPG),神经网络较复杂,需要多次迭代,对成千上万个评估点进行评估
- 基于贝叶斯优化(BO)
- 特点
- 无梯度的、连续的、基于模型的
- 尽可能少的评估样本,找到f的最优值
- 亦可以评估带噪声的样本
- 两个组成部分
- surrogate model
- 一个机器学习模型,给定一组观测值f(θk),构建一个f的近似值,每次评估一个新的点时近似值都会得到完善
- 为候选的评估点计算utility value,并选择最大值
- 可以在未探索区域与变现良好区域之间做一个权衡
- acquisition function
- 用于选择下一个评估点
- surrogate model
- 通常选择“vanilla” Guassian process(GP)作为surrogate model,但性能做好的是SMAC(基于序列模型的算法配置)
- SMAC使用随机森林(RF)作为surrogate model
- GP-BO,使用两个独立内核Matern与Hamming,分别用于连续与分类的特征
- 特点
- 基于搜索
- 实验控制器
- 在给定的一个配置下,控制器协调工作负载执行得到一个结果,传回知识库
- 知识库(KB)
- 动机
- Only Tuning Important Knobs
- 0知识的调节方式可以通过反复迭代最终达到很好的效果,不过这个时间还是非常可观的,如今的数据库动辄成百上千个参数,调整非常费力
- 目前研究表明,由于不同knobs对于系统性能的影响程度不同,调整少数几个重要的knobs就可以达到大幅优化系统性能的目的
- 如何正确识别重要的knobs集合是非常重要的挑战
- Identifying Important Knobs
- 现有的自动识别重要knobs过程都是基于排名的方法,通常使用空间填充抽样(例如LHS)
- 最近工作表明SHAP值为调整DBMS提供了最有意义的重要性分数
- SHAP使用一种博弈论方法分解每个单独功能的影响
- 不过SHAP方式也不一定最好,论文中SHAP选出的8个参数在YCSB-A压力测试下效果不如手动选的8个参数以及全部参数
- Only Tuning Important Knobs
- 低维度调参
- 目标:针对用户输入的D维配置空间,找到d维的空间,d<<D,然后让d维调参的效果尽量接近D维
- Synthetic Search Spaces
- 我们常习惯于一个knob对应一个维度,这样来说每个维度都是有物理意义的,然而对于优化器来说维度的物理意义是不用追究的
- 因此我们可以人工合成维度,也就是多个维度合并成一个维度,合成knob的一个值可以决定多个knobs值
- 合成knob本身没有物理意义,但是可以实现降低维度,同时避免了识别重要knobs的需要
- 合成knob空间Xd,用户给定的空间XD
- Random Low-Dimensional Projections
- REMBO方法
- 低维度d,原始维度D
- 通过生成一个random projection matrix A(D×d的矩阵,每一个部分都是独立同分布,服从标准正态)
- Xd中的一个点p(d维向量),通过p' = Ap得到的p'就是D维,相当于还原回了D维度中
- 如果说XD是无边界的,那求出来的这个p'就是没问题的,但是XD要是有边界的话可能求出来的p'不在XD内,这时候需要找到XD中距离最近的点(剪切了)
- HeSBO方法(哈希增强子空间)
- 一种避免剪切的随机线性投影变体
- 原始搜索空间XD,目标低位空间Xd∈[-1,1]^d
- 生成一个随机投影矩阵A(D×d维,每一行恰好包含一个非零元素,列数随机,值为±1;列的索引和值的正负号是随机均匀抽样的;具体做法是通过两个uniform哈希函数实现,h为XD每个维度选择非零列,σ确定符号)
- A提供了一种一对多映射,投影不会落在XD之外,效果表现由于REMBO
- REMBO方法
- BO with Random Projects
- 算法一
-
-
-
- 用户提供输入
- d:低维度空间的维数(理想情况下是DBMS重要knobs数量的估计值)
- n_init:要生成的初始随机样本数
- N_iters:要执行的迭代次数(时间预算)
- 过程
- 生成随即投影矩阵A(只生成一次,在之后的优化过程中保持不变)
- 给定n_init,采用空间填充采样方法(如LHS),生成初始点集p∈Xd;这些点属于Xd的近似空间,就是XD空间的第一次投影(如果REMBO方法则还有一个clipped过程)
- 对于每个投影点(包括近似的)计算相应目标函数,一旦对所有初始点进行了评估,这些点的目标函数值将用于初始化surrogate model
- 循环(N_iters)
- surrogate model找到一个点p∈Xd能够使得acquisition function最大
- 通过回顾之前的点集,acquisition function尝试找到一些点,这些点既能够提供未知领域的知识(exploration),也能够通过在已知的表现良好的区域的临近区域探索来寻找知识(expoitation)
- 将建议的点投影到XD,评估之并更新surrogate model
- 用户提供输入
- 将点转化为DBMS knobs值
- 算法中将选择的点映射到高维空间XD=[-1,1]^D,然而实际的DMBS knobs有不同类型的值,例如数字类型范围是[min,max],类别knobs是离散的选项,我们需要将[-1,1]^D的值正确转换为有意义的值
- 做法
- 数字类型
- min-max uniform scaling
- 数字类型
-
-
-
-
-
-
-
-
- 对于数字类型的采用这总方法从[-1,1]映射到[min,max]
- 离散数字的话,将放缩后的值近似到整数值
-
- 类别类型(两步转换)
- 首先将预测值x∈[-1,1]调整到y∈[0,1]
- 然后将这个区间按照类别数量均分为Bins,最后的y值落在哪个区间就算哪个类
-
-
- 投影空间的维数
- 如何选择维数d是重要的问题
- 论文选择的是16维HeSBO投影进行实验
-
-
- Biasing Special Value Sampling Probability(并不是所有knob值都具有相同的语义性能)
- 数据库中的特殊knob值
- DMBS的配置空间是异构的,包括数字knob与类别knob;由于类别knob的特殊性(禁用启用组件的内部功能,或者为任务选择互斥算法),可能会对DBMS性能产生显著变化,所以目前最有效的BO方法独立处理每个类别knob值,并不假设其顺序
- hybrid knob
- 是数字值,但是当其设置为特定值时会执行与正常操作截然不同的操作(例如禁用某些功能),其余情况下则是正常的数值类knob
- Biasing Special Value Sampling Probability(一种能够使得优化器在调优的早期观察特殊值的影响)
- 方法步骤
- 数据库中的特殊knob值
-
-
-
-
-
- 假定这个knob的范围是[0,max],其中0为特殊值
- 开始优化前假定一个bias,即knob选择特殊值的概率p
- 然后我们得到一个建议值v∈[0,max]后,将v缩放到[0,1]区间内,如果缩放的值落在了[0,p)内部,就选择特殊值,否则还原回v
- Bias选取
- 假设随机配置初始集合由n_init个样本组成,bias设置为p的话,评估的样本遵循二项分布B(n_init, p)
- 默认情况下将p设置为20%,这样可以使得在初始随机配置集中评估特殊值(至少一次)有90%的置信水平
- 注意
- 即使具有较高的置信水平,仍然有概率在初始迭代期间不评估(然而通常优化器定期提出的随机配置也偏向于每个hybrid knob的特殊值,这样可以有效处理不同knob的特殊值之间的不良交互)
- 当优化器执行本地搜索时,特殊值偏差不会以任何方式阻碍优化器。无论特殊值是否提高性能,优化器仍然能够微调已评估的配置,以进一步提高性能。
-
-
-
-
- Configuration Space Bucketization
- 离散数值类型
- 离散数值类型的knob彼此间也有很大差异,有的只有10个值,有的可能有数十万个值,取值的多少决定控制粒度的大小
- 对于有些具有较大范围的配置knob,小的改动不太可能影响DBMS性能
- 设置一个K值,取值范围超过K个的knobs近似使用K个值(例如commit_delay有100000个值,设置K=100,就将commit均分100份,每次调整步长是1000),如果少于K值得knobs继续按照原来得粒度来
- 离散数值类型
- LlamaTune 设计
- 必须满足的三个要求
- 优化器始终在低维空间上运行,而不是在原始的DBMS配置空间中
- 仅应该在hybrid knobs上进行特殊值的bias设置
- bucketized间隔应该告诉优化器
- 原始的低维度连续空间XD∈[-1,1]^D,本方法中是类似的空间X'D,该空间只按照固定间隔采样(Bucketized),如此会影响到连续值knobs的微调,但当K比较保守的时候收益大于缺陷
- 例子
- 必须满足的三个要求
-
-
- 原本的要调整的参数有5个(高维5),降维成2维,其中第一个参数管控两个hybrid knob,第二个参数管控剩下三个参数
- 初始值[-0.8, 0.4],映射到高维度空间中得到[-0.8, -0.4, 0.4, 0.4, 0.8],然后放缩到[0,1]空间,对hybrid knob使用bias方法,其余征程放缩到自己的空间
-
本文含有隐藏内容,请 开通VIP 后查看