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