網友一
- MHA的原理,是如何進行加速的,用的什么框架推理。
回答:
①先答一下什么是MHA:Multi-Head Attention(MHA)是 Transformer 的核心機制,并行地關注輸入序列中不同位置的多種信息
②回答MHA的原理就是MHA的計算步驟:
- 第一步進行線性變換與分割: 首先,MHA 會對輸入的 Q、K、V 分別進行 h 次線性變換,生成 h 組新的 Q、K、V。每一組都代表一個“頭”(head),它們相當于在不同的抽象層面上理解輸入。
- 第二步進行注意力計算:每個頭都會獨立地執行一次縮放點積注意力計算。這個計算包括計算 Q 和 K轉置的點積來衡量詞之間的相關性,然后(這個頭的維度特征)進行縮放,然后通過 Softmax 歸一化得到注意力權重,最后用這些權重對 V 進行相乘,得到每個頭的輸出。
- 第三步進行結果拼接與最終投影:所有 h 個頭的輸出會被拼接在一起,形成一個更寬的特征向量。最后,這個拼接后的向量會再經過一次線性變換,得到 MHA 的最終輸出。
③MHA是如何進行加速的,這個問題的回答有兩個角度
- 第一個角度是從MHA這個算法原理本身來回答:
- 首先MHA有天然的并行行,MHA 的“多頭”設計意味著每個頭之間的計算是獨立的,這使得它們可以完全并行地執行。在 GPU 等并行計算硬件上,這種并行性能夠被充分利用,大大縮短了計算時間。
- 其次,MHA 的核心操作是大量的矩陣乘法(例如 Q 和 K 的點積,Attention_Weights×V)以及線性變換。現代深度學習框架底層都集成了高度優化的線性代數庫,這些庫通過精巧的算法和硬件指令優化,能以極高的效率完成這些計算。
- 最后是算法層面的優化:,例如 FlashAttention 這樣的新型算法,它通過減少高帶寬內存(HBM)的訪問(將中間計算結果保存在更快的片上 SRAM 中)和融合多個 GPU 核操作,顯著提升了注意力機制的計算速度。
- 第二個角度是還可以通過些什么操作使得MHA進行加速:
- 第一是算子級優化,比如 FlashAttention,通過手寫 CUDA kernel,把 softmax + dropout + matmul 融合成一個操作,減少了中間顯存讀寫,顯著提升了計算速度和內存利用率。
- 第二是進行結構級優化,采用稀疏 Attention 或低秩近似,比如 Longformer 只對局部窗口做 attention,Performer 用核函數近似 softmax
- 第三是動態裁剪優化,例如在推理階段使用 Token Pruning 或 Early Exit,提前丟棄對結果影響小的 token,減少計算量。
④MHA用什么框架進行推理
- 第一使用HuggingFace Transformers:最主流的高層推理框架,內部支持了標準 attention 和 FlashAttention 加速。
- 第二使用ONNX Runtime:框架可以將模型導出為 ONNX,內部使用圖優化,高性能內核,硬件加速來加速推理。
- 第三使用TensorRT(NVIDIA):TensorRT能夠在NVIDIA上實現推理加速,內部圖優化技術、內核融合、量化壓縮和硬件調度優化來加速推理。
- 第四使用 vLLM:針對大語言模型推理的優化框架,支持 paged attention,減少 KV 緩存冗余。
-
用過vLLM框架嗎?
回答:是的,用過 vLLM 框架,主要是用來加速大語言模型(比如 LLaMA 和 ChatGLM)的本地推理部署。我使用 vLLM 啟動兼容 OpenAI API 的服務端,加載 Huggingface 格式模型,通過 openai.ChatCompletion 接口實現了高并發請求的響應生成。vLLM 的優勢是支持 PagedAttention,這種機制可以實現 KV Cache 的共享和動態調度,顯著提升多用戶并發下的吞吐量,降低顯存占用。同時,它對調用者非常友好,不需要改代碼就可以用 openai 風格訪問,非常適合構建本地 Chat 服務或微服務部署。 -
用過什么數據合成的方法
回答:我用過的數據合成方法有XX種:
第一種是基于規則的數據生成方法,就是自己設計模板,生成大量的輸入輸出對。比如先有一個句子模板角色經常在做動作,然后有一個角色和動作的列表,通過循環的方式去填充句子,擴充句子。
第二種是基于統計模型的方法,就是利用現有數據的統計特性來生成新的數據,像n-gram模型,這種方式是先獲取語料庫,然后用n元詞組來表示,然后訓練根據n-1個詞生成第n個詞的模型,然后再通過滑動窗口生成完整的句子。 -
PagedAttention原理
從為什么,是什么,怎么做三個角度來回答:
①PagedAttention在出現之前,主流的LLM推理框架在管理KV Cache時通過提前預留空間存在嚴重的內存浪費問題。
②PagedAttention將KV Cache的存儲從連續轉變為非連續,他將KVCache分成一個個小的block,然后通過block table來進行索引,用塊表來映射到物理內存中的不同位置。然后系統會動態分配內存,每生成新的token時,只需要分配新的block然后在塊表中給出對應的記錄,來進行按需分配。(就和數據結構中數組和指針的概念類似)
③PagedAttention實現了近乎于0的內存浪費,并且擁有有極高的吞吐量。 -
投機采樣是什么,什么情況下用投機采樣才能效果好?
第一個子問題是定義和原理回答:
投機采用是一種加速大語言模型推理的技術。原理是通過一個更快更小的“草稿模型”來生成候選token,然后用更大的“目標模型”驗證token是否正確,減少大模型的調用次數。
第二個子問題:
①草稿模型和目標模型一致性高的情況下的情況下效果好
②生成模型具有一定可預測性,像一些代碼生成,結構化數據生成的任務
③草稿模型的速度要顯著大于目標模型,接受率越高越好
④在GPU或TPU,或者分布式設備上效果更佳。 -
LoRA原理,為什么可以低秩微調,rank和阿爾法調參經驗,和數據量有關系嗎
- LoRA的原理:LoRA是一種高效微調技術,通過在模型原本的權重旁邊附加兩個小矩陣來學習增量知識,解決大模型全量微調問題。首先凍結預訓練權重不進行更新,然后引入A和B兩個低秩矩陣學習增量知識△W,最后前向傳播最后和預訓練權重合并。
- 為什么可以低秩微調:大語言模型在預訓練階段已經包含了非常豐富的知識,當學習新任務時候,他的改變量是低秩,低秩的理解就是在龐大的知識空間中,進行微調的調整。
- rank和α調參經驗:他們兩是用來控制BA矩陣最終的大小,變化量是α/r,α值一般設置為rank值或者兩倍,讓α值比較高時,會更多從新知識學習,如果遺忘了通用知識就得調小。可以網格搜索,先搜索r,找到比較好的之后固定,再搜索α。
- 和數據量有關系嗎:有關系,大數據量小r容易欠擬合,小數據量大r會過擬合。小r一般16以內,大r一般32以外。
-
PPO原理,為什么需要DPO
PPO原理回答:PPO是實現RLHF的核心算法,PPO過程有三個模型,一個是SFT初始策略模型,第二個是RM品味模型,用來給回答打分,最后是PPO模型,近端優化策略,對SFT模型進行微調,讓他的RM分數盡可能高。
為什么需要DPO:因為PPO的需要訓練的模型多,成本高,如果獎勵模型出現問題,PPO就會把缺陷學習到。 -
MoE原理,具體怎么實現
MoE的核心思想是“分而治之”,MoE引入了多個“專家”和一個“門控網絡”來解決傳統稠密模型參數量大的問題。具體實現是:假如有N個專家,我們每次選擇Top-K個專家。當Token向量從自注意力層進入MoE層前,先會通過路由計算計算出一個logits向量,對應每個專家的分數,然后選擇最高的K個專家,用softmax進行門控制計算得到每個專家的權重,然后輸入向量輸入這K個專家中進行計算得到的結果和門控值進行加權求和得到輸出。