谷歌免費GPU訓練星際2AI好難?你需要份debug指南
Root 發自 凹非寺
量子位 出品 | 公眾號 QbitAI
自從去年8月10號暴雪開放了星際爭霸II的人工智慧API之後,數不清的AI研究者前赴後繼地加入了訓練星際2 AI的隊伍中。
但並非所有人都捨得掏錢購買昂貴的GPU。還好,谷歌近期大發善心提供免費的雲GPU,這下有更多的人可以訓練星際2AI了。
那用免費的GPU訓練AI會遇到哪些坑?
Reddit上有個小哥哥Franklin H.分享了這個排雷的過程,一步步引導大家如何debug。
以下是post全文:
太長不看版:如果你想用GPU硬體搭建一個免費的星際爭霸II機器學習的環境,看我在谷歌Colab上的筆記:https://colab.research.google.com/drive/1AzCKV98UaQQz2aJIeGWlExcxBrpgKsIV
最近,我和幾個好基友一起搞了個星際爭霸II的專案。
我始終持有一個觀點,就是搞機器學習研究的人,得有能力快速訓練神經網路。這一點相當重要。
把程式碼分享出去,是相對簡單的事。但我認為,對於全球訓練星際爭霸II AI智慧體的研究群體來說,更有價值的是告訴他們,怎樣用谷歌免費的GPU,在谷歌Colab跑起來星際爭霸II的AI。
我就自己先動手試了一下。
沒想到,下載完星際爭霸II和安裝上必要的資料庫之後,遇到這茬:
Return程式碼是啥玩意兒
看來得先搞清楚Return程式碼是個啥。
我翻出PySC2 source看了下,找到了設定Return程式碼的部分。
進一步挖掘,發現poll()這一塊是源自Python的subprocess模組。這說明11是終止星際爭霸程式的訊號。
訊號11是可怕的segfault,絕對算C程式設計師的噩夢。
為了看問題是不是出在這,我找到了可執行的SC2,然後讓它自己執行起來。
Emmm……
開啟Debug的地獄模式
一般來說,我會直接開啟用得最順手的Debug工具。但這樣,這篇文章就不過是個怎麼用GDB的流水賬了。
但,這不是在Google Colab上嘛,我們有的只是Jupyter Notebook網頁。這就意味著:
沒有Debugger;
沒有Root許可權;
好多工具不能用,比如說Strace。
△ RIP debug中
當你只能用網頁時……
我就試了伺服器上不同版本的星際爭霸II,包括暴雪提供4.0.2版本,3.17版本,和3.16.1版本。
居然!都不行!生氣……
那我只能在本地Linux系統上跑星際爭霸II了,畢竟這個環境我熟,有把握可以debug。這樣才能驗證我的猜想。
第一個可能的原因:沒找到必需的資料庫
剛開始我猜,星際爭霸作為一個遊戲,應該是要一些OpenGL裡的函式以及庫。而這些東西在谷歌Colab裡沒有。
為了驗證這個假說,這次我本地執行了星際爭霸II。然後用strace,記錄星際爭霸II的一切系統呼叫,所有的庫都是從作業系統載入的,這樣就能知道缺了什麼依賴庫。
這裡是日誌中的一個片段:
完整的日誌見:https://docs.python.org/3/library/subprocess.html#subprocess.Popen.returncode
看結果,發現StarCraft II除了動態地連結到那些標準C/C++庫,沒做什麼別的,這就排除了這個猜測。
還有哪些segfault?
又因為本地跑的沒有掛,說明暴雪給的碼也沒有問題。
谷歌搜怎麼debug段錯誤的時候,想起了Valgrind。我驚訝地發現,他居然就在谷歌Colab工作。
Valgrind給出程式碼片段如下:
我唯一能看出來的函式是libtcmalloc.so.4.3.0裡的MallocExtension::Initialize()。
可能有不知道TCMalloc的盆友,這其實是個谷歌定製化記憶分配器。谷歌Chrome瀏覽器用的也是這個。
但是……
當我用strace找錯的時候,我只記得看到了C和C++標準庫的載入。那TCMalloc是從哪裡冒出來的?
後來發現,有個辦法可以在沒有TCMalloc的程式上強行使用TCMalloc。
在Linux上設定LD_PRELOAD環境變數,載入TCMalloc共享庫後,就搞定。
很好奇,在谷歌Colab上看會是什麼樣?
△ 矮馬!就這個!
解決方案
可是,設定LD_PRELOAD環境變數無法擴充套件到其他環境裡去。
執行這段:
我已經解除安裝了TCMalloc。然後,除了一些錯誤的提示資訊,星際爭霸II現在可以跑起來了。這會兒總算可以開始訓練星際爭霸II的AI了。
我寫了份針對谷歌Colab的bug文件,這樣以後大家遇到類似問題就不用再糾結了。
bug文件:https://docs.python.org/3/library/subprocess.html#subprocess.Popen.returncode
不過,等星際2的AI出來還早。
我們拭目以待。
最後我想感謝一下Paul和William,StarAI,是他們告訴我PySC2,以及帶的我入坑機器學習。
如果大家遇到高難度的bug,有debug的需求可以找我,我可以提供相應的服務。這是我LinkedIn的介紹,https://www.linkedin.com/in/franklin-h-804b85a0/
最後,附小哥哥post連結:
https://medium.com/@n0mad/how-i-trained-starcraft-2-ais-using-googles-free-gpus-44bc635b0418
你可能感興趣
星際爭霸界也出了位“帶路黨”,當年的冠軍正幫谷歌AI擊敗人類
— 完 —
誠摯招聘
量子位正在招募編輯/記者,工作地點在北京中關村。期待有才氣、有熱情的同學加入我們!相關細節,請在量子位公眾號(QbitAI)對話介面,回覆“招聘”兩個字。
量子位 QbitAI · 頭條號簽約作者
վ'ᴗ' ի 追蹤AI技術和產品新動態
相關文章
- pytorch指定GPU訓練PyTorchGPU
- MinkowskiEngine多GPU訓練GPU
- 想免費用谷歌資源訓練神經網路?Colab 詳細使用教程 —— Jinkey 原創谷歌神經網路
- 一步一步教你線上免費訓練機器學習模型(啟用GPU和TPU)機器學習模型GPU
- 6-3使用GPU訓練模型GPU模型
- 猜你需要的免費api介面彙總API
- 「暑期訓練」「基礎DP」免費餡餅(HDU-1176)
- [譯] Google Colab 免費 GPU 使用教程GoGPU
- 用免費TPU訓練Keras模型,速度還能提高20倍!Keras模型
- Bert-vits2最終版Bert-vits2-2.3雲端訓練和推理(Colab免費GPU算力平臺)GPU
- 採購套路深?你需要這份採購管理指南
- 讓PyTorch訓練速度更快,你需要掌握這17種方法PyTorch
- 你也可以訓練超大神經網路!谷歌開源GPipe庫神經網路谷歌
- 免費OA系統快準好解決遠端辦公困難
- Docker環境搭建CUDA12.2 + Yolov5 7.0 GPU訓練環境(單卡訓練)DockerYOLOGPU
- 不需要藉助GPU的力量,用樹莓派也能實時訓練agent玩AtariGPU樹莓派
- 訓練指南:資料訓練定期儲存【GpuMall雲平臺特價】GPU
- 猜你需要的第三方免費API大全分享API
- 你的Mac有了專用版TensorFlow,GPU可用於訓練,速度最高提升7倍MacGPU
- 免費試用谷歌的翻譯介面谷歌
- 免費好物API分享大全API
- 免費CRM系統哪家好?
- 大規模圖訓練調優指南
- 免費版ChatGPT API Key生成指南ChatGPTAPI
- 完勝 BERT,谷歌最佳 NLP 預訓練模型開源,單卡訓練僅需 4 天谷歌模型
- 2:0!谷歌 AI “AlphaStar“ 虐殺職業星際玩家谷歌AIAST
- 與其感慨模型難訓練,不如試試 AutoNLP模型
- 谷歌colab訓練自己的資料集YOLOv3谷歌YOLO
- 免費領!500份大廠P7面試題免費送!!面試題
- 使用 diffusers 訓練你自己的 ControlNet ?
- 深度學習,機器學習神器,白嫖免費GPU深度學習機器學習GPU
- 哪個免費OA系統好?免費OA選型注意點有哪些?
- 怎樣在 10k 個 H100 GPU 上訓練模型?GPU模型
- 在 NVIDIA DGX Cloud 上使用 H100 GPU 輕鬆訓練模型CloudGPU模型
- 「Debug R」為什麼你需要保持R包是最新的?
- 新型大語言模型的預訓練與後訓練正規化,谷歌的Gemma 2語言模型模型谷歌Gemma
- 星際公民:身後的情懷與眼前的苦難
- 用免費GPU部署自己的stable-diffusion-學習筆記GPU筆記