
2025年最新推理大模型API參數與性能詳解:通義千問Max、豆包1.5 Pro、混元Lite深度對比
LLM大模型基本選擇以Decoder模塊堆疊N層組成的網絡結構。
例如羊駝系列 LLaMA 大模型,按照參數量的大小有四個型號:LLaMA-7B、LLaMA-13B、LLaMA-33B 與 LLaMA-65B。這里的 B 是 billion 的縮寫,指代模型的參數規模。故最小的模型 7B 包含 70 億個參數,而最大的一款 65B 則包含 650 億個參數。
我們以大模型的最基本結構 Transformer 為例,首先來看一下參數量是怎么算出來的。
transformer 由 L 個相同的層組成,每個層分為兩個部分:self-attention 和 MLP 層。其中 self-attention 塊,不管用的是 self-attention 還是 multi-head self-attention,參數量計算并不影響。因為在輸入時,對 Q,K,V 三個向量都進行了線性變換,只是 multi-head self-attention 會對隱藏層 h 切分成 head 份而已。那么 self-attention 塊的參數量為:4h2+4h。MLP 塊由 2 個線性層組成,這兩個層的 shape 是先將維度 h 映射到 4h,然后第二個線性層再將維度從 4h 映射回 h。self-attention 和 MLP 塊各有一個 layer normalization,包含了 2 個可訓練的參數:尺度縮放參數 gamma,和平移參數 beta,形狀都是 [h]。那么這兩個 layer normalization 參數量為:4h。那么,每個 transformer 層的參數量就為:12h2+13h。除此之外,還有輸入部分的詞嵌入參數,詞向量的維度為 h,假設詞表大小 vocab size 為 V。那么詞嵌入的參數量為 Vh,而輸出層的權重矩陣通常與輸入的詞嵌入矩陣參數是共享的,不會引入額外的參數量。關于位置編碼,這部分參數比較少,可以忽略。其中,如果采用可訓練的位置編碼,那么參數量為 N*h,N 是最大序列長度,例如 chatgpt 的 4k。如果采用的是相對位置編碼,如旋轉編碼 RoPE 或者 AliBi,則這部分就沒有可訓練的參數。綜上所述,L 層的 transformer 模型的總參數量為 L(12h2+13h)+Vh,當隱藏維度 h 較大時,可以忽略一次項,模型參數量可以近似為 12Lh2。
綜上所述,L 層的 transformer 模型的總參數量為 L(12h2+13h)+Vh,當隱藏維度 h 較大時,可以忽略一次項,模型參數量可以近似為 12Lh2。
如何計算大語言模型所需的顯存?
4B是因為32位的浮點精度會占4個字節內存;
下面以運行16位精度的 Llama 70B 模型所需的 GPU 內存為例套用公式:
該模型有 700 億參數。
M = (700 ? 4) / (32 / 16) ? 1.2 ≈ 140 * 1.2 = 168GB
我們以 LLaMA-7B 為例,這個大模型參數量約為 70 億,假設每個參數都是一個 fp32,即 4 個字節,總字節就是 280 億字節,則 280 億字節/1024(KB)/1024(MB)/1024(GB) = 26.7GB,當然這是原始的理論值,我們再往下看。因為實際存儲 weight 權重參數會存 fp16,所以模型大小繼續減半為 13.35GB。但是部分 layer norm 等數據會保留源格式 fp32,因此實際會稍微有所增加到 13.5GB 左右,我們從開源的 LLaMA-7B 的實際的存儲結果來看,是符合上面的計算的:
相信在介紹這部分后,大家應該對LLM大模型的模型結構、參數量、精度、存儲空間更具象的認識。
模型微調通常來說,雖然可以提高任務的效果,但通常來說,微調的成本遠大于提示詞調優,模型微調相對來說復雜性高、資源需求大而且成本高。
使用 OpenAI API 進行快速工程的最佳實踐:
https://help.openai.com/en/articles/6654000-best-practices-for-prompt-engineering-with-the-openai-api
prompt:結構化、具體化、清晰化
在微調之前先嘗試優化prompt和fewshot來探索模型能力邊界,是否能解決現有問題,合適的base-model(類型和size)的選取,有了明確的效果保證后,再微調得到更加穩定的效果輸出和更小的size部署等需求。
有這么一句話在業界廣泛流傳:數據和特征決定了機器學習的上限,而模型和算法只是逼近這個上限而已。所以數據的構造至關重要,需要建立對生成數據質量的把控。
在chatgpt出來后,業界最開始基于pretrain模型上做sft最受關注的工作之一,是self-instruct,蒸餾chatgpt得到高質量的sft數據,很多后來的生成sft數據的工作是以這個工作為基礎。核心思想是通過建立種子集,然后prompt模型輸出目標格式的數據,通過后置ROUGE-L等篩選方法去重,不斷的加入種子集合,來提升產出數據的多樣性和質量。
比如qwen2.5-7b是pretrain后的模型,qwen2.5-7b-instrcut是基于qwen2.5-7b做了通用的SFT微調后得到。
生成指令數據的流程由四個步驟組成。1)指令生成,2)識別指令是否代表分類任務,3)用輸入優先或輸出優先的方法生成實例,4)過濾低質量數據。
關注數據集的質量和豐富度:
我們提及微調更多是在通用SFT訓練好的模型基礎上再做領域的微調。
可以更省事的選擇俄把生成好的數據,直接丟給模型去訓練驗證最后的效果;但是如果朝著長期做效果迭代的方向,我們需要對生成的數據是否符合預期,有更現驗的判斷,這也能夠為后續如果微調后模型不符合預期的情況下,來有debug的依據和方法。
一方面是人來check數據質量,另外一方面是可以通過規則或者LLM大模型來做后置的數據驗證,讓模型來打分并給出推理過程等方式。數據量的問題上,跟數據類型的分布關系很大,需要產生不同任務下的高質量數據,更需要關注數據分布。
基于已有開源大模型進行微調訓練,如果采用預訓練的方式對模型的所有參數都進行訓練微調,由于現有的開源模型參數量都十分巨大。PEFT (Parameter-Efficient Fine-Tuning),即對開源預訓練模型的所有參數中的一小部分參數進行訓練微調,最后輸出的結果和全參數微調訓練的效果接近。
LoRA(論文:LoRA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS),該方法的核心思想就是通過低秩分解來模擬參數的改變量,從而以極小的參數量來實現大模型的間接訓練。(秩是矩陣中最長的獨立行數或列數)
神經網絡包含很多全連接層,其借助于矩陣乘法得以實現,然而,很多全連接層的權重矩陣都是滿秩的。因此,論文的作者認為權重更新的那部分參數矩陣盡管隨機投影到較小的子空間,仍然可以有效的學習,可以理解為針對特定的下游任務這些權重矩陣就不要求滿秩。
在涉及到矩陣相乘的模塊,在旁邊增加一個新的通路,通過前后兩個矩陣A,B相乘,第一個矩陣A負責降維,第二個矩陣B負責升維,中間層維度為r。其中,r<<d,r是矩陣的秩,這樣矩陣計算就從d x d變為d x r + r x d,參數量減少很多。將原部分跟新增的通路兩部分的結果加起來作為最終的結果(兩邊通路的輸入跟輸出維度是一致的)。
此外,Transformer的權重矩陣包括Attention模塊里用于計算query, key, value的Wq,Wk,Wv以及多頭attention的Wo,以及MLP層的權重矩陣,LoRA只應用于Attention模塊中的4種權重矩陣,而且通過消融實驗發現同時調整 Wq 和 Wv 會產生最佳結果。
instructGPT提出的SFT和RLHF的流程圖,在SFT模型的基礎做強化學習的訓練往往會提升模型的表現。
我們需要一個模型來定量評判模型輸出的回答在人類看來是否質量不錯,即輸入 [提示(prompt),模型生成的回答] ,獎勵模型輸出一個能表示回答質量的標量數字。
1.把大量的prompt(Open AI使用調用GPT-3用戶的真實數據)輸入給第一步得到的語言模型,對同一個問題,可以讓一個模型生成多個回答,也可以讓不同的微調(fine-tune)版本回答。
2.讓標注人員對同一個問題的不同回答排序,實驗發現發現不同的標注員,打分的偏好會有很大的差異,而這種差異就會導致出現大量的噪聲樣本。排序的話能獲得大大提升一致性。
3.這些不同的排序結果會通過某種歸一化的方式變成定量的數據丟給模型訓練,從而獲得一個獎勵模型。也就是一個裁判員。
由于PPO需要4個模型加載,2個推理,2個訓練,成本較高;而DPO只需要兩個模型,一個推理一個訓練。
開始訓練時,reference model和policy model都是同一個模型,只不過在訓練過程中reference model不會更新權重。
目標函數:
梯度:
動態因子:
因此DPO的優化目的可以理解為通過訓練, 最大化正樣本上的獎勵 和負樣本上的獎勵兩者的間距(margin)。 因為參考模型是不動的,因此進一步可以理解為提升模型在正樣本上的概率(優化模型在正樣本上的概率 大于 參考模型在正樣本上的概率), 降低模型在負樣本上的概率(優化模型在負樣本上的概率 小于 參考模型在負樣本上的概率)。
當我們的任務能夠產出正負樣例對的時候,我們可以通過這種方式來微調模型提升表現。來讓模型從正負樣例中學到好的為什么好,差的為什么差,往往能夠得到比SFT更優的效果。它和SFT的區別在于,SFT只能告訴模型正例而沒有負例。
{
"messages": [
{
"role": "user",
"content": "你能幫我寫一篇關于環境保護的文章嗎?"
}
],
"chosen": {
"role": "assistant",
"content": "當然可以。環境保護是一個非常重要的話題,我們可以從減少碳排放、保護森林和水資源、推廣可再生能源等方面來入手。你想要文章的具體方向和字數是多少呢?"
},
"rejected": {
"role": "assistant",
"content": "可以的,環境保護是一個重要的話題。"
}
}
介紹完一些初步的理論基礎后,這部分主要來講大模型的具體微調流程和具體的操作細節。
因為集團內外關于模型微調的工具也很豐富,這里只給出我們團隊常使用的平臺和框架,以及微調的實操流程。
本文涉及幾個內部平臺說明:
外部平臺:
https://github.com/hiyouga/LLaMA-Factory
這里給出一個微調的實踐簡化流程如下:
idealab 幫助文檔一共接入了包含文生文、多模態、向量化、bing搜索、代碼生成等類別的大模型共計近50個,涵蓋了包含azure openai gpt系列、dalle,阿里通義千問、淘天星辰,谷歌vertexAI系列等主流模型。
調用的方式:
-H "Content-Type:application/json"
-H 'X-AK: xxxx'
-d '{
"model": "gpt-3.5-turbo",
"prompt": "你是誰"
}'
whale平臺上提供了豐富的開源模型部署,根據調試或批量調用的需求,可以分成訪問免費部署模型和獨立部署模型兩部分。整體體驗還是比較便捷,對大模型部署支持的比較好,比較推薦。
在部署模型之后,除了whale的UI界面去調用,也支持sdk調用whale服務代碼:LLMChatStreamDemo.py,核心代碼如下:
from whale import TextGeneration, VipServerLocator
from whale.util import Timeout
response = TextGeneration.chat(
model="Qwen-72B-Chat-Pro",
messages=msgs,
stream=True,
temperature=1.0,
max_tokens=2000,
timeout=Timeout(60, 20),
top_p=0.8,
extend_fields=extend_fields)
當我們通過上述方式生成好自己的訓練集后,就需要開始微調模型了。
針對小任務/小模型,可以在自己開發機上微調即可,推薦使用LLaMA-Factory微調框架;對于依賴較大資源或者數據量較大的情況,可以使用TuningFactory框架,結合星云平臺做模型的訓練。
LLaMA-Factory代碼庫:https://github.com/hiyouga/LLaMA-Factory
lora微調,scripts/sft_lora.sh
WORLD_SIZE=8
LR=1e-5
# 實驗項目名,需要在星云實驗管理中創建實驗或者選擇你有權限的實驗
# 如果不指定,并且開啟了report_to=ml_tracker,會默認使用 你工號_default 作為實驗項目名
# TRACKER_PROJECT_NAME=""
# if you want to train based on lora ckpt, please set LORA_CKPT and set MODEL_NAME to pretrained model
# LORA_CKPT="your_nebula_project.your_lora_ckpt/version=your_version/ckpt_id=checkpoint-xxx"
# LORA_CKPT="digital_live_chat.Google-RAG-7B/version=v1.4/ckpt_id=checkpoint-330"
LORA_CKPT="digital_live_chat.sft_model_whale/version=v20.26/ckpt_id=checkpoint-210"
args="--stage dpo \
--model_name_or_path=$MODEL_NAME \
--do_train \
--do_eval \
--val_size 0.05 \
--file_name=${INPUT} \
--ranking \
--system=system \
--prompt=input \
--chosen=pos \
--rejected=neg \
--deepspeed=scripts/ds_zero3.json \
--template=$PROMPT_TEMPLATE \
--finetuning_type lora \
--gradient_checkpointing True \
--lora_target=o_proj,q_proj,k_proj,v_proj,up_proj,gate_proj,down_proj \
--lora_rank=64 \
--lora_alpha=16 \
--output_dir=local/tmp/ckpt_save_path/ \
--overwrite_cache \
--per_device_train_batch_size 1 \
--gradient_accumulation_steps 4 \
--lr_scheduler_type cosine \
--logging_steps 10 \
--num_train_epochs 20 \
--learning_rate=$LR \
--cutoff_len=2048 \
--preprocessing_num_workers=8 \
--dataloader_num_workers=4 \
--plot_loss \
--report_to=none \
--pref_beta=0.2 \
--pref_ftx=0.5 \
--bf16"
在這里可以指定訓練的lora checkpoint到指定的項目存儲路徑,后續可以在whale平臺直接調用,非常方便。
訓練完成結果和統計圖表如下:
挑選eval集合上loss最低的checkpoint作為最優的模型。
在模型配置處可以搜索上一步中生成好的訓練模型,選擇部署。
自動化的流量和模型性能監控報表:
可視化的對話調試界面:
在模型的推理加速上,探索過以下三種whale平臺上配置加速的手段:
以Qwen2.5-7B為例,測試不同加速方法帶來的提升:
平臺自動支持:推理引擎會根據請求自動湊batch推理;支持多并發請求:
模型微調和部署完成后,往往需要在我們的測試集上查看模型效果,這依賴你需要有:
我們需要預先定義一個指標來判斷模型的效果好壞,對于指標定義不明確的任務,盡量細化它的標準。可以讓人工去評估,也可以讓大模型自動評估。
經過上述步驟有了新的模型效果后,除了考慮算法工程(耗時、部署資源、模型并發)外,效果上需要考慮是否能推送上線的關注點:
從指標和case分析中,發現并定位問題;從數據構造中不斷去完善更高質量的數據,探索更強模型和更優的微調方法。
全是goodcase是個理想的情況,實驗結果往往會存在不符合預期或者蹺蹺板的問題,這個時候需要思考是模型能力的問題、還是數據構造上有考慮不周的情況等。不同的任務/base模型/數據質量/訓練參數和數據集都有關,還是得結合具體場景來做分析和優化。一般經驗來講提升數據質量是最直接有效的方法,在這個基礎上再探索強化學習、推理模型等進一步解決目標問題的手段。
文章轉載自:大模型微調知識與實踐分享
2025年最新推理大模型API參數與性能詳解:通義千問Max、豆包1.5 Pro、混元Lite深度對比
2025年五大AI大模型API基礎參數、核心性能:Gemini 2.5、DeepSeek R1、Claude 3.7
2025年五大AI大模型API價格對比:Gemini 2.5、DeepSeek R1、Claude 3.7
模型壓縮四劍客:量化、剪枝、蒸餾、二值化
WebSocket和REST的區別:功能、適用范圍、性能與示例解析
國產精品大模型API價格對比:通義千問 Max、字節跳動Doubao 1.5 pro 256k、DeepSeek V3
REST API:關鍵概念、最佳實踐和優勢
大模型API亂斗,基礎參數、核心性能:Grok3、deepseek R1、ChatGPT 4o
3大AI語言大模型API價格的區別:ChatGPT 4o、百度千帆 ERNIE 4.0、阿里通義千問 Max