當你用大量高質量訓練數據訓練深度學習模型時,可能會刷新多個領域的模型最佳預測表現(例如圖像分類、語音識別和機器翻譯)。作為訓練數據、日志、模型服務、檢查點的存儲中心,分布式文件系統正變得越來越重要。HopsFS就是不錯的選擇,它可以本地支持數據科學主流的Python框架,例如Pandas、TensorFlow/Keras、PySpark和Arrow。
數據集尺寸增加,預測性能增加
百度研究院曾經提出,可以根據訓練數據的數量,判斷深度學習模型預測的精確度是否能提高(或者能否生成更少的錯誤)。根據下方的對數坐標圖可以看出,隨著訓練數據的尺寸增加,生成的錯誤不斷減少,呈冪律分布。這一結果來源于對多領域不同的機器學習模型的研究,包括機器翻譯、語言建模、圖像分類、語音識別。假設這一結果在多個應用領域都通用,那么有可能在你的研究領域也成立。對正在考慮大規模投資深度學習的公司來說,這一結果非常重要。假設生成或收集1GB的新訓練數據需要花費X美元,你就能預測它能為模型精確度提高多少。
來源:百度研究院research.baidu.com/deep-learning-scaling-predictable-empirically/
可預測的投資回報率
這里通過收集或生成更多訓練數據而得到的可預測投資回報率(ROI)比上面的概念稍復雜。首先,你需要收集到足夠多的數據,如下圖所示,使數據量超過“Small Data Region”,在冪律區域中,才能用足夠的數據做出預測。
你可以根據你模型生成的錯誤數量變化繪制出函數圖像,并聯系起訓練數據的多少制定出對數坐標。通過觀察你模型的直線變化,計算你的冪律圖形中的指數(圖形的斜率)。百度的實證結果表明,在它們繪制的學習曲線上,指數的范圍在-0.35到-0.07之間,說明模型在學習真實世界數據時比理論上要慢(理論上模型的理想冪律指數為-0.5)。
并且,如果你觀察了冪律區域,當訓練數據集的尺寸增加時,模型預測的生成錯誤會減少。例如,如果你在為一輛自動駕駛汽車訓練圖像分類器,那么小車自動形式的時間決定了訓練數據的尺寸。所以,自動駕駛的時間越長,圖像分類器出錯的機會就越少,并且是可以預測的。這對商業領域來說,能夠通過數據增加判斷精確度增加,是非常重要的一點。
分布式文件系統的必要性
TensorFlow團隊在2018年TensorFlow開發者峰會上表示,一個分布式文件系統對深度學習來說是必需的。數據集越來越大,GPU不僅僅要實現存儲,還需要協調模型檢查點、超參數優化和模型架構搜索。你的系統可能需要多個服務器,所以,一個分布式文件系統可以將你的機器學習流程中的不同階段融合起來,可以讓團隊成員共享GPU硬件和數據。重要的是,分布式文件系統能根據你的編程語言和深度學習框架工作。
管理日志、TensorBoard、協調GPU、存儲檢查點等都需要分布式文件系統
前面我們說到,HopsFS是一種不錯的選擇,它是HDFS的替代。HopsFS/HDFS都支持主流的Python框架,例如Pandas、PySpark數據框架、TensorFlow數據等等。在Hopsworks中,我們提供嵌入式的HopsFS/HDFS支持,以及pydoop庫。HopsFS有一個針對機器學習工作負載的特征,即對小型文件,它改善了吞吐量,并將降低了讀取/書寫的延遲。我們在Middleware 2018上有一篇經過同行審議的論文,證明了和之前的HDFS處理小文件相比,HopsFS的吞吐量提高了66倍。
Python在分布式文件系統中的支持情況
下表體現出不同分布式文件系統所支持的框架:
HopsFS中Python的支持情況
下面我們介紹幾個用Python代碼在HopsFS中使用數據集的例子,完整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時,和本地文件系統相比,我們唯一要改變代碼的地方就是將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數據集
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
-
編程語言
+關注
關注
10文章
1949瀏覽量
34862 -
圖像分類
+關注
關注
0文章
90瀏覽量
11943 -
深度學習
+關注
關注
73文章
5511瀏覽量
121354
原文標題:面向深度學習的分布式文件系統
文章出處:【微信號:jqr_AI,微信公眾號:論智】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論