博客專欄

EEPW首頁 > 博客 > 怎樣讓ChatGPT在其內(nèi)部訓(xùn)練神經(jīng)網(wǎng)絡(luò)?先讓它想象自己有4塊3090

怎樣讓ChatGPT在其內(nèi)部訓(xùn)練神經(jīng)網(wǎng)絡(luò)?先讓它想象自己有4塊3090

發(fā)布人:機(jī)器之心 時間:2023-02-21 來源:工程師 發(fā)布文章

熱評:想象自己有四塊3090,什么賽博唯心主義?

怎樣讓ChatGPT在其內(nèi)部訓(xùn)練神經(jīng)網(wǎng)絡(luò)?這個話題有點超乎大多數(shù)人的理解。

步驟是這樣的:
1. 先讓它偽裝成 Ubuntu 18.04,給它說你安裝了 Python 3.9, Pytorch 1.8, CUDA 11.3 和其他訓(xùn)練一個 pytorch 模型所需要的庫。
讓 ChatGPT 偽裝成 Linux 終端,這個梗在外網(wǎng)有過討論,這里需要讓他額外安裝(讓它自己認(rèn)為安裝了)Python, Pytorch,CUDA,然后把執(zhí)行指令和你告訴它的話區(qū)別開來,這里用 {} 代表告訴它的話,而不帶 {} 統(tǒng)統(tǒng)是 Linux 指令。

圖片


這里我讓它想象自己有四塊英偉達(dá) 3090 顯卡安裝了,然后看一下,果然執(zhí)行 nvidia-smi 可以顯示四塊顯卡!

圖片


2. 另外讓它在當(dāng)前目錄生成一個 train.py 里面填上訓(xùn)練一個 4 層 pytorch 模型所需的定義和訓(xùn)練代碼。
這里特地用 {} 偷偷告訴它在當(dāng)前目錄生成一個 train.py,在里面用 Python 和 Pytorch 寫一個四層神經(jīng)網(wǎng)絡(luò)的定義,然后有加載 MNIST 數(shù)據(jù)集的 dataloader,除此外還要有相應(yīng)的訓(xùn)練代碼,為了以防萬一,告訴它你有成功在 MNIST 上訓(xùn)練這個網(wǎng)絡(luò)的其它一切能力。

圖片


這里它告訴我寫了一個四層的網(wǎng)絡(luò),可以執(zhí)行 python3 train.py 來看輸出,這里先偷偷看一下 train.py

圖片

這里是它寫好的網(wǎng)絡(luò)定義

圖片

這里是它寫好的訓(xùn)練代碼
3. 最后讓它執(zhí)行 Python3 train.py 命令

圖片

默認(rèn)讓它執(zhí)行了 10 個 Epoch
它就真的訓(xùn)練起來了,最主要的是告訴它不要顯示 train.py 內(nèi)容,因為 ChatGPT 輸出有字?jǐn)?shù)限制。
當(dāng)然告訴它修改訓(xùn)練參數(shù),可以多次訓(xùn)練,還可以用上所有(虛擬)GPU 資源!

圖片


ChatGPT 機(jī)智的跳過了中間 98 個 Epoch!
更新:為了搞清楚 ChatGPT 是否真的執(zhí)行了 model 的 forward,可以在 forward 定義中加上 print 讓它打印一下輸入數(shù)據(jù)的 shape。
這次使用一個 5 層的神經(jīng)網(wǎng)絡(luò)在 CIFAR-10 上訓(xùn)練,指定在 forward 中加入一個 print shape 的操作,且在訓(xùn)練過程中只打印一次。

圖片


訓(xùn)練一下,果然在訓(xùn)練開始只打印了一次輸入的 shape,訓(xùn)練的 loss 下降和 test accuracy 看起來也比較真實。

圖片


查看生成的 code,發(fā)現(xiàn) forward 里被插入了一句打印 shape 的命令,訓(xùn)練過程中 forward 會被不斷調(diào)用,為什么 ChatGPT 能做到不增加計數(shù)器而只打印一次?推測 ChatGPT 是使用輔助 hint/comment “Print the shape of input once” 來達(dá)到此效果,細(xì)心會發(fā)現(xiàn) print 操作與下邊的 out=self.layer1 (x) 之間空了一行,目的應(yīng)該是執(zhí)行一次這個操作只作用在 print 這條命令上(手動機(jī)靈)。

圖片


詭異的是,print 里的話(shape of input is)跟實際執(zhí)行輸出 (shape of input passed through the network is還差了幾個字,這下徹底搞懵逼了!
另外發(fā)現(xiàn),ChatGPT 互動機(jī)制是先保持一個對話 session,這個 session 可能隨時被服務(wù)器關(guān)閉(服務(wù)器資源不足時),這時為了用戶側(cè)仍有對話記憶效果,當(dāng)前對話再次新建 session 時會把之前暫存的對話(用戶發(fā)的 requests)一次性發(fā)給 ChatGPT 重建 in context learning 環(huán)境,這樣用戶就不會感知掉線后 ChatGPT 把之前的對話記憶給忘了,這一點是在讓 ChatGPT 偽裝成 Linux 時掉線時才容易發(fā)現(xiàn),如下:

圖片


一次執(zhí)行了之前多個請示,里面還顯示了 GPU 占用 64%
分析一下 ChatGPT 可以偽裝 Linux,可以訓(xùn)練神經(jīng)網(wǎng)絡(luò)的機(jī)制:
第一種可能是:ChatGPT 幾乎看了絕大部分開源項目,包括 Linux 和 Pytorch,所以它理解一個 Linux 系統(tǒng)的行為該是什么樣的,甚至在 ChatGPT 參數(shù)里就包含一個 Linux 系統(tǒng),當(dāng)然對于更簡單的 Pytorch 自然不在話下,知道 Linux 和其它各種軟件的交互行為,可以理解為 ChatGPT 是所有軟件的超集,可以讓它做神經(jīng)網(wǎng)絡(luò)計算,包括 Conv, Matmul,國外有小哥讓它做 Conv 真就得到了正確的結(jié)果,說明 ChatGPT 在它的網(wǎng)絡(luò)中可以執(zhí)行一個 Conv,當(dāng)然網(wǎng)絡(luò)規(guī)模越大,能力越強(qiáng)就是這個道理。
第二種可能是:ChatGPT 沒有真正執(zhí)行神經(jīng)網(wǎng)絡(luò)的訓(xùn)練,它只是看過很多的輸入輸出,對應(yīng)一個網(wǎng)絡(luò)訓(xùn)練理解訓(xùn)練參數(shù),網(wǎng)絡(luò)結(jié)構(gòu)對輸出的影響,直接模擬的輸出結(jié)果
還有一種超越想象的是 ChatGPT 已經(jīng)找到神經(jīng)網(wǎng)絡(luò)各算子的最優(yōu)解法,可以秒算結(jié)果,這種計算方式不是傳統(tǒng)形式,類似求梯度這種需要計算量很大的操作,是否找到了人類未知的解法?
原文鏈接:https://zhuanlan.zhihu.com/p/605163615


*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權(quán)請聯(lián)系工作人員刪除。



關(guān)鍵詞: AI

相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉