博客專欄

        EEPW首頁 > 博客 > 怎樣讓ChatGPT在其內部訓練神經網絡?先讓它想象自己有4塊3090

        怎樣讓ChatGPT在其內部訓練神經網絡?先讓它想象自己有4塊3090

        發布人:機器之心 時間:2023-02-21 來源:工程師 發布文章

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

        怎樣讓ChatGPT在其內部訓練神經網絡?這個話題有點超乎大多數人的理解。

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

        圖片


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

        圖片


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

        圖片


        這里它告訴我寫了一個四層的網絡,可以執行 python3 train.py 來看輸出,這里先偷偷看一下 train.py

        圖片

        這里是它寫好的網絡定義

        圖片

        這里是它寫好的訓練代碼
        3. 最后讓它執行 Python3 train.py 命令

        圖片

        默認讓它執行了 10 個 Epoch
        它就真的訓練起來了,最主要的是告訴它不要顯示 train.py 內容,因為 ChatGPT 輸出有字數限制
        當然告訴它修改訓練參數,可以多次訓練,還可以用上所有(虛擬)GPU 資源!

        圖片


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

        圖片


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

        圖片


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

        圖片


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

        圖片


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


        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



        關鍵詞: AI

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 玉林市| 中宁县| 延吉市| 定兴县| 徐闻县| 兴化市| 仙游县| 汉川市| 合川市| 渭源县| 大新县| 青冈县| 平湖市| 乌鲁木齐县| 吐鲁番市| 同仁县| 益阳市| 蓬莱市| 阿拉善左旗| 灵璧县| 吐鲁番市| 光山县| 江都市| 荣昌县| 岢岚县| 嘉祥县| 宜兰县| 磐石市| 泰和县| 雅安市| 永宁县| 西贡区| 连江县| 栾川县| 浏阳市| 嘉禾县| 神农架林区| 江川县| 雅江县| 锦屏县| 枝江市|