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

精進(jìn)語(yǔ)言模型:探索LLM Training微調(diào)與獎(jiǎng)勵(lì)模型技術(shù)的新途徑

這篇具有很好參考價(jià)值的文章主要介紹了精進(jìn)語(yǔ)言模型:探索LLM Training微調(diào)與獎(jiǎng)勵(lì)模型技術(shù)的新途徑。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

大語(yǔ)言模型訓(xùn)練(LLM Training)

LLMs Trainer 是一個(gè)旨在幫助人們從零開始訓(xùn)練大模型的倉(cāng)庫(kù),該倉(cāng)庫(kù)最早參考自 Open-Llama,并在其基礎(chǔ)上進(jìn)行擴(kuò)充。

有關(guān) LLM 訓(xùn)練流程的更多細(xì)節(jié)可以參考 【LLM】從零開始訓(xùn)練大模型。

使用倉(cāng)庫(kù)之前,請(qǐng)先安裝所有需要的依賴:

pip install -r requirements.txt

1. 繼續(xù)預(yù)訓(xùn)練(Continue Pretraining)

繼續(xù)預(yù)訓(xùn)練是指,在一個(gè)已有的模型上繼續(xù)進(jìn)行預(yù)訓(xùn)練增強(qiáng),通常用于 英文模型的中文增強(qiáng) 或是 領(lǐng)域數(shù)據(jù)增強(qiáng)。

我們這里以英文模型 OpenLlama 在中文數(shù)據(jù)集 MNBVC 中的 少量數(shù)據(jù) 為例來(lái)演示整個(gè)流程。

1.1 數(shù)據(jù)壓縮

由于預(yù)訓(xùn)練數(shù)據(jù)集通常比較龐大,因此先將訓(xùn)練數(shù)據(jù)進(jìn)行壓縮并流氏讀取。

首先,進(jìn)入到 data 目錄:

cd data

找到目錄下的 compress_data.py, 在該文件中修改需要壓縮的數(shù)據(jù)路徑:

SHARD_SIZE = 10      # 單個(gè)文件存放樣本的數(shù)量, 示例中使用很小,真實(shí)訓(xùn)練可以酌情增大
...

def batch_compress_preatrain_data():
    """
    批量壓縮預(yù)訓(xùn)練數(shù)據(jù)。
    """
    source_path = 'shuffled_data/pretrain'                  # 源數(shù)據(jù)文件
    target_path = 'pretrain_data'                           # 壓縮后存放地址

    files = [                                               # 這三個(gè)文件是示例數(shù)據(jù)
        'MNBVC_news',
        'MNBVC_qa',
        'MNBVC_wiki'
    ]
    ...

if __name__ == '__main__':
    batch_compress_preatrain_data()
    # batch_compress_sft_data()

Notes: 上述的 files 可以在 shuffled_data/pretrain/ 中找到,是我們準(zhǔn)備的少量示例數(shù)據(jù),真實(shí)訓(xùn)練中請(qǐng)?zhí)鎿Q為完整數(shù)據(jù)。

data 路徑中執(zhí)行 python compress_data.py, 終端將顯示:

processed shuffled_data/pretrain/MNBVC_news.jsonl...
total line: 100
total files: 10
processed shuffled_data/pretrain/MNBVC_qa.jsonl...
total line: 50
total files: 5
processed shuffled_data/pretrain/MNBVC_wiki.jsonl...
total line: 100
total files: 10

隨后可在 pretrain_data 中找到對(duì)應(yīng)的 .jsonl.zst 壓縮文件(該路徑將在之后的訓(xùn)練中使用)。

1.2 數(shù)據(jù)源采樣比例(可選)

為了更好的進(jìn)行不同數(shù)據(jù)源的采樣,我們提供了按照預(yù)設(shè)比例進(jìn)行數(shù)據(jù)采樣的功能。

我們提供了一個(gè)可視化工具用于調(diào)整不同數(shù)據(jù)源之間的分布,在 根目錄 下使用以下命令啟動(dòng):

streamlit run utils/sampler_viewer/web.py --server.port 8001

隨后在瀏覽器中訪問(wèn) 機(jī)器IP:8001 即可打開平臺(tái)。

我們查看 data/shuffled_data/pretrain 下各數(shù)據(jù)的原始文件大?。?/p>

-rw-r--r--@ 1 xx  staff   253K Aug  2 16:38 MNBVC_news.jsonl
-rw-r--r--@ 1 xx  staff   121K Aug  2 16:38 MNBVC_qa.jsonl
-rw-r--r--@ 1 xx  staff   130K Aug  2 16:37 MNBVC_wiki.jsonl

并將文件大小按照格式貼到平臺(tái)中:

精進(jìn)語(yǔ)言模型:探索LLM Training微調(diào)與獎(jiǎng)勵(lì)模型技術(shù)的新途徑,NLP知識(shí)領(lǐng)域?qū)?語(yǔ)言模型,人工智能,自然語(yǔ)言處理,LLM,獎(jiǎng)勵(lì)模型,深度強(qiáng)化學(xué)習(xí),強(qiáng)化學(xué)習(xí)

調(diào)整完畢后,復(fù)制上圖右下角的最終比例,便于后續(xù)訓(xùn)練使用。

1.3 詞表擴(kuò)充(可選)

由于原始 Llama 的中文 token 很少,因此我們可以選擇對(duì)原有的 tokenizer 進(jìn)行詞表擴(kuò)充。

進(jìn)入到 utils 目錄:

cd utils

修改文件 train_tokenizer.py 中的訓(xùn)練數(shù)據(jù)(我們使用正式預(yù)訓(xùn)練訓(xùn)練數(shù)據(jù)集作為訓(xùn)練詞表的數(shù)據(jù)集):

...
dataset = {
    "MNBVC_news": "../data/pretrain_data/MNBVC_news/*.jsonl.zst",
    "MNBVC_qa": "../data/pretrain_data/MNBVC_qa/*.jsonl.zst",
    "MNBVC_wiki": "../data/pretrain_data/MNBVC_wiki/*.jsonl.zst",
}

執(zhí)行完 train_tokenizer.py 后,路徑下會(huì)出現(xiàn)訓(xùn)練好的模型 test_tokenizer.model。

隨后,我們將訓(xùn)練好的 model 和原本的 llama model 做融合:

python merge_tokenizer.py

你可以使用 這個(gè)工具 很方便的對(duì)合并好后的 tokenizer 進(jìn)行可視化。

1.4 平均初始化 extend token embedding(可選)

為了減小擴(kuò)展的 token embedding 隨機(jī)初始化帶來(lái)模型性能的影響,我們提供使用將新 token 在原 tokenizer 中的 sub-token embedding 的平均值做為初始化 embedding 的方法。

具體使用方法在 utils/extend_model_token_embeddings.py

1.5 正式訓(xùn)練

當(dāng)完成上述步驟后就可以開始正式進(jìn)行訓(xùn)練,使用以下命令啟動(dòng)訓(xùn)練:

sh train_llms.sh configs/accelerate_configs/ds_stage1.yaml \
    configs/pretrain_configs/llama.yaml \
    openlm-research/open_llama_7b_v2

多機(jī)多卡則啟動(dòng):

sh train_multi_node_reward_model.sh configs/accelerate_configs/ds_stage1.yaml \
    configs/pretrain_configs/llama.yaml \
    openlm-research/open_llama_7b_v2

注意,所有的訓(xùn)練配置都放在了第 2 個(gè)參數(shù) configs/pretrain_configs/llama.yaml 中,我們挑幾個(gè)重要的參數(shù)介紹。

  • tokenizer_path (str):tokenizer 加載路徑。

  • ckpt (str):初始 model 加載路徑。

  • sample_policy_file (str):數(shù)據(jù)源采樣配置文件,若不包含這一項(xiàng)則不進(jìn)行數(shù)據(jù)源采樣。

  • train_and_eval (bool):該參數(shù)決定了是否在訓(xùn)練中執(zhí)行評(píng)估函數(shù)。

  • img_log_dir (str):訓(xùn)練過(guò)程中的 log 圖存放目錄。

  • eval_methods (list):使用哪些評(píng)估函數(shù),包括:

    • single_choice_eval: 單選題正確率測(cè)試(如: C-Eval),評(píng)估數(shù)據(jù)格式參考 eval_data/knowledge/knowledge_and_reasoning.jsonl。

    • generation_eval: 生成測(cè)試,給定 prompt,測(cè)試模型生成能力,評(píng)估數(shù)據(jù)格式參考 eval_data/pretrain/generation_test.jsonl

  • work_dir (str):訓(xùn)練模型存放路徑。

  • save_total_limit (int):最多保存的模型個(gè)數(shù)(超過(guò)數(shù)目則刪除舊的模型)

2. 指令微調(diào)(Instruction Tuning)

我們準(zhǔn)備了部分 ShareGPT 的數(shù)據(jù)作為示例數(shù)據(jù),我們?nèi)耘f使用 OpenLlama 作為訓(xùn)練的基座模型。

2.1 數(shù)據(jù)壓縮

同預(yù)訓(xùn)練一樣,我們先進(jìn)入到 data 目錄:

cd data

找到目錄下的 compress_data.py, 在該文件中修改需要壓縮的數(shù)據(jù)路徑:

SHARD_SIZE = 10      # 單個(gè)文件存放樣本的數(shù)量, 示例中使用很小,真實(shí)訓(xùn)練可以酌情增大
...

def batch_compress_sft_data():
    """
    批量壓縮SFT數(shù)據(jù)。
    """
    source_path = 'shuffled_data/sft'
    target_path = 'sft_data'

    files = [
        'sharegpt'
    ]
    ...

if __name__ == '__main__':
    # batch_compress_preatrain_data()
    batch_compress_sft_data()

Notes: 上述的 files 可以在 shuffled_data/sft/ 中找到,是我們準(zhǔn)備的少量示例數(shù)據(jù),真實(shí)訓(xùn)練中請(qǐng)?zhí)鎿Q為完整數(shù)據(jù)。

data 路徑中執(zhí)行 python compress_data.py, 終端將顯示:

processed shuffled_data/sft/sharegpt.jsonl...
total line: 9637
total files: 964

隨后可在 sft_data 中找到對(duì)應(yīng)的 .jsonl.zst 壓縮文件(該路徑將在之后的訓(xùn)練中使用)。

2.2 特殊 token 擴(kuò)充

受到 ChatML 的啟發(fā),我們需要在原有的 tokenizer 中添加一些 special token 用于對(duì)話系統(tǒng)。

一種最簡(jiǎn)單的方式是在 tokenizer 路徑中找到 special_tokens_map.json 文件,并添加以下內(nèi)容:

{
    ...                                         # 需要添加的特殊 token
    "system_token": "<|system|>",               # system prompt
    "user_token": "<|user|>",                   # user token
    "assistant_token": "<|assistant|>",         # chat-bot token
    "chat_end_token": "<|endofchat|>"           # chat end token
}

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

當(dāng)完成上述步驟后就可以開始正式進(jìn)行訓(xùn)練,使用以下命令啟動(dòng)訓(xùn)練:

sh train_llms.sh configs/accelerate_configs/ds_stage1.yaml \
    configs/sft_configs/llama.yaml \
    openlm-research/open_llama_7b_v2

多機(jī)多卡則啟動(dòng):

sh train_multi_node_reward_model.sh configs/accelerate_configs/ds_stage1.yaml \
    configs/sft_configs/llama.yaml \
    openlm-research/open_llama_7b_v2

注意,所有的訓(xùn)練配置都放在了第 2 個(gè)參數(shù) configs/sft_configs/llama.yaml 中,我們挑幾個(gè)重要的參數(shù)介紹。

  • tokenizer_path (str):tokenizer 加載路徑。

  • ckpt (str):初始 model 加載路徑。

  • train_and_eval (bool):該參數(shù)決定了是否在訓(xùn)練中執(zhí)行評(píng)估函數(shù)。

  • img_log_dir (str):訓(xùn)練過(guò)程中的 log 圖存放目錄。

  • eval_methods (list):使用哪些評(píng)估函數(shù),包括:

    • generation_eval: 生成測(cè)試,給定 prompt,測(cè)試模型生成能力,評(píng)估數(shù)據(jù)格式參考 eval_data/sft/share_gpt_test.jsonl。

    • 暫無(wú)。

  • work_dir (str):訓(xùn)練模型存放路徑。

  • save_total_limit (int):最多保存的模型個(gè)數(shù)(超過(guò)數(shù)目則刪除舊的模型)

3. 獎(jiǎng)勵(lì)模型(Reward Model)

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

我們準(zhǔn)備 1000 條偏序?qū)ψ鳛槭纠?xùn)練數(shù)據(jù),其中 selected 為優(yōu)勢(shì)樣本,rejected 為劣勢(shì)樣本:

{
    "prompt": "下面是一條正面的評(píng)論:",
    "selected": "很好用,一瓶都用完了才來(lái)評(píng)價(jià)。",
    "rejected": "找了很久大小包裝都沒(méi)找到生產(chǎn)日期。上當(dāng)了。"
}

這個(gè)步驟不再需要數(shù)據(jù)壓縮,因此準(zhǔn)備好上述結(jié)構(gòu)的 .jsonl 文件即可。

3.2 RM 訓(xùn)練

當(dāng)完成上述步驟后就可以開始正式進(jìn)行訓(xùn)練,使用以下命令啟動(dòng)訓(xùn)練:

sh train_multi_node_reward_model.sh \
    configs/accelerate_configs/ds_stage1.yaml \
    configs/reward_model_configs/llama7b.yaml

注意,所有的訓(xùn)練配置都放在了第 2 個(gè)參數(shù) configs/reward_model_configs/llama.yaml 中,我們挑幾個(gè)重要的參數(shù)介紹。

  • tokenizer_path (str):tokenizer 加載路徑。

  • ckpt (str):初始 model 加載路徑。

  • train_and_eval (bool):該參數(shù)決定了是否在訓(xùn)練中執(zhí)行評(píng)估函數(shù)。

  • img_log_dir (str):訓(xùn)練過(guò)程中的 log 圖存放目錄。

  • test_reward_model_acc_files (list):acc 測(cè)試文件列表。

  • work_dir (str):訓(xùn)練模型存放路徑。

  • save_total_limit (int):最多保存的模型個(gè)數(shù)(超過(guò)數(shù)目則刪除舊的模型)

項(xiàng)目鏈接:https://github.com/HarderThenHarder/transformers_tasks/blob/main/LLM/LLMsTrainer/readme.md文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-668699.html

到了這里,關(guān)于精進(jìn)語(yǔ)言模型:探索LLM Training微調(diào)與獎(jiǎng)勵(lì)模型技術(shù)的新途徑的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(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)紅包