Mixtral-8x7B是Mistral AI最新發行的大語言模型,在許多基準測試上表現優於GPT-3.5,是當前最為先進的開源大語言模型之一。PAI已對Mixtral-8x7B模型進行全面支援,開發人員和企業使用者可以基於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指令微調版本 Mixtral-8x7B-Instruct-v0.1,該版本通過監督微調和直接偏好最佳化演算法(Direct Preference Optimization,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卡的計算資源。

調用推理服務。
通過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模型配置了微調演算法,您可以通過開箱即用的方式對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."
}
]在模型詳情頁單擊右上方訓練。關鍵配置如下:
資料集配置:當完成資料的準備,您可以將資料上傳到Object Storage Service 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進行調用,首先需要安裝和配置PAI Python SDK,您可以在命令列執行以下代碼:
# 安裝PAI Python SDK
python -m pip install alipai --upgrade
# 互動配置訪問憑證、PAI工作空間等資訊
python -m pai.toolkit.config
如何擷取SDK配置所需的訪問憑證(AccessKey)、PAI工作空間等資訊請參考安裝和配置。
模型部署和調用
通過PAI-Model Gallery在模型上預置的推理服務配置,您只需提供使用的資源資訊以及服務名稱,即可輕鬆的將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擷取PAI-Model Gallery提供的預訓練模型之後,您可以查看模型配置的微調演算法,包括演算法支援的超參配置以及輸入輸出資料。
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。