直接淘汰)
1. 為什么這8個(gè)問(wèn)題成了LLM面試的硬門檻面過(guò)幾十個(gè)LLM方向的候選人之后我越來(lái)越確信一件事這個(gè)領(lǐng)域的面試已經(jīng)過(guò)了“你會(huì)不會(huì)調(diào)API”的階段?,F(xiàn)在面試官拋出的問(wèn)題幾乎全部指向同一個(gè)核心——你到底有沒有真正理解過(guò)大模型內(nèi)部在發(fā)生什么。標(biāo)題里說(shuō)的“答不上來(lái)直接淘汰”聽起來(lái)有點(diǎn)狠但站在面試官的角度想想一個(gè)連Tokenization和Embedding區(qū)別都說(shuō)不清的人你怎么放心讓他去調(diào)Prompt、做RAG、搭A(yù)gent這篇文章的由來(lái)是我最近幫團(tuán)隊(duì)整理面試題庫(kù)時(shí)把過(guò)去一年問(wèn)過(guò)的、真正能區(qū)分候選人水平的問(wèn)題做了系統(tǒng)梳理。最終收斂到8個(gè)方向Transformer架構(gòu)理解、Tokenization機(jī)制、Embedding原理與應(yīng)用、注意力機(jī)制細(xì)節(jié)、Function Calling設(shè)計(jì)、模型微調(diào)策略、推理優(yōu)化、以及幻覺與可靠性問(wèn)題。這8個(gè)問(wèn)題覆蓋了從底層原理到工程落地的完整鏈路任何一個(gè)答不上來(lái)基本可以判斷候選人在這個(gè)方向上缺乏深度實(shí)踐。適合誰(shuí)來(lái)讀如果你正在準(zhǔn)備LLM方向的面試不管是算法崗還是應(yīng)用工程崗這篇內(nèi)容可以當(dāng)作一份自檢清單。如果你是面試官也可以直接拿去用每個(gè)問(wèn)題我都附上了“及格線”和“加分項(xiàng)”的區(qū)分標(biāo)準(zhǔn)。如果你只是對(duì)LLM感興趣的技術(shù)人這里面的原理拆解和實(shí)操經(jīng)驗(yàn)同樣能幫你建立起一套完整的認(rèn)知框架。下面我逐個(gè)拆解每個(gè)問(wèn)題都會(huì)說(shuō)清楚面試官到底想考什么、你應(yīng)該怎么回答、以及我在實(shí)際面試中見過(guò)的典型翻車現(xiàn)場(chǎng)。2. Transformer架構(gòu)不只是“Attention is All You Need”2.1 面試官真正想考的是什么“介紹一下Transformer”這個(gè)問(wèn)題幾乎每場(chǎng)面試都會(huì)出現(xiàn)。但面試官想聽的絕對(duì)不是你把論文摘要背一遍。我通常會(huì)在候選人講完標(biāo)準(zhǔn)答案之后追問(wèn)三個(gè)問(wèn)題為什么用LayerNorm而不是BatchNorm為什么是多頭而不是單頭位置編碼為什么用正弦函數(shù)而不是可學(xué)習(xí)參數(shù)這三個(gè)追問(wèn)能直接區(qū)分出“看過(guò)論文”和“真正理解設(shè)計(jì)動(dòng)機(jī)”的人。大部分候選人能說(shuō)出“多頭可以捕捉不同子空間的特征”但當(dāng)我問(wèn)“那為什么不是越多頭越好”時(shí)就卡住了。實(shí)際上頭的數(shù)量受限于d_model每個(gè)頭的維度是d_model / h頭太多會(huì)導(dǎo)致每個(gè)頭的維度太小表達(dá)能力反而下降。這個(gè)細(xì)節(jié)在原始論文里沒有明說(shuō)但在實(shí)際調(diào)參時(shí)非常關(guān)鍵。2.2 編碼器與解碼器的結(jié)構(gòu)差異很多人把Transformer當(dāng)成一個(gè)整體來(lái)講但面試中你需要清晰地拆開說(shuō)。編碼器是雙向注意力每個(gè)位置可以看到全序列解碼器是因果注意力每個(gè)位置只能看到自己和之前的位置。這個(gè)差異直接決定了它們適合的任務(wù)類型。我一般會(huì)這樣解釋編碼器像一個(gè)“全局審閱者”它需要看到完整上下文才能理解每個(gè)詞的含義適合分類、抽取、Embedding生成等任務(wù)。解碼器像一個(gè)“逐字寫作的人”它只能基于已寫的內(nèi)容決定下一個(gè)詞適合文本生成。而Encoder-Decoder結(jié)構(gòu)比如T5、BART則是“先讀懂再寫”適合翻譯、摘要這類需要理解輸入再生成輸出的任務(wù)。實(shí)際面試中我會(huì)讓候選人畫一下三種結(jié)構(gòu)的注意力矩陣形狀。這個(gè)看似簡(jiǎn)單的問(wèn)題能直接暴露對(duì)方是否真正動(dòng)手實(shí)現(xiàn)過(guò)Transformer。2.3 殘差連接與層歸一化的工程考量殘差連接看起來(lái)簡(jiǎn)單但它在深層Transformer中的作用遠(yuǎn)超“防止梯度消失”。我試過(guò)在24層以上的模型中移除殘差連接訓(xùn)練直接崩掉loss完全不下降。原因是殘差連接保證了梯度可以繞過(guò)非線性變換直接回傳這對(duì)于深層網(wǎng)絡(luò)的穩(wěn)定訓(xùn)練是必須的。LayerNorm的位置也有講究。原始論文用的是Post-LN先做注意力/FFN再歸一化但后來(lái)GPT-2開始改用Pre-LN先歸一化再做注意力/FFN。Pre-LN的訓(xùn)練更穩(wěn)定不需要warmup就能收斂但最終效果可能略遜于精心調(diào)參的Post-LN。這個(gè)取舍在實(shí)際項(xiàng)目中非常實(shí)用——如果你訓(xùn)練資源有限Pre-LN是更安全的選擇。實(shí)操心得如果你在面試中被問(wèn)到“訓(xùn)練不收斂怎么辦”優(yōu)先檢查L(zhǎng)ayerNorm的位置和初始化方式。我踩過(guò)的坑是Post-LN結(jié)構(gòu)下如果不做learning rate warmup前幾千步的梯度范數(shù)會(huì)爆炸。2.4 位置編碼的選型邏輯正弦位置編碼的優(yōu)勢(shì)在于它可以外推到訓(xùn)練時(shí)沒見過(guò)的序列長(zhǎng)度。但在實(shí)際使用中外推效果往往不如預(yù)期。后來(lái)RoPE旋轉(zhuǎn)位置編碼成為主流因?yàn)樗ㄟ^(guò)旋轉(zhuǎn)矩陣編碼相對(duì)位置信息在長(zhǎng)序列上表現(xiàn)更好?,F(xiàn)在很多開源模型LLaMA、Qwen等都用RoPE。面試中如果候選人能說(shuō)出“RoPE通過(guò)絕對(duì)位置編碼的方式實(shí)現(xiàn)了相對(duì)位置編碼的效果”我會(huì)給加分。如果再能解釋清楚RoPE的遠(yuǎn)程衰減特性——即隨著距離增大注意力分?jǐn)?shù)自然衰減——那就是資深級(jí)別的理解了。3. Tokenization大模型的第一道關(guān)卡3.1 為什么Tokenization值得單獨(dú)問(wèn)很多人覺得Tokenization只是預(yù)處理不重要。但實(shí)際項(xiàng)目中Tokenization直接影響到模型的效果、推理成本、甚至多語(yǔ)言能力。我見過(guò)一個(gè)真實(shí)案例某個(gè)團(tuán)隊(duì)做中文法律文書摘要模型效果一直不好排查了很久才發(fā)現(xiàn)是Tokenizer把很多法律術(shù)語(yǔ)切碎了導(dǎo)致模型根本學(xué)不到完整的術(shù)語(yǔ)表示。面試中我會(huì)問(wèn)“BPE、WordPiece、SentencePiece有什么區(qū)別各自適合什么場(chǎng)景”這個(gè)問(wèn)題能直接看出候選人有沒有處理過(guò)真實(shí)數(shù)據(jù)。3.2 BPE、WordPiece與SentencePiece的核心差異BPEByte Pair Encoding的思路是從字符開始不斷合并出現(xiàn)頻率最高的相鄰對(duì)。它的優(yōu)點(diǎn)是簡(jiǎn)單、通用缺點(diǎn)是合并規(guī)則是基于頻率的可能產(chǎn)生不合理的子詞。GPT系列用的是BPE的變體。WordPiece是BERT用的方法它和BPE的區(qū)別在于BPE選頻率最高的對(duì)WordPiece選能最大化語(yǔ)言模型似然的對(duì)。實(shí)際效果上WordPiece更傾向于產(chǎn)生有語(yǔ)言學(xué)意義的子詞。SentencePiece的最大特點(diǎn)是它把輸入當(dāng)作原始字節(jié)流處理不依賴空格分詞。這對(duì)中文、日文等沒有空格分隔的語(yǔ)言非常重要。LLaMA系列用的就是SentencePiece。方法核心思路代表模型適合場(chǎng)景BPE合并最高頻相鄰對(duì)GPT系列英文為主通用場(chǎng)景WordPiece最大化語(yǔ)言模型似然BERT需要語(yǔ)言學(xué)合理性SentencePiece字節(jié)流處理不依賴空格LLaMA、T5多語(yǔ)言、中文場(chǎng)景3.3 詞表大小的取舍詞表大小是一個(gè)經(jīng)典的工程取舍。詞表太小一個(gè)詞被切成很多token序列變長(zhǎng)推理變慢詞表太大Embedding矩陣參數(shù)量增加低頻詞訓(xùn)練不充分。常見的詞表大小在32K到128K之間。LLaMA-2用的是32K而一些中文模型會(huì)擴(kuò)展到64K甚至100K。我在實(shí)際項(xiàng)目中的經(jīng)驗(yàn)是如果你的應(yīng)用場(chǎng)景以中文為主詞表至少要到50K以上否則很多常用詞會(huì)被切碎。你可以用一個(gè)簡(jiǎn)單的方法驗(yàn)證拿一批業(yè)務(wù)數(shù)據(jù)統(tǒng)計(jì)平均每個(gè)詞被切成幾個(gè)token。如果超過(guò)2個(gè)說(shuō)明詞表可能偏小。3.4 特殊Token的設(shè)計(jì)與使用面試中很少有人主動(dòng)提到特殊Token但這恰恰是實(shí)際工程中容易出問(wèn)題的地方。[CLS]、[SEP]、[PAD]、[UNK]這些是基礎(chǔ)但在對(duì)話模型中|system|、|user|、|assistant|這些角色標(biāo)記的設(shè)計(jì)直接影響模型的行為。我踩過(guò)的一個(gè)坑在微調(diào)對(duì)話模型時(shí)沒有正確設(shè)置|assistant|標(biāo)記的loss mask導(dǎo)致模型把用戶的問(wèn)題也當(dāng)作需要生成的內(nèi)容來(lái)學(xué)習(xí)結(jié)果模型開始“自問(wèn)自答”。正確的做法是只在assistant回復(fù)的部分計(jì)算loss其他部分mask掉。注意事項(xiàng)不同模型的特殊Token不同做微調(diào)時(shí)一定要查清楚基座模型的Token配置。用錯(cuò)Token會(huì)導(dǎo)致模型行為完全異常而且很難排查。4. Embedding從詞向量到語(yǔ)義搜索的基石4.1 Embedding的本質(zhì)是什么Embedding就是把離散的符號(hào)映射到連續(xù)的向量空間。但面試中我會(huì)追問(wèn)“為什么Embedding能表達(dá)語(yǔ)義相似性”這個(gè)問(wèn)題的核心在于分布式假設(shè)出現(xiàn)在相似上下文中的詞含義相似。訓(xùn)練過(guò)程中模型通過(guò)預(yù)測(cè)上下文任務(wù)自然地把語(yǔ)義相近的詞推到一起。但要注意Transformer產(chǎn)生的Embedding和Word2Vec的Embedding有本質(zhì)區(qū)別。Word2Vec是靜態(tài)的每個(gè)詞只有一個(gè)向量Transformer是動(dòng)態(tài)的同一個(gè)詞在不同上下文中會(huì)有不同的向量。這就是為什么BERT的Embedding在語(yǔ)義任務(wù)上遠(yuǎn)優(yōu)于Word2Vec。4.2 如何選擇Embedding模型現(xiàn)在Embedding模型排行上常見的選項(xiàng)包括OpenAI的text-embedding-3系列、BGE系列、GTE系列、E5系列等。選擇時(shí)需要考慮幾個(gè)維度維度大小、最大輸入長(zhǎng)度、多語(yǔ)言支持、推理速度、以及是否支持指令前綴。我的經(jīng)驗(yàn)是如果做中文語(yǔ)義搜索BGE-large-zh-v1.5是一個(gè)很穩(wěn)的選擇維度1024最大長(zhǎng)度512。如果需要多語(yǔ)言BGE-M3支持100語(yǔ)言而且同時(shí)支持稠密檢索、稀疏檢索和多向量檢索。如果追求極致速度可以用BGE-small或GTE-small維度降到384或512效果下降在可接受范圍內(nèi)。模型維度最大長(zhǎng)度多語(yǔ)言適合場(chǎng)景BGE-large-zh1024512中文中文語(yǔ)義搜索BGE-M310248192100多語(yǔ)言、長(zhǎng)文本GTE-large1024512英文為主英文語(yǔ)義搜索text-embedding-3-small15368191多語(yǔ)言通用場(chǎng)景4.3 向量檢索的實(shí)操細(xì)節(jié)拿到Embedding之后下一步是向量檢索。很多人直接用余弦相似度做暴力搜索數(shù)據(jù)量小的時(shí)候沒問(wèn)題但超過(guò)10萬(wàn)條就需要用近似最近鄰ANN算法。常用的庫(kù)包括Faiss、Annoy、HNSW等。我實(shí)測(cè)下來(lái)HNSW在召回率和速度之間平衡得最好。關(guān)鍵參數(shù)是M每個(gè)節(jié)點(diǎn)的連接數(shù)和efConstruction構(gòu)建時(shí)的搜索深度。M越大召回率越高但內(nèi)存占用也越大。一般M設(shè)為16-64efConstruction設(shè)為100-200。還有一個(gè)容易忽略的點(diǎn)歸一化。如果你用余弦相似度一定要先把向量歸一化到單位長(zhǎng)度否則內(nèi)積和余弦相似度不等價(jià)。我見過(guò)有人忘了歸一化導(dǎo)致檢索結(jié)果完全不對(duì)。4.4 Embedding微調(diào)的必要性與方法通用Embedding模型在垂直領(lǐng)域往往表現(xiàn)不佳。比如醫(yī)療、法律、金融這些領(lǐng)域術(shù)語(yǔ)的語(yǔ)義和通用領(lǐng)域差異很大。這時(shí)候就需要微調(diào)Embedding模型。微調(diào)Embedding通常用對(duì)比學(xué)習(xí)構(gòu)造正樣本對(duì)語(yǔ)義相似的句子和負(fù)樣本對(duì)語(yǔ)義不相似的句子用InfoNCE損失訓(xùn)練。正樣本可以從業(yè)務(wù)數(shù)據(jù)中挖掘比如同一篇文檔的不同段落、同一問(wèn)題的不同表述。負(fù)樣本可以用in-batch negatives即同一個(gè)batch內(nèi)其他樣本作為負(fù)例。我做過(guò)一個(gè)法律領(lǐng)域的Embedding微調(diào)用2000對(duì)法律問(wèn)答數(shù)據(jù)訓(xùn)練了3個(gè)epoch檢索準(zhǔn)確率從62%提升到了81%。數(shù)據(jù)量不需要很大但質(zhì)量一定要高。5. 注意力機(jī)制面試中的分水嶺5.1 自注意力的計(jì)算過(guò)程自注意力的核心公式是Attention(Q, K, V) softmax(QK^T / sqrt(d_k)) V。面試中我會(huì)讓候選人逐步解釋這個(gè)公式的每個(gè)部分。QK^T計(jì)算的是每對(duì)位置之間的相似度除以sqrt(d_k)是為了防止點(diǎn)積過(guò)大導(dǎo)致softmax梯度消失softmax把相似度轉(zhuǎn)成概率分布最后用這些概率對(duì)V加權(quán)求和。這個(gè)解釋大部分人能說(shuō)出來(lái)。但我會(huì)接著問(wèn)“為什么要除以sqrt(d_k)而不是d_k”這個(gè)問(wèn)題的答案在于當(dāng)d_k較大時(shí)點(diǎn)積的方差會(huì)增大導(dǎo)致softmax的輸出趨近于one-hot梯度變得極小。除以sqrt(d_k)可以把方差拉回到1附近保持梯度的穩(wěn)定性。這個(gè)細(xì)節(jié)在論文里有提但很多人看的時(shí)候跳過(guò)了。5.2 多頭注意力的并行計(jì)算多頭注意力的實(shí)現(xiàn)方式是把d_model分成h份每份維度是d_model/h然后并行做h次注意力計(jì)算最后拼接起來(lái)再做一次線性變換。這樣做的好處是不同的頭可以關(guān)注不同的模式有的頭關(guān)注語(yǔ)法關(guān)系有的頭關(guān)注語(yǔ)義相似性有的頭關(guān)注位置鄰近性。實(shí)際實(shí)現(xiàn)中我們不會(huì)真的創(chuàng)建h個(gè)獨(dú)立的Q、K、V矩陣而是用一個(gè)大的線性層把d_model映射到3 * d_model然后reshape成h個(gè)頭。這樣可以用矩陣乘法一次性完成所有頭的計(jì)算效率更高。5.3 注意力變體從稀疏注意力到Flash Attention標(biāo)準(zhǔn)注意力的計(jì)算復(fù)雜度是O(n^2)序列長(zhǎng)度增加時(shí)計(jì)算量爆炸。為了解決這個(gè)問(wèn)題出現(xiàn)了很多變體稀疏注意力只計(jì)算部分位置對(duì)線性注意力用核函數(shù)近似softmaxFlash Attention通過(guò)分塊計(jì)算和重計(jì)算減少顯存占用。Flash Attention是目前最實(shí)用的優(yōu)化。它不改變注意力的數(shù)學(xué)結(jié)果但通過(guò)tiling技術(shù)把注意力計(jì)算分塊避免了一次性存儲(chǔ)完整的n x n注意力矩陣。我實(shí)測(cè)下來(lái)Flash Attention可以把長(zhǎng)序列訓(xùn)練的顯存占用降低50%以上速度提升2-3倍。面試中如果候選人能說(shuō)出“Flash Attention的核心是IO感知它把計(jì)算分成小塊在SRAM中完成減少HBM的讀寫”那就是加分項(xiàng)。5.4 注意力可視化與可解釋性注意力權(quán)重可以用于分析模型的行為。比如在翻譯任務(wù)中你可以可視化源語(yǔ)言和目標(biāo)語(yǔ)言之間的注意力矩陣看看模型是否正確對(duì)齊了詞。但要注意注意力權(quán)重不等于解釋。有研究表明注意力權(quán)重和梯度的重要性并不總是一致。所以用注意力做可解釋性分析時(shí)要謹(jǐn)慎下結(jié)論。6. Function Calling從對(duì)話到行動(dòng)的橋梁6.1 Function Calling解決了什么問(wèn)題大模型本身只能生成文本不能查天氣、不能發(fā)郵件、不能操作數(shù)據(jù)庫(kù)。Function Calling就是讓模型能夠“調(diào)用外部工具”的機(jī)制。它的核心思路是模型根據(jù)用戶的意圖生成一個(gè)結(jié)構(gòu)化的函數(shù)調(diào)用請(qǐng)求通常是JSON格式應(yīng)用程序執(zhí)行這個(gè)函數(shù)把結(jié)果返回給模型模型再基于結(jié)果生成最終回復(fù)。這個(gè)機(jī)制讓LLM從“聊天機(jī)器人”變成了“智能體”。面試中我會(huì)問(wèn)“Function Calling和傳統(tǒng)的意圖識(shí)別槽位填充有什么區(qū)別”核心區(qū)別在于傳統(tǒng)方法需要預(yù)先定義所有意圖和槽位擴(kuò)展性差Function Calling讓模型自己決定調(diào)用哪個(gè)函數(shù)、傳什么參數(shù)靈活得多。6.2 函數(shù)定義的設(shè)計(jì)要點(diǎn)函數(shù)定義的質(zhì)量直接影響調(diào)用準(zhǔn)確率。我總結(jié)了幾條經(jīng)驗(yàn)函數(shù)名要語(yǔ)義清晰get_weather比f(wàn)unc1好得多。參數(shù)描述要詳細(xì)包括類型、取值范圍、是否必填、默認(rèn)值。枚舉值要列全如果參數(shù)是枚舉類型把所有可能的值列出來(lái)。避免函數(shù)功能重疊如果兩個(gè)函數(shù)功能相似模型容易混淆。一個(gè)常見的坑是參數(shù)描述太模糊導(dǎo)致模型傳錯(cuò)參數(shù)。比如date參數(shù)如果不說(shuō)明格式模型可能傳2024-01-01也可能傳Jan 1, 2024。明確寫“格式為YYYY-MM-DD”可以大幅降低錯(cuò)誤率。6.3 多輪函數(shù)調(diào)用的處理復(fù)雜任務(wù)往往需要多輪函數(shù)調(diào)用。比如用戶說(shuō)“幫我訂明天從北京到上海的機(jī)票然后加到日歷里”模型需要先調(diào)用search_flights拿到結(jié)果后調(diào)用book_flight最后調(diào)用add_calendar_event。處理多輪調(diào)用時(shí)關(guān)鍵是要維護(hù)好對(duì)話狀態(tài)。每次函數(shù)調(diào)用的結(jié)果都要追加到對(duì)話歷史中讓模型知道上一步做了什么。同時(shí)要設(shè)置最大調(diào)用輪數(shù)防止模型陷入無(wú)限循環(huán)。實(shí)操心得我建議在系統(tǒng)提示中明確告訴模型“如果函數(shù)調(diào)用失敗嘗試其他方式或告知用戶”否則模型可能會(huì)反復(fù)調(diào)用同一個(gè)失敗的函數(shù)。6.4 錯(cuò)誤處理與容錯(cuò)設(shè)計(jì)Function Calling的錯(cuò)誤處理是工程中的難點(diǎn)。常見的錯(cuò)誤包括函數(shù)不存在、參數(shù)格式錯(cuò)誤、函數(shù)執(zhí)行超時(shí)、返回結(jié)果為空。每種錯(cuò)誤都需要不同的處理策略。我的做法是在函數(shù)執(zhí)行層做參數(shù)校驗(yàn)如果參數(shù)不合法返回一個(gè)結(jié)構(gòu)化的錯(cuò)誤信息給模型讓模型重新生成。如果函數(shù)執(zhí)行超時(shí)返回超時(shí)提示讓模型決定是重試還是告知用戶。如果函數(shù)不存在直接告訴模型“該函數(shù)不可用”避免模型反復(fù)嘗試。這種容錯(cuò)設(shè)計(jì)是構(gòu)建可靠AI系統(tǒng)的關(guān)鍵。面試中如果候選人能主動(dòng)提到錯(cuò)誤處理我會(huì)認(rèn)為他有實(shí)際工程經(jīng)驗(yàn)。7. 模型微調(diào)從通用到專用的必經(jīng)之路7.1 全量微調(diào)、LoRA與QLoRA的取舍全量微調(diào)更新所有參數(shù)效果最好但顯存需求大。一個(gè)7B模型全量微調(diào)需要至少4張A100 80G。LoRA只訓(xùn)練低秩矩陣顯存需求降低到1/3左右效果接近全量微調(diào)。QLoRA在LoRA基礎(chǔ)上把基座模型量化到4-bit顯存需求進(jìn)一步降低單張24G顯卡就能微調(diào)7B模型。選擇哪種方式取決于你的資源和需求。如果數(shù)據(jù)量很大百萬(wàn)級(jí)全量微調(diào)值得投入。如果數(shù)據(jù)量在幾千到幾萬(wàn)條LoRA足夠。如果資源極其有限QLoRA是唯一選擇。方法顯存需求7B訓(xùn)練速度效果適合場(chǎng)景全量微調(diào)4x80G慢最好大數(shù)據(jù)量、追求極致效果LoRA1x40G快接近全量中小數(shù)據(jù)量、快速迭代QLoRA1x24G較慢略遜于LoRA資源受限7.2 數(shù)據(jù)質(zhì)量比數(shù)量更重要我做過(guò)一個(gè)對(duì)比實(shí)驗(yàn)用1000條高質(zhì)量數(shù)據(jù)和10000條低質(zhì)量數(shù)據(jù)分別微調(diào)結(jié)果1000條高質(zhì)量數(shù)據(jù)的效果明顯更好。高質(zhì)量數(shù)據(jù)的標(biāo)準(zhǔn)是格式統(tǒng)一、答案準(zhǔn)確、覆蓋多樣、無(wú)重復(fù)。數(shù)據(jù)標(biāo)注是另一個(gè)關(guān)鍵環(huán)節(jié)。LLM的數(shù)據(jù)標(biāo)注和傳統(tǒng)NLP不同不需要標(biāo)注每個(gè)token的標(biāo)簽而是需要構(gòu)造高質(zhì)量的輸入-輸出對(duì)。我的經(jīng)驗(yàn)是讓標(biāo)注人員先寫一個(gè)“理想回答”然后讓模型生成幾個(gè)回答標(biāo)注人員從中選擇最好的并修改。這樣效率比從零寫高得多。7.3 微調(diào)中的過(guò)擬合與災(zāi)難性遺忘微調(diào)最容易出現(xiàn)的問(wèn)題是過(guò)擬合和災(zāi)難性遺忘。過(guò)擬合表現(xiàn)為訓(xùn)練loss持續(xù)下降但驗(yàn)證loss開始上升。災(zāi)難性遺忘表現(xiàn)為模型在通用任務(wù)上的能力下降。解決過(guò)擬合的方法包括早停、數(shù)據(jù)增強(qiáng)、Dropout、權(quán)重衰減。解決災(zāi)難性遺忘的方法包括混合通用數(shù)據(jù)一起訓(xùn)練、使用LoRA只更新部分參數(shù)、降低學(xué)習(xí)率。我通常會(huì)在微調(diào)數(shù)據(jù)中混入10%-20%的通用指令數(shù)據(jù)這樣可以在保持專用能力的同時(shí)減緩?fù)ㄓ媚芰Φ南陆怠?. 推理優(yōu)化讓模型跑得更快更省8.1 KV Cache的原理與優(yōu)化自回歸生成時(shí)每生成一個(gè)token都需要重新計(jì)算所有之前token的Key和Value。KV Cache把這些中間結(jié)果緩存起來(lái)避免重復(fù)計(jì)算。沒有KV Cache時(shí)生成n個(gè)token的計(jì)算量是O(n^2)有了KV Cache計(jì)算量降到O(n)。但KV Cache會(huì)占用大量顯存。對(duì)于一個(gè)7B模型序列長(zhǎng)度2048batch size 1KV Cache大約占用1.5GB。如果batch size增大或序列變長(zhǎng)顯存占用會(huì)線性增長(zhǎng)。優(yōu)化方法包括MQAMulti-Query Attention讓所有頭共享K和VGQAGrouped-Query Attention讓每組頭共享K和V。LLaMA-2 70B用的就是GQA。8.2 量化推理的實(shí)操量化是把模型參數(shù)從FP16降到INT8或INT4減少顯存占用和加速推理。常用的量化方法包括GPTQ、AWQ、GGUF等。GGUF格式特別適合在消費(fèi)級(jí)硬件上運(yùn)行支持CPU和GPU混合推理。我實(shí)測(cè)下來(lái)7B模型用Q4_K_M量化后顯存占用從14GB降到4GB左右推理速度提升約1.5倍效果下降在可接受范圍內(nèi)。如果追求更高精度可以用Q5或Q8量化但顯存占用和速度會(huì)相應(yīng)變化。注意事項(xiàng)量化后的模型在某些任務(wù)上可能出現(xiàn)明顯的質(zhì)量下降特別是需要精確計(jì)算或長(zhǎng)鏈推理的任務(wù)。建議在量化后做一輪評(píng)估確認(rèn)關(guān)鍵指標(biāo)沒有大幅下降。8.3 批處理與連續(xù)批處理批處理可以提升GPU利用率但傳統(tǒng)的靜態(tài)批處理需要等最長(zhǎng)的序列生成完才能返回結(jié)果。連續(xù)批處理Continuous Batching允許新請(qǐng)求動(dòng)態(tài)加入正在運(yùn)行的batch大幅提升吞吐量。vLLM和TensorRT-LLM都支持連續(xù)批處理。我實(shí)測(cè)過(guò)vLLM和HuggingFace Transformers的吞吐量對(duì)比在同樣的硬件上vLLM的吞吐量是Transformers的5-10倍。這個(gè)差距主要來(lái)自PagedAttention和連續(xù)批處理。9. 幻覺與可靠性LLM落地的最后一道坎9.1 幻覺的成因分析幻覺是指模型生成了看似合理但實(shí)際錯(cuò)誤的內(nèi)容。成因包括訓(xùn)練數(shù)據(jù)中的錯(cuò)誤信息、模型過(guò)度泛化、解碼策略過(guò)于激進(jìn)、以及模型缺乏事實(shí)核查能力。面試中我會(huì)問(wèn)“如何減少幻覺”常見的回答包括RAG、溫度調(diào)低、提示詞約束。但我會(huì)追問(wèn)“RAG能完全解決幻覺嗎”答案是不能。RAG只能提供正確的參考信息但模型仍然可能忽略或錯(cuò)誤解讀這些信息。所以RAG之后還需要做引用驗(yàn)證和一致性檢查。9.2 RAG系統(tǒng)中的可靠性設(shè)計(jì)RAG的可靠性取決于檢索質(zhì)量和生成質(zhì)量。檢索方面要確保召回的文檔確實(shí)相關(guān)。我通常會(huì)用交叉編碼器做重排序把檢索到的Top-20文檔重新打分選出Top-5最相關(guān)的。生成方面要約束模型只基于檢索到的內(nèi)容回答如果檢索結(jié)果不包含答案模型應(yīng)該明確說(shuō)“不知道”。一個(gè)實(shí)用的技巧是在提示詞中要求模型標(biāo)注每個(gè)事實(shí)的來(lái)源。比如“根據(jù)文檔[1]...”。這樣用戶可以驗(yàn)證信息的可靠性也方便排查錯(cuò)誤。9.3 評(píng)估與監(jiān)控LLM應(yīng)用的評(píng)估比傳統(tǒng)軟件復(fù)雜得多因?yàn)檩敵鍪情_放式的。我通常從幾個(gè)維度評(píng)估準(zhǔn)確性事實(shí)是否正確、相關(guān)性是否回答了問(wèn)題、完整性是否覆蓋了關(guān)鍵點(diǎn)、安全性是否有害內(nèi)容。自動(dòng)化評(píng)估可以用LLM-as-Judge讓一個(gè)更強(qiáng)的模型來(lái)打分。但要注意LLM-as-Judge也有偏差比如傾向于給更長(zhǎng)的回答打高分。所以最好結(jié)合人工評(píng)估定期抽樣檢查。監(jiān)控方面要記錄每次請(qǐng)求的輸入、輸出、檢索結(jié)果、函數(shù)調(diào)用記錄。當(dāng)用戶反饋問(wèn)題時(shí)可以快速定位是檢索問(wèn)題、生成問(wèn)題還是函數(shù)調(diào)用問(wèn)題。10. 面試中的加分項(xiàng)與翻車現(xiàn)場(chǎng)10.1 什么樣的回答能讓面試官眼前一亮根據(jù)我面試的經(jīng)驗(yàn)加分項(xiàng)通常包括主動(dòng)提到工程中的取舍和權(quán)衡、能說(shuō)出自己踩過(guò)的坑和解決方法、對(duì)最新技術(shù)保持關(guān)注、以及能清晰地解釋復(fù)雜概念。比如問(wèn)到Embedding時(shí)如果候選人能說(shuō)出“BGE-M3支持稠密、稀疏和多向量三種檢索方式我在項(xiàng)目中用稠密檢索做粗排稀疏檢索做精確匹配”這就是有實(shí)際經(jīng)驗(yàn)的體現(xiàn)。問(wèn)到推理優(yōu)化時(shí)如果能說(shuō)出“vLLM的PagedAttention把KV Cache分頁(yè)管理減少了顯存碎片”說(shuō)明確實(shí)動(dòng)手部署過(guò)。10.2 常見的翻車回答翻車回答通常有幾類只背概念不理解原理、過(guò)度自信但細(xì)節(jié)錯(cuò)誤、以及完全缺乏工程思維。我印象最深的一個(gè)候選人問(wèn)到“Transformer為什么比RNN好”時(shí)他說(shuō)“因?yàn)門ransformer可以并行計(jì)算”。這個(gè)回答本身沒錯(cuò)但當(dāng)我追問(wèn)“那RNN為什么不能并行”時(shí)他答不上來(lái)。實(shí)際上RNN的隱藏狀態(tài)依賴前一步的計(jì)算結(jié)果天然是串行的。而Transformer的注意力機(jī)制可以一次性看到所有位置所以可以并行。這個(gè)追問(wèn)直接暴露了他只是記住了結(jié)論沒有理解本質(zhì)。另一類翻車是過(guò)度自信。有個(gè)候選人在回答“如何減少幻覺”時(shí)斬釘截鐵地說(shuō)“用RAG就能解決”。當(dāng)我追問(wèn)“如果檢索到的文檔本身有錯(cuò)誤怎么辦”時(shí)他愣住了。實(shí)際上RAG只是把問(wèn)題從“模型不知道”變成了“模型基于錯(cuò)誤信息回答”并沒有從根本上解決可靠性問(wèn)題。10.3 如何準(zhǔn)備這8個(gè)問(wèn)題我的建議是不要死記硬背答案而是動(dòng)手做一遍。自己實(shí)現(xiàn)一個(gè)簡(jiǎn)單的Transformer跑一遍Tokenization訓(xùn)練一個(gè)小的Embedding模型搭一個(gè)RAG系統(tǒng)部署一次vLLM。這些實(shí)操經(jīng)驗(yàn)會(huì)讓你在面試中的回答有血有肉而不是干巴巴的概念。另外準(zhǔn)備幾個(gè)自己項(xiàng)目中的案例。面試官最喜歡聽的是“我在項(xiàng)目中遇到了什么問(wèn)題我是怎么分析和解決的”。這種故事比任何標(biāo)準(zhǔn)答案都有說(shuō)服力。最后再分享一個(gè)小技巧面試中遇到不會(huì)的問(wèn)題不要硬編??梢哉f(shuō)“這個(gè)我沒有深入研究過(guò)但根據(jù)我的理解可能是...”。面試官更看重你的思考過(guò)程而不是標(biāo)準(zhǔn)答案。誠(chéng)實(shí)和邏輯清晰比假裝什么都懂要好得多。