Mixtral-8x7B是Mistral AI開源的稀疏專家混合(MoE)大語言模型,在多項基準測試上表現優於GPT-3.5。通過PAI Model Gallery,您可以快速完成Mixtral-8x7B的微調和部署。
模型介紹
Mixtral-8x7B是基於編碼器(Decoder-Only)架構的稀疏專家混合網路(Sparse Mixture-of-Experts,SMoE)開源大語言模型,使用Apache 2.0協議發布。它的獨特之處在於對於每個Token,路由器網路選擇八組專家網路中的兩組進行處理,將兩組專家的輸出累加組合,因此雖然Mixtral-8x7B擁有總共47B的參數,但每個Token實際上只使用13B的活躍參數,推理速度與參數規模為13B的模型相當。
Mixtral-8x7B支援多種語言,包括法語、德語、西班牙語、意大利語和英語,支援的上下文長度為32 K 的Token,並且在所有的評估的基準測試中均達到或優於LLaMA2-70B和 GPT-3.5,特別是在數學、代碼產生和多語言基準測試中,Mixtral大大優於LLaMA2-70B。

圖源:https://arxiv.org/abs/2401.04088
Mistral AI同時發布了指令微調版本 Mixtral-8x7B-Instruct-v0.1,通過監督微調和直接偏好最佳化(DPO)提升指令遵循能力,對話能力領先其他開源指令微調模型。

圖源:https://huggingface.co/spaces/lmsys/chatbot-arena-leaderboard
前提條件
已開通靈駿智算資源,詳情請參見建立資源群組併購買靈駿智算資源。
運行環境要求
由於模型本身較大,本樣本目前僅支援在華北6(烏蘭察布)使用PAI靈駿叢集環境運行。
資源配置要求:GPU 推薦使用GU108(80 GB顯存),推理需要2卡及以上資源,LoRA微調需要4卡及以上資源。
通過PAI控制台使用模型
模型部署和調用
進入Model Gallery頁面。
登入PAI控制台。
選擇目標地區為華北6(烏蘭察布)。
在左側導覽列單擊工作空間列表,在工作空間列表頁面中單擊待操作的工作空間名稱,進入對應工作空間內。
在左側導覽列單擊快速开始 > Model Gallery,進入Model Gallery頁面。
在Model Gallery頁面右側的模型列表中,單擊Mixtral-8x7B-Instruct-v0.1模型卡片,進入模型詳情頁面。
單擊右上方部署,配置靈駿計算資源,單擊部署,即可將模型部署到EAS推理服務平台。
當前模型需要使用靈駿智算資源部署,請確保資源配額(Quota)中至少有2張GU108 GPU卡。
在部署配置面板中,資源群組種類選擇靈駿智算資源,並設定執行個體數為1、CPU為40、記憶體(MB)為256000,然後單擊部署。
調用推理服務。
通過HTTP API調用
推理服務支援OpenAI API風格調用。在服務詳情頁擷取訪問地址(Endpoint)和訪問憑證(Token),使用CURL調用樣本如下:
# 請注意替換為使用服務的Endpoint和Token export API_ENDPOINT="<ENDPOINT>" export API_TOKEN="<TOKEN>" # 查看模型list curl $API_ENDPOINT/v1/models \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $API_TOKEN" # 調用通用的文本產生API curl $API_ENDPOINT/v1/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $API_TOKEN" \ -d '{ "model": "Mixtral-8x7B-Instruct-v0.1", "prompt": "San Francisco is a", "max_tokens": 256, "temperature": 0 }' curl $API_ENDPOINT/v1/chat/completions \ -H "Authorization: Bearer $API_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "model": "Mixtral-8x7B-Instruct-v0.1", "messages": [ {"role": "user", "content": "介紹一下上海的歷史"} ] }'通過SDK調用
通過OpenAI的SDK進行調用時,首先需要安裝SDK:
# 安裝服務調用SDK python -m pip install openai通過SDK調用推理服務的範例程式碼如下:
import openai # 請使用服務詳情頁擷取的訪問地址(ENDPOINT)和訪問憑證(TOKEN)替換以下代碼的配置。 openai.api_key = "<TOKEN>" openai.base_url = "<ENDPOINT>" + "/v1" # 調用對話API completion = openai.chat.completions.create( model="Mixtral-8x7B-Instruct-v0.1", temperature=0.0, top_p=0.8, frequency_penalty=0.0, messages=[{"role": "user", "content": "請介紹下你自己。"}], # stream=True, ) # 列印輸出內容 print(completion.choices[0].message.content)
模型微調訓練
PAI-Model Gallery為Mixtral-8x7B-Instruct-v0.1配置了微調演算法,開箱即用,無需額外配置。
訓練演算法支援使用JSON格式輸入,每條資料由問題、答案組成,分別用"instruction"、"output"欄位表示,例如:
[
{
"instruction": "Write a poem on a topic 'On a Political Prisoner': \n",
"output": "She that but little patience knew,\r\nFrom childhood on, had now so much\r\nA grey gull lost its fear and flew\r\nDown to her cell and there alit,\r\nAnd there endured her fingers' touch\r\nAnd from her fingers ate its bit.\r\nDid she in touching that lone wing."
},
{
"instruction": "Write a poem on a topic 'To His Love': ",
"output": "He's gone, and all our plans\r\n Are useless indeed.\r\nWe'll walk no more on Cotswold\r\n Where the sheep feed\r\n Quietly and take no heed.\r\n His body that was so quick\r\n Is not as you\r\nKnew it, on Severn river\r\n Under the blue\r\n Driving our small boat through."
}
]在模型详情頁單擊右上方训练。關鍵配置如下:
資料集配置:準備好資料後,上傳到OSS Bucket中,或指定NAS/CPFS儲存上的資料集。也可以使用PAI預置的公用資料集直接測試。
計算資源配置:演算法需要使用4張GU108(80 GB顯存)的GPU資源,請確保選擇使用的資源配額內有充足的計算資源。
超參數配置:支援的超參如下,可按需調整,或使用預設值。
超參數
類型
預設值
是否必須
描述
learning_rate
float
5e-5
是
學習率,用於控制模型權重,調整幅度。
num_train_epochs
int
1
是
訓練資料集被重複使用的次數。
per_device_train_batch_size
int
1
是
每個GPU在一次訓練迭代中處理的樣本數量。較大的批次大小可以提高效率,也會增加顯存的需求。
seq_length
int
128
是
序列長度,指模型在一次訓練中處理的輸入資料的長度。
lora_dim
int
16
否
LoRA維度,當lora_dim>0時,使用LoRA/QLoRA輕量化訓練。
lora_alpha
int
32
否
LoRA權重,當lora_dim>0時,使用LoRA/QLoRA輕量化訓練,該參數生效。
load_in_4bit
bool
true
否
模型是否以4 bit載入。
當lora_dim>0、load_in_4bit為true且load_in_8bit為false時,使用4 bit QLoRA輕量化訓練。
load_in_8bit
bool
false
否
模型是否以8 bit載入。
當lora_dim>0、load_in_4bit為false且load_in_8bit為true時,使用8 bit QLoRA輕量化訓練。
gradient_accumulation_steps
int
8
否
梯度累積步驟數。
apply_chat_template
bool
true
否
演算法是否為訓練資料加上模型預設的chat template,樣本:
問題:
<|begin_of_text|><|start_header_id|>user<|end_header_id|>\n\n + instruction + <|eot_id|>答案:
<|start_header_id|>assistant<|end_header_id|>\n\n + output + <|eot_id|>
單擊训练,PAI-Model Gallery自動跳轉到模型訓練頁面,開始訓練,您可以查看訓練任務狀態和訓練日誌。
單擊右上方Tensorboard,您也可以一鍵開啟TensorBoard查看模型的收斂情況。

訓練好的模型會自動註冊到AI資產-模型管理中,您可以查看或部署對應的模型,詳情請參見註冊及管理模型。
通過PAI Python SDK使用模型
PAI-Model Gallery提供的預訓練模型支援通過PAI Python SDK調用。首先安裝並配置SDK,在命令列執行以下代碼:
# 安裝PAI Python SDK
python -m pip install alipai --upgrade
# 互動配置訪問憑證、PAI工作空間等資訊
python -m pai.toolkit.config
如何擷取SDK配置所需的訪問憑證(AccessKey)、PAI工作空間等資訊請參考安裝和配置。
模型部署和調用
提供資源資訊和服務名稱,即可將Mixtral模型部署到PAI-EAS推理平台。
from pai.session import get_default_session
from pai.model import RegisteredModel
from pai.common.utils import random_str
from pai.predictor import Predictor
session = get_default_session()
# 擷取PAI QuickStart 提供的模型
m = RegisteredModel(
model_name="Mixtral-8x7B-Instruct-v0.1",
model_provider="pai",
)
# 查看模型預設的部署配置
print(m.inference_spec)
# 部署推理服務
# 需提供使用靈駿資源配額ID(QuotaId),要求至少 >= 2張GU108(80G顯存)GPU卡的計算資源.
predictor = m.deploy(
service_name="mixtral_8_7b_{}".format(random_str(6)),
options={
# 資源配額ID
"metadata.quota_id": "<LingJunResourceQuotaId>",
"metadata.quota_type": "Lingjun",
"metadata.workspace_id": session.workspace_id,
}
)
# 擷取推理服務的Endpoint和Token
endpoint = predictor.internet_endpoint
token = predictor.access_token
推理服務的調用請參見上述調用推理服務,或是直接使用PAI Python SDK進行調用。
from pai.predictor import Predictor
p = Predictor("<MixtralServiceName>")
res = p.raw_predict(
path="/v1/chat/completions",
method="POST",
data={
"model": "Mixtral-8x7B-Instruct-v0.1",
"messages": [
{"role": "user", "content": "介紹一下上海的歷史"}
]
}
)
print(res.json())
當測試完成,需要刪除服務釋放資源,您可以通過控制台或SDK完成。
# 刪除服務
predictor.delete_service()模型的微調訓練
通過SDK擷取預訓練模型後,可查看模型配置的微調演算法,包括超參配置和輸入輸出資料。
from pai.model import RegisteredModel
# 擷取PAI QuickStart 提供的 Mixtral-8x7B-Instruct-v0.1 模型
m = RegisteredModel(
model_name="Mixtral-8x7B-Instruct-v0.1",
model_provider="pai",
)
# 擷取模型配置的微調演算法
est = m.get_estimator()
# 查看演算法支援的超參,以及演算法輸入輸出資訊
print(est.hyperparameter_definitions)
print(est.input_channel_definitions)
Mixtral-8x7B-Instruct-v0.1的微調演算法僅支援靈駿智算資源。在PAI控制台查看資源配額ID,設定訓練任務的資源資訊。提交前根據演算法支援的超參,配置合適的訓練超參。
# 配置訓練作業使用的靈駿資源配額ID
est.resource_id = "<LingjunResourceQuotaId>"
# 配置訓練作業超參
hps = {
"learning_rate": 1e-5,
"per_device_train_batch_size": 2,
}
est.set_hyperparameters(**hps)
微調演算法支援3個輸入,分別為:
model:預訓練模型Mixtral-8x7B-Instruct-v0.1。train:微調使用的訓練資料集。validation:微調使用的驗證資料集。
資料集的格式請參見上述模型微調訓練,您可以通過ossutils、控制台操作等方式上傳資料到OSS Bucket,也可以使用SDK提供的方法上傳到您配置的OSS Bucket。
from pai.common.oss_utils import upload
# 查看模型微調演算法的使用的輸入資訊
# 擷取演算法的輸入資料,包括模型和供測試的公用讀取資料集.
training_inputs = m.get_estimator_inputs()
print(training_inputs)
# {
# "model": "oss://pai-quickstart-cn-wulanchabu.oss-cn-wulanchabu-internal.aliyuncs.com/huggingface/models/Mixtral-8x7B-Instruct-v0.1/main/",
# "train": "oss://pai-quickstart-cn-wulanchabu.oss-cn-wulanchabu-internal.aliyuncs.com/huggingface/datasets/llm_instruct/en_poetry_train_mixtral.json",
# "validation": "oss://pai-quickstart-cn-wulanchabu.oss-cn-wulanchabu-internal.aliyuncs.com/huggingface/datasets/llm_instruct/en_poetry_test_mixtral.json",
# }
# 上傳使用者資料,請注意替換一下的本地檔案路徑和上傳的OSS Bucket路徑.
train_data_uri = upload("/path/to/local/train.json", "path/of/train/data")
validation_data_uri = upload("/path/to/local/validation.json", "path/of/validation/data")
# 替換使用開發人員的訓練資料
# training_inputs["train"] = train_data_uri
# training_inputs["validation"] = validation_data_uri
按上述格式準備資料,將train和validation輸入替換為自己的資料集,即可提交微調訓練作業。通過SDK列印的連結,可在PAI控制台查看訓練狀態和日誌,也可通過TensorBoard查看訓練進度和模型收斂情況。
from pai.common.oss_utils import download
# 提交訓練作業,同時列印訓練作業連結
est.fit(
inputs=training_inputs,
wait=False,
)
# 開啟TensorBoard查看訓練進度
est.tensorboard()
# 等待訓練任務結束
est.wait()
# 查看儲存在OSS Bucket上的模型路徑
print(est.model_data())
# 使用者可以通過ossutils,或是SDK提供的便利方法下載相應的模型到本地
download(est.model_data())
更多關於如何通過SDK使用PAI-Model Gallery提供的預訓練模型,請參見使用預訓練模型 — PAI Python SDK。