天天色成人-天天色成人网-天天色色色-天天色色网-久久99欧美-久久99青青久久99久久

Mixtral 8X7B MoE模型在阿里云PAI平臺的微調部署實踐

   2024-01-12 7171
核心提示:作者:熊兮、求伯、一耘引言Mixtral8x7B 是MixtralAI最新發布的大語言模型,在許多基準測試上表現優于 GPT-3.5,是當前最為先進
 作者:熊兮、求伯、一耘

引言

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

Mixtral 8x7B 模型介紹

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

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

 

 

Mixtral AI 同時也發布了 Mixtral 8x7B 指令微調版本 Mixtral-8x7B-Instruct-v0.1,該版本通過監督微調和直接偏好優化(Direct Preference Optimization, DPO)進行了優化,以更好地遵循人類指令,對話能力領先于目前的其他開源模型的指令微調版本。

 

 

PAI-QuickStart 介紹

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

 

 

運行環境要求

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

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

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

通過PAI控制臺使用模型

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

 

 

模型部署和調用

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

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

 

 

部署的推理服務支持 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': '介紹一下上海的歷史'}

       ]

     }'

 

同時也可以通過 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 為 Mixtral-8x7B-Instruct-v0.1 模型配置了微調算法,支持用戶以開箱即用得方式對 Mixtral-8x7B-Instruct-v0.1 進行微調。

訓練算法支持使用 Json 格式輸入,每條數據由問題、答案組成,分別用'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.'

   }

]

 

當完成數據的準備,用戶可以將數據上傳到對象存儲 OSS Bucket 中,或是通過指定一個數據集對象,選擇在 NAS/CPFS 存儲上的數據集。用戶也可以使用PAI預置的公共讀數據集,直接提交任務測試算法。

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

 

 

訓練算法支持的超參信息如下,用戶可以根據使用的數據,計算資源等調整超參,或是使用算法默認配置的超參。

 

99.jpg          

 

點擊“訓練”按鈕,PAI-QuickStart 開始進行訓練,用戶可以查看訓練任務狀態和訓練日志。

 

 

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

 

 

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

通過PAI Python SDK使用模型

PAI-QuickStart 提供的預訓練模型,也支持通過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 Python SDK。

模型部署和調用

通過 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-EAS 部署推理的章節,或是直接使用 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 QuickStart 提供的預訓練模型之后,我們可以查看模型配置的微調算法,包括算法支持的超參配置以及輸入輸出數據。

 

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 提供的方法上傳到用戶配置的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-QuickStart 提供的預訓練模型:使用預訓練模型 — PAI Python SDK。

結論

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

相關資料

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靈駿智算服務:

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

 
分享到: 0
收藏 0
 
更多>同類資訊
免責申明
推薦資訊
點擊排行
最新資訊更多>
最新供應更多>
網站首頁  |  聯系方式  |  關于我們  |  問題解析  |  版權隱私  |  使用協議  |  網站地圖  |  排名推廣  |  廣告服務  |  積分換禮  |  網站留言  |  RSS訂閱  |  違規舉報  |  粵ICP備1207862號

中國智能化網(zgznh®)--引領工業智能化產業發展 共享智能化+優質平臺

版權所有:深圳市智控網絡有限公司 學術指導:深圳市智能化學會

粵ICP備12078626號

深公網安備案證字第 4403101901094 號 | 粵公網安備 44030702001206號