日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

Llama-3開源模型全托管靈駿最佳實(shí)踐

更新時(shí)間:

Meta已開源Llama-3,推出了8B70B兩種參數(shù)量的大語言模型。阿里云PAI靈駿智算服務(wù)是面向大規(guī)模深度學(xué)習(xí)場景的智算產(chǎn)品,提供一站式的異構(gòu)計(jì)算資源和AI工程化平臺(tái)。本方案將為您介紹如何使用阿里云PAI靈駿智算服務(wù),以及基于Meta-Llama-3-8B的開源模型和Megatron的訓(xùn)練流程,進(jìn)行模型微調(diào)、離線推理驗(yàn)證,并實(shí)現(xiàn)在線服務(wù)部署。

前提條件

本方案以Meta-Llama-3-8B模型為例,在開始執(zhí)行操作前,請(qǐng)確認(rèn)您已經(jīng)完成以下準(zhǔn)備工作:

  • 已開通PAI(DSW、DLC、EAS)并創(chuàng)建了默認(rèn)的工作空間。具體操作,請(qǐng)參見開通PAI并創(chuàng)建默認(rèn)工作空間

  • 已購買靈駿智算資源并創(chuàng)建資源配額。具體操作,請(qǐng)參見新建資源組并購買靈駿智算資源靈駿智算資源配額。不同模型參數(shù)量支持的資源規(guī)格列表如下,請(qǐng)根據(jù)您實(shí)際使用的模型參數(shù)量選擇合適的資源,關(guān)于靈駿智算資源的節(jié)點(diǎn)規(guī)格詳情,請(qǐng)參見靈駿Serverless版機(jī)型定價(jià)詳情

    模型參數(shù)量

    全參數(shù)訓(xùn)練資源

    推理資源(最低)

    Megatron訓(xùn)練模型切片

    8B

    8卡*gu7xf、8卡*gu7ef

    1*V100(32 GB顯存)、1*A10(22 GB顯存)

    TP1、PP1

    70B

    4*8卡*gu7xf、4*8卡*gu7ef

    6*V100(32 GB顯存)、2卡*gu7xf

    TP8、PP2

  • 已創(chuàng)建阿里云文件存儲(chǔ)(通用型NAS)類型的數(shù)據(jù)集,用于存儲(chǔ)訓(xùn)練所需的文件和結(jié)果文件。默認(rèn)掛載路徑配置為/mnt/data/nas。具體操作,請(qǐng)參見創(chuàng)建及管理數(shù)據(jù)集

  • 已創(chuàng)建DSW實(shí)例,其中關(guān)鍵參數(shù)配置如下。具體操作,請(qǐng)參見創(chuàng)建DSW實(shí)例

    • 資源配額:選擇已創(chuàng)建的靈駿智算資源的資源配額。

    • 資源規(guī)格:配置以下資源規(guī)格。

      • CPU(核數(shù)):90。

      • 內(nèi)存(GiB):1024。

      • 共享內(nèi)存(GiB):1024。

      • GPU(卡數(shù)):至少為8。

    • 數(shù)據(jù)集掛載:單擊自定義數(shù)據(jù)集,選擇已創(chuàng)建的數(shù)據(jù)集,并使用默認(rèn)掛載路徑。

    • 鏡像:在鏡像地址頁簽,配置鏡像為dsw-registry.cn-wulanchabu.cr.aliyuncs.com/pai/pytorch-training:23.12-gpu-py310-cu123-ubuntu22.04-megatron-patch-llm

  • 如果使用RAM用戶完成以下相關(guān)操作,需要為RAM用戶授予DSW、DLCEAS的操作權(quán)限。具體操作,請(qǐng)參見云產(chǎn)品依賴與授權(quán):DSW云產(chǎn)品依賴與授權(quán):DLC云產(chǎn)品依賴與授權(quán):EAS

使用限制

僅支持在華北6(烏蘭察布)和新加坡地域使用該最佳實(shí)踐。

步驟一:準(zhǔn)備Llama-3-8B模型

本案例提供了以下三種下載模型的方式,您可以根據(jù)需要選擇其中一種。具體操作步驟如下:

  1. 進(jìn)入PAI-DSW開發(fā)環(huán)境。

    1. 登錄PAI控制臺(tái)

    2. 在頁面左上方,選擇使用服務(wù)的地域:華北6(烏蘭察布)。

    3. 在左側(cè)導(dǎo)航欄單擊工作空間列表,在工作空間列表頁面中單擊待操作的工作空間名稱,進(jìn)入對(duì)應(yīng)工作空間內(nèi)。

    4. 在左側(cè)導(dǎo)航欄,選擇模型開發(fā)與訓(xùn)練 > 交互式建模(DSW)

    5. 單擊目標(biāo)實(shí)例操作列下的打開

  2. 在頂部菜單欄單擊Terminal,在該頁簽中單擊創(chuàng)建terminal

  3. 下載Meta-Llama-3-8B模型。

    ModelScope社區(qū)下載模型

    DSWTerminal中執(zhí)行以下命令下載模型文件。

    mkdir /mnt/workspace/llama3-ckpts
    cd /mnt/workspace/llama3-ckpts
    git clone https://www.modelscope.cn/LLM-Research/Meta-Llama-3-8B.git
    cd Meta-Llama-3-8B
    rm -rf .git

    Huggingface社區(qū)下載模型

    DSWTerminal中執(zhí)行以下命令下載模型文件。

    mkdir /mnt/workspace/llama3-ckpts
    cd /mnt/workspace/llama3-ckpts
    git clone https://huggingface.co/meta-llama/Meta-Llama-3-8B
    cd Meta-Llama-3-8B
    rm -rf .git
    說明

    如果無法訪問,您可能需要設(shè)置代理后再嘗試重新訪問。

步驟二:準(zhǔn)備預(yù)訓(xùn)練數(shù)據(jù)

建議您在DSW實(shí)例中準(zhǔn)備預(yù)訓(xùn)練數(shù)據(jù)。本案例以WuDaoCorpora2.0數(shù)據(jù)集(該數(shù)據(jù)集僅供研究使用)為例,介紹Megatron-LM訓(xùn)練數(shù)據(jù)的預(yù)處理流程。您可以直接下載PAI已準(zhǔn)備好的小規(guī)模樣本數(shù)據(jù),也可以按照以下操作步驟自行準(zhǔn)備預(yù)訓(xùn)練數(shù)據(jù)。

使用PAI處理好的小規(guī)模樣本數(shù)據(jù)

為了方便您試用該案例,PAI提供了已經(jīng)處理好的小規(guī)模樣本數(shù)據(jù),您可以在DSWTerminal中執(zhí)行以下命令下載樣本數(shù)據(jù)。

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

自行處理數(shù)據(jù)

您也可以按照以下操作步驟,自行準(zhǔn)備預(yù)訓(xùn)練數(shù)據(jù):

  1. 下載WuDaoCorpora2.0開源數(shù)據(jù)集到/mnt/workspace/llama3-datasets工作目錄下。本案例將解壓后的文件夾命名為wudao_200g。

    PAI提供了部分樣例數(shù)據(jù)作為示例,您可以在DSWTerminal中執(zhí)行以下命令下載并解壓數(shù)據(jù)集。

    mkdir /mnt/workspace/llama3-datasets
    cd /mnt/workspace/llama3-datasets
    wget https://atp-modelzoo.oss-cn-hangzhou.aliyuncs.com/release/datasets/WuDaoCorpus2.0_base_sample.tgz
    tar zxvf WuDaoCorpus2.0_base_sample.tgz 
    mv WuDaoCorpus2.0_base_sample wudao_200g
  2. Terminal中執(zhí)行以下命令,對(duì)Wudao數(shù)據(jù)執(zhí)行數(shù)據(jù)集清洗并進(jìn)行文件格式轉(zhuǎn)換,最終生成匯總的merged_wudao_cleaned.json文件。

    #! /bin/bash
    set -ex
    # 請(qǐng)?jiān)诖颂幵O(shè)置原始數(shù)據(jù)所在路徑
    data_dir=/mnt/workspace/llama3-datasets/wudao_200g
    
    #開始數(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í)行完成后,llama3-datasets目錄的文件結(jié)構(gòu)如下,新增了一個(gè)wudao文件夾。

    llama3-datasets
    ├── wudao_200g 
    └── wudao
        └── merged_wudao_cleaned.json
  3. Terminal中執(zhí)行以下命令,利用生成的merged_wudao_cleaned.json文件將數(shù)據(jù)拆分成若干組并進(jìn)行壓縮,以便于后續(xù)實(shí)現(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/
    # 查詢數(shù)據(jù)總長度,對(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
    
    說明

    如果Terminal在執(zhí)行上述代碼后意外關(guān)閉,請(qǐng)重新啟動(dòng)Terminal并運(yùn)行以下命令來清理不必要的文件和目錄。

    data_dir=/mnt/workspace/llama3-datasets/wudao_200g
    dataset_dir=$(dirname $data_dir)
    split_dir=${dataset_dir}/split
    rm -rf $split_dir
    rm ${dataset_dir}/wudao/merged_wudao_cleaned.json

    命令執(zhí)行完成后,llama3-datasets目錄的文件結(jié)構(gòu)如下。新增了一個(gè)cleaned_zst文件夾,每個(gè)子文件夾里有10個(gè)壓縮文件。

    llama3-datasets
    ├── wudao_200g
    ├── wudao
    └── cleaned_zst
        ├── 00.jsonl.zst
    		│   ...
        └── 09.jsonl.zst
  4. 制作MMAP格式的預(yù)訓(xùn)練數(shù)據(jù)集。

    MMAP數(shù)據(jù)是一種預(yù)先執(zhí)行tokenize的數(shù)據(jù)格式,可以減少訓(xùn)練微調(diào)過程中等待數(shù)據(jù)讀入的時(shí)間,尤其在處理大規(guī)模數(shù)據(jù)時(shí)優(yōu)勢更為突出。具體操作步驟如下:

    1. DSWTerminal中執(zhí)行以下命令,將Megatron格式的模型訓(xùn)練工具源代碼PAI-Megatron-Patch拷貝至DSW的工作目錄/mnt/workspace/下。

      cd /mnt/workspace/
      # 通過開源網(wǎng)站獲取訓(xùn)練代碼。
      git clone --recurse-submodules https://github.com/alibaba/Pai-Megatron-Patch.git
      cd Pai-Megatron-Patch
      pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
    2. Terminal中執(zhí)行以下命令將數(shù)據(jù)轉(zhuǎn)換成MMAP格式。

      命令執(zhí)行成功后,在/mnt/workspace/llama3-datasets/wudao目錄下生成.bin.idx文件。

      # 請(qǐng)?jiān)诖颂幵O(shè)置數(shù)據(jù)集路徑和工作路徑。
      export dataset_dir=/mnt/workspace/llama3-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 \
      ../.. \
      ${dataset_dir}/cleaned_zst/ \
      llamabpe \
      ${dataset_dir}/wudao/ \
      ${WORK_DIR}/llama3-ckpts/Meta-Llama-3-8B
      rm -rf ${dataset_dir}/cleaned_zst

      其中運(yùn)行run_make_pretraining_dataset.sh輸入的六個(gè)啟動(dòng)參數(shù)說明如下:

      參數(shù)

      描述

      MEGATRON_PATCH_PATH=$1

      設(shè)置Megatron Patch的代碼路徑。

      input_data_dir=$2

      打包后的Wudao數(shù)據(jù)集的文件夾路徑。

      tokenizer=$3

      指定分詞器的類型為llamabpe

      output_data_dir=$4

      指定輸出的.bin.idx文件的保存路徑。

      load_dir=$5

      tokenizer_config.json文件的路徑。

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

      llama3-datasets
      ├── wudao_200g
      └── wudao
         ├── wudao_llama3bpe_content_document.bin
         └── wudao_llama3bpe_content_document.idx

步驟三:Megatron訓(xùn)練

您可以按照以下流程進(jìn)行Megatron訓(xùn)練。

模型格式轉(zhuǎn)換

  1. DSWTerminal中執(zhí)行以下命令,將Megatron格式的模型訓(xùn)練工具源代碼PAI-Megatron-Patch拷貝至DSW的工作目錄/mnt/workspace/下。

    說明

    如果您已在前述步驟中執(zhí)行過該操作,請(qǐng)?zhí)^該步驟。

    cd /mnt/workspace/
    # 方式一:通過開源網(wǎng)站獲取訓(xùn)練代碼。
    git clone --recurse-submodules https://github.com/alibaba/Pai-Megatron-Patch.git
    cd Pai-Megatron-Patch
    pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
  2. Terminal中執(zhí)行以下命令,使用PAI提供的模型轉(zhuǎn)換工具,可將HuggingFace格式的模型文件轉(zhuǎn)換為Megatron格式。

    # 轉(zhuǎn)換模型
    cd /mnt/workspace/Pai-Megatron-Patch/toolkits/model_checkpoints_convertor/llama
    sh hf2megatron_convertor.sh \
    ../../../     \
    /mnt/workspace/llama3-ckpts/Meta-Llama-3-8B    \
    /mnt/workspace/llama3-ckpts/Meta-Llama-3-8B-to-megatron-tp4-pp1  \
    4  \
    1  \
    llama3-8b \
    0 \
    false

    其中運(yùn)行hf2megatron_convertor.sh需要傳入的參數(shù)說明如下:

    參數(shù)

    描述

    MEGATRON_PATH=$1

    設(shè)置開源Megatron的代碼路徑。

    SOURCE_CKPT_PATH=$2

    HuggingFace格式的模型文件路徑。

    TARGET_CKPT_PATH=$3

    轉(zhuǎn)換為Megatron格式模型后保存的路徑。

    TP=$4

    張量切片數(shù)量,與訓(xùn)練保持一致。不同參數(shù)量下的切片數(shù)量不同,在轉(zhuǎn)換模型時(shí)需進(jìn)行針對(duì)性修改:

    • Llama-3-8B:TP1PP1。

    • Llama-3-70B:TP8PP2。

    PP=$5

    流水切片數(shù)量,與訓(xùn)練保持一致。不同參數(shù)量下的切片數(shù)量不同,在轉(zhuǎn)換模型時(shí)需進(jìn)行針對(duì)性修改:

    • Llama-3-8B:TP1PP1。

    • Llama-3-70B:TP8PP2。

    MN=$6

    模型名稱:llama-3-8b。

    EXTRA_VOCAB_SIZE=$7

    額外詞表大小。

    mg2hf=$8

    是否為Megatron格式轉(zhuǎn)Huggingface格式,取值如下:

    • false:不是。

    • true:是。

預(yù)訓(xùn)練模型

先在DSW單機(jī)環(huán)境中對(duì)訓(xùn)練腳本進(jìn)行調(diào)試,調(diào)試完成后,您便可以在DLC環(huán)境提交多機(jī)多卡的分布式訓(xùn)練任務(wù),訓(xùn)練時(shí)長取決于您設(shè)定的訓(xùn)練Tokens數(shù)量。任務(wù)執(zhí)行完成后,模型文件將被保存至/mnt/workspace/output_megatron_llama3/目錄。

DSW單機(jī)預(yù)訓(xùn)練模型

  1. Terminal中,打開/mnt/workspace/Pai-Megatron-Patch/Megatron-LM-240405/megatron/training/checkpointing.py文件,手動(dòng)將718行代碼中的strict=strict修改為strict=Falseimage

  2. Terminal中預(yù)訓(xùn)練模型,代碼示例如下。

    export WORK_DIR=/mnt/workspace
    cd ${WORK_DIR}/Pai-Megatron-Patch/examples/llama3
    sh run_pretrain_megatron_llama.sh  \
    dsw  \
    ../../ \
    8B   \
    1    \
    8 \
    1e-5   \
    1e-6   \
    128  \
    128  \
    256   \
    bf16  \
    4   \
    1  \
    sel  \
    true   \
    false  \
    false   \
    false   \
    100000  \
    ${WORK_DIR}/llama3-datasets/wudao/wudao_llama3bpe_content_document  \
    ${WORK_DIR}/llama3-ckpts/Meta-Llama-3-8B-to-megatron-tp4-pp1  \
    100000000   \
    10000   \
    ${WORK_DIR}/output_megatron_llama3

    其中運(yùn)行run_pretrain_megatron_llama.sh需要傳入的參數(shù)說明如下:

    參數(shù)

    描述

    ENV=$1

    配置運(yùn)行環(huán)境:

    • dsw

    • dlc

    MEGATRON_PATCH_PATH=$2

    設(shè)置開源Megatron的代碼路徑。

    MODEL_SIZE=$3

    模型結(jié)構(gòu)參數(shù)量級(jí):8B、70B。

    BATCH_SIZE=$4

    每卡訓(xùn)練一次迭代樣本數(shù):48。

    GLOBAL_BATCH_SIZE=$5

    全局Batch Size。

    LR=$6

    學(xué)習(xí)率:1e-55e-5。

    MIN_LR=$7

    最小學(xué)習(xí)率:1e-65e-6。

    SEQ_LEN=$8

    序列長度。

    PAD_LEN=${9}

    Padding長度。

    EXTRA_VOCAB_SIZE=${10}

    詞表擴(kuò)充大小。

    PR=${11}

    訓(xùn)練精度:fp16bf16。

    TP=${12}

    模型并行度。

    PP=${13}

    流水并行度。

    AC=${14}

    激活檢查點(diǎn)模式:

    • full

    • sel

    DO=${15}

    是否使用MegatronZero-1降顯存優(yōu)化器:

    • true

    • false

    FL=${16}

    是否打開Flash Attention:

    • true

    • false

    SP=${17}

    是否使用序列并行:

    • true

    • false

    TE=${18}

    是否開啟Transformer-engine加速技術(shù):

    • true

    • false

    SAVE_INTERVAL=${19}

    保存CheckPoint文件的step間隔。

    DATASET_PATH=${20}

    訓(xùn)練數(shù)據(jù)集路徑。

    PRETRAIN_CHECKPOINT_PATH=${21}

    預(yù)訓(xùn)練模型路徑。

    TRAIN_TOKENS=${22}

    訓(xùn)練Tokens。

    WARMUP_TOKENS=${23}

    預(yù)熱Token數(shù)。

    OUTPUT_BASEPATH=${24}

    訓(xùn)練輸出模型文件的路徑。

DLC分布式預(yù)訓(xùn)練模型

在單機(jī)開發(fā)調(diào)試完成后,您可以在DLC環(huán)境中配置多機(jī)多卡的分布式任務(wù)。具體操作步驟如下:

  1. 進(jìn)入新建任務(wù)頁面。

    1. 登錄PAI控制臺(tái),在頁面上方選擇目標(biāo)地域,并在右側(cè)選擇目標(biāo)工作空間,然后單擊進(jìn)入DLC

    2. 在分布式訓(xùn)練(DLC)頁面,單擊新建任務(wù)

  2. 新建任務(wù)頁面,配置以下關(guān)鍵參數(shù),其他參數(shù)取默認(rèn)配置即可。更多詳細(xì)內(nèi)容,請(qǐng)參見創(chuàng)建訓(xùn)練任務(wù)

    參數(shù)

    描述

    基本信息

    任務(wù)名稱

    自定義任務(wù)名稱。本方案配置為:test_llama3_dlc。

    環(huán)境信息

    節(jié)點(diǎn)鏡像

    選中鏡像地址并在文本框中輸入dsw-registry.cn-wulanchabu.cr.aliyuncs.com/pai/pytorch-training:23.12-gpu-py310-cu123-ubuntu22.04-megatron-patch-llm

    數(shù)據(jù)集

    單擊自定義數(shù)據(jù)集,并配置以下參數(shù):

    • 自定義數(shù)據(jù)集:選擇已創(chuàng)建的NAS類型的數(shù)據(jù)集。

    • 掛載路徑:配置為/mnt/workspace/

    啟動(dòng)命令

    配置以下命令,其中run_pretrain_megatron_llama.sh腳本輸入的啟動(dòng)參數(shù)與DSW單機(jī)預(yù)訓(xùn)練模型一致。

    export WORK_DIR=/mnt/workspace
    cd ${WORK_DIR}/Pai-Megatron-Patch/examples/llama3
    sh run_pretrain_megatron_llama.sh  \
    dlc  \
    ../../ \
    8B   \
    1    \
    8 \
    1e-5   \
    1e-6   \
    128  \
    128  \
    256   \
    bf16  \
    4   \
    1  \
    sel  \
    true   \
    false  \
    false   \
    false   \
    100000  \
    ${WORK_DIR}/llama3-datasets/wudao/wudao_llama3bpe_content_document  \
    ${WORK_DIR}/llama3-ckpts/Meta-Llama-3-8B-to-megatron-tp4-pp1  \
    100000000   \
    10000   \
    ${WORK_DIR}/output_megatron_llama3

    資源信息

    資源類型

    選擇靈駿智算

    資源來源

    選擇資源配額

    資源配額

    本方案選擇已創(chuàng)建的靈駿智算資源的資源配額。

    框架

    選擇PyTorch

    任務(wù)資源

    Worker節(jié)點(diǎn)配置以下參數(shù):

    • 節(jié)點(diǎn)數(shù)量:2,如果需要多機(jī)訓(xùn)練,配置節(jié)點(diǎn)數(shù)量為需要的機(jī)器數(shù)即可。

    • GPU(卡數(shù)):8

    • CPU(核數(shù)):90,且不能大于96

    • 內(nèi)存(GiB):1024

    • 共享內(nèi)存(GiB):1024

  3. 單擊確定,頁面自動(dòng)跳轉(zhuǎn)到分布式訓(xùn)練(DLC)頁面。當(dāng)狀態(tài)變?yōu)?b data-tag="uicontrol" id="9b21d79015jrz" class="uicontrol">已成功時(shí),表明訓(xùn)練任務(wù)執(zhí)行成功。

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

先在DSW單機(jī)環(huán)境中對(duì)訓(xùn)練腳本進(jìn)行調(diào)試,調(diào)試完成后,您便可以在DLC環(huán)境提交多機(jī)多卡的分布式訓(xùn)練任務(wù),訓(xùn)練時(shí)長取決于您設(shè)定的訓(xùn)練迭代次數(shù)。任務(wù)執(zhí)行完成后,模型文件將被保至/mnt/workspace/output_megatron_llama3/目錄。

  1. 微調(diào)模型前,在Terminal中執(zhí)行以下代碼下載JSON文件。

    說明

    如果該JSON文件已在前述步驟中下載,可忽略該步驟。

    cd /mnt/workspace/llama3-datasets
    wget https://atp-modelzoo-wlcb-pai.oss-cn-wulanchabu.aliyuncs.com/release/models/pai-megatron-patch/llama3-datasets/alpaca_zh-llama3-train.json
    wget https://atp-modelzoo-wlcb-pai.oss-cn-wulanchabu.aliyuncs.com/release/models/pai-megatron-patch/llama3-datasets/alpaca_zh-llama3-valid.json
  2. 微調(diào)模型。

    DSW單機(jī)微調(diào)模型

    Terminal中運(yùn)行的代碼示例如下:

    export WORK_DIR=/mnt/workspace
    cd ${WORK_DIR}/Pai-Megatron-Patch/examples/llama3
    sh run_finetune_megatron_llama_withGA.sh  \
    dsw  \
    ../../ \
    8B     \
    1      \
    32     \
    1e-5   \
    1e-6   \
    128   \
    128     \
    256      \
    bf16   \
    4      \
    1      \
    sel    \
    true   \
    false  \
    false  \
    false \
    100 \
    ${WORK_DIR}/llama3-datasets/alpaca_zh-llama3-train.json   \
    ${WORK_DIR}/llama3-datasets/alpaca_zh-llama3-valid.json   \
    ${WORK_DIR}/llama3-ckpts/Meta-Llama-3-8B-to-megatron-tp4-pp1  \
    1000 \
    10 \
    ${WORK_DIR}/output_megatron_llama3/

    其中運(yùn)行run_finetune_megatron_llama_withGA.sh需要傳入的參數(shù)說明如下:

    參數(shù)

    描述

    ENV=$1

    運(yùn)行環(huán)境:

    • dlc

    • dsw

    MEGATRON_PATCH_PATH=$2

    設(shè)置開源Megatron的代碼路徑。

    MODEL_SIZE=$3

    模型結(jié)構(gòu)參數(shù)量級(jí):8B、70B。

    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

    序列長度。

    PAD_LEN=$9

    Padding序列長度。

    EXTRA_VOCAB_SIZE=${10}

    詞表擴(kuò)充大小。

    PR=${11}

    訓(xùn)練精度:fp16、bf16。

    TP=${12}

    模型并行度。

    PP=${13}

    流水并行度。

    AC=${14}

    激活檢查點(diǎn)模式:fullsel。

    DO=${15}

    是否使用MegatronZero-1降顯存優(yōu)化器:

    • true

    • false

    FL=${16}

    是否打開Flash Attention:

    • true

    • false

    SP=${17}

    是否使用序列并行:

    • true

    • false

    TE=${18}

    是否開啟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}

    預(yù)熱Step數(shù)。

    OUTPUT_BASEPATH=${25}

    訓(xùn)練輸出模型文件的路徑。

    DLC分布式微調(diào)模型

    DSW單機(jī)環(huán)境調(diào)試完成后,您可以在DLC環(huán)境中配置多機(jī)多卡分布式任務(wù)。提交DLC訓(xùn)練任務(wù)時(shí),啟動(dòng)命令配置如下,其他參數(shù)配置詳情,請(qǐng)參見預(yù)訓(xùn)練模型

    export WORK_DIR=/mnt/workspace
    cd ${WORK_DIR}/Pai-Megatron-Patch/examples/llama3
    sh run_finetune_megatron_llama_withGA.sh  \
    dlc  \
    ../../ \
    8B     \
    1      \
    32     \
    1e-5   \
    1e-6   \
    128   \
    128     \
    256      \
    bf16   \
    4      \
    1      \
    sel    \
    true   \
    false  \
    false  \
    false \
    100 \
    ${WORK_DIR}/llama3-datasets/alpaca_zh-llama3-train.json   \
    ${WORK_DIR}/llama3-datasets/alpaca_zh-llama3-valid.json   \
    ${WORK_DIR}/llama3-ckpts/Meta-Llama-3-8B-to-megatron-tp4-pp1  \
    1000 \
    10 \
    ${WORK_DIR}/output_megatron_llama3/

    其中運(yùn)行run_finetune_megatron_qwen_withGA.sh需要傳入的參數(shù)與DSW單機(jī)微調(diào)模型相同。

步驟四:離線推理模型

為了方便使用HuggingFaceVLLM框架進(jìn)行離線和在線推理,您需要將已訓(xùn)練好的Megatron格式模型轉(zhuǎn)換為HuggingFace格式。具體操作步驟如下:

  1. 請(qǐng)將開源Huggingface模型路徑(/mnt/workspace/llama3-ckpts/Meta-Llama-3-8B/)中的JSON文件(除model.safetensors.index.json外)復(fù)制到訓(xùn)練生成的模型路徑(位于{OUTPUT_BASEPATH}/checkpoint的下一級(jí)目錄下,與latest_checkpointed_iteration.txt同級(jí))。

    說明

    命令中的路徑需替換為您的實(shí)際路徑。

  2. Terminal中執(zhí)行以下命令,將訓(xùn)練生成的Megatron格式的模型轉(zhuǎn)換為Huggingface格式的模型。

    export WORK_DIR=/mnt/workspace
    cd /mnt/workspace/Pai-Megatron-Patch/toolkits/model_checkpoints_convertor/llama
    sh hf2megatron_convertor.sh \
    ../../..        \
    ${WORK_DIR}/output_megatron_llama3/checkpoint/${路徑}/iter_0001000         \
    /mnt/workspace/llama3-ckpts/llama3-8b-mg-to-hf-tp4-pp1/  \
    4  \
    1  \
    llama3-8b \
    0 \
    true

    其中運(yùn)行hf2megatron_convertor.sh腳本需要傳入的參數(shù)說明如下:

    參數(shù)

    描述

    MEGATRON_PATH=$1

    設(shè)置開源Megatron的代碼路徑。

    SOURCE_CKPT_PATH=$2

    訓(xùn)練獲得的Megatron格式的模型路徑,具體到iter_*。例如:${WORK_DIR}/output_megatron_llama3/checkpoint/dsw******/iter_*******。代碼中的${路徑}${WORK_DIR}/output_megatron_llama/checkpoint/目錄下的文件夾名稱(訓(xùn)練時(shí)自動(dòng)創(chuàng)建)。

    重要

    請(qǐng)?zhí)鎿Q為您自己的模型路徑。

    TARGET_CKPT_PATH=$3

    轉(zhuǎn)換為Huggingface格式的模型后保存的路徑。

    TP=$4

    張量切片數(shù)量,與訓(xùn)練保持一致。

    PP=$5

    流水切片數(shù)量,與訓(xùn)練保持一致。

    MN=$6

    模型名稱:llama3-8b。

    EXTRA_VOCAB_SIZE=$7

    額外詞表大小。

    mg2hf=$8

    是否為Megatron格式轉(zhuǎn)Huggingface格式,取值如下:

    • true:是。

    • false:不是。

  3. 請(qǐng)將開源Huggingface模型目錄(/mnt/workspace/llama3-ckpts/Meta-Llama-3-8B/)里的config.json文件復(fù)制到/mnt/workspace/llama3-ckpts/llama3-8b-mg-to-hf-tp4-pp1/中,以替換同名文件。

  4. Terminal中的任意目錄下創(chuàng)建infer.py文件,文件內(nèi)容如下。執(zhí)行infer.py文件進(jìn)行模型離線推理,根據(jù)推理結(jié)果來評(píng)估模型效果。

    #!/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/llama3-ckpts/Meta-Llama-3-8B'
    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:寫一個(gè)快速排序算法"
    print(prompt)
    inputs = tokenizer.encode(prompt, return_tensors="pt").to(model.device)
    outputs = model.generate(inputs,max_new_tokens=512)
    print(tokenizer.decode(outputs[0]))

    示例結(jié)果如下:

    /mnt/workspace/llama3-ckpts/llama3-8b-mg-to-hf-tp4-pp1
    Special tokens have been added in the vocabulary, make sure the associated word embeddings are fine-tuned or trained.
    Loading checkpoint shards:   0%|                                                                                                                                                                                                  Loading checkpoint shards:  50%|████████████████████████████████████████████████████████████████████████████████████████████████████████████                                                                                      Loading checkpoint shards: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████Loading checkpoint shards: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 2/2 [00:15<00:00,  7.79s/it]
    Human:寫一個(gè)快速排序算法
    The attention mask and the pad token id were not set. As a consequence, you may observe unexpected behavior. Please pass your input's `attention_mask` to obtain reliable results.
    Setting `pad_token_id` to `eos_token_id`:128001 for open-end generation.
    Human:寫一個(gè)快速排序算法,用于對(duì)人類的年齡進(jìn)行排序。<|im_end|><|end_of_text|>

步驟五:部署及調(diào)用在線模型服務(wù)

完成離線推理并評(píng)估完成模型效果后,您可以將轉(zhuǎn)換為Huggingface格式的模型部署為在線服務(wù),并在實(shí)際的生產(chǎn)環(huán)境中調(diào)用,從而進(jìn)行推理實(shí)踐。具體操作步驟如下:

部署模型服務(wù)

  1. 登錄PAI控制臺(tái),在頁面上方選擇目標(biāo)地域,并在右側(cè)選擇目標(biāo)工作空間,然后單擊進(jìn)入EAS

  2. 單擊部署服務(wù),然后在自定義模型部署區(qū)域,單擊自定義部署

  3. 自定義部署頁面配置以下關(guān)鍵參數(shù),其他參數(shù)取默認(rèn)配置即可。

    參數(shù)

    描述

    基本信息

    服務(wù)名稱

    自定義模型服務(wù)名稱,同地域內(nèi)唯一。本方案配置為:test_llama3。

    環(huán)境信息

    部署方式

    選擇鏡像部署,并選中開啟Web應(yīng)用

    鏡像配置

    選擇鏡像地址,在本文框中配置鏡像地址eas-registry-vpc.cn-wulanchabu.cr.aliyuncs.com/pai-eas/chat-llm-webui:3.0.2-llama3

    模型配置

    選擇NAS類型的掛載方式,并配置以下參數(shù):

    • 選擇文件系統(tǒng):選擇創(chuàng)建數(shù)據(jù)集使用的NAS文件系統(tǒng)。

    • 文件系統(tǒng)掛載點(diǎn):選擇創(chuàng)建數(shù)據(jù)集使用的掛載點(diǎn)。

    • 文件系統(tǒng)路徑:配置為存放在NAS中的轉(zhuǎn)換后的Huggingface格式模型的路徑。本方案配置為/llama3-ckpts/llama3-8b-mg-to-hf-tp4-pp1

    • 掛載路徑:指定掛載后的路徑,本方案配置為:/llama3-8b

    運(yùn)行命令

    配置為python webui/webui_server.py --port=7860 --model-path=/llama3-8b --model-type=llama3

    其中配置的--model-path需要與模型配置中的掛載路徑一致。

    端口號(hào)

    配置為7860。

    資源部署

    資源類型

    選擇公共資源

    部署資源

    本方案以Llama3-8B模型為例,推薦使用實(shí)例規(guī)格ml.gu7i.c16m60.1-gu30,性價(jià)比高。

    說明

    如果當(dāng)前地域的資源不足,您還可以選擇A10(ecs.gn7i-c8g1.2xlarge)類型的資源規(guī)格。

    額外系統(tǒng)盤

    配置為30 GB。

    專有網(wǎng)絡(luò)

    專有網(wǎng)絡(luò)(VPC)

    配置好NAS掛載點(diǎn)后,系統(tǒng)將自動(dòng)匹配與預(yù)設(shè)的NAS文件系統(tǒng)一致的VPC、交換機(jī)和安全組。

    交換機(jī)

    安全組名稱

  4. 單擊部署

    當(dāng)服務(wù)狀態(tài)變?yōu)?b data-tag="uicontrol" id="8ac5c8301bdn3" class="uicontrol">運(yùn)行中時(shí),表明服務(wù)部署成功。

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

通過WebUI調(diào)用模型服務(wù)

服務(wù)成功部署后,您可以使用WebUI對(duì)該服務(wù)進(jìn)行調(diào)試操作。具體操作步驟如下:

  1. 在服務(wù)列表中,單擊目標(biāo)服務(wù)的服務(wù)方式列下的查看Web應(yīng)用image

  2. WebUI頁面中,進(jìn)行推理模型推理。image

通過API調(diào)用模型服務(wù)

當(dāng)您在WebUI頁面調(diào)試好問答效果后,您可利用PAI所提供的API接口,將其集成到您的業(yè)務(wù)系統(tǒng)中。具體操作,請(qǐng)參見如何使用API進(jìn)行模型推理

相關(guān)文檔

您也可以通過PAI-快速開始(PAI-QuickStart)部署和微調(diào)Llama-3系列模型。詳情請(qǐng)參見部署及微調(diào)Llama-3系列模型