95% PyTorch 函式庫都中招的 Bug!連特斯拉 AI 總監也曾入坑

【為什麼我們要挑選這篇文章】對於深度學習新手而言,想將神經網路概念實作,除了 TensorFlow 之外,語法簡潔、概念直觀的 PyTorch 也是容易上手的選擇之一。

不過近期在 Reddit 上有一網友提出自己在 PyTorch 中用 NumPy 生成隨機數時,卻出現每個程序返回的隨機數都一樣的 Bug,但仍能跑出結果,讓網友叫苦,自己花了大半天的時間才找出這個 Bug,提供給辛苦的 ML 工程師們別入坑了!(責任編輯:何泰霖)

本文經 AI 新媒體量子位(公眾號 ID:QbitAI)授權轉載,轉載請連繫出處
作者:量子位

到底是怎樣的一個 bug ,能讓 95% 的 Pytorch 函式庫中招,就連特斯拉 AI 總監也深受困擾?

更別說,這個 bug 雖小,但有夠「狡猾」的。

這是最近在 Reddit 上熱議的一個話題,一位網友使用再平常不過的 Pytorch + Numpy 組合時所發現的。

最主要的是,在程式碼能夠跑通的情況下,它甚至還會影響模型的準確率!

除此之外,網友熱議的另外一個點,竟然是:「它到底算不算一個 bug?」

95% Pytorch 函式庫都出錯,究竟是怎麼回事?

事情的起因是一位網友發現,在 PyTorch 中用 NumPy 來生成隨機數時,受到數據預處理的限制,會多程序並行加載數據,但最後每個程序返回的隨機數卻是相同的。

他還舉出例子證實了自己的說法。

如下圖的範例數據集,它會返回三個元素的隨機向量。這裡採用的 batch size 為 2 ,工作處理程序為 4 個。

然後神奇的事情發生了:每個程序返回的隨機數都是一樣的。

這個結果著實讓人有點一頭霧水,就好像數學應用題求小明走一段路程需要花費多少時間,而你卻算出來了負數。

發現了問題後,這位網友還在 GitHub 上下載了超過 10 萬個 PyTorch 函式庫,用同樣的方法產生隨機數。

結果更加令人震驚:居然有超過 95% 的函式庫都受到這個問題的困擾!

這其中不乏 PyTorch 的官方教程 OpenAI 的程式碼,連特斯拉 AI 總監 Karpathy 也承認自己被坑過!

但其實這個 bug 想要解決也不難:只需要在每個 epoch 都重新設置 seed ,或者用 python 內置的隨機數生成器就可以避免這個問題。

Reddit 網友熱議:這到底是不是個 bug?

如果這個問題已經可以解決,為什麼還會引起如此大的討論呢?

因為網友們的重點已經上升到了「哲學」層面:「這到底是不是一個 bug?」

在 Reddit 上有人認為:這不是一個 bug 。

「雖然這個問題非常常見,但它並不算是一個 bug ,而是一個在 debug 時不可以忽略的點。」

但也是這個觀點,激起了大量討論,許多人都認為他忽略了問題的關鍵所在。

「這不是產生偽隨機數的問題,也不是 Numpy 的問題,問題的核心在於 PyTorch 中 DataLoader 的執行。」

「對於包含隨機轉換的數據加載 pipeline ,這意味著每個 worker 都將選擇「相同」的轉換。而現在神經網路中許多數據加載 pipeline ,都使用某種類型的隨機轉換來進行數據擴充,所以初始化設定可能是一個預設。」

另一位網友也表示這個 bug 其實是在預設程序下進行才出現的,應該向更多用戶了解。

並且 95% 以上的 Pytorch 函式庫都受此困擾,也絕不是危言聳聽。

有人也分享出了自己過去的慘痛經歷:「我發現到這一點是因為之前跑了許多程序來創建數據集時,發現其中一半的數據是重複的,之後花了很長的時間才發現哪裡出了問題。」

也有用戶補充說,如果 95%  以上的用戶使用時出現錯誤,那麼代碼就是錯的。

「順道一提,這也印證了 Karpathy 的定律:即使你搞砸了一些非常基本的程式碼,神經網路照樣運作。」

你有踩過 PyTorch 的坑嗎?

上述提到的 bug 並不是偶然,隨著用 PyTorch 的人越來越多,被發現的 bug 也就越來越多,其中從向量、函數到 model.train(),無論是真 bug 還是自己出了 bug ,大家的血淚史還真的是各有千秋。

數據分析還有哪些「坑」可以提前避開? 微軟線上雲端技術盛會 Data AI 主題,解析雲端世代數據應用趨勢,以及數據分析新工具的應用秘訣!

參考資料:tanelp.github.ioReddit

(本文經 AI 新媒體量子位 授權轉載,並同意 TechOrange 編寫導讀與修訂標題,原文標題為 〈95%PyTorch 庫都會中招的 bug!特斯拉 AI 總監都沒能倖免 〉。首圖來源:Pexels)

你可能有興趣

想當數據分析師?你可以先去考這 6 個證書
數據分析領域的最基礎門票:4 個步驟,教你如何用 PyTorch 執行線性回歸運算 PyTorch 深度學習入門推薦!清楚的 PPT 講解,讓你 5 天就上手


點關鍵字看更多相關文章: