--data_path Dahoas/rm-static \
--model_name_or_path bigscience/bloomz-560m \
--gradient_accumulation_steps 8 --lora_dim 128 --zero_stage $ZERO_STAGE \
--per_device_train_batch_size 8 --per_device_eval_batch_size 8 \
--deepspeed --output_dir $OUTPUT 2>&1 | tee $OUTPUT/training.log

注:以上設置顯存占用約30G, 你可以調整 per_device_train_batch_size 和 per_device_eval_batch_size 來降低顯存的使用。

模型導入可以分為三個部分:

詳細的實現細節,可以參考下面的代碼。

from utils.model.model_utils import create_hf_model
tokenizer = AutoTokenizer.from_pretrained(args.model_name_or_path,
fast_tokenizer=True)
model = create_hf_model(AutoModelForCausalLM,
args.model_name_or_path,
tokenizer,
ds_config,
disable_dropout=args.disable_dropout)

create_hf_model函數的實現代碼如下:

def create_hf_model(model_class,
model_name_or_path,
tokenizer,
ds_config=None,
rlhf_training=False,
disable_dropout=False):
model_config = AutoConfig.from_pretrained(model_name_or_path)
if disable_dropout:
model_config.dropout = 0.0
# Note: dschf is defined in function scope to avoid global effects
# https://huggingface.co/docs/transformers/main_classes/deepspeed#nontrainer-deepspeed-integration
if ds_config is not None and ds_config["zero_optimization"]["stage"] == 3:
dschf = HfDeepSpeedConfig(ds_config)
else:
dschf = None
if rlhf_training:
# the weight loading is handled by create critic model
model = model_class.from_config(model_config)
else:
model = model_class.from_pretrained(
model_name_or_path,
from_tf=bool(".ckpt" in model_name_or_path),
config=model_config)

model.config.end_token_id = tokenizer.eos_token_id
model.config.pad_token_id = model.config.eos_token_id
model.resize_token_embeddings(int(8 *math.ceil(len(tokenizer) / 8.0)))
# make the vocab size multiple of 8

return model

使用 BLOOMZ 系列模型時,不需要修改任何模型導入代碼。但在使用其他模型,例如 GLM 時,DS-Chat 無法直接導入模型,這時需要對上述代碼進行調整。

常見問題:

3、替換數據

針對大型模型的一個重要開發工作是使用特定任務的數據對模型進行進一步優化。通常情況下,使用相關任務的數據進行優化的模型會在目標任務上表現更好。在 DS-Chat 工具中使用自己的數據進行模型訓練可以分為以下三個步驟:

  1. 準備數據,并按照一定的格式整理數據,例如使用 JSON 格式。
  2. 修改 data_utils.py 和 raw_datasets.py 的代碼,以添加對新數據的支持。
  3. 在訓練 shell 腳本中設置使用新數據,并開始模型訓練。

3.1 如何準備數據

在準備數據之前,首先需要了解模型訓練時所需的數據格式。我們可以通過查看 raw_datasets.py 代碼來了解訓練時使用的數據格式。以下是代碼中實現的其中一種類型數據讀取的示例:

class HelloSimpleAIHC3ChineseDataset(PromptRawDataset):
def get_prompt(self, sample):
if sample['question'] is not None:
return " Human: " + sample['question'] + " Assistant:"
return None

def get_chosen(self, sample):
if sample['human_answers'][0] is not None:
return " " + sample['human_answers'][0]
return None

def get_prompt_and_chosen(self, sample):
if sample['question'] is not None and sample['human_answers'][
0] is not None:
return " Human: " + sample['question'] + " Assistant: " + sample[
'human_answers'][0]
return None

def get_rejected(self, sample):
...
def get_prompt_and_rejected(self, sample):
...

通過上面的代碼,我們可以看到,此數據中共有三種數據格式:prompt、answer、rejected,以及它們的組合:prompt+answer 和 prompt+rejected。因此,訓練數據最基本的內容是 prompt、answer 和 rejected。

然后,我們可以在 data_utils.py 文件中第 141 行的部分了解到:

LLMZoo模型中模型的訓練類似 Stage 1,所以,你需要準備的數據只需包含 prompt 和 answer 即可。

為了便于數據讀取,我對 phoenix-sft-data-v1 數據進行格式轉換,下面是其數據的 JSON 示例:

[
{
"id": "0",
"type": "Instruction",
"from_human": "假設你是一位Airbnb房主。... \n",
"from_gpt": "很抱歉,作為AI語言模型,我無法檢查您的Airbnb列表。"
},
{
"id": "1",
"type": "Instruction",
"from_human": "假設你是一位翻譯。... \n",
"from_gpt": "\"Al dente\" means cooking the ..."
}
]

其中,from_human 為 prompt,而 from_gpt 為 answer。接下來,如果你有自己的數據,就可以按照上述格式來準備數據了。

3.2 修改代碼讀取數據

接下來,我們將介紹如何修改代碼以讀取自定義數據。DS-Chat 中提供了多種格式的數據讀取方式,你可以選擇與自己數據格式相似的數據讀取類進行修改。或者直接選擇其中一個格式,并按照其格式準備數據,這樣可以減少代碼修改量。

代碼修改包括(修改過程請參考視頻):

模型訓練過程中,會通過數據庫名稱,在 data_utils.py 中調用數據的讀取類,來初始化數據讀取對象。然后在 raw_datasets.py 文件中,第一次調用 load_dataset 時,load_dataset 會將 JSON 文件轉換為 arrow 格式,并緩存到 cache_dir 目錄下。在下次再次讀取數據時,會直接讀取緩存的 arrow 文件。

注意事項:
如果是使用分布式訓練時,建議先使用單 GPU 進程對數據部分進行緩存處理,因為在分布式訓練時,多進程對數據進行緩存可能會出現錯誤,尤其是在數據量比較大的情況下。

另外要注意,DS-Chat 會對數據進行第二次的本機數據緩存處理,這可能會額外占用你的硬盤存儲空間。并且這種方法在數據量比較大時,也會導致內存消耗過大的問題。目前官方正在解決中,具體信息可以參考下面的鏈接。在學習階段,你可以使用少量樣本,或者使用多 GPU 訓練的方式來緩解此問題。
https://github.com/microsoft/DeepSpeedExamples/issues/450

數據調用流程
接下來,我給出了代碼修改的過程。在修改代碼時,你可以參考以下的調用過程進行修改。

- File: step1_supervised_finetuning/main.py: 
- Line 224 (train_dataset, eval_dataset = create_prompt_dataset()
- File: /training/utils/data/data_utils.py
- Line 268: train_dataset, eval_dataset = create_dataset()
- Line 212: raw_dataset = get_raw_dataset()
- Line 20:def get_raw_dataset():
return raw_datasets.Wangrui6ZhihuKOLDataset()
- File: training/utils/data/raw_datasets.py
- Line 307: class Wangrui6ZhihuKOLDataset(PromptRawDataset)

- Line 220: train_dataset = create_dataset_split()
- Line 141: if train_phase == 1:
chosen_sentence = raw_dataset.get_prompt_and_chosen()

常見問題

參考文獻

文章轉載自: DeepSpeed-Chat 模型與數據

熱門推薦
一個賬號試用1000+ API
助力AI無縫鏈接物理世界 · 無需多次注冊
3000+提示詞助力AI大模型
和專業工程師共享工作效率翻倍的秘密
返回頂部
上一篇
使用AI進行API設計
下一篇
基于阿里QoderAPI實現實時崗位解讀文生圖信息圖生成
国内精品久久久久影院日本,日本中文字幕视频,99久久精品99999久久,又粗又大又黄又硬又爽毛片
国产精品热久久久久夜色精品三区 | 国产91高潮流白浆在线麻豆 | 日本韩国一区二区| 欧美精品一区二区三区在线播放 | 亚洲最大的成人av| 欧美日免费三级在线| 免费成人你懂的| 国产亚洲欧美一区在线观看| 亚洲一卡二卡三卡四卡| 99国产一区二区三精品乱码| 久久久精品tv| 激情五月婷婷综合网| 久久久久久久久久久久久女国产乱| 国产丝袜美腿一区二区三区| 国产在线国偷精品产拍免费yy| 国产a级毛片一区| 国产欧美一区二区三区在线老狼| 亚洲柠檬福利资源导航| 欧美日韩成人在线| 欧美性受xxxx黑人xyx| 亚洲.国产.中文慕字在线| 欧美人与z0zoxxxx视频| 亚洲国产婷婷综合在线精品| 亚洲精品一区在线观看| 在线综合亚洲欧美在线视频| 欧美亚洲综合久久| 欧美日韩高清一区二区| 成人一区二区三区中文字幕| 最新欧美精品一区二区三区| 精品日韩一区二区| 天天综合色天天综合| 国产欧美一区二区精品久导航| 欧美电影免费观看高清完整版在线| 91精彩视频在线观看| 884aa四虎影成人精品一区| 成人午夜免费av| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 久久99精品国产91久久来源| 国产精品自拍在线| 在线免费观看日韩欧美| 91成人国产精品| 日韩视频中午一区| 欧美电影免费观看高清完整版在线 | 中文字幕一区二区三区四区| 欧美高清一级片在线观看| 中文字幕亚洲区| 色综合av在线| 欧美一级在线免费| 亚洲综合在线第一页| 国产成人三级在线观看| 欧美日韩在线播放一区| 国产精品伦一区| 国产成+人+日韩+欧美+亚洲| 中文字幕在线不卡一区| 欧美日韩色综合| 麻豆国产精品一区二区三区| 97精品国产露脸对白| 欧美一区二区国产| 一区二区三区国产精华| 一本色道久久综合亚洲91 | 欧美专区日韩专区| 日韩欧美中文字幕一区| 国产精品国产自产拍在线| 日韩精品一级二级| 久久综合资源网| 91精品国产乱| 1024国产精品| av在线不卡电影| 一区二区三区色| 国产欧美视频在线观看| 亚洲综合无码一区二区| 91麻豆国产香蕉久久精品| 国产欧美一区二区在线| 91丨porny丨国产| 精品久久久久久无| 成人黄色一级视频| 国产精品免费人成网站| www.一区二区| 久久精品免费看| 亚洲视频香蕉人妖| 在线电影国产精品| 国产不卡免费视频| 亚洲欧美另类图片小说| 91啦中文在线观看| 久草热8精品视频在线观看| 奇米影视一区二区三区| 依依成人精品视频| 99国内精品久久| 三级久久三级久久| 欧美精品xxxxbbbb| 欧美精品视频www在线观看| 九九精品一区二区| 国产精品99久久不卡二区| 亚洲午夜精品一区二区三区他趣| 不卡的av电影| 成人小视频在线观看| 色天天综合色天天久久| 国产不卡免费视频| 99在线视频精品| 91成人在线观看喷潮| 日韩欧美高清dvd碟片| 国产亚洲精品aa午夜观看| 亚洲精品水蜜桃| 成人91在线观看| 91在线国产福利| 欧美精品久久久久久久多人混战 | 一色屋精品亚洲香蕉网站| 一区二区三区欧美激情| 国产福利一区二区三区视频在线 | 国产成人精品午夜视频免费| 欧美日韩精品三区| 亚洲不卡av一区二区三区| 欧美aaaaaa午夜精品| 欧美性xxxxx极品少妇| 免费久久精品视频| 国产精品水嫩水嫩| 在线看日韩精品电影| 成人免费av网站| 精品一区二区三区影院在线午夜| 国产精品国产三级国产专播品爱网| 欧洲av一区二区嗯嗯嗯啊| 久久成人久久爱| 国产亚洲女人久久久久毛片| 成人动漫视频在线| 久久久www成人免费毛片麻豆| 麻豆中文一区二区| 中文字幕va一区二区三区| 亚洲精品一区二区三区99 | 国产精品欧美久久久久无广告 | 久草中文综合在线| 九色porny丨国产精品| 精品一区二区三区免费毛片爱 | 在线观看亚洲精品视频| 欧美日韩一区二区三区视频| 久久色视频免费观看| 国产精品麻豆欧美日韩ww| 中文字幕字幕中文在线中不卡视频| 久久久久久99久久久精品网站| 亚洲国产成人在线| 日韩三区在线观看| 国产精品三级视频| 久久久久久久久岛国免费| 国产精品国产三级国产普通话三级| 久久久精品人体av艺术| 欧美极品aⅴ影院| 日韩av在线播放中文字幕| 免费av网站大全久久| 国产精品夜夜爽| 欧美在线观看视频一区二区三区| 日韩欧美一卡二卡| 免费在线观看精品| 欧美麻豆精品久久久久久| 亚洲精品国产视频| 色噜噜狠狠色综合中国| 欧美国产禁国产网站cc| av亚洲产国偷v产偷v自拍| 亚洲欧洲精品成人久久奇米网| 色噜噜狠狠色综合中国| 美女视频一区在线观看| 国产精品三级久久久久三级| 欧美mv日韩mv国产网站| 欧美色图一区二区三区| a4yy欧美一区二区三区| 日韩三级高清在线| 26uuu欧美日本| 亚洲欧美偷拍三级| 亚洲成人先锋电影| 欧美亚洲综合一区| 亚洲天天做日日做天天谢日日欢| 亚洲视频在线一区| 日韩福利电影在线| 99久久精品国产一区二区三区| 国产欧美一区二区精品秋霞影院| 精品国产一区二区三区不卡 | 日日夜夜免费精品视频| 欧美亚洲综合色| 日韩激情一区二区| 欧美一区二区三区爱爱| 亚洲va在线va天堂| 欧美一二三四区在线| 婷婷六月综合亚洲| 国产视频亚洲色图| 91在线观看视频| 国产成人丝袜美腿| 亚洲黄色av一区| 91精品麻豆日日躁夜夜躁| 国产精品18久久久久久久网站| 精品日韩成人av| 色哟哟精品一区| 风间由美一区二区av101| 午夜久久福利影院| 久久色在线视频| 欧美视频自拍偷拍| 国产成人无遮挡在线视频| 轻轻草成人在线| 亚洲免费观看高清完整版在线观看熊 | av成人免费在线| 99久久久国产精品| 福利一区福利二区| 欧美性大战xxxxx久久久|