AutoTiKV基于機器學習的數(shù)據(jù)庫調優(yōu)
AutoTiKV 是一個用于對 TiKV 數(shù)據(jù)庫進行自動調優(yōu)的工具
整個調優(yōu)過程大致如下圖:
AutoTiKV 支持在修改參數(shù)之后重啟 TiKV(如果不需要也可以選擇不重啟)。需要調節(jié)的參數(shù)和需要查看的 metric 可以在 controller.py 里聲明。
一開始的 10 輪(具體大小可以調節(jié))是用隨機生成的 knob 去 benchmark,以便收集初始數(shù)據(jù)集。之后的都是用 ML 模型推薦的參數(shù)去 benchmark。
AutoTiKV 使用了和 OtterTune 一樣的高斯過程回歸(Gaussian Process Regression,以下簡稱 GP)來推薦新的 knob[1],它是基于高斯分布的一種非參數(shù)模型。高斯過程回歸的好處是:
1. 和神經網絡之類的方法相比,GP 屬于無參數(shù)模型,算法計算量相對較低,而且在訓練樣本很少的情況下表現(xiàn)比 NN 更好。
2. 它能估計樣本的分布情況,即 X 的均值 m(X) 和標準差 s(X)。若 X 周圍的數(shù)據(jù)不多,則它被估計出的標準差 s(X) 會偏大(表示這個樣本 X 和其他數(shù)據(jù)點的差異大)。直觀的理解是若數(shù)據(jù)不多,則不確定性會大,體現(xiàn)在標準差偏大。反之,數(shù)據(jù)足夠時,不確定性減少,標準差會偏小。這個特性后面會用到。
但 GP 本身其實只能估計樣本的分布,為了得到最終的預測值,我們需要把它應用到貝葉斯優(yōu)化(Bayesian Optimization)中。貝葉斯優(yōu)化算法大致可分為兩步:
1. 通過 GP 估計出函數(shù)的分布情況。
2. 通過采集函數(shù)(Acquisition Function)指導下一步的采樣(也就是給出推薦值)。
采集函數(shù)(Acquisition Function)的作用是:在尋找新的推薦值的時候,平衡探索(exploration)和利用(exploitation)兩個性質:
-
exploration:在目前數(shù)據(jù)量較少的未知區(qū)域探索新的點。
-
exploitation:對于數(shù)據(jù)量足夠多的已知區(qū)域,利用這些數(shù)據(jù)訓練模型進行估計,找出最優(yōu)值。
在推薦的過程中,需要平衡上述兩種指標。exploitation 過多會導致結果陷入局部最優(yōu)值(重復推薦目前已知的最好的點,但可能還有更好的點沒被發(fā)現(xiàn)),而 exploration 過多又會導致搜索效率太低(一直在探索新區(qū)域,而沒有對當前比較好的區(qū)域進行深入嘗試)。而平衡二者的核心思想是:當數(shù)據(jù)足夠多時,利用現(xiàn)有的數(shù)據(jù)推薦;當缺少數(shù)據(jù)時,我們在點最少的區(qū)域進行探索,探索最未知的區(qū)域能給我們最大的信息量。
貝葉斯優(yōu)化的第二步就可以幫我們實現(xiàn)這一思想。前面提到 GP 可以幫我們估計 X 的均值 m(X) 和標準差 s(X),其中均值 m(x) 可以作為 exploitation 的表征值,而標準差 s(x) 可以作為 exploration 的表征值。這樣就可以用貝葉斯優(yōu)化方法來求解了。
使用置信區(qū)間上界(Upper Confidence Bound)作為采集函數(shù)。假設我們需要找 X 使 Y 值盡可能大,則 U(X) = m(X) + k*s(X),其中 k > 0 是可調的系數(shù)。我們只要找 X 使 U(X) 盡可能大即可。
-
若
U(X)大,則可能m(X)大,也可能s(X)大。 -
若
s(X)大,則說明X周圍數(shù)據(jù)不多,需要探索未知區(qū)域新的點。 -
若
m(X)大,說明估計的Y值均值大, 則需要利用已知數(shù)據(jù)找到效果好的點。 -
其中系數(shù)
k影響著探索和利用的比例,k越大,越鼓勵探索新的區(qū)域。
在具體實現(xiàn)中,一開始隨機生成若干個 candidate knobs,然后用上述模型計算出它們的 U(X),找出 U(X) 最大的那一個作為本次推薦的結果。
更詳細介紹請看文章。
