日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

extjs 表格数据重新加载_一个简单的更改让PyTorch读取表格数据的速度提高20倍:可大大加快深度学习训练的速度...

發布時間:2023/12/15 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 extjs 表格数据重新加载_一个简单的更改让PyTorch读取表格数据的速度提高20倍:可大大加快深度学习训练的速度... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

來源:DeepHub IMBA

本文約3000字,建議閱讀5分鐘我在PyTorch中對表格的數據加載器進行的簡單更改如何將訓練速度提高了20倍以上,而循環沒有任何變化!

深度學習:需要速度

在訓練深度學習模型時,性能至關重要。數據集可能非常龐大,而低效的訓練方法意味著迭代速度變慢,超參數優化的時間更少,部署周期更長以及計算成本更高。由于有許多潛在的問題要探索,很難證明花太多時間來進行加速工作是合理的。但是幸運的是,有一些簡單的加速方法!我將向您展示我在PyTorch中對表格的數據加載器進行的簡單更改如何將訓練速度提高了20倍以上,而循環沒有任何變化!這只是PyTorch標準數據加載器的簡單替代品。對于我正在訓練的模型,可以16分鐘的迭代時間,減少到40秒!所有這些都無需安裝任何新軟件包,不用進行任何底層代碼或任何超參數的更改。

研究/產業裂痕

在監督學習中,對Arxiv-Sanity的快速瀏覽告訴我們,當前最熱門的研究論文都是關于圖像(無論是分類還是生成GAN)或文本(主要是BERT的變體)。深度學習在傳統機器學習效果不好的這些領域非常有用,但是這需要專業知識和大量研究預算才能很好地執行。許多公司擁有的許多數據已經以很好的表格格式保存在數據庫中。一些數據包括用于終生價值估算的客戶詳細信息,優化和財務的時間序列數據。

表格數據有何特別之處?

那么,為什么研究與產業之間的裂痕對我們來說是一個問題呢?好吧,最新的文本/視覺研究人員的需求與那些在表格數據集上進行監督學習的人的需求截然不同。以表格形式顯示數據(即數據庫表,Pandas DataFrame,NumPy Array或PyTorch Tensor)可以通過以下幾種方式簡化操作:
  • 可以通過切片從連續的內存塊中獲取訓練批次。

  • 無需按樣本進行預處理,從而使我們能夠充分利用大批量培訓來提高速度(請記住要提高學習率,所以我們不會過擬合!)

  • 如果您的數據集足夠小,則可以一次將其全部加載到GPU上。(雖然在技術上也可以使用文本/視覺數據,但數據集往往更大,并且某些預處理步驟更容易在CPU上完成)。

對于表格數據而不是文本/視覺數據,這些優化是可能的,他們存在兩個主要區別:模型和數據。模型:視覺研究傾向于使用大型深層卷積神經網絡(CNN);文本傾向于使用大型遞歸神經網絡(RNN)或轉換器;但是在表格數據上,完全連接的深度神經網絡(FCDNN)可以很好地完成工作。盡管并非總是如此,但與表格數據中變量之間的交互作用相比,一般而言,視覺和文本模型需要更多的參數來學習更多的細微差別的表示,因此向前和向后傳遞可能需要更長的時間。數據:視覺數據傾向于將數據保存為充滿圖像的嵌套文件夾,這可能需要大量的預處理(裁剪,縮放,旋轉等)。文本數據可以是大文件或其他文本流。通常,這兩種方法都將保存在磁盤上,并從磁盤上批量加載。這不是問題,因為瓶頸不是磁盤的讀寫速度,而是預處理或向后傳遞。另一方面,表格數據具有很好的特性,可以輕松地以數組或張量的形式加載到連續的內存塊中。表格數據的預處理往往是預先在數據庫中單獨進行,或者作為數據集上的矢量化操作進行。不同類型的監督學習研究的比較

pytorch和Dataloader

如我們所見,加載表格數據非常容易,快捷!因此,默認情況下,PyTorch當然可以很好地處理表格數據…對嗎?事實證明并非如此!?就在上周,我正在訓練一些表格數據上的PyTorch模型,并想知道它為什么花了這么長時間來訓練。我看不到任何明顯的瓶頸,但是由于某些原因,GPU使用率比預期的要低得多。當我進行一些分析時,我發現了罪魁禍首……DataLoader。什么是DataLoader?DataLoader完全按照您的想象做:將數據從任何位置(在磁盤,云,內存中)加載到模型使用它所需的任何位置(RAM或GPU內存)中。除此之外,他們還負責將您的數據分為幾批,重新整理,并在必要時對單個樣本進行預處理。將此代碼包裝在DataLoader中比散布在整個代碼中更好,因為它可以使您的主要訓練代碼保持整潔。官方的PyTorch教程還建議使用DataLoader。您如何使用它們?這取決于您擁有的數據類型。對于表格數據,PyTorch的默認DataLoader可以使用TensorDataset。這是圍繞訓練所需的張量的輕量級包裝,通常是X(或特征)和Y(或標簽)張量。 data_set = TensorDataset(train_x, train_y) train_batches = DataLoader(data_set, batch_size=1024, shuffle=False)

然后,您可以在訓練循環中使用它:

for x_batch, y_batch in train_batches: optimizer.zero_grad() loss = loss_fn(model(x_batch), y_batch) loss.backward() optimizer.step() ...為什么這樣不好?這看起來不錯,當然也很干凈!問題在于,每次加載批處理時,PyTorch的DataLoader會在每個示例中調用一次DataSet上的__getitem __()函數并將其連接起來,而不是一次大批量地讀取批處理!因此,我們最終不會利用表格數據集的優勢。當我們使用大批量時,這尤其糟糕。我們該如何解決?用下面的兩行替換上面的前兩行,然后從該文件復制FastTensorDataLoader的定義(有關此項,請在PyTorch論壇上獲得Jesse Mu的支持): train_batches = FastTensorDataLoader(train_x, train_y, batch_size=1024,shuffle=False)FastTensorDataLoader只是一個小的自定義類,除了PyTorch之外沒有任何依賴關系-使用它不需要對您的訓練代碼進行任何更改!它也支持改組,盡管下面的基準測試適用于未改組的數據。這有什么區別?在我使用的基準測試集上,自定義表格格式DataLoader的運行速度快了20倍以上。在這種情況下,這意味著用40秒鐘的時間運行之前超過15分鐘的程序-迭代速度上的巨大差異!

兩次接近相同的運行-除了一次需要15分鐘以上,而另一次不到一分鐘!

該基準是在本《自然》論文中使用的希格斯數據集上運行的。與11m個示例相比,它為大多數公共表格建立ML數據集(可能很小!)提供了更現實的深度學習基準。這是一個二進制分類問題,具有21個實值特征。很高興看到,在進行任何超參數優化之前,我們只需訓練40秒鐘就能在測試裝置上獲得超過0.77的ROC AUC!盡管我們離本文所達到的0.88尚有一段距離。希望對您有所幫助,并且您可以在自己的訓練代碼中看到類似的速度提升!實施此方法后,我發現了一些進一步的優化措施,從而使總加速接近100倍!如果您想了解更多信息,請發表評論,我們可以在后續文章中介紹這些內容。有關如何自己運行基準代碼的信息,請參見附錄。該示例包括用于運行默認PyTorch DataLoader,更快的自定義代碼以及計時結果并記錄到TensorBoard的代碼。這篇帖子的實現源于Genesis Cloud的計算功勞:以令人難以置信的成本效率實現云GPU,并在冰島的數據中心中使用100%可再生能源。注冊時可獲得$ 50的免費贈送金額,使用GTX 1080Ti可獲得160多個小時!

附錄:運行基準測試

您可以自己查看結果,以下是復制實驗的說明。如果您已經安裝了本地GPU和PyTorch,則可以跳過前兩個步驟!
  • 使用您最喜歡的GPU云提供商創建一個新的Ubuntu 18.04實例(我使用Genesis cloud-注冊后可獲得$ 50的免費積分,足以運行此實驗數百次!)。

  • 使用Lambda Stack一口氣安裝CUDA和PyTorch :(這樣做后請不要忘記重啟!)

LAMBDA_REPO=$(mktemp) && \ wget -O${LAMBDA_REPO} https://lambdalabs.com/static/misc/lambda-stack-repo.deb && \ sudo dpkg -i ${LAMBDA_REPO} && rm -f ${LAMBDA_REPO} && \ sudo apt-get update && \ sudo apt-get — yes upgrade && \ sudo apt-get install — yes — no-install-recommends lambda-server && \ sudo apt-get install — yes — no-install-recommends nvidia-headless-440 nvidia-utils-440 && \ sudo apt-get install — yes — no-install-recommends lambda-stack-cuda
  • 下載數據集

wget http://archive.ics.uci.edu/ml/machine-learning-databases/00280/HIGGS.csv.gz
  • 克隆存儲庫

git clone git@github.com:hcarlens/pytorch-tabular.git
  • 運行基準腳本

python3 pytorch-tabular/higgs_benchmark.py如果您在使用GTX 1080Ti的實例(例如我使用的Genesis Cloud)上運行,則應獲得以下結果: ubuntu@genesis:~$ python3 pytorch-tabular/higgs_benchmark.py 2020-04-12 15:05:55.961134: Itensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully openeddynamic library libcudart.so.10.0 Epoch 0 done. Epoch 1 done. Epoch 2 done. Epoch 3 done. Epoch 4 done. Epoch 5 done. Epoch 6 done. Epoch 7 done. Epoch 8 done. Epoch 9 done. Epoch 0 done. Epoch 1 done. Epoch 2 done. Epoch 3 done. Epoch 4 done. Epoch 5 done. Epoch 6 done. Epoch 7 done. Epoch 8 done. Epoch 9 done. Standard dataloader: 124.55s/epoch. Custom dataloader: 5.24s/epoch.關注數據派THU(DatapiTHU)后臺回復“20200514”獲取FastTensorDataLoader 源代碼github地址編輯:王菁校對:林亦霖

總結

以上是生活随笔為你收集整理的extjs 表格数据重新加载_一个简单的更改让PyTorch读取表格数据的速度提高20倍:可大大加快深度学习训练的速度...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。