官术网_书友最值得收藏!

2.4 數據可靠性

因為我們的數據處理系統需要運轉,所以數據在經過系統時必須有幾個特征。闡明這些特征可能是有爭議的。對一些人來說,它們似乎顯而易見,而對另一些人來說,它們似乎無法被真正保證。這兩種觀點都沒有說到重點。

闡明一組關于我們的數據應該總是正確的不變量的目的是,當它們不正確時,或者當系統不能保證它們是正確的情況下,它允許我們注意到。這使我們能夠采取行動,在未來做得更好。請注意,可靠性的主題,甚至是數據管理系統的可靠性,是非常廣泛的,在這里無法完全涵蓋,更多細節請參見由Betsy Beyer等人編輯的Site Reliability Engineering: How Google Runs Production Systemshttps://oreil.ly/ ZzIkN;O'Reilly,2016)。

本節只涵蓋確保數據不丟失(持久性)、所有數據副本都一樣(一致性)以及隨時間推移仔細跟蹤數據變化(版本控制)的基本內容。我們還會覆蓋如何考慮數據的讀取速度(性能)以及數據不能被讀取到的頻率(可用性)。對這些概念的快速概述可以幫助我們專注于正確的領域。

2.4.1 持久性

在闡述對存儲系統的要求時,持久性最常被忽視,因為它是假設的。持久性是指存儲系統存儲你的數據,并且沒有將其丟失、刪除、覆蓋或破壞的屬性。我們肯定希望這個屬性的值越高越好。

持久性通常表示為每年并未不可挽回地丟失的字節或區域的數據所占的百分比。好的存儲系統的常見值是11個或12個9,也可以表示為“99.999999999%或更多的存儲字節不會丟失”。雖然這可能是原始底層存儲系統提供的,但我們的保證可能要保守得多,因為我們正在編寫與存儲系統互動的軟件。

值得注意的是,有些系統有非常持久的數據,即沒有任何東西丟失,但確實有一些故障,會使一些數據在極長的時間內無法訪問。這可能包括需要從另一個較慢的存儲系統(例如,磁帶驅動器)恢復數據或通過緩慢的網絡連接從異地復制數據的情況。如果這是原始數據,并且對模型很重要,你可能不得不恢復它。但是,對于那些以某種方式從現有原始數據中衍生出來的數據,可靠性工程師會考慮重新創建數據更容易一些,而不是恢復它。

對于一個有許多數據轉換的機器學習存儲系統,我們需要謹慎對待這些轉換數據的寫入和監控方式。我們應該對數據轉換進行記錄,如果有能力的話,可以存儲轉換前后的數據副本。最難跟蹤的階段是數據提取階段,當數據從非管理狀態轉換為管理狀態的時候。由于我們建議使用API來提取,這就提供了一個明確的位置來確保數據被存儲、記錄轉換并確認數據的接收。如果數據沒有被干凈、持久地接收,發送系統應當可以在數據仍然可用時重試發送操作。

在數據轉換的所有階段,如果能負擔得起,我們應該存儲數據轉換前和轉換后的副本。我們應該監控轉換的吞吐量以及預期的數據大小變化。例如,如果我們對數據進行30%的采樣,那么除非發生錯誤,否則轉化后的數據量顯然應該是轉化前的30%。另一方面,如果我們通過分桶將一個浮點數轉化為一個整數,根據數據的表示方法,我們期望得到的數據大小基本不變。如果它大得多或小得多,那么它一定有問題。

2.4.2 一致性

我們也許想保證當我們從多臺計算機訪問數據時,每次讀取的數據都是一樣的;這就是一致性的特性。任何規模的機器學習系統通常都是分布式的。我們正在做的大部分處理從根本上說是可并行的,假設我們從一開始就使用機器集群,那么這種方式是有價值的。這意味著存儲系統將通過網絡協議從其他計算機上獲得,并對可靠性提出了挑戰。重要的是,它引入了這樣一個事實:同一數據的不同版本可能同時可用。很難保證數據在任何地方都是復制的、可用的和一致的。

模型的訓練系統是否關心一致性,實際上是模型和數據的一個屬性。并非所有的訓練系統都對數據的不一致敏感。就這一點而言,不是所有的數據都對不一致敏感。思考這個問題的一個方法是考慮數據的密度或稀疏程度。當每塊數據所代表的信息都很稀少時,數據就是稀疏的。當每塊數據所代表的信息都很常見時,數據就是密集的。而當數據集有很多零值的時候,數據也是稀疏的。因此,如果yarnit.ai有10種流行的紗線,幾乎代表了我們銷售的所有產品類別,那么任何給定的購買這些紗線的數據都是密集的——它不可能讓我們學到很多新的東西。如果一個流行紗線的購買在我們存儲系統的一個副本中是可讀的,而在另一個副本中則不可讀,那么這個模型將基本上不受影響。另一方面,如果我們采購的90%是不同的紗線,那么每一次采購都很重要。如果我們訓練系統的一部分看到了某一特定紗線的購買,而另一部分沒有看到,那么我們可能會針對該特定紗線或與該紗線相似的紗線產生一個不連貫的模型。在某些情況下,一致性是很難保證的,但通常,如果我們能在一定程度上等待數據的到達和同步,我們就能很容易地保證這一屬性。

我們可以通過兩種直接的方法來排除數據層中的關于一致性的問題。首先是建立對不一致的數據有容忍度的模型。就像其他數據處理系統一樣,機器學習系統提供了折中方案。如果我們可以容忍不一致的數據,特別是當數據是最近寫的,那么訓練模型的速度會大大加快,并且使用存儲系統的成本會更加低廉。在這種情況下,其代價是靈活性和對數據的保證。如果使用這種方法,我們不會讓自己沒有任何限制地操作使用存儲系統,而且我們只能訓練滿足這一特性的模型。這是其中一個選擇。

第二種方法是使用一個能夠提供一致性保證的訓練系統。對于一個復制存儲系統來說,最常見的方法是由系統本身提供關于哪些數據被完全且一致地復制了的信息。讀取數據的系統可以使用這個字段并選擇只在完全復制的數據上進行訓練。這對存儲系統來說通常比較復雜,因為我們需要提供一個復制狀態的API。它明顯會更昂貴或更慢。如果想在提取和轉換后快速使用數據,我們可能需要為網絡(復制數據)和存儲I/O容量(寫入副本)提供大量資源。

考慮一致性需求是一個戰略性決策。它對平衡成本和能力具有長期影響,應該與機器學習工程師和組織決策者共同參與。

2.4.3 版本控制

機器學習數據集的版本管理在很多方面類似于傳統的數據或源代碼的版本管理,用于標記數據的狀態,以便我們可以在未來的實驗中應用數據集的特定版本。當有新的數據可供重新訓練時,或當我們計劃實施不同的數據準備或特征工程技術時,版本管理變得非常重要。在真實的生產環境中,機器學習專家要處理大量的數據集、文件和指標來進行日常操作。因為實驗是在多次迭代中進行的,因此需要對不同版本進行跟蹤和管理。版本控制是管理眾多數據集、機器學習模型和文件的一個非常好的方法,此外,還可以保存多個迭代的記錄,即何時改變、為何改變以及改變了什么[9]

2.4.4 性能

存儲系統需要寫入吞吐足夠快,以快速提取數據,而不是緩慢地進行轉換。系統的讀取帶寬要足夠快,以使我們能夠使用符合模型行為方式的訪問模式快速訓練模型。值得注意的是,緩慢的讀取性能的代價可能相當大,原因很簡單,機器學習訓練經常使用相對昂貴的計算資源(GPU或高端CPU)。當這些處理器因此停滯而等待數據進行訓練時,它們只是在空轉浪費時間,沒有完成任何有用的工作。許多組織認為他們負擔不起投資存儲系統,而實際上他們不能不投資。

2.4.5 可用性

當讀取數據時,我們之前寫入的數據應該已經存在。從某種方面來說,可用性是持久性、一致性和性能的產物。如果數據在我們的存儲系統中,并被持續復制,而且我們能夠以合理的性能讀取它,那么該數據將被視為可用的。

主站蜘蛛池模板: 太原市| 通道| 韶山市| 南通市| 揭东县| 奈曼旗| 南溪县| 台中市| 阿拉善右旗| 浦东新区| 蓝田县| 栾城县| 镇坪县| 宜宾县| 东安县| 济南市| 资兴市| 临湘市| 依兰县| 镇雄县| 恩平市| 闸北区| 沙湾县| 灵台县| 盐边县| 万安县| 黄山市| 中阳县| 大竹县| 新巴尔虎右旗| 金秀| 峡江县| 华蓥市| 蒲城县| 天水市| 东明县| 五台县| 汶上县| 西贡区| 济宁市| 武陟县|