第21章 巴別塔
隨著風波的平息,深視科技進入了一段難得的平穩期。
公司的API調用量每天都在刷新紀錄,現金流像涓涓細流匯成江河般湧入公司帳戶。
一切看起來都在軌道上高速運轉。
華清嘉園工作室,
陳陽把自己關了起來。
他正在進行一項實驗,那就是訓練超越這個時代的大語言模型。
陳陽給這場行動取了一個代號:巴別塔。
深夜,客廳。
空調開到18度,陳陽坐在三台並聯的顯示器前,屏幕上密密麻麻的代碼與日誌在流動。
桌上散落著七八個空咖啡杯、三盒吃空的外賣、一堆揉皺的草稿紙。
他已經在這把椅子上坐了十四個小時,眼睛布滿血絲,下巴冒出了青色的胡茬。
旁邊的寫字板上畫了一張架構圖,密密麻麻的線條和方塊,像一張蜘蛛網。
程序早就寫好了。
那套他高中暑假就開始設計出來的架構,代碼已經調試完畢,理論上完全可行。
但理論與實際能跑之間,隔著一道天塹。
就像你設計了一張火箭的圖紙,畫得再漂亮,也得真正發射一次才知道能不能上天。
這幾天經過實際運行,這是陳陽優化後的第七版了!
「不對,還是不對。「
陳陽揉了揉發酸的眼睛,把第七版也刪掉了。
他靠在椅背上,盯著天花板發呆。
陳陽閉上眼睛,腦子裡不斷閃過各種畫面。
突然,一個念頭擊中了他。
陳陽猛地坐直了身子。
抓起筆,在一張白紙上瘋狂畫起來。
「就是這個。「
他轉向電腦,開始敲代碼。
手指飛快地在鍵盤上跳動,屏幕上的字符像瀑布一樣往下滾。
大模型預訓練,說白了就是三個字:餵數據。
要把海量的文字塞進模型里,讓它自己去學習語言的規律。
看得越多,學得越好,最後就能像人一樣理解和生成文字。
聽起來簡單?
一點都不簡單。
首先,數據從哪來?
陳陽花了快一年時間,讓星城那邊的團隊爬取了整個維基百科、幾百萬篇新聞報導、上千萬條論壇帖子、小說的片段,清洗、去重、格式化,最後整理出三套數據:
第一套,訓練集,12.4GB。
這是餵給模型的課本,讓它自己從海量文字里自學語言規律。
對,沒錯就是自己學習,模型一開始是一個什麼都不知道的孩子。
然後通過海量數據以及算法反饋。逐漸從數據裡面學習規律,最終找到答案。
第二套,驗證集。
這是提前準備好的隨堂測驗,題目和標準答案都是現成的。
比如給模型一句話:「珠穆朗瑪峰多高「,標準答案是:「8848米「。
模型回答完,跟答案一對,就知道它學得怎麼樣。
驗證集有兩個用處。
第一,防止死記硬背。
如果模型在課本上的題越做越好,但隨堂測驗的分數不漲反降,那就說明它只是在背課本原文,換道新題就懵了。這叫過擬合,得趕緊調整。
第二,判斷什麼時候該停。
模型不可能無限進步。
學到一定程度,該會的都會了,再學也沒什麼提升了。
怎麼判斷到沒到這個點?
就看驗證集的分數。
一開始,分數會蹭蹭往上漲。
然後漲得越來越慢。最後,曲線變平了,連著好幾輪分數都不動了。
這就說明模型訓練完成,可以停了。
再往下硬學,就是浪費時間。
第三套,測試集。
這是最後的期末考試。
同樣是題目和標準答案,但模型在訓練過程中從來沒見過這套題。
等訓練結束、驗證集曲線平穩之後,才拿出這套卷子做最終檢驗。
為什麼要單獨留一套?
因為驗證集雖然沒直接餵給模型,但你一直拿它來調整訓練策略,模型多少會間接學到一些規律。就像老師反覆用同一套題摸底,學生慢慢就摸到套路了。
測試集不一樣,它從頭到尾沒告訴過模型。
只有這套全新的題也能考高分,才能證明模型是真的學會了。
三套數據,各司其職。
課本、隨堂測、期末考,缺一不可。
其次,算力夠不夠?
這一塊因為有超算中心,所以已經能吊打99%的AI實驗室。
但陳陽知道,還是不夠。
遠遠不夠。
他現在訓練的是一個一億參數的模型。
就需要差不多十分之一算力,如果後續訓練更大參數的模型,這點算力遠遠不夠。
模型的訓練參數越多,就越聰明,但需要的算力也越恐怖。
按他的估算,這次動用的十幾台伺服器全力運轉,至少要跑三天三夜才能完成一輪訓練。
中間任何一個環節出問題:Loss不收斂、顯卡過熱、內存溢出、代碼BUG。
那麼一切就得從頭再來。
最後也是最關鍵的:流程能不能跑通?
預訓練不是按一下回車就完事了。
數據要分批加載,模型要分布式並行,梯度要跨機器同步,檢查點要定時保存,任何一個環節卡住,整個流程就會崩盤。
這套流程,陳陽寫了三萬多行代碼,調試了整整一周,依然不敢保證萬無一失。
今晚,就是最後的驗證。
凌晨5點38分,代碼寫完。
陳陽深吸一口氣,手指懸在回車鍵上方。
這一刻,他突然有點緊張。
說實話,他也不知道這玩意兒能不能跑通。
理論上是對的,邏輯上是通的。
但理論和現實之間,往往隔著一道叫做玄學的鴻溝。
多少看起來完美的設計,一跑起來就原地爆炸。
「開始吧。「
沒有繼續猶豫,陳陽敲下回車。
屏幕上,程序開始運行:
[系統]正在初始化模型……
[系統]參數量:1億
[系統]開始訓練……
陳陽盯著屏幕,大氣都不敢出。
前三十分鐘是最危險的。
數據加載、模型初始化、第一次前向傳播、第一次反向傳播,任何一步出錯,程序就會直接崩掉。
陳陽的目光像釘子一樣釘在屏幕上,手心全是汗。
十分鐘。
二十分鐘。
三十分鐘。
沒有報錯。
他長出一口氣,但還不敢放鬆。
接下來要看的是Loss值。
Loss,翻譯過來是損失,可以理解成錯誤率。
數字越高,說明AI越蠢,答案錯得越離譜。
數字越低,說明它越聰明,離正確答案越近。
第一個數字跳了出來。
10.87,很高,但這是正常的。
剛開始嘛,模型什麼都不懂,純粹在瞎矇。
關鍵是接下來能不能降。
陳陽盯著屏幕,等待下一輪結束。
一億參數的模型,跑完一輪需要差不多三十分鐘。
而要讓模型真正學會東西,至少需要跑一百多輪。
也就是說,整個訓練至少要三天三夜。
這是一場漫長的煎熬。
第一天。
[Epoch 5] Loss: 8.34
[Epoch 12] Loss: 6.71
[Epoch 20] Loss: 5.43
Loss在穩步下降。
陳陽每隔半小時就看一眼屏幕,確認曲線還在往下走。
困了就灌咖啡,餓了就啃麵包,眼睛始終沒離開過那串跳動的數字。
到了深夜,Loss降到了5以下。
陳陽有點撐不住了,回臥室眯了幾個小時。
第二天。
下降速度開始變慢了,但還在降。
這是正常的。
就像爬山,越接近山頂,坡度越陡,每走一步都越來越難。
陳陽盯著那條曲線,心裡默默計算。按這個速度,最終應該能收斂到2點幾。
然後,問題出現了。
下午三點,Loss卡在了2.41,死活不動。
連續十幾輪,紋絲不動,曲線變成了一條水平線。
陳陽的眉頭皺了起來。
顯存沒爆,梯度沒消失,數據也在正常加載,到底卡在哪了?
他排查了兩個小時,終於找到原因:學習率太大了。
就像下山找最低點,步子邁太大,直接跨過了山谷,跳到對面去了。
他把學習率調小,從斷點繼續跑。
二十分鐘後,Loss開始鬆動:2.38。
2.31。
2.24。
陳陽長出一口氣。
第三天凌晨。
窗外的天色從漆黑變成深藍,又從深藍變成魚肚白。
陳陽這幾天都呆在這裡,胡茬冒了一臉,但此刻眼睛卻亮得嚇人。
因為模型的曲線開始收斂。
他死死盯著屏幕,看著最後幾輪訓練完成。
Loss: 2.03。
數據曲線平穩了下來,訓練完成了。
此時窗外,天已經亮了,第一縷陽光穿透雲層,照進實驗室。
陳陽長長鬆了一口氣,身體癱軟在椅子上。
成了。
架構跑通了,理論被驗證了。
在椅子上休息了一陣。
陳陽站起身,走到窗邊,窗外是漸漸甦醒的城市。
樓下有人在遛狗,早餐店冒出白色的蒸汽,計程車載著乘客駛向遠方。
沒有人知道,在這間不起眼的房間裡,一扇通往新世界的大門,剛剛被推開了一條縫。
他低頭看了眼手機,屏幕上顯示著日期:2013年4月28日。
公司的API調用量每天都在刷新紀錄,現金流像涓涓細流匯成江河般湧入公司帳戶。
一切看起來都在軌道上高速運轉。
華清嘉園工作室,
陳陽把自己關了起來。
他正在進行一項實驗,那就是訓練超越這個時代的大語言模型。
陳陽給這場行動取了一個代號:巴別塔。
深夜,客廳。
空調開到18度,陳陽坐在三台並聯的顯示器前,屏幕上密密麻麻的代碼與日誌在流動。
桌上散落著七八個空咖啡杯、三盒吃空的外賣、一堆揉皺的草稿紙。
他已經在這把椅子上坐了十四個小時,眼睛布滿血絲,下巴冒出了青色的胡茬。
旁邊的寫字板上畫了一張架構圖,密密麻麻的線條和方塊,像一張蜘蛛網。
程序早就寫好了。
那套他高中暑假就開始設計出來的架構,代碼已經調試完畢,理論上完全可行。
但理論與實際能跑之間,隔著一道天塹。
就像你設計了一張火箭的圖紙,畫得再漂亮,也得真正發射一次才知道能不能上天。
這幾天經過實際運行,這是陳陽優化後的第七版了!
「不對,還是不對。「
陳陽揉了揉發酸的眼睛,把第七版也刪掉了。
他靠在椅背上,盯著天花板發呆。
陳陽閉上眼睛,腦子裡不斷閃過各種畫面。
突然,一個念頭擊中了他。
陳陽猛地坐直了身子。
抓起筆,在一張白紙上瘋狂畫起來。
「就是這個。「
他轉向電腦,開始敲代碼。
手指飛快地在鍵盤上跳動,屏幕上的字符像瀑布一樣往下滾。
大模型預訓練,說白了就是三個字:餵數據。
要把海量的文字塞進模型里,讓它自己去學習語言的規律。
看得越多,學得越好,最後就能像人一樣理解和生成文字。
聽起來簡單?
一點都不簡單。
首先,數據從哪來?
陳陽花了快一年時間,讓星城那邊的團隊爬取了整個維基百科、幾百萬篇新聞報導、上千萬條論壇帖子、小說的片段,清洗、去重、格式化,最後整理出三套數據:
第一套,訓練集,12.4GB。
這是餵給模型的課本,讓它自己從海量文字里自學語言規律。
對,沒錯就是自己學習,模型一開始是一個什麼都不知道的孩子。
然後通過海量數據以及算法反饋。逐漸從數據裡面學習規律,最終找到答案。
第二套,驗證集。
這是提前準備好的隨堂測驗,題目和標準答案都是現成的。
比如給模型一句話:「珠穆朗瑪峰多高「,標準答案是:「8848米「。
模型回答完,跟答案一對,就知道它學得怎麼樣。
驗證集有兩個用處。
第一,防止死記硬背。
如果模型在課本上的題越做越好,但隨堂測驗的分數不漲反降,那就說明它只是在背課本原文,換道新題就懵了。這叫過擬合,得趕緊調整。
第二,判斷什麼時候該停。
模型不可能無限進步。
學到一定程度,該會的都會了,再學也沒什麼提升了。
怎麼判斷到沒到這個點?
就看驗證集的分數。
一開始,分數會蹭蹭往上漲。
然後漲得越來越慢。最後,曲線變平了,連著好幾輪分數都不動了。
這就說明模型訓練完成,可以停了。
再往下硬學,就是浪費時間。
第三套,測試集。
這是最後的期末考試。
同樣是題目和標準答案,但模型在訓練過程中從來沒見過這套題。
等訓練結束、驗證集曲線平穩之後,才拿出這套卷子做最終檢驗。
為什麼要單獨留一套?
因為驗證集雖然沒直接餵給模型,但你一直拿它來調整訓練策略,模型多少會間接學到一些規律。就像老師反覆用同一套題摸底,學生慢慢就摸到套路了。
測試集不一樣,它從頭到尾沒告訴過模型。
只有這套全新的題也能考高分,才能證明模型是真的學會了。
三套數據,各司其職。
課本、隨堂測、期末考,缺一不可。
其次,算力夠不夠?
這一塊因為有超算中心,所以已經能吊打99%的AI實驗室。
但陳陽知道,還是不夠。
遠遠不夠。
他現在訓練的是一個一億參數的模型。
就需要差不多十分之一算力,如果後續訓練更大參數的模型,這點算力遠遠不夠。
模型的訓練參數越多,就越聰明,但需要的算力也越恐怖。
按他的估算,這次動用的十幾台伺服器全力運轉,至少要跑三天三夜才能完成一輪訓練。
中間任何一個環節出問題:Loss不收斂、顯卡過熱、內存溢出、代碼BUG。
那麼一切就得從頭再來。
最後也是最關鍵的:流程能不能跑通?
預訓練不是按一下回車就完事了。
數據要分批加載,模型要分布式並行,梯度要跨機器同步,檢查點要定時保存,任何一個環節卡住,整個流程就會崩盤。
這套流程,陳陽寫了三萬多行代碼,調試了整整一周,依然不敢保證萬無一失。
今晚,就是最後的驗證。
凌晨5點38分,代碼寫完。
陳陽深吸一口氣,手指懸在回車鍵上方。
這一刻,他突然有點緊張。
說實話,他也不知道這玩意兒能不能跑通。
理論上是對的,邏輯上是通的。
但理論和現實之間,往往隔著一道叫做玄學的鴻溝。
多少看起來完美的設計,一跑起來就原地爆炸。
「開始吧。「
沒有繼續猶豫,陳陽敲下回車。
屏幕上,程序開始運行:
[系統]正在初始化模型……
[系統]參數量:1億
[系統]開始訓練……
陳陽盯著屏幕,大氣都不敢出。
前三十分鐘是最危險的。
數據加載、模型初始化、第一次前向傳播、第一次反向傳播,任何一步出錯,程序就會直接崩掉。
陳陽的目光像釘子一樣釘在屏幕上,手心全是汗。
十分鐘。
二十分鐘。
三十分鐘。
沒有報錯。
他長出一口氣,但還不敢放鬆。
接下來要看的是Loss值。
Loss,翻譯過來是損失,可以理解成錯誤率。
數字越高,說明AI越蠢,答案錯得越離譜。
數字越低,說明它越聰明,離正確答案越近。
第一個數字跳了出來。
10.87,很高,但這是正常的。
剛開始嘛,模型什麼都不懂,純粹在瞎矇。
關鍵是接下來能不能降。
陳陽盯著屏幕,等待下一輪結束。
一億參數的模型,跑完一輪需要差不多三十分鐘。
而要讓模型真正學會東西,至少需要跑一百多輪。
也就是說,整個訓練至少要三天三夜。
這是一場漫長的煎熬。
第一天。
[Epoch 5] Loss: 8.34
[Epoch 12] Loss: 6.71
[Epoch 20] Loss: 5.43
Loss在穩步下降。
陳陽每隔半小時就看一眼屏幕,確認曲線還在往下走。
困了就灌咖啡,餓了就啃麵包,眼睛始終沒離開過那串跳動的數字。
到了深夜,Loss降到了5以下。
陳陽有點撐不住了,回臥室眯了幾個小時。
第二天。
下降速度開始變慢了,但還在降。
這是正常的。
就像爬山,越接近山頂,坡度越陡,每走一步都越來越難。
陳陽盯著那條曲線,心裡默默計算。按這個速度,最終應該能收斂到2點幾。
然後,問題出現了。
下午三點,Loss卡在了2.41,死活不動。
連續十幾輪,紋絲不動,曲線變成了一條水平線。
陳陽的眉頭皺了起來。
顯存沒爆,梯度沒消失,數據也在正常加載,到底卡在哪了?
他排查了兩個小時,終於找到原因:學習率太大了。
就像下山找最低點,步子邁太大,直接跨過了山谷,跳到對面去了。
他把學習率調小,從斷點繼續跑。
二十分鐘後,Loss開始鬆動:2.38。
2.31。
2.24。
陳陽長出一口氣。
第三天凌晨。
窗外的天色從漆黑變成深藍,又從深藍變成魚肚白。
陳陽這幾天都呆在這裡,胡茬冒了一臉,但此刻眼睛卻亮得嚇人。
因為模型的曲線開始收斂。
他死死盯著屏幕,看著最後幾輪訓練完成。
Loss: 2.03。
數據曲線平穩了下來,訓練完成了。
此時窗外,天已經亮了,第一縷陽光穿透雲層,照進實驗室。
陳陽長長鬆了一口氣,身體癱軟在椅子上。
成了。
架構跑通了,理論被驗證了。
在椅子上休息了一陣。
陳陽站起身,走到窗邊,窗外是漸漸甦醒的城市。
樓下有人在遛狗,早餐店冒出白色的蒸汽,計程車載著乘客駛向遠方。
沒有人知道,在這間不起眼的房間裡,一扇通往新世界的大門,剛剛被推開了一條縫。
他低頭看了眼手機,屏幕上顯示著日期:2013年4月28日。