大數據存儲 模型訓練數據從哪來
面對大數據的爆炸式增長,且具有大數據量、異構型、高時效性的需求時,數據的存儲不僅僅有存儲容量的壓力,還給系統的存儲性能、數據管理乃至大數據的應用方面帶來了挑戰。這些大量的數據結構復雜,種類繁多,如何對分布、多態、異構的大數據進行管理的問題已經不期而至,傳統的數據存儲方式面對大數據的猛烈增長已不能滿足需求,需要開展分布式存儲的研究。
大數據的存儲方式
分布式系統:分布式系統可以解決大數據存儲的問題,為大數據的存儲提供了方式。分布式系統的定義包括兩個方面:第一是關于硬件的:機器本身是獨立的。第二個方面是關于軟件的:對于用戶來說,他們就像跟單個系統打交道。這兩個方面一起闡明了分布式系統的本質,缺一不可。
NoSQL數據庫:它是“Not Only SQL”的縮寫,意義是:適用關系型數據庫的時候就使用關系型數據庫,不適用的時候也沒必要非使用關系型數據庫不可,可以考慮使用更加合適的數據存儲方式。
云存儲:云存儲是伴隨著云計算技術的發展而衍生出來的一種新興的網絡存儲技術,它是云計算的重要組成部分,也是云計算的重要應用之一;它不僅是數據信息存儲的新技術、新設備模型,也是一種服務的創新模型。
面臨的挑戰
1 系統問題
面對大數據的爆炸式增長,且具有大數據量、異構型、高時效性的需求時,數據的存儲不僅僅有存儲容量的壓力,還給系統的存儲性能、數據管理乃至大數據的應用方面帶來了挑戰。
2 管理問題
這些大量的數據結構復雜,種類繁多,如何對分布、多態、異構的大數據進行管理的問題已經不期而至,傳統的數據存儲方式面對大數據的猛烈增長已不能滿足需求,需要開展分布式存儲的研究。
3 應用問題
隨著數據量的爆炸式增長,不斷刺激著計算機技術的發展,如何利用大數據為人們生活所用,即是大數據的應用問題。大數據的應用在人類活動中所涉及的范圍越來越大,與我們已經密不可分。
4 數據轉換
數據轉換是按照預先設計好的規則將抽取的數據進行轉換,在轉化過程中,我們需要對數據進行清洗、整理和集成,即發現數據中的錯誤數據并進行相應的改正,將原來不同規則的數據整理集成為統一的規則。
全量抽取發現空值并處理:發現源數據中字段空值,按照一定的規則進行加載或者替換,比如可以用“0”或者按照該字段的平均取值來替換。
規范數據格式:將不同源系統的不同數據格式統一規范。轉化過程需要將這些不同的表示格式統一成為唯一的規范格式。
拆分數據:有時候需要一句業務需求對字段進行分解。比如通話主叫號碼02381322854,可進行區域碼和電話號碼分解為主叫地區023和主叫號碼81322854。
數據存儲系統能力的提升主要有三個方面,一是提升系統的存儲容量,二是提升系統的吞吐量,三是系統的容錯性
存儲容量:提升系統容量有兩種方式:一種是提升單硬盤的容量,通過不斷采用新的材質和新的讀寫技術,目前單個硬盤的容量已經進入TB時代。一種是在多硬盤的情況的下如何提升整體的存儲容量。
吞吐量:對于單個硬盤,提升吞吐量的主要方法是提高硬盤轉速、改進磁盤接口形式或增加讀寫緩存等。而要提升數據存儲系統的整體吞吐量,比較典型的技術是早期的專用數據庫機體系。
容錯性:數據存儲容錯是指當系統中的部件或節點由于硬件或軟件故障,導致數據、文件損壞或丟失時,系統能夠自動將這些損壞或丟失的文件和數據恢復到故障發生前的狀態,使系統能夠維持正常運行的技術。
大數據從獲取到分析的各個階段都可能會涉及到數據集的存儲,考慮到大數據有別于傳統數據集,因此大數據存儲技術有別于傳統存儲技術。大數據一般通過分布式系統、NoSQL數據庫等方式(還有云數據庫)進行存儲。同時涉及到以下幾個新理念。
集群:將多臺服務器集中在一起,每臺服務器(節點)實現相同的業務。
因此每臺服務器并不是缺一不可,集群的目的是緩解并發壓力和單點故障轉移問題。
例如:新浪網微博的訪問量巨大,因此可以通過群集技術,幾臺服務器完成同一業務。當有業務訪問時,選擇負載較輕的服務器完成任務。
分布式
傳統的項目中,各個業務模塊存在于同一系統中,導致系統過于龐大,開發維護困難,無法針對單個模塊進行優化以及水平擴展。因此考慮分布式系統:
將多臺服務器集中在一起,分別實現總體中的不同業務。每臺服務器都缺一不可,如果某臺服務器故障,則網站部分功能缺失,或導致整體無法運行。因此可大幅度的提高效率、緩解服務器的訪問存儲壓力。
分布式與集群的關系、區別
關系:分布式方便我們系統的維護和開發,但是不能解決并發問題,也無法保證我們的系統崩潰后的正常運轉。集群則恰好彌補了分布式的缺陷,多個服務器處理相同的業務,這可以改善系統的并發問題,同時保證系統崩潰后的正常運轉。
因此,分布式和集群技術一般同時出現,密不可分。(分布式中的每一個節點,都可以做集群)
區別:分布式是以縮短單個任務的執行時間來提升效率的,而集群則是通過提高單位時間內執行的任務數來提升效率。
【補充】例如:
如果一個任務由10個子任務組成,每個子任務單獨執行需1小時,則在一臺服務器上執行改任務需10小時。
- 采用分布式方案:提供10臺服務器,每臺服務器只負責處理一個子任務,不考慮子任務間的依賴關系,執行完這個任務只需一個小時。(這種工作模式的一個典型代表就是Hadoop的Map/Reduce分布式計算模型)
- 而采用集群方案:同樣提供10臺服務器,每臺服務器都能獨立處理這個任務。假設有10個任務同時到達,10個服務器將同時工作,10小時后,10個任務同時完成。整身來看,還是1小時內完成一個任務。
文件系統 & 分布式文件系統
文件系統——是一種存儲和組織計算機數據的方法。
數據是以文件的形式存在,提供 Open、Read、Write、Seek、Close 等API 進行訪問;
文件以樹形目錄進行組織,提供重命名(Rename)操作改變文件或者目錄的位置。
分布式文件系統——允許文件通過網絡在多臺主機上分享的文件系統,可讓多機器上的多用戶分享文件和存儲空間。
幾種常見的分布式文件存儲系統有GFS(Google分布式文件系統)、HDFS(Hadoop分布式文件系統)、TFS、Swift、Ceph等。
HDFS系統示意圖
NoSQL(非關系型數據庫)
NoSQL(Not Only SQL),意即"不僅僅是SQL"。NoSQL數據庫可同時存儲結構化、非結構化數據、半結構化數據。
相比于關系型數據庫,非關系型數據庫提出另一種理念:每一個樣本(元組)根據需要可以有不同的字段,這樣就不局限于固定的結構,調取數據時也更方便。可以減少一些時間和空間的開銷。因此為了獲取用戶的不同信息,不需要像關系型數據庫中,對多表進行關聯查詢。僅需要根據id取出相應的value就可以完成查詢,通過XQuery、SPARQL等查詢語言完成查詢過程。
非關系型數據庫有以下幾種類型:
大數據集的數據量巨大,單機無法存儲與處理如此規模的數據量,只能依靠大規模集群以進行存儲和處理,因此系統需要具備可擴展性。
目前主流的大數據存儲與計算系統往往采用橫向擴展(Scale Out)的方式。因此,對于待存儲處理的海量數據,需要用過數據分片將數據進行切分,并分配到各服務器中。
數據分布的兩條途徑:復制 & 分片
分布式NoSQL的兩大特性:復制和分片。
數據分片與數據復制是緊密聯系的兩個概念。對于海量數據,可通過數據分片實現系統的水平擴展,通過數據復制保證數據的高可用性。
數據分片與數據復制的關系
分片(sharding/partition)——將數據的各個部分存放在不同的服務器/節點中,每個服務器/節點負責自身數據的讀取與寫入操作,以此實現橫向擴展。
復制(replication)——將同一份數據拷貝到多個節點。分為主從復制master-slave方式、對等式復制peer-to-peer。
- 主從式復制:master節點用于存放權威數據,通常負責數據的更新,其余節點都叫做slave節點,復制操作就是讓slave節點的數據與master節點的數據同步。適用于讀請求密集的負載。
- 對等式復制:兩個節點相互為各自的副本,也同時可以接受寫入請求,丟失其中一個不影響整個數據庫的訪問。但同時接受寫入請求,容易出現數據(寫入)不一致問題,實際使用上,通常是只有一個節點接受寫入請求,另一個master作為stand-by,在對方出現故障的時候自動承接寫操作請求。
分片與復制可以組合,即同時采用主從復制與分片、對等復制與分片。
優缺點對比:
分片可以極大地提高讀取性能,但對于要頻繁寫的應用,幫助不大。另外,分片對改善故障恢復能力并沒有幫助,但是它減少了故障范圍,只有訪問這個節點的那些用戶才會受影響,其余用戶可以正常訪問。雖然數據庫缺失了一部分,但是還是其余部分還是可以正常運轉。
復制除保證可用性之外,還可增加讀操作的效率。即客戶端可以從多個備份數據中選擇物理距離較近的進行讀取,這既增加了讀操作的并發性又可以提高單次讀的讀取效率。
對于分布式數據庫系統的設計過程,需遵循CAP定理:
CAP定理(布魯爾定理)
布式數據庫系統不可能同時滿足以下三點,最多只能同時滿足兩個:
- 一致性(Consistency)——所有節點在同一時間具有相同的數據;
- 可用性(Availability)——保證每個請求不管成功或者失敗都有響應;
- 分區容忍(Partition tolerance)——系統中任意信息的丟失或失敗不會影響系統的繼續運作。
因此,當代的分布式數據存儲服務,均是針對各自服務的內容、性質取舍。
而NoSQL數據庫分成了滿足 CA 原則、滿足 CP 原則和滿足 AP 原則三大類。
關系型數據庫的設計原則與事務管理遵循ACID規則:
ACID
事務(transaction),具有如下四個特性:
- A (Atomicity) 原子性——事務里的所有操作要么全部做完,要么都不做,事務成功的條件是事務里的所有操作都成功,只要有一個操作失敗,整個事務失敗,需要回滾。
- C (Consistency)一致性——數據庫要一直處于一致的狀態,事務的運行不會改變數據庫原本的約束。
- I (Isolation) 獨立性——并發的事務是相互隔離的,一個事務的執行不能被其他事務干擾。
- D (Durability) 持久性——是指一旦事務提交后,它所做的修改將會永久的保存在數據庫上,即使系統崩潰也不會丟失。
基于CAP定理演化而來BASE數據庫設計原則:
BASE
包括:Basically Available(基本可用)、Soft state(軟狀態)、Eventually consistent(最終一致性)。
針對數據庫系統要求的可用性、一致性,BASE放寬要求,形成基本可用和軟狀態/柔性事務。而一致性是最終目的。
大模型訓練的數據來源
大模型的基礎是大量的數據以及算力,下面是一些典型大模型的訓練數據集大小(以 GB 為單位)。
大模型的訓練數據源主要包含:
- 維基百科 維基百科是一個免費的多語言協作在線百科全書,由超過 300,000 名志愿者組成的社區編寫和維護。截至 2022 年 4 月,英文版維基百科中有超過 640 萬篇文章,包含超 40 億個詞[5]。一般來說,重點研究實驗室會首先選取它的純英文過濾版作為數據集。
- 書籍 故事型書籍由小說和非小說兩大類組成,主要用于訓練模型的故事講述能力和反應能力,數據集包括 Project Gutenberg 和 Smashwords (Toronto BookCorpus/BookCorpus) 等。
- 雜志期刊 預印本和已發表期刊中的論文為數據集提供了堅實而嚴謹的基礎,因為學術寫作通常來說更有條理、理性和細致。這類數據集包括 ArXiv 和美國國家衛生研究院等。
- Reddit 鏈接 WebText 是一個大型數據集,它的數據是從社交媒體平臺 Reddit 所有出站鏈接網絡中爬取的,每個鏈接至少有三個贊,代表了流行內容的風向標,對輸出優質鏈接和后續文本數據具有指導作用。
- Common Crawl
Common Crawl 是 2008 年至今的一個網站抓取的大型數據集,數據包含原始網頁、元數據和文本提取,它的文本來自不同語言、不同領域。重點研究實驗室一般會首先選取它的純英文過濾版(C4)作為數據集。 - 其他數據集不同于上述類別,這類數據集由 GitHub 等代碼數據集、StackExchange 等對話論壇和視頻字幕數據集組成。
很多人認為,這個數據量也不大啊,也就是幾百GB到TB,根本無法稱之為大量數據。其實,以CC數據集為例,合計1.4PB,而GPT3用于訓練的CC數據僅使用了其中的570GB。這中間是因為單次訓練進行了數據的預處理,只提取了自己關心的部分。
數據爬取和保存通常使用WARC、WAT和WET格式的數據存儲。LLaMA的模型使用的是WET格式的數據。以Common Crawl為例,每個CC快照的文本大小約300T,而一個WET格式的快照大小約30T。
數據去重
用CCNet將這些快照進行分片(sharding),將原來的數據分成5G一個分片。然后對每個數據做預處理:如小寫化所有數據、數字變成占位符等,然后計算每個段落的hash,再去重。并行處理數據,提高處理速度,降低數據量。
文本語言識別與過濾
識別語言,然后對不同語言的數據計算分數,最后根據分數確定是否保留某些語言。在pipeline中執行此操作的順序可能會影響語言識別的質量。CCNet使用使用n-gram特征的fastText分類器。
質量過濾
CCNet中,他們建議使用維基百科在目標語言上訓練一個簡單的語言模型,然后計算每段的困惑度(perplexity),并使用困惑度分布的來對它們進行分段。
進一步過濾
為了確定頁面的質量。如果這個頁面無法被認為是可以作為維基百科引用的,說明頁面本身質量可能比較差,所以可以進一步丟棄,提高數據的質量,降低訓練成本。經過這么一輪操作猛如虎,剩下數據就很少了。未來數據從單一的文本自然語言走向多模態,相關的訓練數據集就會更多了。