国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

通義千問(wèn)開(kāi)源模型在PAI靈駿的最佳實(shí)踐

這篇具有很好參考價(jià)值的文章主要介紹了通義千問(wèn)開(kāi)源模型在PAI靈駿的最佳實(shí)踐。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

引言

12月1日,通義千問(wèn)再次宣布重磅開(kāi)源,目前通義千問(wèn)已推出1.8B、7B、14B、72B 四款不同尺寸的開(kāi)源大語(yǔ)言模型。阿里云PAI靈駿智算服務(wù),是面向大規(guī)模深度學(xué)習(xí)場(chǎng)景的智算產(chǎn)品,一站式提供異構(gòu)算力底座及AI工程平臺(tái)。本實(shí)踐將展示如何基于阿里云PAI靈駿智算服務(wù),在通義千問(wèn)開(kāi)源模型之上進(jìn)行高效分布式繼續(xù)預(yù)訓(xùn)練、指令微調(diào)、模型離線(xiàn)推理驗(yàn)證以及在線(xiàn)服務(wù)部署。

本文將以Qwen-7B為例展示基于Megatron-LM的訓(xùn)練流程,在保證模型效果和Huggingface對(duì)齊的前提下,支持了數(shù)據(jù)并行、算子拆分、流水并行、序列并行、選擇性激活重算、Zero顯存優(yōu)化、BF16混合精度、梯度檢查點(diǎn)、Flashattention等技術(shù),可以大幅提升大模型分布式訓(xùn)練效率。該流程也適用于Qwen-14B和Qwen-72B模型。

資源開(kāi)通和運(yùn)行環(huán)境配置

阿里云PAI靈駿智算服務(wù)資源開(kāi)通和管理請(qǐng)參考官網(wǎng)文檔

https://help.aliyun.com/zh/pai/user-guide/create-and-manage-intelligent-computing-lingjun-resources

資源和配置推薦

模型參數(shù)量 全參數(shù)訓(xùn)練資源 推理資源(最低) Megatron訓(xùn)練模型切片
7B 8*gu7xf、gu7ef 1*V100-32G、1*A10-22G TP1、PP1
14B 8*gu7xf、gu7ef 2*V100-32G、2*A10-22G TP2、PP1
72B (4*8)*gu7xf、gu7ef 6*V100-32G、2*gu7xf TP8、PP2

LLM統(tǒng)一鏡像

請(qǐng)?jiān)谟脩?hù)自定義鏡像欄填寫(xiě)統(tǒng)一鏡像地址:

http://pai-image-manage-registry.cn-wulanchabu.cr.aliyuncs.com/pai/pytorch-training:1.12-ubuntu20.04-py3.10-cuda11.3-megatron-patch-llm

PAI-DSW單機(jī)交互式多人協(xié)同開(kāi)發(fā)

DSW單機(jī)環(huán)境可以用來(lái)處理數(shù)據(jù)并測(cè)試單機(jī)多卡分布式程序。DSW是靈駿自帶的交互式代碼開(kāi)發(fā)環(huán)境,集成了Jupyter,WebIDE,Terminal等開(kāi)發(fā)工具。在LLM的訓(xùn)練過(guò)程中,DSW通常用于訓(xùn)練數(shù)據(jù)的處理,實(shí)際的大模型訓(xùn)練(預(yù)訓(xùn)練,微調(diào)等)在下一步闡述。點(diǎn)擊“交互式建模(DSW)”進(jìn)入DSW概覽頁(yè),然后點(diǎn)擊“創(chuàng)建實(shí)例”創(chuàng)建自己的DSW實(shí)例,進(jìn)入DSW后,打開(kāi)terminal,在/mnt/workspace/下面處理后續(xù)流程所需要的數(shù)據(jù)集。同時(shí)也可以在/mnt/workspace/下面存放訓(xùn)練代碼。同時(shí)下載Pai-Megatron-Patch代碼(注:PAI-Megatron-Patch是基于Nvidia原生Megatron-LM框架開(kāi)發(fā)的開(kāi)源大模型實(shí)現(xiàn)示例庫(kù),提供了主流開(kāi)源大模型的Megatron-LM實(shí)現(xiàn)和訓(xùn)練/推理/評(píng)估腳本,下載鏈接見(jiàn)本文末尾的相關(guān)資料部分)到工作目錄/mnt/workspace/下。創(chuàng)建DSW實(shí)例,填寫(xiě)實(shí)例名稱(chēng),選擇資源組,填寫(xiě)統(tǒng)一鏡像URL的實(shí)例,如下圖所示。有幾點(diǎn)需要額外注意:

  • 內(nèi)存至少需要1024GB
  • CPU核數(shù)最大可用是96
  • 共享內(nèi)存需與內(nèi)存保持一致
  • GPU卡數(shù)至少為8

通義千問(wèn)開(kāi)源模型在PAI靈駿的最佳實(shí)踐,云棲號(hào)技術(shù)分享,開(kāi)源,云計(jì)算,人工智能,ai

通義千問(wèn)開(kāi)源模型在PAI靈駿的最佳實(shí)踐,云棲號(hào)技術(shù)分享,開(kāi)源,云計(jì)算,人工智能,ai

創(chuàng)建好DSW實(shí)例后,點(diǎn)擊進(jìn)入DSW工作空間準(zhǔn)備開(kāi)發(fā)

通義千問(wèn)開(kāi)源模型在PAI靈駿的最佳實(shí)踐,云棲號(hào)技術(shù)分享,開(kāi)源,云計(jì)算,人工智能,ai

PAI-DLC運(yùn)行分布式任務(wù)配置

DLC環(huán)境可以用來(lái)運(yùn)行多機(jī)多卡分布式程序。在LLM的訓(xùn)練過(guò)程中,DLC通常用于大模型訓(xùn)練。點(diǎn)擊“容器訓(xùn)練”進(jìn)入DLC概覽頁(yè),然后創(chuàng)建自己的DLC實(shí)例,填寫(xiě)任務(wù)名稱(chēng),選擇資源組,填寫(xiě)統(tǒng)一鏡像URL的實(shí)例,如下圖所示:

通義千問(wèn)開(kāi)源模型在PAI靈駿的最佳實(shí)踐,云棲號(hào)技術(shù)分享,開(kāi)源,云計(jì)算,人工智能,ai

執(zhí)行命令里填寫(xiě)運(yùn)行分布式任務(wù)所需的信息(具體命令可見(jiàn)下文),如下圖所示:

通義千問(wèn)開(kāi)源模型在PAI靈駿的最佳實(shí)踐,云棲號(hào)技術(shù)分享,開(kāi)源,云計(jì)算,人工智能,ai

配置任務(wù)資源,然后提交job,注意CPU核數(shù)不能大于96。

同時(shí),共享內(nèi)存應(yīng)與內(nèi)存保持一致。

通義千問(wèn)開(kāi)源模型在PAI靈駿的最佳實(shí)踐,云棲號(hào)技術(shù)分享,開(kāi)源,云計(jì)算,人工智能,ai

模型準(zhǔn)備

下面分別給出從ModelScope社區(qū),huggingface社區(qū)以及OSS對(duì)象存儲(chǔ)下載Qwen-7B模型的指引:

  1. 從ModelScope社區(qū)下載模型

進(jìn)入DSW工作空間,安裝ModelScope:

# pip設(shè)置全局鏡像與相關(guān)modelscope包安裝
# pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
pip install modelscope

Qwen系列模型可通過(guò)ModelScope社區(qū)下載:https://modelscope.cn/organization/qwen

進(jìn)入python環(huán)境,根據(jù)上述列表中的模型名稱(chēng)、版本信息,通過(guò)如下代碼實(shí)現(xiàn)模型下載,以及加載模型、tokenizer:

  • 以下給出了7B模型的下載代碼,14B和72B請(qǐng)參考上述表格中網(wǎng)頁(yè)上的代碼
# ### Loading Model and Tokenizer
from modelscope.hub.snapshot_download import snapshot_download
model_dir = snapshot_download('qwen/Qwen-7B', 'v1.1.4')
# model_dir = snapshot_download('qwen/Qwen-14B', 'v1.0.4')
# model_dir = snapshot_download('qwen/Qwen-72B')
# 獲取下載路徑
print(model_dir)
# /root/.cache/modelscope/hub/qwen/Qwen-7B

退出python環(huán)境,將下載的ckpt移動(dòng)到對(duì)應(yīng)文件夾

mkdir -p /mnt/workspace/qwen-ckpts/${后綴為hf的ckpt文件夾}
# mkdir -p /mnt/workspace/qwen-ckpts/qwen-7b-hf
cp -r ${在此處填寫(xiě)獲取的模型路徑}/* /mnt/workspace/qwen-ckpts/${后綴為hf的ckpt文件夾}
# cp -r /root/.cache/modelscope/hub/qwen/Qwen-7B/* /mnt/workspace/qwen-ckpts/qwen-7b-hf

2.用戶(hù)還可以通過(guò)Huggingface來(lái)下載Qwen的模型(需要VPN),命令如下所示:

mkdir /mnt/workspace/qwen-ckpts
cd /mnt/workspace/qwen-ckpts
git clone https://huggingface.co/Qwen/Qwen-7B
git clone https://huggingface.co/Qwen/Qwen-7B-Chat
git clone https://huggingface.co/Qwen/Qwen-14B
git clone https://huggingface.co/Qwen/Qwen-14B-Chat
git clone https://huggingface.co/Qwen/Qwen-72B
git clone https://huggingface.co/Qwen/Qwen-72B-Chat

3.用戶(hù)還可以通過(guò)wget方式直接下載我們預(yù)先放置在oss對(duì)象存儲(chǔ)系統(tǒng)上的qwen的模型,命令如下所示:

mkdir /mnt/workspace/qwen-ckpts
cd /mnt/workspace/qwen-ckpts
wget https://atp-modelzoo-wlcb-pai.oss-cn-wulanchabu.aliyuncs.com/release/models/pai-megatron-patch/qwen-ckpts/qwen-7b-hf-to-mg-tp1-pp1.tgz
wget https://atp-modelzoo-wlcb-pai.oss-cn-wulanchabu.aliyuncs.com/release/models/pai-megatron-patch/qwen-ckpts/qwen-7b-hf.tgz

數(shù)據(jù)準(zhǔn)備

建議在PAI靈駿智算服務(wù)中的DSW實(shí)例中準(zhǔn)備預(yù)訓(xùn)練數(shù)據(jù),以下以中文wudao2.0數(shù)據(jù)集的準(zhǔn)備流程為例,給出數(shù)據(jù)預(yù)處理指引:

下載WuDaoCorpora2.0開(kāi)源數(shù)據(jù)集到/mnt/workspace/qwen-datasets工作目錄下,我們提供了部分樣例數(shù)據(jù)作為示例,用戶(hù)可通過(guò)以下命令下載和解壓:

wget https://atp-modelzoo.oss-cn-hangzhou.aliyuncs.com/release/datasets/WuDaoCorpus2.0_base_sample.tgz
tar zxvf WuDaoCorpus2.0_base_sample.tgz

假設(shè)解壓后的文件夾命名為wudao_200g,該文件夾中的原始wudao數(shù)據(jù)集的格式和大小如下截圖所示:

通義千問(wèn)開(kāi)源模型在PAI靈駿的最佳實(shí)踐,云棲號(hào)技術(shù)分享,開(kāi)源,云計(jì)算,人工智能,ai

我們?yōu)镸egatron-LM訓(xùn)練準(zhǔn)備了數(shù)據(jù)預(yù)處理流程,您可以根據(jù)自己的需要選擇不同的處理方式。

Megatron-LM訓(xùn)練數(shù)據(jù)準(zhǔn)備

mmap數(shù)據(jù)是一種預(yù)先執(zhí)行tokenize處理的數(shù)據(jù)格式,可以極大減少訓(xùn)練微調(diào)過(guò)程中等待數(shù)據(jù)讀入的時(shí)間,當(dāng)數(shù)據(jù)量極大時(shí),優(yōu)勢(shì)顯著。

1.對(duì)Wudao數(shù)據(jù)執(zhí)行數(shù)據(jù)集清洗并進(jìn)行文件格式轉(zhuǎn)換,具體流程可參考如下的bash腳本,最終生成匯總的merged_wudao_cleaned.json。

#! /bin/bash
set -ex
# 請(qǐng)?jiān)诖颂幵O(shè)置原始數(shù)據(jù)所在路徑
data_dir=/mnt/workspace/qwen-datasets/wudao_200g

#開(kāi)始數(shù)據(jù)清洗流程
dataset_dir=$(dirname $data_dir)
mkdir -p ${dataset_dir}/cleaned_wudao_dataset
cd ${dataset_dir}/cleaned_wudao_dataset
wget https://atp-modelzoo-wlcb-pai.oss-cn-wulanchabu.aliyuncs.com/release/models/pai-megatron-patch/llama2-codes/preprocess_wudao2.py
# 此處與上一節(jié)不同,增加了key參數(shù)設(shè)為text
python preprocess_wudao2.py -i ${data_dir} -o ${dataset_dir}/cleaned_wudao_dataset -k text -p 32

# 合并清洗后的數(shù)據(jù)
mkdir ${dataset_dir}/wudao
cd ${dataset_dir}/wudao
find ${dataset_dir}/cleaned_wudao_dataset -name "*.json" -exec cat {} + > ${dataset_dir}/wudao/merged_wudao_cleaned.json
rm -rf ${dataset_dir}/cleaned_wudao_dataset

腳本執(zhí)行完成后,qwen-datasets內(nèi)部文件結(jié)構(gòu)如下,新增一個(gè)wudao文件夾:

qwen-datasets
├── wudao_200g 
└── wudao
    └── merged_wudao_cleaned.json

2.利用第一節(jié)生成的merged_wudao_cleaned.json文件,將數(shù)據(jù)拆分成若干組并壓縮,便于后續(xù)實(shí)現(xiàn)多線(xiàn)程處理:

apt-get update
apt-get install zstd

# 此處設(shè)置分塊數(shù)為10,如數(shù)據(jù)處理慢可設(shè)置稍大
NUM_PIECE=10

# 對(duì)merged_wudao_cleaned.json文件進(jìn)行處理
mkdir -p ${dataset_dir}/cleaned_zst/
# 查詢(xún)數(shù)據(jù)總長(zhǎng)度,對(duì)數(shù)據(jù)進(jìn)行拆分
NUM=$(sed -n '$=' ${dataset_dir}/wudao/merged_wudao_cleaned.json)
echo "total line of dataset is $NUM, data will be split into $NUM_PIECE pieces for processing"
NUM=`expr $NUM / $NUM_PIECE`
echo "each group is processing $NUM sample"
split_dir=${dataset_dir}/split
mkdir $split_dir
split -l $NUM --numeric-suffixes --additional-suffix=.jsonl ${dataset_dir}/wudao/merged_wudao_cleaned.json $split_dir/

# 數(shù)據(jù)壓縮
o_path=${dataset_dir}/cleaned_zst/
mkdir -p $o_path
files=$(ls $split_dir/*.jsonl)
for filename in $files
do
   f=$(basename $filename)
   zstd -z $filename -o $o_path/$f.zst &
done
rm -rf $split_dir
rm ${dataset_dir}/wudao/merged_wudao_cleaned.json

腳本執(zhí)行完成后,qwen-datasets內(nèi)部文件結(jié)構(gòu)如下,新增一個(gè)cleaned_zst文件夾,每個(gè)子文件夾里有10個(gè)壓縮文件:

qwen-datasets
├── wudao_200g
├── wudao
└── cleaned_zst
    ├── 00.jsonl.zst
    │   ...
    └── 09.jsonl.zst

3.制作MMAP格式預(yù)訓(xùn)練數(shù)據(jù)集。

前往Pai-Megatron-Patch開(kāi)源網(wǎng)站獲取Megatron模型訓(xùn)練工具Pai-Megatron-Patch源代碼并拷貝到工作目錄/mnt/workspace/下。

# 開(kāi)源網(wǎng)站獲取訓(xùn)練代碼
git clone --recurse-submodules https://github.com/alibaba/Pai-Megatron-Patch.git
# wget獲取訓(xùn)練代碼
https://atp-modelzoo.oss-cn-hangzhou.aliyuncs.com/release/models/Pai-Megatron-Patch.tgz

在DSW的Terminal中進(jìn)入代碼目錄:/mnt/workspace/Pai-Megatron-Patch/toolkits/pretrain_data_preprocessing。查看run_make_pretraining_dataset.sh腳本內(nèi)容。里面有6個(gè)啟動(dòng)參數(shù)需要在運(yùn)行時(shí)輸入,具體參數(shù)列表如下:

MEGATRON_PATH=$1                   # 設(shè)置開(kāi)源Megatron的代碼路徑
MEGATRON_PATCH_PATH=$2             # 設(shè)置Megatron Patch的代碼路徑
input_data_dir=$3                  # 打包后的wudao數(shù)據(jù)集的文件夾路徑
tokenizer=$4                       # qwenbpe
output_data_dir=$5                 # 輸出到bin和idx文件目錄  
load_dir=$6                        # tokenizer_config.json文件路徑

運(yùn)行示例如下所示:

# 安裝qwen依賴(lài)的tokenizer庫(kù)包
pip install tiktoken
# 請(qǐng)?jiān)诖颂幵O(shè)置數(shù)據(jù)集路徑和工作路徑
export dataset_dir=/mnt/workspace/qwen-datasets
export WORK_DIR=/mnt/workspace

# 分別為訓(xùn)練集、驗(yàn)證集生成mmap格式預(yù)訓(xùn)練數(shù)據(jù)集
cd ${WORK_DIR}/Pai-Megatron-Patch/toolkits/pretrain_data_preprocessing
bash run_make_pretraining_dataset.sh \
../../Megatron-LM-23.04 \
${WORK_DIR}/Pai-Megatron-Patch/ \
${dataset_dir}/cleaned_zst/ \
qwenbpe \
${dataset_dir}/wudao/ \
${WORK_DIR}/qwen-ckpts/qwen-7b-hf
rm -rf ${dataset_dir}/cleaned_zst

腳本執(zhí)行完成后,qwen-datasets內(nèi)部文件結(jié)構(gòu)如下,wudao文件夾里有2個(gè)名字相同后綴不同的mmap文件:

qwen-datasets
├── wudao_200g
└── wudao
   ├── wudao_qwenbpe_content_document.bin
   └── wudao_qwenbpe_content_document.idx

小規(guī)模預(yù)處理數(shù)據(jù)下載試用

為方便用戶(hù)試用,我們也提供了已經(jīng)處理好的小規(guī)模數(shù)據(jù),可直接下載使用

cd /mnt/workspace/qwen-datasets
wget https://atp-modelzoo-wlcb-pai.oss-cn-wulanchabu.aliyuncs.com/release/models/pai-megatron-patch/qwen-datasets/alpaca_zh-qwen-train.json
wget https://atp-modelzoo-wlcb-pai.oss-cn-wulanchabu.aliyuncs.com/release/models/pai-megatron-patch/qwen-datasets/alpaca_zh-qwen-valid.json
mkdir -p /mnt/workspace/qwen-datasets/wudao
cd /mnt/workspace/qwen-datasets/wudao
wget https://atp-modelzoo-wlcb-pai.oss-cn-wulanchabu.aliyuncs.com/release/models/pai-megatron-patch/qwen-datasets/wudao_qwenbpe_text_document.bin
wget https://atp-modelzoo-wlcb-pai.oss-cn-wulanchabu.aliyuncs.com/release/models/pai-megatron-patch/qwen-datasets/wudao_qwenbpe_text_document.idx

Megatron訓(xùn)練流程

前往Pai-Megatron-Patch開(kāi)源網(wǎng)站獲取Megatron模型訓(xùn)練工具Pai-Megatron-Patch源代碼并拷貝到工作目錄/mnt/workspace/下。

# 開(kāi)源網(wǎng)站獲取訓(xùn)練代碼
git clone --recurse-submodules https://github.com/alibaba/Pai-Megatron-Patch.git
# wget獲取訓(xùn)練代碼
https://atp-modelzoo.oss-cn-hangzhou.aliyuncs.com/release/models/Pai-Megatron-Patch.tgz

模型格式轉(zhuǎn)換

使用我們提供的模型轉(zhuǎn)換腳本,將huggingface格式的模型文件轉(zhuǎn)換為megatron格式:

MEGATRON_PATH=$1                     # Megatron路徑
SOURCE_CKPT_PATH=$2                  # Megatron格式模型路徑,具體到iter_*
TARGET_CKPT_PATH=$3                  # 轉(zhuǎn)換為Huggingface格式模型后保存的路徑
TP=$4                                # 張量切片數(shù)量,與訓(xùn)練保持一致
PP=$5                                # 流水切片數(shù)量,與訓(xùn)練保持一致
MN=$6                                # 模型名稱(chēng):qwen-7b,qwen-14b,qwen-72b
EXTRA_VOCAB_SIZE=$7                  # 額外詞表大小
mg2hf=$8                            # 是否為Megatron轉(zhuǎn)Huggingface

以下是不同參數(shù)量下模型切片的推薦使用組合,在轉(zhuǎn)換模型時(shí)需進(jìn)行針對(duì)性修改:

模型參數(shù)量 Megatron訓(xùn)練模型切片
qwen-7B TP1、PP1
qwen-14B TP2、PP1
qwen-72B TP8、PP2
# 獲取模型
cd /mnt/workspace/qwen-ckpts
wget https://atp-modelzoo-wlcb-pai.oss-cn-wulanchabu.aliyuncs.com/release/models/pai-megatron-patch/qwen-ckpts/qwen-7b-hf.tgz
tar -zxf qwen-7b-hf.tgz

# 轉(zhuǎn)換模型
cd /mnt/workspace/Pai-Megatron-Patch/toolkits/model_checkpoints_convertor/qwen
sh model_convertor.sh \
../../../Megatron-LM-main        \
/mnt/workspace/qwen-ckpts/qwen-7b-hf         \
/mnt/workspace/qwen-ckpts/qwen-7b-hf-to-megatron-tp1-pp1  \
1  \
1  \
qwen-7b \
0 \
false

為方便用戶(hù)試用,我們也提供了轉(zhuǎn)好格式的模型,可直接下載使用:

cd /mnt/workspace/
mkdir qwen-ckpts
cd qwen-ckpts
wget https://atp-modelzoo-wlcb-pai.oss-cn-wulanchabu.aliyuncs.com/release/models/pai-megatron-patch/qwen-ckpts/qwen-7b-hf-to-mg-tp1-pp1.tgz
tar -zxf qwen-7b-hf-to-mg-tp1-pp1.tgz

繼續(xù)預(yù)訓(xùn)練

DSW調(diào)試?yán)^續(xù)預(yù)訓(xùn)練腳本

DSW的Terminal中運(yùn)行run_pretrain_megatron_qwen.sh腳本,需要傳入的參數(shù)列表如下:

ENV=$1                          # 運(yùn)行環(huán)境: dlc, dsw
MEGATRON_PATCH_PATH=$2          # 設(shè)置Megatron Patch的代碼路徑
MODEL_SIZE=$3                   # 模型結(jié)構(gòu)參數(shù)量級(jí):7B, 14B, 72B
BATCH_SIZE=$4                   # 每卡訓(xùn)練一次迭代樣本數(shù): 4, 8
GLOBAL_BATCH_SIZE=$5            # 全局batch size
LR=$6                           # 學(xué)習(xí)率: 1e-5, 5e-5
MIN_LR=$7                       # 最小學(xué)習(xí)率: 1e-6, 5e-6
SEQ_LEN=$8                      # 序列長(zhǎng)度
PAD_LEN=${9}                    # Padding長(zhǎng)度:100
EXTRA_VOCAB_SIZE=${10}          # 詞表擴(kuò)充大?。?B使用85,14B和72B模型填213
PR=${11}                        # 訓(xùn)練精度: fp16, bf16
TP=${12}                        # 模型并行度
PP=${13}                        # 流水并行度
AC=${14}                        # 激活檢查點(diǎn)模式: sel, full
DO=${15}                        # 是否使用Megatron版Zero-1降顯存優(yōu)化器: true, false
FL=${16}                        # 是否使用Flash Attention: true, false
SP=${17}                        # 是否使用序列并行: true, false
TE=${18}                        # 是否開(kāi)啟Transformer-engine加速技術(shù),需H800顯卡
SAVE_INTERVAL=${19}             # 保存ckpt的間隔
DATASET_PATH=${20}              # 訓(xùn)練數(shù)據(jù)集路徑
PRETRAIN_CHECKPOINT_PATH=${21}  # 預(yù)訓(xùn)練模型路徑
TRAIN_TOKENS=${22}              # 訓(xùn)練token數(shù)
WARMUP_TOKENS=${23}             # 預(yù)熱t(yī)oken數(shù)
OUTPUT_BASEPATH=${24}           # 訓(xùn)練輸出文件路徑

DSW單機(jī)運(yùn)行示例如下:

注意:EXTRA_VOCAB_SIZE,7B使用85,14B和72B模型使用213

export WORK_DIR=/mnt/workspace
cd ${WORK_DIR}/Pai-Megatron-Patch/examples/qwen
sh run_pretrain_megatron_qwen.sh  \
dsw  \
${WORK_DIR}/Pai-Megatron-Patch  \
7B   \
1    \
8 \
1e-5   \
1e-6   \
2048  \
2048  \
85   \
fp16  \
1   \
1  \
sel  \
true   \
false  \
false   \
false  \
100000  \
${WORK_DIR}/qwen-datasets/wudao/wudao_qwenbpe_content_document   \
${WORK_DIR}/qwen-ckpts/qwen-7b-hf-to-megatron-tp1-pp1   \
100000000   \
10000   \
${WORK_DIR}/output_megatron_qwen/

PAI-DLC啟動(dòng)分布式繼續(xù)預(yù)訓(xùn)練任務(wù)

單機(jī)開(kāi)發(fā)調(diào)試完成后,就可以在DLC環(huán)境中配置多機(jī)多卡分布式任務(wù)。注意設(shè)置正確的數(shù)據(jù)集掛載路徑WORK_DIR以及運(yùn)行環(huán)境ENV,使用和DSW相同的訓(xùn)練腳本run_pretrain_megatron_qwen.sh來(lái)運(yùn)行

export WORK_DIR=/mnt/workspace
cd ${WORK_DIR}/Pai-Megatron-Patch/examples/qwen
sh run_pretrain_megatron_qwen.sh  \
dlc  \
${WORK_DIR}/PAI-Megatron-Patch  \
7B   \
1    \
8 \
1e-5   \
1e-6   \
2048  \
2048  \
85   \
fp16  \
1   \
1  \
sel  \
true   \
false  \
false   \
false \
100000  \
${WORK_DIR}/qwen-datasets/wudao/wudao_qwenbpe_content_document   \
${WORK_DIR}/qwen-ckpts/qwen-7b-hf-to-megatron-tp1-pp1   \
100000000   \
10000   \
${WORK_DIR}/output_megatron_qwen/

有監(jiān)督微調(diào)

在微調(diào)開(kāi)始之前,請(qǐng)?zhí)D(zhuǎn)到“小規(guī)模預(yù)處理數(shù)據(jù)下載試用”章節(jié)獲取json文件。

DSW調(diào)試微調(diào)腳本

DSW的Terminal中運(yùn)行run_finetune_megatron_qwen_withGA.sh腳本,需要傳入的參數(shù)列表如下:

ENV=$1                          # 運(yùn)行環(huán)境: dlc, dsw
MEGATRON_PATCH_PATH=$2          # 設(shè)置Megatron Patch的代碼路徑
MODEL_SIZE=$3                   # 模型結(jié)構(gòu)參數(shù)量級(jí): 7B, 14B, 72B
BATCH_SIZE=$4                   # 每卡訓(xùn)練一次迭代樣本數(shù): 1, 2, 4, 8
GLOBAL_BATCH_SIZE=$5            # 微調(diào)總迭代樣本:64, 96, 128
LR=$6                           # 學(xué)習(xí)率: 1e-5, 5e-5
MIN_LR=$7                       # 最小學(xué)習(xí)率: 1e-6, 5e-6
SEQ_LEN=$8                      # 序列長(zhǎng)度
PAD_LEN=$9                      # Padding長(zhǎng)度:100
EXTRA_VOCAB_SIZE=${10}          # 詞表擴(kuò)充大?。?B使用85,14B和72B模型填213
PR=${11}                        # 訓(xùn)練精度: fp16, bf16
TP=${12}                        # 模型并行度
PP=${13}                        # 流水并行度
AC=${14}                        # 激活檢查點(diǎn)模式: sel, full
DO=${15}                        # 是否使用Megatron版Zero-1降顯存優(yōu)化器: true, false
FL=${16}                        # 是否使用Flash Attention: true, false
SP=${17}                        # 是否使用序列并行: true, false
TE=${18}                        # 是否開(kāi)啟Transformer-engine加速技術(shù),需H800顯卡
SAVE_INTERVAL=${19}             # 保存模型的步數(shù)
DATASET_PATH=${20}              # 訓(xùn)練數(shù)據(jù)集路徑
VALID_DATASET_PATH=${21}        # 驗(yàn)證數(shù)據(jù)集路徑
PRETRAIN_CHECKPOINT_PATH=${22}  # 預(yù)訓(xùn)練模型路徑
TRAIN_ITERS=${23}               # 訓(xùn)練迭代輪次
LR_WARMUP_ITERS=${24}            # 學(xué)習(xí)率增加值最大的步數(shù)
OUTPUT_BASEPATH=${25}           # 訓(xùn)練輸出文件路徑

DSW單機(jī)運(yùn)行示例如下:

注意:EXTRA_VOCAB_SIZE,7B使用85,14B和72B模型使用213

export WORK_DIR=/mnt/workspace
cd ${WORK_DIR}/Pai-Megatron-Patch/examples/qwen
sh run_finetune_megatron_qwen_withGA.sh  \
dsw  \
${WORK_DIR}/Pai-Megatron-Patch  \
7B     \
1      \
96 \
1e-5   \
1e-6   \
2048   \
2048     \
85      \
bf16   \
1      \
1      \
sel    \
true   \
false  \
false  \
false \
1000 \
${WORK_DIR}/qwen-datasets/wudao_train.json   \
${WORK_DIR}/qwen-datasets/wudao_valid.json   \
${WORK_DIR}/qwen-ckpts/qwen-7b-hf-to-megatron-tp1-pp1   \
2000   \
10 \
${WORK_DIR}/output_megatron_qwen/

PAI-DLC啟動(dòng)分布式微調(diào)任務(wù)

單機(jī)開(kāi)發(fā)調(diào)試完成后,就可以在DLC環(huán)境中配置多機(jī)多卡分布式任務(wù)。注意設(shè)置正確的數(shù)據(jù)集掛載路徑WORK_DIR以及運(yùn)行環(huán)境ENV,使用和DSW相同的訓(xùn)練腳本run_finetune_megatron_qwen.sh來(lái)運(yùn)行

export WORK_DIR=/mnt/workspace
cd ${WORK_DIR}/Pai-Megatron-Patch/examples/qwen
sh run_finetune_megatron_qwen_withGA.sh  \
dlc  \
${WORK_DIR}/Pai-Megatron-Patch  \
7B     \
1      \
96 \
1e-5   \
1e-6   \
2048   \
2048     \
85      \
bf16   \
1      \
1      \
sel    \
true   \
false  \
false  \
false \
1000 \
${WORK_DIR}/qwen-datasets/wudao_train.json   \
${WORK_DIR}/qwen-datasets/wudao_valid.json   \
${WORK_DIR}/qwen-ckpts/qwen-7b-hf-to-megatron-tp1-pp1   \
2000   \
10 \
${WORK_DIR}/output_megatron_qwen/

模型格式轉(zhuǎn)換

訓(xùn)練完成的Megatron格式模型可以通過(guò)一下腳本轉(zhuǎn)換為huggingface格式模型,方便使用huggingface和VLLM分別進(jìn)行離線(xiàn)和在線(xiàn)推理

注意:

  • “路徑"為"路徑”為“{路徑}”為“{WORK_DIR}/output_megatron_qwen/checkpoint/”目錄下文件夾名稱(chēng)(訓(xùn)練時(shí)自動(dòng)創(chuàng)建),如“dlc-pretrain-megatron-gpt3-34B-lr-1e-6-bs-1-seqlen-2048-pr-bf16-tp-8-pp-1-ac-sel-do-true-sp-true-tt--wt-/”
  • 如果使用預(yù)訓(xùn)練模型進(jìn)行轉(zhuǎn)換,需要?jiǎng)h除模型路徑下所有distrib_optim.pt文件

參數(shù)介紹

MEGATRON_PATH=$1                     # Megatron路徑
SOURCE_CKPT_PATH=$2                  # Megatron格式模型路徑,具體到iter_*
TARGET_CKPT_PATH=$3                  # 轉(zhuǎn)換為Huggingface格式模型后保存的路徑
TP=$4                                # 張量切片數(shù)量,與訓(xùn)練保持一致
PP=$5                                # 流水切片數(shù)量,與訓(xùn)練保持一致
MN=$6                                # 模型名稱(chēng):qwen-7b, qwen-14b, qwen-72b
EXTRA_VOCAB_SIZE=$7                  # 額外詞表大小
mg2hf=$8                            # 是否為Megatron轉(zhuǎn)Huggingface

運(yùn)行命令

export WORK_DIR=/mnt/workspace
cd /mnt/workspace/Pai-Megatron-Patch/toolkits/model_checkpoints_convertor/qwen
sh model_convertor.sh \
../../../Megatron-LM-main        \
${WORK_DIR}/output_megatron_qwen/checkpoint/${路徑}/iter_0001000         \
/mnt/workspace/qwen-ckpts/qwen-7b-mg-to-hf-tp1-pp1/  \
1  \
1  \
qwen-7b \
0 \
true

模型和tokenizer文件

  • 將開(kāi)源Huggingface模型文件夾路徑下的.json (pytorch_model.bin.index.json除外)、.py和.tiktoken文件拷貝至“/mnt/workspace/qwen-ckpts/qwen-7b-mg-to-hf-tp1-pp1”目錄下,以保證模型可以正常使用。

模型離線(xiàn)推理

模型訓(xùn)練完成后,可以進(jìn)行離線(xiàn)推理,評(píng)估模型效果。不同參數(shù)格式的模型可以使用HuggingFace和Megatron-LM兩種格式的推理鏈路。

HuggingFace推理

huggingface離線(xiàn)推理,可以參考如下一些鏈接:

  • Huggingface通用文本生成教學(xué):https://huggingface.co/blog/how-to-generate
  • Belle文本生成示例:https://huggingface.co/BelleGroup/BELLE-7B-2M
  • Qwen文本生成示例:https://huggingface.co/Qwen/Qwen-14B-Chat
  • 以下給出推理參考代碼(代碼來(lái)自Qwen):https://huggingface.co/Qwen/Qwen-14B-Chat
#!/usr/bin/env python
#encoding=utf-8
from transformers import AutoTokenizer, LlamaTokenizer
from transformers import LlamaForCausalLM
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

checkpoint = '/mnt/workspace/latest/qianwen/qwen-7b-hf'
print(checkpoint)
device = "cuda"
tokenizer = AutoTokenizer.from_pretrained(checkpoint, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(checkpoint,device_map="auto", trust_remote_code=True)

prompt = f"Human:寫(xiě)一個(gè)快速排序算法"
print(prompt)
inputs = tokenizer.encode(p, return_tensors="pt").to(model.device)
outputs = model.generate(inputs,max_new_tokens=512)
print(tokenizer.decode(outputs[0]))

Megatron-LM離線(xiàn)推理

對(duì)于Megatron-LM訓(xùn)練的模型,可以直接用Megatron-LM框架進(jìn)行推理。

調(diào)試推理腳本

ENV=$1                          # 運(yùn)行環(huán)境: dlc, dsw
MEGATRON_PATCH_PATH=$2          # 設(shè)置Megatron Patch的代碼路徑
CHECKPOINT_PATH=$3              # 模型微調(diào)階段的模型保存路徑
MODEL_SIZE=$4                   # 模型結(jié)構(gòu)參數(shù)量級(jí): 7B, 14B, 72B
TP=$5                           # 模型并行度
BS=$6                           # 每卡推理一次迭代樣本數(shù): 1, 4, 8
SEQ_LEN=$7                      # 序列長(zhǎng)度: 256, 512, 1024
PAD_LEN=$8                      # PAD長(zhǎng)度:需要將文本拼接到的長(zhǎng)度
EXTRA_VOCAB_SIZE=${9}           # 詞表擴(kuò)充大?。?B使用85,14B和72B模型填213
PR=${10}                        # 推理采用的精度: fp16, bf16
TOP_K=${11}                     # 采樣策略中選擇排在前面的候選詞數(shù)量(0-n): 0, 5, 10, 20
INPUT_SEQ_LEN=${12}             # 輸入序列長(zhǎng)度: 512
OUTPUT_SEQ_LEN=${13}            # 輸出序列長(zhǎng)度: 256
INPUT_FILE=${14}                # 需要推理的文本文件: input.txt, 每行為一個(gè)樣本
OUTPUT_FILE=${15}               # 推理輸出的文件: output.txt
# TOP_K和TOP_P必須有一個(gè)為0
TOP_P=${16}                     # 采樣策略中選擇排在前面的候選詞百分比(0-1): 0, 0.85, 0.95
TEMPERATURE=${17}               # 采樣策略中溫度懲罰: 1-n
REPETITION_PENALTY=${18}        # 避免生成是產(chǎn)生大量重復(fù),可以設(shè)置為(1-2)默認(rèn)為1.2
  • 此處提供一個(gè)離線(xiàn)推理輸出的文件,推理的數(shù)據(jù)組織形式需要與微調(diào)時(shí)的保持一致。
    • 測(cè)試樣本:

https://atp-modelzoo-wlcb-pai.oss-cn-wulanchabu.aliyuncs.com/release/models/pai-megatron-patch/llama2-datasets/pred_input.jsonl

  • 注意:
    • 模型保存的路徑下缺少tokenizer依賴(lài)的文件,需要將微調(diào)前模型路徑下所有json和tiktoken文件拷貝至保存模型的路徑下(位于{OUTPUT_BASEPATH }/checkpoint),與latest_checkpointed_iteration.txt同級(jí)。

以下有監(jiān)督微調(diào)過(guò)程保存模型的推理代碼,需要將run_text_generation_megatron_qwen.sh腳本中CUDA_VISIBLE_DEVICES參數(shù)設(shè)置為0;GPUS_PER_NODE參數(shù)設(shè)置為1;同時(shí)使用下列代碼進(jìn)行推理。此時(shí)使用單卡進(jìn)行推理。注意:此處模型tp為1,可使用單卡推理;如果tp>1,則需使用相應(yīng)卡數(shù)進(jìn)行推理。

export WORK_DIR=/mnt/workspace
cd ${WORK_DIR}/Pai-Megatron-Patch/examples/qwen
bash run_text_generation_megatron_qwen.sh \
dsw \
${WORK_DIR}/Pai-Megatron-Patch \
../../../llama2-train \
7B \
1 \
1 \
1024 \
1024 \
85 \
fp16 \
10 \
512 \
512 \
${WORK_DIR}/pred_input.jsonl \
${WORK_DIR}/qwen_pred.txt \
0 \
1.0 \
1.2

在線(xiàn)服務(wù)部署

完成離線(xiàn)推理并評(píng)估完模型效果以后,可以用PAI-EAS產(chǎn)品將模擬部署成在線(xiàn)服務(wù)。

準(zhǔn)備工作

  • 開(kāi)通阿里云PAI服務(wù),了解PAI-EAS基本概念;
  • 相同region開(kāi)通阿里云OSS服務(wù),并創(chuàng)建用于存儲(chǔ)模型文件的OSS bucket,將模型文件上傳到相應(yīng)目錄;

部署步驟

準(zhǔn)備PAI-EAS資源組

在PAI控制臺(tái)->模型在線(xiàn)服務(wù)(EAS)->資源組,新建資源組,并購(gòu)買(mǎi)合適規(guī)格的實(shí)例。以7B參數(shù)規(guī)模的模型為例,使用fp16數(shù)值精度推理情況下,可以使用A10(24GB顯存)或者V100(32GB顯存)規(guī)格的單卡GPU實(shí)例進(jìn)行部署。

部署方式一:使用PAI控制臺(tái)頁(yè)面

在PAI控制臺(tái)->模型在線(xiàn)服務(wù)(EAS)->推理服務(wù),選擇“部署服務(wù)”,在新建服務(wù)界面配置如下信息:

  • 服務(wù)名稱(chēng):根據(jù)實(shí)際需求填寫(xiě)
  • 部署方式:鏡像部署服務(wù)
  • 鏡像選擇:鏡像地址,例如:
pai-image-manage-registry.cn-wulanchabu.cr.aliyuncs.com/pai/llm-inference:vllm-0.2.1-v4

注:目前鏡像只支持烏蘭察布

  • 模型配置:選擇保持模型文件的OSS路徑(例如oss://my_bucket/qwen-7b),并指定掛載后的路徑(例如/qwen-7b)
  • 運(yùn)行命令:
nohup python -m fastchat.serve.controller > tmp1.log 2>&1 & python -m fastchat.serve.gradio_web_server_pai --model-list-mode reload > tmp2.log 2>&1 & python -m fastchat.serve.vllm_worker --model-path /mnt/model/qwen_7b --tensor-parallel-size 1 --trust-remote-code

注1: --tensor-parallel-size指的是模型張量切分的數(shù)量,需要根據(jù)GPU的卡數(shù)調(diào)整,7b模型在單卡就可以放下設(shè)置1,如72b模型需要4卡A800才可運(yùn)行需要設(shè)置4

注2:運(yùn)行命令的端口號(hào)應(yīng)與服務(wù)配置的端口號(hào)一致

  • 資源組種類(lèi):選擇之前準(zhǔn)備的資源組
  • 實(shí)例數(shù):根據(jù)模型和資源組情況填寫(xiě)(以7b模型為例,可以使用CPU:16,內(nèi)存:64000MB,GPU:1)

確認(rèn)信息正確后,點(diǎn)擊“部署”。

參考 eascmd使用說(shuō)明 ,安裝并配置后,使用類(lèi)似如下命令創(chuàng)建服務(wù):

eascmd64 create ./service.json

配置文件service.json示例:

{
    "name": "qwen_server",  // 服務(wù)名稱(chēng)
    "containers": [
        {
            // 鏡像和命令
            "image": "pai-image-manage-registry.cn-wulanchabu.cr.aliyuncs.com/pai/llm-inference:vllm-0.2.1-v4",
            "command": "nohup python -m fastchat.serve.controller > tmp1.log 2>&1 & python -m fastchat.serve.gradio_web_server_pai --model-list-mode reload > tmp2.log 2>&1 & python -m fastchat.serve.vllm_worker --model-path /qwen-14b-chat --tensor-parallel-size 1 --trust-remote-code",
            "port": 7860
        }
    ],
    "storage": [
        {
            // 模型地址
            "mount_path": "/qwen-7b",
            "oss": {
                "path": "oss://my-bucket/qwen-7b"
            }
        }
    ],
    "metadata": {
        "instance": 1,
        "memory": 64000, // 內(nèi)存,單位是 MiB
        "cpu": 16,
        "gpu": 1,
        "enable_webservice": true,
        "resource": "eas-r-xxxxxx" // 資源組ID
    }
}

管理服務(wù)

創(chuàng)建服務(wù)后,可以通過(guò)PAI控制臺(tái)頁(yè)面、或者eascmd命令行工具,查看服務(wù)狀態(tài)。注意:服務(wù)啟動(dòng)過(guò)程會(huì)進(jìn)行下載鏡像、加載模型等操作,需要等待一段時(shí)間。在服務(wù)日志中可以看到詳細(xì)的啟動(dòng)過(guò)程記錄。

調(diào)用服務(wù)

點(diǎn)擊查看webui應(yīng)用,即可使用模型服務(wù)

通義千問(wèn)開(kāi)源模型在PAI靈駿的最佳實(shí)踐,云棲號(hào)技術(shù)分享,開(kāi)源,云計(jì)算,人工智能,ai

通義千問(wèn)開(kāi)源模型在PAI靈駿的最佳實(shí)踐,云棲號(hào)技術(shù)分享,開(kāi)源,云計(jì)算,人工智能,ai

相關(guān)資料

  • 通義千問(wèn)系列模型:https://modelscope.cn/organization/qwen
  • 阿里云PAI靈駿智算服務(wù):https://www.aliyun.com/product/bigdata/learn/pailingjun
  • 阿里云PAI靈駿智算服務(wù)資源開(kāi)通和管理文檔:https://help.aliyun.com/zh/pai/user-guide/create-and-manage-intelligent-computing-lingjun-resources
  • PAI-Megatron-Patch 項(xiàng)目開(kāi)源地址:https://github.com/alibaba/Pai-Megatron-Patch
  • 阿里云PAI-EAS模型在線(xiàn)服務(wù):https://www.aliyun.com/product/bigdata/learn/eas
  • eascmd使用文檔:https://help.aliyun.com/zh/pai/user-guide/eascmd-client/

原文鏈接

本文為阿里云原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-776855.html

到了這里,關(guān)于通義千問(wèn)開(kāi)源模型在PAI靈駿的最佳實(shí)踐的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀(guān)點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包