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

Mixtral 8X7B MoE模型基于阿里云人工智能平臺PAI實踐合集

   2024-01-12 7185
核心提示:作者:熊兮、賀弘、臨在Mixtral8x7B大模型是MixtralAI推出的基于decoder-only架構的稀疏專家混合網絡(Mixture-Of-Experts,MOE

作者:熊兮、賀弘、臨在

Mixtral 8x7B大模型是Mixtral AI推出的基于decoder-only架構的稀疏專家混合網絡(Mixture-Of-Experts,MOE)開源大語言模型。這一模型具有46.7B的總參數量,對于每個token,路由器網絡選擇八組專家網絡中的兩組進行處理,并且將其輸出累加組合,在增加模型參數總量的同時,優化了模型推理的成本。在大多數基準測試中,Mixtral 8x7B模型與Llama2 70B和GPT-3.5表現相當,因此具有很高的使用性價比。

阿里云人工智能平臺PAI是面向開發者和企業的機器學習/深度學習平臺,提供包含數據標注、模型構建、模型訓練、模型部署、推理優化在內的AI開發全鏈路服務。

本文介紹如何在PAI平臺針對Mixtral 8x7B大模型的微調和推理服務的最佳實踐,助力AI開發者快速開箱。以下我們將分別展示具體使用步驟。

使用PAI-DSW輕量化微調Mixtral 8x7B MOE大模型

PAI-DSW是云端機器學習開發IDE,為用戶提供交互式編程環境,同時提供了豐富的計算資源。我們在智碼實驗室(https://gallery.pai-ml.com/)Notebook Gallery中上線了兩個微調Mixtral 8x7B MOE大模型的示例,參見下圖:

 

 

上述Notebook可以使用阿里云PAI-DSW的實例打開,并且需要選擇對應的計算資源和鏡像。

使用Swift輕量化微調Mixtral 8x7B MOE大模型

Swift是魔搭ModelScope開源社區推出的輕量級訓練推理工具開源庫,使用Swift進行這一大模型LoRA輕量化微調需要使用2張GU108(80G)及以上資源。在安裝完對應依賴后,我們首先下載模型至本地:

 

!apt-get update

!echo y | apt-get install aria2

 

def aria2(url, filename, d):

   !aria2c --console-log-level=error -c -x 16 -s 16 {url} -o {filename} -d dx7xzbr

 

mixtral_url = 'http://pai-vision-data-inner-wulanchabu.oss-cn-wulanchabu-internal.aliyuncs.com/mixtral/Mixtral-8x7B-Instruct-v0.1.tar'

aria2(mixtral_urlmixtral_url.split('/')[-1], '/root/')

!cd /root && mkdir -p AI-ModelScope

!cd /root && tar -xf Mixtral-8x7B-Instruct-v0.1.tar -C /root/AI-ModelScope

 

import os

os.environ['MODELSCOPE_CACHE']='/root'

 

當模型下載完畢后,我們使用Swift一鍵拉起訓練任務:

 

!cd swift/examples/pytorch/llm && PYTHonPATH=../../..

CUDA_VISIBLE_DEVICES=0,1

python llm_sft.py

   --model_id_or_path AI-ModelScope/Mixtral-8x7B-Instruct-v0.1

   --model_revision master

   --sft_type lora

   --tuner_backend swift

   --dtype AUTO

   --output_dir /root/output

   --ddp_backend nccl

   --dataset alpaca-zh

   --train_dataset_sample 100

   --num_train_epochs 2

   --max_length 2048

   --check_dataset_strategy warning

   --lora_rank 8

   --lora_alpha 32

   --lora_dropout_p 0.05

   --lora_target_modules ALL

   --batch_size 1

   --weight_decay 0.01

   --learning_rate 1e-4

   --gradient_accumulation_steps 16

   --max_grad_norm 0.5

   --warmup_ratio 0.03

             --eval_steps 300

   --save_steps 300

   --save_total_limit 2

   --logging_steps 10

   --only_save_model true

   --gradient_checkpointing false

 

模型訓練完成后,我們將學習到的LoRA權重合并到模型Checkpoint中:

 

!swift merge-lora --ckpt_dir '/root/output/mistral-7b-moe-instruct/v3-20231215-111107/checkpoint-12'

 

其中,ckpt_dir參數的值需要替換成模型LoRA權重保存路徑。為了測試模型訓練的正確性,我們可以使用transformers庫進行離線推理測試:

 

其中,ckpt_dir參數的值需要替換成模型LoRA權重保存路徑。為了測試模型訓練的正確性,我們可以使用transformers庫進行離線推理測試:

 

from transformers import AutoModelForCausalLMAutoTokenizer

 

model_id = '/root/output/mistral-7b-moe-instruct/v3-20231215-111107/checkpoint-12-merged'

tokenizer = AutoTokenizer.from_pretrained(model_iddevice_map='auto')

 

model = AutoModelForCausalLM.from_pretrained(model_iddevice_map='auto')

 

text = '''[INST] <<SYS>>

You are a helpful, respectful and honest assistant. Always answer as helpfully as possible, while being safe. Your answers should not include any harmful, unethical, racist, sexist, toxic, dangerous, or illegal content. Please ensure that your responses are socially unbiased and positive in nature.

 

If a question does not make any sense, or is not factually coherent, explain why instead of answering something not correct. If you don't know the answer to a question, please don't share false information.

<</SYS>>

 

寫一首歌的過程從開始到結束。 [/INST]'''

inputs = tokenizer(text, return_tensors='pt')

 

outputs = model.generate(**inputs, max_new_tokens=512)

print(tokenizer.decode(outputs[0], skip_special_tokens=True))

 

使用Deepspeed輕量化微調Mixtral 8x7B MOE大模型

我們也可以使用Deepspeed對Mixtral 8x7B MOE大模型進行LoRA輕量化微調。同樣的,我們需要使用2張GU108(80G)及以上資源。我們首先下載模型至本地:

 

!apt-get update

!echo y | apt-get install aria2

 

def aria2(url, filename, d):

   !aria2c --console-log-level=error -c -x 16 -s 16 {url} -o {filename} -d lv5hz7n

 

mixtral_url = 'http://pai-vision-data-inner-wulanchabu.oss-cn-wulanchabu-internal.aliyuncs.com/mixtral/Mixtral-8x7B-Instruct-v0.1.tar'

aria2(mixtral_urlmixtral_url.split('/')[-1], '/root/')

!cd /root && tar -xf Mixtral-8x7B-Instruct-v0.1.tar

 

第二步,我們下載一個示例古詩生成數據集,用戶可以根據下述數據格式準備自己的數據集。

 

!wget -c https://pai-quickstart-predeploy-hangzhou.oss-cn-hangzhou.aliyuncs.com/huggingface/datasets/llm_instruct/en_poetry_train_mixtral.json

!wget -c https://pai-quickstart-predeploy-hangzhou.oss-cn-hangzhou.aliyuncs.com/huggingface/datasets/llm_instruct/en_poetry_test_mixtral.json

 

第三步,我們可以修改示例命令的超參數,并且拉起訓練任務。

 

!mkdir -p /root/output

!deepspeed /ml/code/train_sft.py

--model_name_or_path /root/Mixtral-8x7B-Instruct-v0.1/

--train_path en_poetry_train_mixtral.json

--valid_path en_poetry_test_mixtral.json

--learning_rate 1e-5

--lora_dim 32

--max_seq_len 256

--model mixtral

--num_train_epochs 1

--per_device_train_batch_size 8

--zero_stage 3

--gradient_checkpointing

--print_loss

--deepspeed

--output_dir /root/output/

--offload

 

當訓練結束后,我們拷貝額外配置文件至輸出文件夾:

 

!cp /root/Mixtral-8x7B-Instruct-v0.1/generation_config.json /root/output

!cp /root/Mixtral-8x7B-Instruct-v0.1/special_tokens_map.json /root/output

!cp /root/Mixtral-8x7B-Instruct-v0.1/tokenizer.json /root/output

!cp /root/Mixtral-8x7B-Instruct-v0.1/tokenizer.model /root/output

!cp /root/Mixtral-8x7B-Instruct-v0.1/tokenizer_config.json /root/output

 

我們同樣可以使用transformers庫進行離線推理測試:

 

import os

from transformers import AutoModelForCausalLMAutoTokenizer

import torch

 

model_id = '/root/output/'

tokenizer = AutoTokenizer.from_pretrained(model_id)

 

model = AutoModelForCausalLM.from_pretrained(model_id,device_map='auto',torch_dtype=torch.float16)

 

text = '''[INST] Write a poem on a topic 'Care for Thy Soul as Thing of Greatest Price': [/INST]'''

inputs = tokenizer(text, return_tensors='pt').to('cuda')

 

outputs = model.generate(**inputs, max_new_tokens=20)

print(tokenizer.decode(outputs[0], skip_special_tokens=True))

 

如果用戶需要將上述模型部署為EAS服務,需要將格式轉換成safetensors格式:

 

state_dict = model.state_dict()

model.save_pretrained(

   model_id,

   state_dict=state_dict,

   safe_serialization=True)

 

使用PAI-EAS在線部署Mixtral 8x7B MOE大模型

PAI-EAS是PAI平臺推出的彈性推理服務,可以將各種大模型部署為在線服務。當Mixtral 8x7B MOE大模型微調完畢后,我們可以將其部署為PAI-EAS服務。這里,我們介紹使用PAI-SDK將上述模型進行部署。首先,我們在PAI-DSW環境安裝PAI-SDK:

 

!python -m pip install alipai --upgrade


在安裝完成后,在在命令行終端上執行以下命令,按照引導完成配置AccessKey、PAI工作空間以及 OSS Bucket:

 

python -m pai.toolkit.config


我們將訓練好的模型上傳至OSS Bucket。在下述命令中,source_path為模型Checkpoint保存的本地路徑,oss_path為上傳至OSS的目標路徑:

 

import pai

from pai.session import get_default_session

from pai.common.oss_utils import upload

 

print(pai.__version__)

sess = get_default_session()

 

# 上傳模型到默認的Bucket

model_uri = upload(

   source_path='/root/output',

   oss_path='mixtral-7b-moe-instruct-sft-ds'

)

 

print(model_uri)

 

PAI 提供了Mixtral 8X7B MOE 模型部署鏡像和部署代碼,用戶可以通過相應的部署配置,將微調后的模型部署到PAI-EAS。

 

from pai.model import RegisteredModel

from pai.predictor import Predictor

 

# 獲取PAI提供的Mixtral模型服務配置(目前僅支持烏蘭察布)

inference_spec = RegisteredModel(

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

   model_provider='pai',

).inference_spec

 

# 修改部署配置,使用微調后的模型

infer_spec.mount(model_urimodel_path='/ml/model')

 

 

# 部署推理服務服務

m = Model(inference_spec=infer_spec)

 

predictor: Predictor = m.deploy(

   service_name = 'mixtral_sdk_example_ds',

   options={

                           'metadata.quota_id': '<ResourceGroupQuotaId>',

       'metadata.quota_type': 'Lingjun',

       'metadata.workspace_id': session.workspace_id

   }

)

 

# 查看服務的Endpoint和Token

endpoint = predictor.internet_endpoint

token = predictor.access_token

 

以上配置項中,metadata.quota_id是用戶購買的靈駿資源配額ID,在購買了靈駿資源之后,用戶可以從PAI控制臺頁面的資源配額入口獲取相應的信息。

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

       ]

     }'

 

使用PAI-QuickStart微調和部署Mixtral 8x7B MOE大模型

使用PAI-QuickStart微調和部署Mixtral 8x7B MOE大模型

快速開始(PAI-QuickStart)集成了國內外AI開源社區中優質的預訓練模型,支持零代碼或是SDK的方式實現微調和部署Mixtral 8x7B MOE大模型,用戶只需要格式準備訓練集和驗證集,填寫訓練時候使用的超參數就可以一鍵拉起訓練任務。Mixtral的模型卡片如下圖所示:

 

 

我們可以根據實際需求上傳訓練集和驗證集,調整超參數,例如learning_rate、sequence_length、train_iters等,如下所示:

 

 

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

 

 

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

 

 

相關資料

阿里云人工智能平臺PAI:

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

交互式建模PAI-DSW:

https://www.aliyun.com/activity/bigdata/pai/dsw

模型在線服務PAI-EAS:

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

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號