基於深度增強學習的無監督儲存系統性能調優
CAPES (Computer Automated Performance Enhancement System)
1,摘要
儲存系統的引數調整是儲存系統優化的一個重要方法,當前的引數調整實踐通常涉及大量的基準調整週期,耗時耗力,所以需要一個無監督模型來進行引數調優,深度學習+增強學習可以實現這樣一個無監督的儲存系統優化模型,小到客戶端-服務端系統,大到到資料中心,都可以使用這個模型。
2,問題
引數調優主要有四個問題:(1)由於電腦是一個非線性系統,各種變數相互關聯,這使得改變某個引數後很難預測產生的效果。(2)action和reward之間有延遲,因此很難判定系統輸入(action)和系統輸出(reward)之間的關係。(3)可調節的引數空間,範圍巨大。(4)需要24x7的工作量。
深度學習+增強學習可以解決上述問題,尤其是能夠解決action和reward之間的延遲問題,具體來說主要的解決方法是Q-Learning與經驗重放相結合。
CAPES的主要優點在於:(1)不需要預先了解目標系統。(2)它只需要對目標系統進行很少的更改,設定各項引數時所需的停機時間也很少。(3)它可以連續執行以適應工作負載的動態變化。(4)它可以動態地為靜態設定的引數選擇最優值。
3,技術背景
Hyperparameter: 超參,屬於機器學習演算法裡面的引數,用來區別目標系統裡面的引數。超參主要用來調節改變機器學習演算法,也就是在機器學習訓練中,通過調超參,來改變演算法本身,超引數優化的常用方法有貝葉斯優化、隨機搜尋和基於梯度的優化。這裡與目標系統裡的引數相區別,目標系統的引數是作為狀態(state)來使用的。
Q-Learning: 即agent如何在環境中採取action來最大化reward, 最終通過reward來學習到Q值經驗。agent對系統進行action輸入,獲得reward和observation(state)。
馬爾科夫決策過程: 由於在agent對系統進行actions後,得到的結果不一定就是預測好的,即得到的結果一部分是隨機的,一部分處於agent的控制下,因此agent與環境之間的互動通常被構建為馬爾科夫決策過程。
CAPES: 在CAPES環境中,我們將目標系統視為環境,調優模組作為agent新增到環境中,agent觀察目標系統的狀態,然後對目標系統採取action,採取action之後會得到相應的獎勵和新的state。
Q-Learning: Q(S,a) = r + γ max Q(S',a') ,r代表獎勵reward。這個公式被稱為貝爾曼公式,它能夠解決信貸分配問題(也就是前面提到得action和reward之間的延遲問題),因為迭代求解這個方程不需要知道動作和獎勵之間的延遲。但是隻使用Q-Learning的貝爾曼公式有一個致命問題,那就是狀態空間過大的話,Q-table會變得無限大,解決這個問題的辦法是通過神經網路實現q-table。輸入state,輸出不同action的q-value。神經網路通常使用非線性動作值函式逼近器來表達Q-function,然而,當使用非線性函式逼近器時,強化學習是不穩定的,甚至是發散的,所以這種就要使用經驗重放來解決這個問題。
經驗重放: 強化學習由於state之間的相關性存在穩定性的問題,因為智慧體去探索環境時採集到的樣本是一個時間序列,樣本之間具有連續性,所以需要打破時間相關性,解決的辦法是在訓練的時候儲存當前訓練的狀態到記憶體M,更新引數的時候隨機從M中抽樣mini-batch進行更新。具體地,M中儲存的資料型別為 <s,a,r,s′>,M有最大長度的限制,以保證更新採用的資料都是最近的資料。經驗重放的最終目的是防止過擬合。
- Exploration:在更新Q-function時,只針對已經被agent處理的state進行Q-function的更新,對於未處理的state,只能用以前的經驗進行處理,所以需要agent進行儘可能多的探索(在訓練過程中),所以在剛開始訓練的時候,為了能夠看到更多可能的情況,需要對action加入一定的隨機性。
- Exploitation:隨著訓練的加深,逐漸降低隨機性,也就是降低隨機action出現的概率。
4,演算法
整個儲存系統調優模型如圖所示:(1) Monitor agent 用來收集performance indictors(即state)和reward,併發送到後臺介面程式。(2)後臺介面程式將performance indictors 和reward放入Replay DB,Replay DB中儲存的資料型別為 <s,a,r,s′>,Replay DB的設計就是為了上述所講的經驗重放。(2)深度增強學習引擎呼叫Replay DB中的資料進行訓練,在固定的時間間隔中,深度增強學習引擎將action傳送到後臺介面程式,然後後臺介面程式將action傳送到Control agent ,Control agent 根據action對目標系統做出相應的改變。
演算法過程總結如下:
1.隨機初始化一個狀態 s,初始化記憶池(Replay DB),設定觀察值。
2.迴圈遍歷(是永久遍歷還是隻遍歷一定次數這個自己設定):
(1)根據策略選擇一個行為(action)。
(2)執行該行動(aaction),得到獎勵(reward)、執行該行為後的狀態 s`和遊戲是否結束 done。
(3)儲存 s, a, r, s`, done 到記憶池裡。
(4)判斷記憶池裡的資料是否足夠(即:記憶池裡的資料數量是否超過設定的觀察值),如果不夠,則轉到(5)步。
① 在記憶池裡隨機抽取出一部分資料做為訓練樣本。
② 將所有訓練樣本的 s`做為神經網路的輸入值,進行批量處理,得到 s`狀態下每個行為的 q 值的表。
③ 根據公式計算出 q 值表對應的 target_q 值表。
公式:Q(s, a) = r + Gamma * Max[Q(s`, all actions)]
④ 使用 q 與 target_q 訓練神經網路。
(5)判斷遊戲(目標系統是否執行結束)是否結束。
① 遊戲結束,給 s 隨機設定一個狀態,再執行(1),(2),(3),(4)。
① 未結束,則當前狀態 s 更新為 s`(意思就是當前的狀態變成 s`,以當前的 s`去action,得到r,得到執行該行為後的狀態 s`'和遊戲是否結束 done)。
5,具體實現過程