建大模型:手寫LLM與推理模型的實(shí)踐路徑)
最近總有人問我AI工程從零開始到底該怎么開始問的人多了我意識(shí)到大家想要的不是一份收藏夾里的課程表而是真正能動(dòng)手把模型跑起來的路徑。尤其是《Build a Large Language Model from Scratch》這本書被頻繁提起同時(shí)build a reasoning model from scratch這個(gè)話題也持續(xù)升溫——這說明很多人已經(jīng)不滿足于當(dāng)一個(gè)API調(diào)用者而是想親手構(gòu)建屬于自己的AI系統(tǒng)。這篇東西就圍繞從零開始的完整路線、關(guān)鍵實(shí)現(xiàn)和踩坑經(jīng)驗(yàn)來寫適合那些有一定Python基礎(chǔ)、卻不知道怎么跨入AI工程門檻的開發(fā)者也適合已經(jīng)在調(diào)API、但想往底層走一步的工程師。先給你交個(gè)底我自己就是靠從零手寫模型這條路走過來的。從最早幾百行的兩層神經(jīng)網(wǎng)絡(luò)到后來真的從頭訓(xùn)練小規(guī)模語言模型再到嘗試給模型加推理能力每一步都踩過數(shù)不清的坑。這篇文章我把最有價(jià)值的那部分經(jīng)驗(yàn)拆給你包括路線怎么規(guī)劃、手寫LLM時(shí)哪些細(xì)節(jié)最重要、以及推理模型這種新玩法到底能不能從零構(gòu)建。1. 為什么我堅(jiān)持讓你走從頭開始這條笨路1.1 直接調(diào)API和動(dòng)手實(shí)現(xiàn)之間的斷層我見過太多人用OpenAI或者其他大模型的API寫了不少應(yīng)用聊起提示詞工程頭頭是道但一問到模型是怎么把文字變成向量的就沉默。這不能怪誰API抽象得太好了好到讓你誤以為AI就是這樣——一個(gè)黑盒輸入文本輸出文本。但現(xiàn)實(shí)是當(dāng)你需要針對(duì)自己的業(yè)務(wù)做微調(diào)、做蒸餾、或者設(shè)計(jì)一個(gè)全新的模型結(jié)構(gòu)時(shí)這個(gè)黑盒會(huì)立刻變成瓶頸。你不知道數(shù)據(jù)應(yīng)該處理成什么格式不知道為什么會(huì)突然出現(xiàn)重復(fù)輸出也不知道梯度消失到底是怎么回事。這些問題只有在你親手實(shí)現(xiàn)過一個(gè)模型之后才能真正建立直覺。我常說從零開始不是目的目的是把擋在你和理解之間的那層窗戶紙捅破。你不需要徒手寫一個(gè)能比肩GPT-4的東西你需要的是徒手寫一個(gè)能讓你理解GPT-4為什么能工作的東西。1.2 從一本書到整個(gè)工程思維《Build a Large Language Model from Scratch》最近很火我身邊好幾個(gè)朋友都在啃。這書之所以受歡迎是因?yàn)樗褟牧銟?gòu)建LLM從一個(gè)口號(hào)變成了一個(gè)可執(zhí)行的路徑從準(zhǔn)備數(shù)據(jù)、實(shí)現(xiàn)注意力機(jī)制、訓(xùn)練模型到微調(diào)和部署。我不是要在這兒給你劇透書的內(nèi)容而是想說你不需要把整本書啃完才動(dòng)手你完全可以在通勤時(shí)間讀一章然后周末花兩個(gè)小時(shí)把代碼跑一遍。build a reasoning model from scratch的話題又是另一個(gè)熱度。它比基礎(chǔ)LLM更進(jìn)一步強(qiáng)調(diào)的是讓模型學(xué)會(huì)思考之后回答這在2023年之后已經(jīng)成了AI圈最被關(guān)注的方向之一。你注意到?jīng)]有這些話題的核心都在from scratch——大家都意識(shí)到與其花大價(jià)錢租API調(diào)參不如親手把模型建出來哪怕只是一個(gè)小模型那份心智模型是完全不一樣的。這正是我寫這篇文章的動(dòng)機(jī)給你一張從零開始的地圖告訴你哪些地方的坑最深哪些路可以不用走。2. 動(dòng)工之前一張可執(zhí)行的前期準(zhǔn)備清單2.1 先破除一個(gè)錯(cuò)覺不需要什么都會(huì)才動(dòng)手很多人卡在第一步是因?yàn)橛X得自己數(shù)學(xué)不夠好、沒讀過論文、不懂分布式訓(xùn)練。說實(shí)話這些確實(shí)有影響但遠(yuǎn)沒有你想的那么大。如果目標(biāo)是從零開始構(gòu)建一個(gè)自己能夠完全理解的AI項(xiàng)目你需要的不是數(shù)學(xué)博士的水平而是一套足夠用的工程工具箱。我的建議很直白先動(dòng)手寫缺什么補(bǔ)什么。對(duì)就是這句聽起來像廢話的話它是我踩了半年坑之后才真正想明白的。你不需要先花三個(gè)月補(bǔ)完概率論才開始你可以先跑通一個(gè)最簡(jiǎn)單的小模型然后追著報(bào)錯(cuò)信息去學(xué)知識(shí)。報(bào)錯(cuò)就是最好的老師。2.2 真正必要的四項(xiàng)準(zhǔn)備我也攔一攔那些過于樂觀的人。完全從零開始有一些東西必須有否則會(huì)浪費(fèi)時(shí)間到懷疑人生Python熟練度不是會(huì)寫for循環(huán)就行而是要能熟練使用類、裝飾器、生成器和基礎(chǔ)的性能分析工具。PyTorch的API很多都是Pythonic的基礎(chǔ)不牢代碼會(huì)寫得很痛苦。PyTorch基礎(chǔ)知識(shí)不要一上來就用高級(jí)封裝。你需要親手寫過一個(gè)nn.Module手動(dòng)完成過前向傳播和反向傳播然后才談得上理解訓(xùn)練循環(huán)。建議花一個(gè)下午用純NumPy自己寫一遍兩層神經(jīng)網(wǎng)絡(luò)的手動(dòng)反向傳播。線性代數(shù)和概率的最小集矩陣乘法、批量維度、均值方差、Softmax、交叉熵。這些概念在Transformer里面反復(fù)出現(xiàn)你需要做到在夢(mèng)里都能畫出來。不必深到特征空間的數(shù)學(xué)證明但使用的層面必須熟練。一塊能跑的GPU這是很多人沒有意識(shí)到的最實(shí)際的坎。8GB顯存就能起步跑一個(gè)100M參數(shù)的小模型可以做實(shí)驗(yàn)跑50M參數(shù)足夠?qū)W手工實(shí)現(xiàn)。你不需要A100你需要的是不找借口。至于數(shù)學(xué)的其余部分、分布式訓(xùn)練、CUDA優(yōu)化都是后面的事。先拿最小技能集把模型跑起來比什么都有用。2.3 第一塊里程碑訓(xùn)練一個(gè)50M參數(shù)的小GPT前期準(zhǔn)備不算完沒有統(tǒng)一度量的準(zhǔn)備都是無效準(zhǔn)備。我建議你把目標(biāo)定成一個(gè)50M參數(shù)左右的小型GPT模型在比如OpenWebText這類開源語料的小子集上面訓(xùn)練。為什么是50M因?yàn)榱考?jí)剛好它能讓你體驗(yàn)到完整的訓(xùn)練流程又不會(huì)大到燒光你的顯存和耐心。這個(gè)里程碑包含的內(nèi)容很豐富你要實(shí)現(xiàn)數(shù)據(jù)加載器、tokenizer、GPT模型結(jié)構(gòu)、訓(xùn)練循環(huán)、評(píng)估、checkpoint保存和推理生成。每個(gè)環(huán)節(jié)都有坑踩完這些坑你才算真正進(jìn)入了AI工程的大門。不夸張地說完成這個(gè)里程碑比你上十門網(wǎng)課都有價(jià)值。3. 手寫LLM時(shí)繞不開的三個(gè)關(guān)鍵環(huán)節(jié)3.1 數(shù)據(jù)管線Tokenizer和批處理的細(xì)節(jié)很多初學(xué)者最先栽倒的地方居然是數(shù)據(jù)準(zhǔn)備。你要處理的數(shù)據(jù)不只是文本而是數(shù)字序列。這兩者之間的橋梁就是tokenizer。在《Build a Large Language Model from Scratch》里作者會(huì)帶你實(shí)現(xiàn)一個(gè)BPE字節(jié)對(duì)編碼分詞器。這東西的原理說簡(jiǎn)單也簡(jiǎn)單從字符級(jí)別開始反復(fù)把最常見的相鄰字節(jié)對(duì)合并成新token直到達(dá)到預(yù)設(shè)詞表大小。實(shí)操時(shí)有一個(gè)容易被忽略的細(xì)節(jié)特殊token的處理。比如|endoftext|、|user|這類標(biāo)記它們不只是風(fēng)格問題而是模型學(xué)習(xí)文本邊界的信號(hào)。我在第一次訓(xùn)練時(shí)忘了加分隔token結(jié)果生成的文本把兩段語料粘在一起輸出質(zhì)量慘不忍睹。這個(gè)坑你越早踩越好。數(shù)據(jù)管線的第二個(gè)重點(diǎn)是批處理的效率。PyTorch DataLoader如果直接配合自定義的tokenize函數(shù)往往會(huì)變成性能瓶頸。因?yàn)槊總€(gè)句子長(zhǎng)度不一還要做padding。我的建議是做一次預(yù)tokenize把整個(gè)數(shù)據(jù)集先轉(zhuǎn)成token序列訓(xùn)練時(shí)直接從序列中滑窗取塊。這樣省去了反復(fù)調(diào)用tokenizer的開銷訓(xùn)練速度能有質(zhì)的提升。3.2 模型架構(gòu)注意力機(jī)制是實(shí)現(xiàn)的核心如果你翻開任何一項(xiàng)LLM架構(gòu)的實(shí)現(xiàn)核心都在多頭注意力。它不是魔法而是一套可分解的計(jì)算流程把輸入序列的每個(gè)位置的向量拆成Q、K、V三個(gè)部分通過點(diǎn)積計(jì)算相似度得到注意力權(quán)重再用權(quán)重加權(quán)求和V。新手最容易理解錯(cuò)的地方在于mask。訓(xùn)練時(shí)你要做的是因果語言模型也就是說位置i只能看到它之前的所有位置不能看到后面的token。這個(gè)未來信息泄露的問題用一個(gè)上三角矩陣的mask就能解決。我當(dāng)時(shí)第一次實(shí)現(xiàn)時(shí)把它寫成了下三角結(jié)果模型訓(xùn)練十幾個(gè)小時(shí)loss一直不正常查看權(quán)重才發(fā)現(xiàn)問題。這類問題純靠肉眼debug很難建議從一開始就在維度注釋上寫清楚每一層的shape。另外兩個(gè)值得注意的實(shí)現(xiàn)細(xì)節(jié)一是層歸一化放在殘差連接之前還是之后這個(gè)順序直接影響訓(xùn)練的穩(wěn)定性二是旋轉(zhuǎn)位置編碼或者三角函數(shù)位置編碼的選擇會(huì)顯著影響模型的外推能力。我會(huì)建議你兩種都實(shí)現(xiàn)一遍然后對(duì)比它們?cè)陂L(zhǎng)序列生成時(shí)的表現(xiàn)差距。3.3 訓(xùn)練循環(huán)跑起來只是一個(gè)開始模型結(jié)構(gòu)寫完了訓(xùn)練循環(huán)看起來就是幾十行代碼的事加載數(shù)據(jù)、前向、算loss、反向、更新權(quán)重。但如果只寫到這個(gè)程度你會(huì)發(fā)現(xiàn)模型要么不收斂要么loss降到一定程度就卡死生成內(nèi)容全是亂碼或者無限重復(fù)。這里有幾個(gè)實(shí)操時(shí)驗(yàn)證過很有用的經(jīng)驗(yàn)初始學(xué)習(xí)率別貪大。用AdamW優(yōu)化器時(shí)3e-4到1e-3適合大多數(shù)小模型。超過這個(gè)范圍訓(xùn)練很容易在最初幾百步就發(fā)散。梯度裁剪設(shè)成1.0。別看它簡(jiǎn)單它能把很多震蕩問題直接扼殺在搖籃里。Warmup步數(shù)要有。最開始500-1000步把學(xué)習(xí)率從0線性升到目標(biāo)值能明顯改善初始階段的穩(wěn)定性。這背后的原理不復(fù)雜模型剛開始權(quán)重是隨機(jī)的如果立刻給一個(gè)大的學(xué)習(xí)率會(huì)把參數(shù)推向一個(gè)非常糟糕的區(qū)域并且很難再救回來。Loss曲線不要只盯著看。定期生成一段文本親眼看看模型輸出在變好還是變壞。這個(gè)人眼評(píng)估比任何指標(biāo)都更能反映問題。訓(xùn)練循環(huán)跑通之后我還建議你做一次過擬合單個(gè)batch的實(shí)驗(yàn)?zāi)靡粋€(gè)batch反復(fù)訓(xùn)練確認(rèn)模型可以把它的loss壓到非常低。這是一個(gè)極其有效的代碼正確性校驗(yàn)手段比任何高級(jí)調(diào)試技巧都好用。4. 從基礎(chǔ)LLM到推理模型推理能力的工程化之路4.1 推理模型到底在推理什么如果你已經(jīng)按照前面說的方式訓(xùn)練出一個(gè)可以生成文本的小LLM恭喜你你已經(jīng)摸到了AI工程的地基。但這兩年還有一個(gè)更前沿的話題就是怎么讓模型具備推理能力。普通LLM擅長(zhǎng)模仿文本分布但在數(shù)學(xué)、邏輯、代碼這類需要多步推導(dǎo)的任務(wù)上經(jīng)常一本正經(jīng)地胡說八道。推理模型reasoning model的目標(biāo)就是改變這一點(diǎn)。它不再是看到問題就立刻給答案而是先在一個(gè)內(nèi)部空間里展開一段思考過程然后基于這段思考過程給出最終結(jié)果。這個(gè)思路在《Build a Reasoning Model from Scratch》這類教程里被反復(fù)討論其核心在于兩點(diǎn)讓模型學(xué)會(huì)生成中間思考步驟以及讓模型能從反饋中改進(jìn)自己的思考策略?,F(xiàn)在很多開源項(xiàng)目比如圍繞R1風(fēng)格的復(fù)現(xiàn)工作都在做類似的事。它們不是發(fā)明新魔法而是把已有的強(qiáng)化學(xué)習(xí)、搜索和蒸餾技巧重新組合。這也意味著如果你能理解基礎(chǔ)LLM的構(gòu)建距離理解推理模型的構(gòu)建其實(shí)只有一步。4.2 一個(gè)最小可用的實(shí)現(xiàn)路徑我建議你走這條路它是我認(rèn)為在消費(fèi)級(jí)硬件上最可行的方案總共四個(gè)階段第一階段生成思維鏈樣本。拿公開的推理類數(shù)據(jù)集比如數(shù)學(xué)題、邏輯題用一個(gè)大一點(diǎn)的模型或者自己現(xiàn)有的小模型配合自適應(yīng)思維鏈提示詞生成逐步思考最終答案的訓(xùn)練樣本。目標(biāo)是讓模型在有監(jiān)督微調(diào)時(shí)見過大量帶思維鏈的文本模式。第二階段做SFT有監(jiān)督微調(diào)。用這些樣本微調(diào)你已經(jīng)訓(xùn)練好的小模型。這一階段的本質(zhì)是教會(huì)模型輸出帶有推理結(jié)構(gòu)的文本形式。別小看這一步很多模型光靠SFT就能在簡(jiǎn)單推理評(píng)測(cè)上獲得顯著提升。第三階段讓模型在推理空間中搜索。最簡(jiǎn)單的做法是采樣法讓模型在解碼時(shí)生成多個(gè)不同的思維鏈每個(gè)思維鏈給出不同答案最后把答案按多數(shù)投票或者置信度排序來決定最終輸出。這就是開源圈子常說的passk思路它成本可控對(duì)效果提升非常明顯。第四階段用可驗(yàn)證的獎(jiǎng)勵(lì)信號(hào)做強(qiáng)化學(xué)習(xí)。這一步是真正讓它從反饋中學(xué)習(xí)的關(guān)鍵。對(duì)于有確定性答案的任務(wù)比如數(shù)學(xué)題的最終數(shù)字你可以定義獎(jiǎng)勵(lì)函數(shù)答對(duì)了給正獎(jiǎng)勵(lì)答錯(cuò)了給負(fù)獎(jiǎng)勵(lì)模型通過策略梯度優(yōu)化自己的思維鏈生成方式。工程上微調(diào)時(shí)如果你已經(jīng)習(xí)慣了標(biāo)準(zhǔn)訓(xùn)練循環(huán)你會(huì)發(fā)現(xiàn)RL訓(xùn)練循環(huán)的核心多了一個(gè)獎(jiǎng)勵(lì)計(jì)算環(huán)節(jié)其他部分依然是你熟悉的前向和反向。這個(gè)四階段方案未必能造出頂級(jí)推理模型但它完整覆蓋了從文本生成到帶推理能力的生成這一范式轉(zhuǎn)移。跑完之后你再看那些推理模型的技術(shù)報(bào)告時(shí)會(huì)感覺處處都是熟人。4.3 硬件與數(shù)據(jù)都緊張時(shí)的取舍現(xiàn)實(shí)一點(diǎn)說消費(fèi)級(jí)顯卡做這些實(shí)驗(yàn)最大的限制就是顯存。我的建議是思維鏈SFT階段用最小的模型50M到500M之間做驗(yàn)證等流程全部走通再把同樣的代碼掛到更大一點(diǎn)的機(jī)器上。另外強(qiáng)化學(xué)習(xí)階段別用太復(fù)雜的PPO先從一個(gè)簡(jiǎn)單的策略梯度變體開始把獎(jiǎng)勵(lì)信號(hào)打通。記住一個(gè)原則在這個(gè)階段能復(fù)現(xiàn)比效果好重要得多。要把每一步的產(chǎn)出一一記錄包括訓(xùn)練數(shù)據(jù)格式、reward分?jǐn)?shù)、生成的思維鏈樣例。這些記錄是你未來調(diào)優(yōu)和寫技術(shù)分享的素材也是你真正理解推理模型的證據(jù)。5. 從訓(xùn)練到部署那些我把頭撞破了才明白的工程細(xì)節(jié)5.1 訓(xùn)練穩(wěn)定性的三大殺手訓(xùn)練過程中你早晚會(huì)碰到以下三個(gè)問題提前打好疫苗。第一個(gè)是loss突然變成NaN。原因千千萬萬最常見的是學(xué)習(xí)率過高、數(shù)據(jù)里混入了非法值、或者損失計(jì)算出現(xiàn)除零。排查方式我建議按順序來先檢查數(shù)據(jù)預(yù)處理確認(rèn)token id的取值都在詞表范圍內(nèi)然后檢查損失函數(shù)尤其是有mask的pad位置有沒有被錯(cuò)誤計(jì)入最后檢查學(xué)習(xí)率和梯度裁剪。NaN一旦出現(xiàn)最好的處理不是繼續(xù)跑而是立刻停下來用小學(xué)習(xí)率和單batch調(diào)試。第二個(gè)是loss不下降或者下降極慢。這個(gè)問題經(jīng)常出在數(shù)據(jù)量太小或者模型結(jié)構(gòu)有bug但不至于崩潰。我吃過最大的虧是注意力mask維度寫錯(cuò)導(dǎo)致每個(gè)位置都能看到未來信息模型在訓(xùn)練集上表現(xiàn)不錯(cuò)但生成時(shí)完全錯(cuò)亂。這種bug很難通過數(shù)值指標(biāo)發(fā)現(xiàn)建議定期做目標(biāo)泄露測(cè)試把未來位置的token隨機(jī)替換成噪聲如果loss明顯受影響說明mask有問題。第三個(gè)是評(píng)測(cè)指標(biāo)和生成質(zhì)量嚴(yán)重脫節(jié)。困惑度降了但生成的文本還是和復(fù)讀機(jī)一樣。這種情況多半是解碼策略和長(zhǎng)度懲罰的問題。把top_p調(diào)低、temperature調(diào)低、添加repetition_penalty很多時(shí)候比你繼續(xù)訓(xùn)練一周效果都好。這同樣也提醒你別迷信單一指標(biāo)。5.2 數(shù)據(jù)質(zhì)量效率的最大杠桿我見過很多人在調(diào)參上花掉大部分時(shí)間卻忽略了數(shù)據(jù)質(zhì)量這個(gè)性價(jià)比最高的環(huán)節(jié)。你的模型有多好上限是由你的數(shù)據(jù)決定的。同樣是幾百萬條樣本經(jīng)過清洗去重、過濾低質(zhì)量、控制領(lǐng)域分布的數(shù)據(jù)和直接從網(wǎng)上爬下來就進(jìn)訓(xùn)練的數(shù)據(jù)訓(xùn)練出來模型的差別可能是災(zāi)難性的。從我自己的實(shí)踐看幾條操作非常有效用規(guī)則過濾掉重復(fù)度太高的文檔比如通過n-gram重復(fù)率做一次困惑度篩選把明顯異常的文本挑出來檢查對(duì)代碼類數(shù)據(jù)單獨(dú)處理不要和自然語言混在一起。這些活兒看起來不起眼但比任何花哨的訓(xùn)練技巧都值得先做。5.3 部署推理時(shí)容易被忽略的性能瓶頸模型訓(xùn)練完之后眼前還有一道坎怎么讓它跑得夠快。部署時(shí)最開始的訴求往往是先能跑然后才會(huì)發(fā)現(xiàn)吞吐量低得可憐。瓶頸通常出在三個(gè)地方KV Cache沒開、批量推斷的padding太長(zhǎng)、以及沒有用低精度推理。KV Cache這件事值得多說一句。Transformer生成token時(shí)如果每次都重新算所有歷史位置的注意力計(jì)算量是隨序列長(zhǎng)度平方增長(zhǎng)的。KV Cache通過把歷史時(shí)刻的Key和Value緩存下來讓生成每個(gè)新token時(shí)只需要計(jì)算當(dāng)前步的Query復(fù)雜度直接降到線性。這是推理性能的天花板參數(shù)不開它等于在高速公路上開拖拉機(jī)。批量推斷的padding是另一個(gè)隱藏殺手。如果你一次性丟進(jìn)去32個(gè)長(zhǎng)度從20到500不等的句子模型會(huì)按最長(zhǎng)的500去補(bǔ)齊大量計(jì)算浪費(fèi)在padding token上。解決思路是動(dòng)態(tài)padding或者將序列按長(zhǎng)度分桶。你只要把這兩項(xiàng)做好推理吞吐量提升一兩倍是常有的事。精度方面用FP16或者INT8量化已經(jīng)足夠大多數(shù)場(chǎng)景。之前要手打一堆CUDA代碼的日子已經(jīng)過去了現(xiàn)在主流推理框架的各類加速庫都對(duì)常見模型提供了開箱即用的支持。你只需要確認(rèn)模型在量化后的精度損失在你的接受范圍內(nèi)這個(gè)需要你自己根據(jù)業(yè)務(wù)跑一跑評(píng)測(cè)集。6. 時(shí)間怎么安排、資料怎么選我沉淀下來的實(shí)操節(jié)奏6.1 一套經(jīng)過驗(yàn)證的三階段節(jié)奏如果每周能抽出十到十五小時(shí)我建議你用八到十周的時(shí)間按下面的節(jié)奏走一遍效果遠(yuǎn)好于東一榔頭西一棒第一到第二周搭好環(huán)境把《Build a Large Language Model from Scratch》的前半部分讀完。邊讀邊跑代碼目標(biāo)是把tokenizer和數(shù)據(jù)管線跑通。這個(gè)階段你能積累的第一個(gè)信心來自于親手看到一本小說被你變成了幾萬個(gè)數(shù)字ID。第三到第五周實(shí)現(xiàn)模型架構(gòu)和訓(xùn)練循環(huán)完成那個(gè)50M參數(shù)的小GPT成功訓(xùn)練出能生成連貫短文本的模型。這個(gè)階段你會(huì)經(jīng)歷最多的debug時(shí)刻但也正是從看得懂代碼到理解了模型的質(zhì)變期。第六到第八周開始嘗試做推理模型的思維鏈數(shù)據(jù)做一次帶思維鏈的SFT。完成之后你在AI工程這個(gè)領(lǐng)域的知識(shí)版圖就已經(jīng)比絕大多數(shù)調(diào)API的人要完整得多了。這套節(jié)奏的重點(diǎn)不是趕進(jìn)度而是讓每一步都有可以驗(yàn)證的產(chǎn)出。你要把每周產(chǎn)生的新代碼片段和生成樣例都保留下來它們會(huì)在之后成為你理解各種新論文的基礎(chǔ)。6.2 書、代碼和社區(qū)該怎么搭配資源不是越多越好而是越聚焦越好。如果你剛起步建議按四三二的比例分配時(shí)間四成時(shí)間看一本書上面那本就很合適從頭到尾啃下來比翻十本書有用三成時(shí)間手寫和調(diào)試代碼代碼一定要自己敲哪怕照著別人的抄完再拆掉重寫一遍都行兩成時(shí)間反復(fù)閱讀開源項(xiàng)目。我最推薦的是選一個(gè)中型的開源語言模型項(xiàng)目不要看幾百個(gè)文件的大項(xiàng)目也不要看只有幾百行的玩具實(shí)現(xiàn)。找到那個(gè)你剛好需要墊墊腳才能看懂的項(xiàng)目讀它的核心模塊對(duì)比你自己的想法。至于社區(qū)活動(dòng)我一直覺得偶爾參加線下的AI meetup很有價(jià)值但千萬別把它當(dāng)成學(xué)習(xí)的主力。真正的成長(zhǎng)發(fā)生在深夜debug的時(shí)刻不在那些熱鬧的幻燈片里。6.3 預(yù)算和硬件怎么應(yīng)對(duì)我沒有好顯卡的借口國內(nèi)很多自學(xué)的人會(huì)覺得自己沒有A100、沒有H100所以不可能做AI工程。這個(gè)借口在2025年已經(jīng)站不住了。你完全可以只用云GPU實(shí)例按小時(shí)租那種有8GB到24GB顯存的機(jī)器訓(xùn)練5到10個(gè)小時(shí)就夠了成本和你喝幾天奶茶差不多。唯一的建議是訓(xùn)練腳本先在本地用CPU調(diào)試通確認(rèn)沒有語法和邏輯錯(cuò)誤之后再上云。不要用貴的顯卡來跑有低級(jí)bug的代碼那是真的燒錢。如果你的預(yù)算真的很有限Colab的免費(fèi)版也可以跑很小的實(shí)驗(yàn)。我第一個(gè)認(rèn)真訓(xùn)練的模型就是在免費(fèi)額度上跑出來的它果然很笨但那個(gè)下午我學(xué)到的東西比后來用3090訓(xùn)練的兩周還要多。最后是一句實(shí)在話我對(duì)從零開始學(xué)AI工程最深的體會(huì)是這個(gè)過程不會(huì)讓你馬上造出一個(gè)了不起的產(chǎn)品但它會(huì)給你一種我完全掌控這個(gè)系統(tǒng)的底氣。當(dāng)別人還在糾結(jié)該調(diào)哪個(gè)模型的temperature時(shí)你已經(jīng)知道模型內(nèi)部每一條路徑是怎么走的當(dāng)別人因?yàn)橐粋€(gè)報(bào)錯(cuò)手足無措時(shí)你能靠直覺猜到問題出在數(shù)據(jù)管線還是注意力mask。這份掌控感恰恰是AI工程師最稀缺的競(jìng)爭(zhēng)力。所以別再用我很菜來拖延了。今天就裝好環(huán)境把第一段語料下載下來打開編輯器寫第一行代碼。從零開始永遠(yuǎn)不晚。