騰訊二面真題:DeepSeek對(duì)MoE架構(gòu)做了哪些改進(jìn)?
DeepSeek 對(duì) MoE 架構(gòu)做了哪些改進(jìn)?跟 Mixtral 的 MoE 有什么不同?這個(gè)是我的學(xué)員最近面試某個(gè)大模型獨(dú)角獸遇到的一道面試題。
1.面試官心理分析
這篇文章,我們就從面試官的角度來(lái)分析一下,如果你在面試現(xiàn)場(chǎng)被問(wèn)到這個(gè)題目,應(yīng)該如何作答?
面試官問(wèn)這個(gè)問(wèn)題,它其實(shí)是想考你什么?
- 第一,Mixtral 大模型采用的 MoE 架構(gòu)長(zhǎng)什么樣?
- 第二,就是 DeepSeek 的 MoE 做了哪些改進(jìn),這樣改進(jìn)的動(dòng)機(jī)是什么?
2.面試題解析
要回答 DeepSeek 的 MoE 改進(jìn),我們先來(lái)看看,最原始的 MoE 網(wǎng)絡(luò)長(zhǎng)什么樣子?以及它是怎么工作的?
這張圖是 Mixtral 8x7B 的 MoE 架構(gòu):
其核心思想很直觀,它實(shí)際上用了 8 個(gè)7B的“專家”模型,當(dāng) MoE 與Transformer 相結(jié)合時(shí),會(huì)用稀疏 MoE 層替換掉某些前饋層。
MoE 層包含了一個(gè)路由網(wǎng)絡(luò),用于選擇將輸入 token 分派給哪些專家處理,Mixtral 模型為每個(gè)詞元選擇 top-K 個(gè)專家,那在圖中是選擇兩個(gè)。
因?yàn)槊看沃患せ畈糠值膶<?,所以其解碼速度能做到與 14B 模型相當(dāng),也就極大的提高了模型的推理效率。
好,了解了最原始的 MoE 架構(gòu),我們?cè)賮?lái)看看,DeepSeek 是怎么改進(jìn)的?
看這張圖,其實(shí) DeepSeek 的主要改動(dòng)點(diǎn),就是把專家分成了兩撥,分別是 Shared Expert 和 Routed Expert。
通俗來(lái)講,就好比學(xué)校的常駐教授和客座教授,常駐教授是一直在的,而客座教授則經(jīng)常會(huì)變,不同的教學(xué)主題,有不同的客座教授。
在 DeepSeek 的 MoE 中,Shared Expert 是一直激活的,也就是輸入的 token 會(huì)被 Shared Expert 計(jì)算,Routed Expert 和普通的 MoE 一樣,要先計(jì)算相似度,也就是專家的得分,再選擇 top-k 進(jìn)行推理。
但是我們分析 DeepSeek 的源碼可以發(fā)現(xiàn),代碼實(shí)際在計(jì)算 top-k 時(shí),會(huì)先將 N 個(gè) Expert 進(jìn)行分組 n_groups,將每個(gè)組中 top-2 個(gè)專家的相似度得分加起來(lái),算出得分最高的那些 top_k_group 組,然后在這些組里選擇 top-k 個(gè)專家。
最后將所有的 Shared Expert 輸出和 Routed Expert 輸出做加權(quán)相加,得到 MoE 層的最終輸出。
這里 Deepseek-v3 和 Deepseek-R1 采用了 256 個(gè) Routed Expert 和 1個(gè) Shared Expert,并在 Router 中選出 8 個(gè)來(lái),參數(shù)量是 671B,而實(shí)際激活的參數(shù)量只有 37B。
好,現(xiàn)在我們答出了 DeepSeek 對(duì) MoE 架構(gòu)的改進(jìn)點(diǎn),面試官可能會(huì)繼續(xù)追問(wèn):那它為什么要這樣改進(jìn)呢?這樣改進(jìn)有什么好處?
實(shí)際上這種設(shè)計(jì)主要是基于以下兩點(diǎn)考慮:
第一,原始的 MoE 會(huì)產(chǎn)生較多的冗余,一個(gè)想法就是抽取一個(gè) Shared Expert 出來(lái)處理通用知識(shí),其他的 Routed Expert 來(lái)處理差異性的知識(shí)。
通過(guò)隔離 Shared Expert,以減輕 Routed Expert 所需要學(xué)習(xí)的知識(shí)量,從而減少路由專家之間的冗余。
第二個(gè)考慮是高效計(jì)算的層面,MoE 模型在訓(xùn)練的時(shí)候,會(huì)花費(fèi)大量的時(shí)候來(lái)做通訊,因?yàn)?expert 會(huì)分散到不同的設(shè)備上,從而降低巨大的總參數(shù)量帶來(lái)的顯存消耗。
一種解決思路是:在通訊流處在工作狀態(tài)的時(shí)候,同時(shí)用計(jì)算流進(jìn)行后續(xù)的運(yùn)算,從而隱藏掉部分通訊時(shí)間。
Shared Expert 的計(jì)算與 Routed Expert 通訊是不依賴的,因此可以使用通訊隱藏,從而比普通的 MoE 結(jié)構(gòu)計(jì)算更高效。
?本文轉(zhuǎn)載自???丁師兄大模型??,作者: 丁師兄
