天天看點

資料存儲、人工智能和IO模式

人工智能是計算領域的熱門話題之一,并且有着充分的理由。深度學習(DL)中的新技術在某些問題上有能力建立比人類精确度更好的神經網絡。圖像識别是深度學習(DL)模型如何在識别圖像中的對象(對象檢測和分類)方面實作比人類準确性更好的一個例子。

ImageNet競賽就是一個例子。自2010年以來,ImageNet大規模視覺識别挑戰(ILSVRC)已被用作圖像識别改進的衡量标準。在2011年,其錯誤率約為25%(該工具可以正确識别教育訓練資料集之外的75%的圖像)。2012年,深度神經網絡(DNN)的錯誤率降低到16%。在接下來的幾年裡,其錯誤率将降至個位數。在2017年,36支參賽團隊中有29人的失誤率低于5%,這通常要比人類識别做的更好。

深度學習使用各種類型的神經網絡,可應用于各種各樣的問題。建立深度學習模型通常有兩個主要步驟:第一步就是所謂的訓練。這是讓模型重複讀取輸入資料集,并調整模型參數以最小化錯誤(正确輸出與計算輸出之間的差異)的過程。這一步需要大量的輸入,需要極端大量的計算量。

第二步發生在模型訓練後,稱之為推理。這是訓練模型在生産中的部署。生産意味着該模型可用于讀取未用于教育訓練的資料。它産生用于某個任務的輸出,而不是訓練神經網絡。這一步也有一個計算元件。它不需要大量計算,它需要實作諸如最小化延遲、最佳可能精度,最大化吞吐量,以及最大化能源效率等目标。

用于執行這兩個步驟的計算的軟體由架構完成。這些軟體工具和資料庫可以讀取通常用Python編寫的腳本,告訴架構需要什麼樣的操作以及神經網絡是什麼樣的。該代碼然後由架構讀取,然後執行。架構的例子有Tensorflow、Caffe或PyTorch。

有關IO模式的問題

通過研究深度學習(DL)架構的功能,可以了解IO模式。人們不需要知道具體架構的細節,也不需要了解神經網絡背後的數學知識。

深度學習(DL)架構中訓練步驟的基本流程非常簡單。神經網絡需要相當多的輸入資料來正确訓練網絡來執行任務。它可以是圖像、視訊、音量、數字或幾乎任何資料的組合。

人們需要大量的資料。此外,其資料必須非常多樣化,并為每個輸入提供廣泛的資訊。例如,确定某人是男性還是女性的簡單面部識别需要超過1億張圖像。

輸入資料能夠以各種方式進行存儲,從簡單的csv檔案中擷取真正少量的輸入資料,以便了解深度神經網絡(DNN)的資料庫,以及包含圖像的資料庫。隻要深度神經網絡(DNN)可以通路資料并了解輸入格式,資料也可以分布在不同的格式和工具中。它也可以是結構化和非結構化資料的組合,隻要使用者知道資料和格式,并且可以在模型中表達這些資料和格式即可。

存儲媒體上的資料大小可能會有所不同。在極端情況下,來自MNIST資料集的簡單圖像是28×28灰階圖像(值從0到255)。總共有784個像素,這格式非常小。如今人們擁有4K分辨率的電視機和相機。這将是4,096 x 4,096像素,總共16,777,216個像素。

4K色彩表示通常以8位(256個選擇)開始,或者可以達到16位資訊。這可能導緻非常大的圖像。如果将一個4K圖像制作為分辨率為4520 x 2540和8位的單個未壓縮的tiff檔案,則其大小為45.9 MB。而對于16位色的圖像來說,其大小為91.8 MB。

如果組織擁有1億張圖檔,對于一些面部識别算法來說是合理的,組織擁有這麼多檔案,這對當今的檔案系統來說并不算太壞。在8位圖像情況下使用的總空間是4.59 PB。對于使用大型高分辨率圖像的單個神經網絡(NN)來說,這是相當大的空間。

一般來說,神經網絡在訓練網絡時有兩個階段。第一階段稱為前饋。它接受輸入并通過網絡進行處理。輸出與正确的輸出進行比較以産生錯誤。然後通過網絡傳播這個錯誤(反向傳播)來調整網絡的參數,以便希望減少網絡産生的錯誤。

這個過程繼續進行,以便所有圖像通過網絡進行處理。這被稱為epoch(疊代次數,1個epoch等于使用訓練集中的全部樣本訓練一次)。教育訓練一個網絡達到所需的性能水準可能需要數百、數千或數萬個epoch。深度學習架構(例如Tensorflow或Caffe或PyTorch)負責使用者建立的網絡模型的整個過程。

整體IO程序

深度學習的IO模式的簡要概述是資料一次又一次地被讀取。深度學習經常重複讀取(重讀)。請注意讀取一些文字,但與閱讀相比,它的工作量是很小的,因為它主要是在神經網絡訓練期間檢查指向。但是,為了改進神經網絡訓練,可以使用一些影響IO模式的選項。

作為讀取或寫入資料量的示例,在此假設網絡需要1億張圖像,其中每張圖像為45.9 MB。此外,假設網絡模型需要大約40MB來儲存,并且每100個epoch儲存一次,并且需要5000個epoch來訓練模型。

如前所述,一個epoch需要讀取4.59 PB的資料。這需要重複5000次。這總共需要讀取22.95EB的資料。如果每個圖像是單個檔案,它還需要讀取500億個檔案。

對于寫入IO,模型需要寫入50次。這是總共2 GB和50個寫入。與讀取相比,其工作量是非常小的。

對于這個例子,總共有459個PB執行了100億個讀取IO。随後是40MB的寫入IO。整個IO模式總共重複50次。

這是面向識别應用的深度神經網絡(DNN)的基本IO模式。為了減少訓練時間,可以使用幾種技術。以下的主題是從IO角度對這些技術進行快速概述。

訓練技巧

神經網絡(NN)訓練中使用的第一種技術是輸入資料的随機混洗。幾乎所有的時間都用它來減少所需的曆元(參考的時刻點)并防止過拟合(優化模型到資料集,但是模型在現實世界的資料上表現不佳)。

在新的epoch開始之前,資料讀取的順序是随機的。這意味着讀取的IO模式是基于每個圖像的随機數。在閱讀個人圖像時是連續的,但在圖像之間是随機的。是以,由于随機性,将模式表征為“重讀”而非“讀取”是困難的。

也有可以從資料庫中讀取資料的架構。IO模式的讀取仍然非常繁重,可能會随機對資料進行混洗。這可能會使IO模式的細節更加複雜化,因為資料庫位于記憶體和架構之間。

有時架構也會使用IO的mmap()函數。這是一個将檔案或裝置映射到記憶體的系統調用。當将虛拟記憶體區域映射到檔案時,它被稱為“基于檔案的映射”。讀取某些記憶體區域将會讀取檔案。這是預設行為。

無論是否使用mmap(),IO模式仍然是重讀的,遵循以上讨論的模式。然而,使用mmap()會使分析複雜化,因為IO直接從檔案到記憶體。

另一種常用的提高訓練性能的技術稱為批處理。在每個輸入圖像(包括向前和向後傳播)之後更新網絡,而不是在輸入“批量”圖像之後更新網絡。網絡的反向傳播部分對錯誤進行操作,例如對它們進行平均,以更新網絡參數。這通常不會改變IO模式,因為圖像仍然需要被讀取,但它可能會影響收斂速度。一般來說,它可以減緩收斂速度,但後向傳播的發生較少,提高了計算速度。

在使用GPU(圖形處理單元)進行訓練時,使用批處理還有助于提高性能。批處理不是将檔案從CPU移動到GPU,而是允許使用者将多個檔案複制到GPU。這可以提高從CPU到GPU的吞吐量,并減少資料傳輸時間。以這個例子為例,批處理大小為32将減少資料傳輸到3125000個傳輸的數量。

批處理确實有助于收斂,但不會真正影響IO模式。該模式仍然是随機讀取,寫入很少。但它可以改變架構建立的輸出量。

資料存儲與深度學習

人工智能,尤其是深度學習是一種正在改變人們生活的許多方面的計算技術。深度學習的算法需要大量的資料。數量确實取決于算法和生成的網絡模型的目标,但對于一些複雜的模式來說,它可能會運作數億的輸入集合。通常,用于訓練模型的資料越多,資料越多樣化,最終訓練的模型就越好。這指向非常大的資料集。

在以往,有人讨論資料将變得越來越冷。這意味着在建立資料後,很少再次使用它。而人們通過檢查資料,包括工程和企業資料,并發現了一些非常有趣的趨勢:

•這兩種工作負載都更加面向寫入。讀寫位元組比率已顯著下降(從4:1到2:1)

•相對于隻讀和隻寫通路模式,讀寫通路模式增加了30倍。

•檔案很少重新打開。超過66%隻重開一次,95%少于五次。

•檔案很少重新打開。

•研究期間超過90%的活動存儲空間未被使用。

•一小部分客戶占檔案活動的很大一部分。不到1%的客戶占檔案請求的50%。

而總結資料的總體使用非常容易。

•IO模式非常重視寫入。

•資料很少被重複使用,但仍然存在。

比較深入學習算法的IO模式,可以發現它與傳統工程師、HPC和企業應用程式的做法幾乎完全相反。深度學習非常重讀IO導向,資料在設計和訓練模型時被重複使用。即使在模型被訓練之後,仍然需要用新資料來增加現有的訓練資料集,特别是模型輸出中的誤差。這是為了随着時間的推移對模型進行的改進。

原文釋出時間為:2018-05-21

本文作者:Jeff Layton

本文來自雲栖社群合作夥伴“

企業網D1Net

”,了解相關資訊可以關注“

”。