Mixtral 8X7B MoE模型在阿里云PAI平臺的微調(diào)部署實(shí)踐

   2024-01-12 71140
核心提示:作者:熊兮、求伯、一耘引言Mixtral8x7B 是MixtralAI最新發(fā)布的大語言模型,在許多基準(zhǔn)測試上表現(xiàn)優(yōu)于 GPT-3.5,是當(dāng)前最為先進(jìn)
 作者:熊兮、求伯、一耘

引言

Mixtral 8x7B 是Mixtral AI最新發(fā)布的大語言模型,在許多基準(zhǔn)測試上表現(xiàn)優(yōu)于 GPT-3.5,是當(dāng)前最為先進(jìn)的開源大語言模型之一。阿里云人工智能平臺PAI是面向開發(fā)者和企業(yè)的機(jī)器學(xué)習(xí)/深度學(xué)習(xí)平臺,提供了對于 Mixtral 8x7B 模型的全面支持,開發(fā)者和企業(yè)用戶可以基于 PAI-快速開始(PAI-QuickStart)輕松完成Mixtral 8x7B 模型的微調(diào)和部署。

Mixtral 8x7B 模型介紹

Mixtral 8x7B 是基于編碼器(Decoder-Only)架構(gòu)的稀疏專家混合網(wǎng)絡(luò)(Sparse Mixture-Of-Experts,SMoE)開源大語言模型,使用 Apache 2.0 協(xié)議發(fā)布。它的獨(dú)特之處在于對于每個(gè) token,路由器網(wǎng)絡(luò)選擇八組專家網(wǎng)絡(luò)中的兩組進(jìn)行處理,并且將其輸出累加組合,因此雖然 Mixtral 8x7B 擁有總共 47B 的參數(shù),但每個(gè) token 實(shí)際上只使用13B的活躍參數(shù),推理速度與13B模型相當(dāng)。

Mixtral 8x7B 支持多種語言,包括法語、德語、西班牙語、意大利語和英語,支持的上下文長度為32K token,并且在所有的評估的基準(zhǔn)測試中均達(dá)到或優(yōu)于 Llama-2-70B 和 GPT-3.5,特別是在數(shù)學(xué)、代碼生成和多語言基準(zhǔn)測試中,Mixtral 大大優(yōu)于 Llama-2-70B。

 

 

Mixtral AI 同時(shí)也發(fā)布了 Mixtral 8x7B 指令微調(diào)版本 Mixtral-8x7B-Instruct-v0.1,該版本通過監(jiān)督微調(diào)和直接偏好優(yōu)化(Direct Preference Optimization, DPO)進(jìn)行了優(yōu)化,以更好地遵循人類指令,對話能力領(lǐng)先于目前的其他開源模型的指令微調(diào)版本。

 

 

PAI-QuickStart 介紹

快速開始(PAI-QuickStart)是阿里云人工智能平臺PAI的產(chǎn)品組件,它集成了國內(nèi)外 AI 開源社區(qū)中優(yōu)質(zhì)的預(yù)訓(xùn)練模型,涵蓋了包括大語言模型,文本生成圖片、語音識別等各個(gè)領(lǐng)域。通過 PAI 對于這些模型的適配,用戶可以通過零代碼和 SDK 的方式實(shí)現(xiàn)從訓(xùn)練到部署再到推理的全過程,大大簡化了模型的開發(fā)流程,為開發(fā)者和企業(yè)用戶帶來了更快、更高效、更便捷的 AI 開發(fā)和應(yīng)用體驗(yàn)。

 

 

運(yùn)行環(huán)境要求

本示例目前僅支持在阿里云烏蘭察布地域,使用靈駿集群環(huán)境運(yùn)行。

資源配置要求:GPU 推薦使用 GU108(80GB顯存),推理需要2卡及以上資源,LoRA微調(diào)需要4卡及以上資源。

阿里云 PAI 靈駿智算服務(wù)資源開通和管理請參考官網(wǎng)文檔:靈駿智算資源的購買開通

通過PAI控制臺使用模型

開發(fā)者可以在 PAI 控制臺的“快速開始”入口,找到 Mixtral-7x8B-Instruct-v0.1 的模型,Mixtral-7x8B-Instruct-v0.1 的模型卡片如下圖所示:

 

 

模型部署和調(diào)用

PAI 提供的 Mixtral-7x8B-instruct-v0.1 預(yù)置了模型的部署配置信息,用戶僅需提供推理服務(wù)的名稱以及部署配置使用的資源信息即可將模型部署到PAI-EAS推理服務(wù)平臺。

當(dāng)前模型需要使用靈駿資源組進(jìn)行部署,請確保選擇的資源配額(Quota)中至少有 >=2張GU108 GPU卡的計(jì)算資源。

 

 

部署的推理服務(wù)支持 OpenAI 的 API 風(fēng)格進(jìn)行調(diào)用,通過推理服務(wù)的詳情頁,用戶可以獲得服務(wù)訪問地址(Endpoint)和訪問憑證(Token)。使用 cURL 調(diào)用推理服務(wù)的示例如下:

 

# 請注意替換為使用服務(wù)的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'

 

# 調(diào)用通用的文本生成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': '介紹一下上海的歷史'}

       ]

     }'

 

同時(shí)也可以通過 OpenAI 的 SDK進(jìn)行調(diào)用,用戶首先需要安裝 SDK:

 

# 安裝服務(wù)調(diào)用SDK

python -m pip install openai

 

通過SDK調(diào)用推理服務(wù)的示例代碼如下:

 

import openai

 

# 請使用服務(wù)詳情頁獲取的訪問地址(ENDPOINT)和訪問憑證(TOKEN)替換以下代碼的配置。

openai.api_key = '<TOKEN>'

openai.base_url = '<ENDPOINT>' + '/v1'

 

 

# 調(diào)用對話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,

)

# 打印輸出內(nèi)容

print(completion.choices[0].message.content)


模型微調(diào)訓(xùn)練

PAI 為 Mixtral-8x7B-Instruct-v0.1 模型配置了微調(diào)算法,支持用戶以開箱即用得方式對 Mixtral-8x7B-Instruct-v0.1 進(jìn)行微調(diào)。

訓(xùn)練算法支持使用 Json 格式輸入,每條數(shù)據(jù)由問題、答案組成,分別用'instruction'、'output'字段表示,例如:

 

[

   {

       'instruction': 'Write a poem on a topic 'On a Political Prisoner': ',

       'output': 'She that but little patience knew,nFrom childhood on, had now so muchnA grey gull lost its fear and flewnDown to her cell and there alit,nAnd there endured her fingers' touchnAnd from her fingers ate its bit.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   Are useless indeed.nWe'll walk no more on Cotswold   Where the sheep feed   Quietly and take no heed. His body that was so quick   Is not as younKnew it, on Severn river   Under the blue   Driving our small boat through.'

   }

]

 

當(dāng)完成數(shù)據(jù)的準(zhǔn)備,用戶可以將數(shù)據(jù)上傳到對象存儲 OSS Bucket 中,或是通過指定一個(gè)數(shù)據(jù)集對象,選擇在 NAS/CPFS 存儲上的數(shù)據(jù)集。用戶也可以使用PAI預(yù)置的公共讀數(shù)據(jù)集,直接提交任務(wù)測試算法。

算法需要使用 >=4 x GU108(80GB顯存)的GPU資源,請確保選擇使用的資源配額內(nèi)有充足的計(jì)算資源。

 

 

訓(xùn)練算法支持的超參信息如下,用戶可以根據(jù)使用的數(shù)據(jù),計(jì)算資源等調(diào)整超參,或是使用算法默認(rèn)配置的超參。

 

99.jpg          

 

點(diǎn)擊“訓(xùn)練”按鈕,PAI-QuickStart 開始進(jìn)行訓(xùn)練,用戶可以查看訓(xùn)練任務(wù)狀態(tài)和訓(xùn)練日志。

 

 

通過頁面的 TensorBoard 入口,用戶也可以一鍵打開 TensorBoard 查看模型的收斂情況。

 

 

如果需要將模型部署至PAI-EAS,可以在同一頁面的模型部署卡面選擇資源組,并且點(diǎn)擊“部署”按鈕實(shí)現(xiàn)一鍵部署。模型調(diào)用方式和上文直接部署模型的調(diào)用方式相同。

通過PAI Python SDK使用模型

PAI-QuickStart 提供的預(yù)訓(xùn)練模型,也支持通過PAI Python SDK進(jìn)行調(diào)用,我們首先需要安裝和配置PAI Python SDK,開發(fā)者可以在命令行執(zhí)行以下代碼完成。

 

# 安裝PAI Python SDK

python -m pip install alipai --upgrade

 

# 交互式得配置訪問憑證、PAI工作空間等信息

python -m pai.toolkit.config

 

如何獲取 SDK 配置所需的訪問憑證(AccessKey),PAI 工作空間等信息請參考文檔:如何安裝和配置PAI Python SDK。

模型部署和調(diào)用

通過 PAI 在模型上預(yù)置的推理服務(wù)配置,用戶僅需提供使用的資源信息,以及服務(wù)名稱,即可輕松的將 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',

)

 

# 查看模型默認(rèn)的部署配置

print(m.inference_spec)

 

# 部署推理服務(wù)

# 需提供使用靈駿資源配額ID(QuotaId),要求至少 >= 2張GU108(80G顯存)GPU卡的計(jì)算資源.

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,

   }

)

 

# 獲取推理服務(wù)的Endpoint和Token

endpoint = predictor.internet_endpoint

token = predictor.access_token

 

推理服務(wù)的調(diào)用請參考以上的 PAI-EAS 部署推理的章節(jié),或是直接使用 PAI Python SDK 進(jìn)行調(diào)用。

 

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())

 

當(dāng)測試完成,需要?jiǎng)h除服務(wù)釋放資源,用戶可以通過控制臺或是SDK完成:

 

# 刪除服務(wù)

predictor.delete_service()


模型的微調(diào)訓(xùn)練

通過 SDK 獲取 PAI QuickStart 提供的預(yù)訓(xùn)練模型之后,我們可以查看模型配置的微調(diào)算法,包括算法支持的超參配置以及輸入輸出數(shù)據(jù)。

 

from pai.model import RegisteredModel

 

# 獲取PAI QuickStart 提供的 Mixtral-8x7B-Instruct-v0.1 模型

m = RegisteredModel(

   model_name='Mixtral-8x7B-Instruct-v0.1',

   model_provider='pai',

)

 

# 獲取模型配置的微調(diào)算法

est = m.get_estimator()

 

# 查看算法支持的超參,以及算法輸入輸出信息

print(est.hyperparameter_definitions)

print(est.input_channel_definitions)

 

目前,Mixtral-8x7B-Instruct-v0.1 提供的微調(diào)算法僅支持靈駿資源,開發(fā)者需要通過 PAI 的控制臺頁面,查看當(dāng)前的資源配額 ID,設(shè)置訓(xùn)練任務(wù)使用的資源信息。同時(shí)在提交訓(xùn)練作業(yè)之前,用戶可以根據(jù)算法的超參支持,配置合適的訓(xùn)練任務(wù)超參。

 

# 配置訓(xùn)練作業(yè)使用的靈駿資源配額ID

est.resource_id = '<LingjunResourceQuotaId>'

 

# 配置訓(xùn)練作業(yè)超參

hps = {

   'learning_rate': 1e-5,

   'per_device_train_batch_size': 2,

}

 

est.set_hyperparameters(**hps)

 

微調(diào)算法支持3個(gè)輸入,分別為:

model:Mixtral-8x7B-Instruct-v0.1 預(yù)訓(xùn)練模型

train:微調(diào)使用的訓(xùn)練數(shù)據(jù)集

validation:微調(diào)使用的驗(yàn)證數(shù)據(jù)集

數(shù)據(jù)集的格式請參考以上章節(jié),用戶可以通過 ossutils,控制臺操作等方式上傳數(shù)據(jù)到 OSS Bucket,也可以使用 SDK 提供的方法上傳到用戶配置的Bucket。

 

from pai.common.oss_utils import upload

# 查看模型微調(diào)算法的使用的輸入信息

 

# 獲取算法的輸入數(shù)據(jù),包括模型和供測試的公共讀數(shù)據(jù)集.

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',

# }

 

# 上傳用戶數(shù)據(jù),請注意替換一下的本地文件路徑和上傳的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')

 

 

# 替換使用開發(fā)者的訓(xùn)練數(shù)據(jù)

training_inputs['train'] = train_data_uri

training_inputs['validation'] = validation_data_uri

 

開發(fā)者可以參考以上的訓(xùn)練數(shù)據(jù)格式準(zhǔn)備數(shù)據(jù),然后將train和validation輸入替換為自己的訓(xùn)練和驗(yàn)證數(shù)據(jù)集,即可輕松得提交模型微調(diào)訓(xùn)練作業(yè)。通過 SDK 打印的訓(xùn)練作業(yè)鏈接,用戶可以在 PAI 的控制臺上查看訓(xùn)練任務(wù)狀態(tài)以及日志信息,同時(shí)也可以通過 TensorBoard 查看訓(xùn)練作業(yè)的進(jìn)度和模型收斂情況。

 

from pai.common.oss_utils import download

 

 

# 提交訓(xùn)練作業(yè),同時(shí)打印訓(xùn)練作業(yè)鏈接

est.fit(

   inputs=training_inputs,

   wait=False,

)

 

# 打開TensorBoard查看訓(xùn)練進(jìn)度

est.tensorboard()

 

# 等待訓(xùn)練任務(wù)結(jié)束

est.wait()

 

# 查看保存在OSS Bucket上的模型路徑

print(est.model_data())

 

# 用戶可以通過ossutils,或是SDK提供的便利方法下載相應(yīng)的模型到本地

download(est.model_data())

 

用戶可以查看文檔,了解更多如何通過 SDK 使用 PAI-QuickStart 提供的預(yù)訓(xùn)練模型:使用預(yù)訓(xùn)練模型 — PAI Python SDK。

結(jié)論

Mixtral-8x7B 是當(dāng)前最為先進(jìn)的開源大語言模型之一,借助于MoE架構(gòu),具有很高的使用性價(jià)比,通過 PAI QuickStart 開發(fā)者可以輕松地完成Mixtral模型的微調(diào)和部署。當(dāng)然PAI QuickStart 也提供了更多的先進(jìn)、不同領(lǐng)域的模型,歡迎開發(fā)者前來探索使用。

相關(guān)資料

Mixtral 8x7B 模型:

https://mistral.ai/news/mixtral-of-experts/

PAI 快速開始:

https://help.aliyun.com/zh/pai/user-guide/quick-start-overview

PAI Python SDK:

https://github.com/aliyun/pai-python-sdk

阿里云PAI靈駿智算服務(wù):

https://www.aliyun.com/product/bigdata/learn/pailingjun

 
 
更多>同類資訊
免責(zé)申明
推薦資訊
點(diǎn)擊排行
最新資訊更多>
最新供應(yīng)更多>
網(wǎng)站首頁  |  聯(lián)系方式  |  關(guān)于我們  |  問題解析  |  版權(quán)隱私  |  使用協(xié)議  |  網(wǎng)站地圖  |  排名推廣  |  廣告服務(wù)  |  積分換禮  |  網(wǎng)站留言  |  RSS訂閱  |  違規(guī)舉報(bào)  |  粵ICP備1207862號

中國智能化網(wǎng)(zgznh®)--引領(lǐng)工業(yè)智能化產(chǎn)業(yè)發(fā)展 共享智能化+優(yōu)質(zhì)平臺

版權(quán)所有:深圳市智控網(wǎng)絡(luò)有限公司 學(xué)術(shù)指導(dǎo):深圳市智能化學(xué)會

粵ICP備12078626號

深公網(wǎng)安備案證字第 4403101901094 號 | 粵公網(wǎng)安備 44030702001206號