block存儲
❶ 磁碟block和文件系統block
摘取自駿馬金龍的 第4章ext文件系統機制原理剖析
硬碟最底層的讀寫IO一次是一個扇區512位元組 ,如果要讀寫大量文件,以扇區為單位肯定很慢很消耗性能,所以硬碟使用了一個稱作 邏輯塊 的概念。邏輯塊是邏輯的,由 磁碟驅動器負責維護和操作 ,它並非像扇區一樣物理劃分的。 一個邏輯塊的大小可能包含一個或多個扇區 , 每個邏輯塊都有唯一的地址,稱為LBA 。有了邏輯塊之後, 磁碟控制器對數據的操作就以邏輯塊為單位 ,一次讀寫一個邏輯塊,磁碟控制器知道如何將邏輯塊翻譯成對應的扇區並讀寫數據。
Linux操作系統層次,通過 文件系統提供了一個也稱為塊的讀寫單元 ,文件系統數據塊的大小一般為1024bytes(1K)或2048bytes(2K)或4096bytes(4K)。 文件系統數據塊 也是迅旁邏輯概念,是 文件系統層次 維護的,而 磁碟上的邏輯數據塊 是由 磁碟控制器 維護的,文件系統的IO管理器知道如何將它的數據塊翻譯成磁碟控制器維護的數據塊地址LBA。
對於使用文件系統的IO操作來說,比如讀寫文件,這些IO的基本單元是文件系統上的數據塊,一次讀寫一個文件系統數據塊。比如需要讀一個或多個塊時,文件系統的IO管理器首先計算這些文件系統塊對應在哪些磁碟帆陸數據塊,也就是計算出LBA,然後通知磁碟控制器要讀取哪些塊的數據,硬碟控制器將這些塊翻譯成扇區地址,然後從扇區中讀取數據,態昌頃再通過硬碟控制器將這些扇區數據重組寫入到內存中去。
文件系統block的出現使得在文件系統層面上讀寫性能大大提高,也大量減少了碎片。但是它的副作用是可能造成空間浪費。由於文件系統以block為讀寫單元,即使存儲的文件只有1K大小也將佔用一個block,剩餘的空間完全是浪費的。在某些業務需求下可能大量存儲小文件,這會浪費大量的空間。
盡管有缺點,但是其優點足夠明顯,在當下硬碟容量廉價且追求性能的時代,使用block是一定的。
❷ Linux裡面block和superblock區別是什麼
superblock就相當於文件系統的元數據(MetaData),存儲了文件系統的概略信息,例如如果一個ext文件系統受損,如果superblock沒有問題的話有很大可能恢復
塊設備是一種以塊(block)為單位可以進行隨機存取的硬體設備。常見的塊設備有硬碟,軟盤,快閃記憶體等。
塊設備的最小定址單元是扇區(sector),一個扇區是2\^n個位元組,512Bytes是最常見的扇區大小。內核的文件系統使用塊(block)作為最小定址單元。 常見的block大小為512Bytes,1KB,4KB ; 默認的inode 是存放文件屬性信息的 默認大小128byte(c58) 256byte(c64);
一個文件至少需要佔用一個inode 和block
默認的情況下: inode是足夠的,block消耗的快;
❸ XGBoost原理詳解及系統優化
XGBoost,全稱「Extreme Gradient Boosting」,和GBDT一樣屬於Boosting類型的模型,也是一種加法模型。
監督學習中模型表示從樣本輸入 到預測輸出 的映射關系,參數是我們要學習的部分,比如線性回歸模型 , 是我們要學習的參數。
模型訓練的過程就是尋找最優參數,使得模型能夠很好的擬合樣本和標簽。為了評價模型擬合樣本和標簽的好快程度,我們需要一個評估指標,即模型的目標函數。
通常目標函數由兩部分組成:損失部分和正則部分: ,其中L是損失函數,衡量模型的預測能力, 是正則項,控制模型的復雜度,防止模型過擬合。
XGBoost是基於CART決策樹的加法模型,形式可以表示為:
其中K表示樹的棵數,f是函數空間F中的函數,F代表所有可能的CART樹。目標函數表示為
有了目標函數之後,XGBoost的訓練過程就是尋找最優參數最小化目標函數。XGBoost的參數是什麼呢?XGBoost和GBDT一樣,是函數空間的加法模型,其參數為函數,每個函數表示一棵CART樹,包含樹的結構和樹中葉子節點的分數。
XGBoost的加法模型表示為:
...
在每一步中,我們想要學習的函數或CART樹必須能夠使得目標函數最優:
使用展開到二階的泰勒展開式
將目標函數展開到二階項:
其中:
移除所有的常數項孝纖塵之後,在第t步的目標函數就變為:
這就是我們每學習一棵新決策樹時的優化目標,該優化目標的值只依賴於 和 ,這也就是為什麼XGBoost支持自定義損失函數的原因:只要損失函數是一階和二階可導的,我們就可以一階導數和二階導數優化目標函數。
目標函數中除了損失之外,還有一項:正則項,也就是說我們還需要定義決策樹的復雜度。
首先,定義一棵決策樹為:
其中 是表示葉子節點的分數的向量, 表示把每個樣本巧禪映射到對應葉子節點的函數, 是葉子節點的數量。
基於以上的決策樹定義,XGBoost中決策樹復雜度定義為:
當然,決策樹復雜度的定義可以有多種,但是這里使用的定義方式在實踐中比較有效。很多關於樹模型的演算法包中經常忽略正則項,是因為傳統樹的學習重點關注提高節點純度。XGBoost通過在目標函數中增加決策樹復雜度,we can get a better idea of what we are learning and obtain models that perform well in the wild.
在定義了決策樹復雜度之後,我們在第t步的目標函數可以進一步做如下變換:
其中 是分配到葉子節點j的樣本集合。由於同屬一個葉子節點的樣本具有相同的分數,所以可以進行以上的變換。
如果定義:
那麼上面的目標函數可以簡化為:
上面的目標函數中 可以看做是關於 的二次方程,那麼使得目標函數取得最優值時的 以及目標函數的最優值分別為:
對於一棵決策樹, 定義了葉子節點的分數, 相當於樹的純度,並且包含了樹復雜度的度量。
有了樹的度量標准之後,理想情況下可以遍歷所有可能的樹結構,選擇最優的結構。但是在實際中是行不通的,所以我們選擇每次優化樹的一層結構,即當我們需要把樹的一個葉子節點分裂成兩個的時候,分裂的Gain為:
Gain由四部分組成:1)分裂之後左邊葉子節點的分數;2)分裂之後右邊葉子節點的分數;3)分裂之前葉子節點的分數;4)一個葉子節點分裂為兩個葉子節點時額外增加的正則。
從Gain的表達式可以看出,如果葉子節點分裂的分數差小於 ,就不要再進行分裂了。
Gain就是XGBoost在選擇分裂點時的評估依據。在實際進行分裂時,為了比較高效的選擇最優的分裂點,通常我們先把樣本按照候選特徵進行排序,然後進行遍歷並計算每個可能分裂點的Gain。
除了使用正則項之外,XGBoost還使用另外兩種技術進一步防止過擬合。第一個是shrinkage,由Friedman提出(就是那個提出GBDT演算法的Friedman)。Shrinkage對新學習到的樹節點的分數進行縮放,類似於梯度優化豎斗中的學習率,shrinkage對單棵樹的預測結果進行縮放,降低了單棵樹的預測結果在模型中的權重,並且給以後的樹留出了學習空間。第二個是列采樣,列采樣通常被用在RandomForest中。列采樣相比行采樣(也就是對樣本進行采樣,XGBoost也支持行采樣),防止過擬合的效果更好,同時,列采樣也一定程度上加速了XGBoost的並行計算。
樹訓練中的一個比較重要的問題就是尋找最佳分裂點。最基本的精確貪婪演算法通過遍歷所有可能的分裂點,然後計算Gain,選擇Gain最大的分裂點。為了提高遍歷效率,需要首先對樣本按照特徵值進行排序。精確貪婪演算法的流程見Algorithm1。
精確貪婪演算法因為要遍歷所有可能的分裂點,所以總是能夠找到最佳的分裂點,但是當數據量足夠大,超出內存容量的時候,這種方式就失效了。另外,在分布式計算的情況下,數據分布在不同的節點上,精確貪婪演算法也不能進行有效的計算。在這兩種情況下,就需要採用近似演算法。近似演算法首先根據特徵值分布的百分位數產生一些候選分割點,然後根據候選分割點把連續的特徵離散化,然後計算梯度統計gi和hi,根據梯度統計計算obj*和gain,進而尋找最佳候選分割點。詳細的演算法流程見Algorithm2.
根據候選分割點在什麼時候產生,近似演算法又分成兩種形式。第一種是global variant,是在樹構造之前首先產生所有的候選分割點,後面在樹的每一層進行分裂的時候都使用這些候選分割點。另外一種是Local variant,是在每次節點分裂之後,根據分配到節點的樣本重新產生候選分割點。Global variant只產生一次候選分割點,而local variant需要多次產生候選分割點,但是由於屬於樹中間層節點的樣本較少,尤其是隨著樹的深度增加,local variant相比global variant產生的候選分割點數量更少,而且由於local variant產生候選分割點只依賴於當前節點的樣本特徵值,因此更適合於deeper tree。
為了對比global variant和local variant,我們在Higgs boson dataset(一個kaggle比賽的數據集)上對兩種方式進行試驗,試驗結果見下圖。
(說明:eps越小,說明產生的候選分割點越多,原因或原理見2.2.3)
試驗結果:1)global eps=0.05和exact greedy對比說明,近似演算法的global variant如果產生足夠多數量的候選分裂點,基本達到和精確貪婪演算法同樣的模型效果;2)global eps=0.3和local eps=0.3對比說明,產生候選分裂點數量相同的情況下,local variant相比global variant能達到更好的模型效果(因為在樹的非根節點,相同數量的候選分裂點的情況下,實際上local variant要比global variant劃分的更加精細),或者反過來說也可以,要達到同樣的模型效果,local variant相比global variant需要更少的候選分裂點。
近似演算法中重要的一步就是產生合理的候選分裂點,通常是根據特徵值的百分位數點產生候選分割點,這樣可以把特徵值平均的分成若干個區間。實際上,XGBoost中採取的方法是,計算 ,其中 表示第k個特徵的第n個樣本的值, 表示目標函數關於 的二階導數,然後定義排序函數 :
表示在 中特徵值小於z的樣本加權佔比,權重為h。
為什麼把二階導數作為權重呢?原因來源於目標函數表達式:
對以上表達式變換一下:
這個表達式格式可以看做是以 為label,以 為權重的加權平方損失。
定義排序函數的目標是尋找候選分裂點 ,候選分裂點必須滿足:
這里 是一個超參數(2.2.2中的eps就是指的這個超參數),直觀上可以理解為,候選分裂點的數量大概為 .
在實際應用中,最常見的是類型是稀疏類型的特徵,就是特徵裡面可能包含大量的缺失值。為了使XGBoost能夠適用大量缺失值的場景,在樹分裂的時候,給缺失值一個默認的分裂方向(全部分裂到左子節點或者全部分裂到右子節點),默認的分裂方向是通過在訓練數據上學習得到的。學習默認分裂方向的演算法見Algorithm3。演算法只遍歷沒有缺失的樣本,然後把有缺失值的樣本當做一個整體,通過全部將其分到左子節點或右子節點,比較分到左邊或右邊的效果更好,就把全部缺失值樣本分到哪邊。
大多數已有的樹學習演算法要麼僅針對密集數據進行了優化,要麼需要特定的過程來處理有限的情況,例如分類編碼。 XGBoost以統一的方式處理所有稀疏模式。 更重要的是,我們的方法利用了稀疏性,使計算復雜度與輸入中非缺失項的數量呈線性關系。
XGBoost中最耗時的部分是對特徵進行排序。為了提高排序的效率,我們採取事先把數據存儲在被稱為block的內存單元里,每個block中的數據是以列壓縮(CSC)的格式存儲,每列都按照該列的數值大小進行排序。這種輸入數據只需要在訓練之前計算一次,就可以重復用於之後每棵樹的迭代訓練。
在精確貪婪演算法中,我們把整個數據集存儲在同一個block中,並且存儲在block中的數據已經是按照每列的特徵值進行排序後的,所以只需要遍歷一次block,並且根據每個樣本點屬於哪個葉子節點,就能同時為每個葉子節點尋找到最佳分裂點。下圖表示了如何把數據集轉換成列壓縮(CSC)的格式,並且使用block高效的完成尋找最佳分裂點。
在近似演算法尋找最佳分裂點中, 採取的block存儲方式與精確貪婪演算法中有所不同,近似演算法中採取用多個block對數據進行存儲,每個block對應於一部分樣本數據,並且block可以分布在不同的機器上,或存儲在磁碟上。因為每個block是根據特徵值預先排序的(此處,我理解應該是整體數據集先排序之後,然後分散在不同的block中),近似演算法中的分位數搜索就變成了線性搜索,尤其是在local proposal模式下,候選分割點需要在每個分支下搜索產生,線性搜索相比分位數搜索極大的提高了效率。
收集每列的梯度統計信息可以並行進行,從而為我們提供了一種候選分裂點查找的並行演算法。另外重要的是,CSC列壓縮存儲格式和block存儲結構支持列采樣,所以可以很方便的選擇block中的部分列。
block結構降低了選取候選分裂點的計算復雜度,但是由於block中的數據是按照CSC的列壓縮格式存儲的,並且每列是按照特徵值排序的,除了特徵值之外,還存儲了指針從特徵值指向樣本索引,所以在選取候選分割點的時候,會不斷的根據特徵值對應的樣本索引去取梯度統計值,也就是說CPU會不斷地訪問非連續的內存單元,增加CPU的負擔。最簡單的實現方法是,CPU讀取一次內存單元中的梯度統計值,就進行一次累計計算,就回引起CPU在累計計算和訪問非連續的內存單元之間的讀寫依賴關系。如果block中的梯度統計數據不能進入CPU緩存(比如block太大等原因),或者發生緩存丟失cache miss,就會降低候選分裂點選取的效率。
對於精確的貪婪演算法,我們可以通過緩存感知的預提取演算法來緩解問題。 具體來說,我們給每個線程分配一個內部緩沖區,將梯度統計信息提取到其中,然後以小批量的方式執行累加。 這種預提取將直接讀/寫依賴關系更改為更長的依賴關系,並在行數較大時幫助減少運行開銷。在數據集較大時,精確貪婪演算法的可感知緩存的運行速度是普通版本的兩倍。
對於近似演算法,我們通過選擇合適的block大小來解決該問題。 我們將block大小定義為一個block中包含的最大樣本數,因為這反映了梯度統計信息的緩存存儲成本。 選擇過小的block大小會較小每個線程的工作量,但是同時也會降低並行化效率。 另一方面,太大的block會導致高速緩存丟失cache miss,因此 block大小的選擇應該要平衡這兩個因素。 通過在不同數據集上的測試,block大小設置為 是個合適的選擇。
為了充分利用機器的資源來實現可擴展的學習,除了處理器和內存之外,利用磁碟空間來處理不能放在主內存的數據也很重要。 為了實現核外計算,我們將數據分為多個block,並將每個block存儲在磁碟上。 在計算過程中,重要的是要使用獨立的線程將block預提取到主存儲器緩沖區中,這樣就可以在讀取磁碟的同時進行計算。 但是,磁碟讀取佔用了大部分計算時間,所以要減少開銷並增加磁碟IO的吞吐量。 我們主要使用兩種技術來改進核外計算。
1)block壓縮
將block按列進行壓縮,然後在載入到內存時通過獨立的線程解壓縮,相當於用解壓縮時間換取磁碟讀取成本。我們使用通用壓縮演算法來壓縮特徵值。 對於行索引,我們把block中每個樣本的索引值都減去開始索引,並使用16位整數存儲每個樣本的索引偏移量。 在我們測試的大多數數據集中,我們實現了大約26%至29%的壓縮率。
2)block分片
將block中的數據分片到多個磁碟上,並且給每個磁碟分配獨立的線程,將數據提前取入內存緩沖區中,然後,訓練線程可以從每個緩沖區讀取數據。 當有多個磁碟可用時,這有助於增加磁碟讀取的吞吐量。
❹ 一個有關存儲的入門級問題,請問 什麼叫「塊級數據」,什麼又叫「文件級數據」
你好。block級別手孝譽就是直接通過讀寫存儲空間(磁碟,lun,volume)中的一個或者一段地址來存取數據。文件級別則是通過讀寫某個文件中的一段數據。比如你是存儲設備慎跡,我是主機,我說:請你將LUN1上的0-127這128個扇區的數據給我,你給我了,咱倆之間就是block級的訪問。如果我這樣和你要數據:請你將c盤下a。txt文件的前128位元組傳給我,這就是文件級別的訪問。前者俗稱san block訪問畢段,後者俗稱nas訪問。
❺ block和sda是什麼類型的文件
儲蓄數據文件。block和sda是儲蓄數據類型的文件。文件屬於文件的一種,與普通文件載體不同,悉派文件是以告喚硬碟為載體存儲睜友賀在計算機上的信息集合。
❻ 對象存儲、塊存儲、文件存儲分別是什麼有什麼區別
你可以把塊理解成整個硬碟,文件理解成硬碟中的文件,對象理解成很多台伺服器中的很多塊硬碟。
❼ delete和block的區別,兩種分別對應的場景
lock:塊的概念,他是oracle最小的一個存儲單元,一般為8K,也是一次io的最基本操作單位。extent:區的概念,他是由一組連續的block組成的,清滑他是oracle空間分配的基本單位。segment:段的概念,是有一系列extent組成的,一般說你創建一個對象時,會分配一個段給這個對象,所以我們都會抽象一個表或者一個索引為一個表段或者索引段。tablespace:包含段,區及塊,表空間的數據物理上存儲在數據文件里。oracle段上的HWM是一個標記,標記已經有多少沒有使用的資料庫分配給這個segment。原則上HWM智慧增加,不會縮小,即使將表的數據全部刪除漏陪,HWM還是原來的值。truncate命令,會重置答搜臘HWM為0.
❽ block在arc中和mrc中的用法有什麼區別
block在櫻賀顫ARC和MRC中的聲明拍好引用有些區別.
1、 block可以存儲在棧中,也可以在堆中
2、默認存儲在棧中,不需要管理內存
3、存儲在堆中的block會對block進脊敗行retain操作
4、(MRC)block在堆中時,不想對block進行retain操作,前面加__block
5、(ARC)前面加__weak或__unsafe_unretained
❾ 0.block是什麼文件
0.block是是文件系統最小的讀寫單元。在HDD的磁碟時代,一般block的大小可橋笑能與磁碟的辯棗扇區大小一致為512bytes。ext3文件系統中,攜消拆創建時默認4k,分為存儲文件數據的data-block和存儲目錄數據的directory-block。
❿ BLOCK(資料庫中最小存儲和處理單位)詳細資料大全
BLOCK是資料庫中的最小存儲和處理單位,包含塊本身的頭信息數據或PL/SQL代碼。
基本介紹
- 外文名 :BLOCK
- 出處 :美國
- 含義 :資料庫中最小存儲和處理單位
- 包含 :塊本身的頭信息數據或PL/SQL代辯薯碼
特點
塊的大小是可以在安裝時選擇「自定義安裝」來指定,也可以在CREATE DATABASE創建資料庫實例時指定。其最小為2K,最大可達為64K。還有街區,和籃球中蓋帽的意思。相關內容
BLOCK街區概念是由5個英文單詞的縮寫而成 BLOCK原先從美國引進過來,90年代時表現攜租者為散戶分布,後逐漸形成步行街模式,然後再度演繹成為SHOPPING MALL,而發展到BLOCK後就成為了對原先散戶的一個歸納。BLOCK街型老區概念是由5個英文單詞的縮寫而成,它們分別是B-BUSINESS(商業),L-LIEFALLOW(休閑),O-OPEN(開放),C-CROWD(人群、人流),K-KIND(親和、和諧)。與原先概念的區別就在於更加具有便捷開放性。