當你用大量高質(zhì)量訓(xùn)練數(shù)據(jù)訓(xùn)練深度學(xué)習(xí)模型時,可能會刷新多個領(lǐng)域的模型最佳預(yù)測表現(xiàn)(例如圖像分類、語音識別和機器翻譯)。作為訓(xùn)練數(shù)據(jù)、日志、模型服務(wù)、檢查點的存儲中心,分布式文件系統(tǒng)正變得越來越重要。HopsFS就是不錯的選擇,它可以本地支持數(shù)據(jù)科學(xué)主流的Python框架,例如Pandas、TensorFlow/Keras、PySpark和Arrow。
數(shù)據(jù)集尺寸增加,預(yù)測性能增加
百度研究院曾經(jīng)提出,可以根據(jù)訓(xùn)練數(shù)據(jù)的數(shù)量,判斷深度學(xué)習(xí)模型預(yù)測的精確度是否能提高(或者能否生成更少的錯誤)。根據(jù)下方的對數(shù)坐標圖可以看出,隨著訓(xùn)練數(shù)據(jù)的尺寸增加,生成的錯誤不斷減少,呈冪律分布。這一結(jié)果來源于對多領(lǐng)域不同的機器學(xué)習(xí)模型的研究,包括機器翻譯、語言建模、圖像分類、語音識別。假設(shè)這一結(jié)果在多個應(yīng)用領(lǐng)域都通用,那么有可能在你的研究領(lǐng)域也成立。對正在考慮大規(guī)模投資深度學(xué)習(xí)的公司來說,這一結(jié)果非常重要。假設(shè)生成或收集1GB的新訓(xùn)練數(shù)據(jù)需要花費X美元,你就能預(yù)測它能為模型精確度提高多少。
來源:百度研究院research.baidu.com/deep-learning-scaling-predictable-empirically/
可預(yù)測的投資回報率
這里通過收集或生成更多訓(xùn)練數(shù)據(jù)而得到的可預(yù)測投資回報率(ROI)比上面的概念稍復(fù)雜。首先,你需要收集到足夠多的數(shù)據(jù),如下圖所示,使數(shù)據(jù)量超過“Small Data Region”,在冪律區(qū)域中,才能用足夠的數(shù)據(jù)做出預(yù)測。
你可以根據(jù)你模型生成的錯誤數(shù)量變化繪制出函數(shù)圖像,并聯(lián)系起訓(xùn)練數(shù)據(jù)的多少制定出對數(shù)坐標。通過觀察你模型的直線變化,計算你的冪律圖形中的指數(shù)(圖形的斜率)。百度的實證結(jié)果表明,在它們繪制的學(xué)習(xí)曲線上,指數(shù)的范圍在-0.35到-0.07之間,說明模型在學(xué)習(xí)真實世界數(shù)據(jù)時比理論上要慢(理論上模型的理想冪律指數(shù)為-0.5)。
并且,如果你觀察了冪律區(qū)域,當訓(xùn)練數(shù)據(jù)集的尺寸增加時,模型預(yù)測的生成錯誤會減少。例如,如果你在為一輛自動駕駛汽車訓(xùn)練圖像分類器,那么小車自動形式的時間決定了訓(xùn)練數(shù)據(jù)的尺寸。所以,自動駕駛的時間越長,圖像分類器出錯的機會就越少,并且是可以預(yù)測的。這對商業(yè)領(lǐng)域來說,能夠通過數(shù)據(jù)增加判斷精確度增加,是非常重要的一點。
分布式文件系統(tǒng)的必要性
TensorFlow團隊在2018年TensorFlow開發(fā)者峰會上表示,一個分布式文件系統(tǒng)對深度學(xué)習(xí)來說是必需的。數(shù)據(jù)集越來越大,GPU不僅僅要實現(xiàn)存儲,還需要協(xié)調(diào)模型檢查點、超參數(shù)優(yōu)化和模型架構(gòu)搜索。你的系統(tǒng)可能需要多個服務(wù)器,所以,一個分布式文件系統(tǒng)可以將你的機器學(xué)習(xí)流程中的不同階段融合起來,可以讓團隊成員共享GPU硬件和數(shù)據(jù)。重要的是,分布式文件系統(tǒng)能根據(jù)你的編程語言和深度學(xué)習(xí)框架工作。
管理日志、TensorBoard、協(xié)調(diào)GPU、存儲檢查點等都需要分布式文件系統(tǒng)
前面我們說到,HopsFS是一種不錯的選擇,它是HDFS的替代。HopsFS/HDFS都支持主流的Python框架,例如Pandas、PySpark數(shù)據(jù)框架、TensorFlow數(shù)據(jù)等等。在Hopsworks中,我們提供嵌入式的HopsFS/HDFS支持,以及pydoop庫。HopsFS有一個針對機器學(xué)習(xí)工作負載的特征,即對小型文件,它改善了吞吐量,并將降低了讀取/書寫的延遲。我們在Middleware 2018上有一篇經(jīng)過同行審議的論文,證明了和之前的HDFS處理小文件相比,HopsFS的吞吐量提高了66倍。
Python在分布式文件系統(tǒng)中的支持情況
下表體現(xiàn)出不同分布式文件系統(tǒng)所支持的框架:
HopsFS中Python的支持情況
下面我們介紹幾個用Python代碼在HopsFS中使用數(shù)據(jù)集的例子,完整Notebook地址:github.com/logicalclocks/hops-examples/tree/master/tensorflow/notebooks
Pandas
import hops.hdfs as hdfs
cols = [“Age”, “Occupation”, “Sex”, …, “Country”]
h = hdfs.get_fs()
with h.open_file(hdfs.project_path()+“/TestJob/data/census/adult.data”, “r”) as f:
train_data=pd.read_csv(f, names=cols, sep=r’s*,s*’,engine=‘python’,na_values=“?”)
用Pandas時,和本地文件系統(tǒng)相比,我們唯一要改變代碼的地方就是將openfile(..)改成h.openfile(..),其中h是HDFS/HopsFS中文檔處理的指令。
PySpark
from mmlspark importImageTransformer
IMAGE_PATH=“/Projects/myProj/Resources/imgs”
images = spark.readImages(IMAGE_PATH, recursive = True, sampleRatio = 0.1).cache()
tr = (ImageTransformer().setOutputCol(“transformed”)
.resize(height = 200, width = 200)
.crop(0, 0, height = 180, width = 180) )
smallImgs = tr.transform(images).select(“transformed”)
smallImgs.write.save(“/Projects/myProj/Resources/small_imgs”, format=“parquet”)
TensorFlow數(shù)據(jù)集
def input_fn(batch_sz):
files = tf.data.Dataset.list_files(IMAGE_PATH)
def tfrecord_dataset(f):
return tf.data.TFRecordDataset(f, num_parallel_reads=32, buffer_size=8*1024*1024)
dataset = files.apply(tf.data.parallel_interleave(tfrecord_dataset,cycle_length=32))
dataset = dataset.prefetch(4)
return dataset
-
編程語言
+關(guān)注
關(guān)注
10文章
1947瀏覽量
34846 -
圖像分類
+關(guān)注
關(guān)注
0文章
90瀏覽量
11943 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5510瀏覽量
121334
原文標題:面向深度學(xué)習(xí)的分布式文件系統(tǒng)
文章出處:【微信號:jqr_AI,微信公眾號:論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論