豐色 發自 凹非寺
量子位 | 公衆号 QbitAI
“一個GPU沒法訓練GPT-3,更别提在上面調整超參數了。”
不不不,現在情況有變——
在單個GPU上完全可以調整大規模模型的超參數。
怎麼說?
原來有人發現了一種新的調參方法,無論模型規模怎麼變化,所得的最優超參數都能保持性能穩定。
由此一來,我們可以先訓練一個小版本的模型,在上面間接調整好超參,然後以零樣本的方式直接将它們複制到全尺寸模型上,就能獲得相當不錯的性能。
這對手裡GPU資源不夠的人來說簡直不要太好了吧。
目前,相關文章也在Reddit上引起熱議,得到了300+的點贊支援。
在一個GPU上調參GPT-3大模型
方法名叫muP (Maximal Update Parametrization),作者分别來自微軟和OpenAI。
想法很簡單,利用的是他們在之前的工作中發現的一個叫做 P的特殊參數化思路:
窄神經網絡和寬神經網絡共享同一組最優超參數,即使寬度無限大(width->∞)時也一樣。
具體原理可以參見論文《Feature Learning in Infinite-Width Neural Networks》。
可共享的超參數包括學習率learning rate、learning rate schedule、initialization、parameter multipliers……甚至可以單獨針對每個參數張量。
作者在寬度高達4096的Transformer以及ResNet上驗證了這一結論。
是以,資源匮乏的煉丹er就可以在單張GPU上對一個小版本的GPT-3模型進行超參數調整:
如果在這個小模型上得到的參數接近最優,那麼在大模型上也可以得到一樣的結果。
ps. 這種調參方式又被命名為“ 遷移( Transfer)”。
具體效果如何?
作者訓練了一個隻有4000萬參數規模的小型GPT-3,它小到可以直接跑在一張GPU上。
然後把它的超參數“ 遷移”到一個有67億參數的大規模GPT-3上,結果發現它的性能和原始的GPT-3完全相當——盡管原GPT-3的參數規模還是它的兩倍!
而這一調整成本隻占整個預訓練成本的7%。
由于模型規模增大,直接調整小型模型的成本仍大緻相同,如果用該方式來調參175億規模的GPT-3,其成本可能最多隻有總預訓練成本的0.3%。
好了,這時你可能會問:能不能隻縮小模型的寬度呢?
作者表示,對于“non-width stuff”,沒有理論保證。
不過好消息是,他們在preLN Transformer的合理範圍内對depth、batch size、sequence length和timestep的遷移效果進行了測試。
其中,他們将BERT-base和BERT-large在寬度和深度上縮小到同樣的規模, 然後同時進行超參數調整後發現:
相比已經調優的megatron BERT基線,兩者的性能都得到了改善,尤其是BERT-large提升更大。
由此也總結出一個道理:
遷移後的模型規模越大,收益越高。
是以作者還調侃道,雖然我們沒有測試175億規模的GPT-3,但保證結果能讓你“流口水”。
說了這麼多,到底如何實作?
下表概括了如何通過fan-in或fan-out調整你的模型的initialization和learning rate。
其中粉色文本為 P,括号中的灰色文本為pytorch預設值。
當然,如果你不想自己手動操作,作者也開源了Pytorch實作,通過pip install mup就可以應用到你的模型中。
關于作者
一作名叫Greg Yang,微軟進階研究員。
通訊作者為微軟研究院深度學習技術中心合夥人研究經理、IEEE Fellow高劍峰。
還有兩位華人作者分别為來自微軟的Liu Xiaodong(北京郵電大學校友)和Chen Weizhu (已在微軟工作16年)。
他們的這篇成果已被NeurIPS 2021接收。
GitHub連結:
https://github.com/microsoft/mup
論文位址:
https://arxiv.org/abs/2203.03466
官方部落格連結:
https://www.microsoft.com/en-us/research/blog/%C2%B5transfer-a-technique-for-hyperparameter-tuning-of-enormous-neural-networks/
Reddit讨論:
https://www.reddit.com/r/MachineLearning/comments/tb0jm6/r_you_cant_train_gpt3_on_a_single_gpu_but_you_can/