中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

學(xué)生做爰網(wǎng)站微信群推廣網(wǎng)站

學(xué)生做爰網(wǎng)站,微信群推廣網(wǎng)站,海門市建設(shè)局網(wǎng)站,蘇州找工作這篇博客是一篇來(lái)自 Meta AI,關(guān)于指令微調(diào) Llama 2 的擴(kuò)展說(shuō)明。旨在聚焦構(gòu)建指令數(shù)據(jù)集,有了它,我們則可以使用自己的指令來(lái)微調(diào) Llama 2 基礎(chǔ)模型。 目標(biāo)是構(gòu)建一個(gè)能夠基于輸入內(nèi)容來(lái)生成指令的模型。這么做背后的邏輯是,模型如…

這篇博客是一篇來(lái)自 Meta AI,關(guān)于指令微調(diào) Llama 2 的擴(kuò)展說(shuō)明。旨在聚焦構(gòu)建指令數(shù)據(jù)集,有了它,我們則可以使用自己的指令來(lái)微調(diào) Llama 2 基礎(chǔ)模型。

目標(biāo)是構(gòu)建一個(gè)能夠基于輸入內(nèi)容來(lái)生成指令的模型。這么做背后的邏輯是,模型如此就可以由其他人生成自己的指令數(shù)據(jù)集。這在當(dāng)想開發(fā)私人個(gè)性化定制模型,如發(fā)送推特、寫郵件等,時(shí)很方便。這也意味著你可以通過(guò)你的郵件來(lái)生成一個(gè)指令數(shù)據(jù)集,然后用它來(lái)訓(xùn)練一個(gè)模型來(lái)為你寫郵件。

好,那我們來(lái)開始吧?我們將進(jìn)行:

  1. 定義應(yīng)用場(chǎng)景細(xì)節(jié)并創(chuàng)建指令的提示詞模板

  2. 構(gòu)建指令數(shù)據(jù)集

  3. 使用 trlSFTTrainer 指令微調(diào) Llama 2

  4. 測(cè)試模型、進(jìn)行推理

1. 定義應(yīng)用場(chǎng)景細(xì)節(jié)并創(chuàng)建指令的提示詞模板

在描述應(yīng)用場(chǎng)景前,我們要更好的理解一下究竟什么是指令。

指令是一段文本或提供給大語(yǔ)言模型,類似 Llama,GPT-4 或 Claude,使用的提示詞,用來(lái)指導(dǎo)它去生成回復(fù)。指令可以讓人們做到把控對(duì)話,約束模型輸出更自然、實(shí)用的輸出,并使這些結(jié)果能夠?qū)R用戶的目的。制作清晰的、整潔的指令則是生成高質(zhì)量對(duì)話的關(guān)鍵。

指令的例子如下表所示。

能力示例指令
頭腦風(fēng)暴提供一系列新口味的冰淇淋的創(chuàng)意。
分類根據(jù)劇情概要,將這些電影歸類為喜劇、戲劇或恐怖片。
確定性問(wèn)答用一個(gè)單詞回答“法國(guó)的首都是哪里?”
生成用羅伯特·弗羅斯特的風(fēng)格寫一首關(guān)于大自然和季節(jié)變化的詩(shī)。
信息提取從這篇短文中提取主要人物的名字。
開放性問(wèn)答為什么樹葉在秋天會(huì)變色?用科學(xué)的理由解釋一下。
摘要用 2-3 句話概括一下這篇關(guān)于可再生能源最新進(jìn)展的文章。

如開頭所述,我們想要微調(diào)模型,以便根據(jù)輸入 (或輸出) 生成指令。我們希望將其用作創(chuàng)建合成數(shù)據(jù)集的方法,以賦予 LLM 和代理個(gè)性化能力。

把這個(gè)想法轉(zhuǎn)換成一個(gè)基礎(chǔ)的提示模板,按照 Alpaca 格式.

###?Instruction:
Use?the?Input?below?to?create?an?instruction,?which?could?have?been?used?to?generate?the?input?using?an?LLM.?###?Input:
Dear?[boss?name],I'm?writing?to?request?next?week,?August?1st?through?August?4th,
off?as?paid?time?off.I?have?some?personal?matters?to?attend?to?that?week?that?require?
me?to?be?out?of?the?office.?I?wanted?to?give?you?as?much?advance?
notice?as?possible?so?you?can?plan?accordingly?while?I?am?away.Please?let?me?know?if?you?need?any?additional?information?from?me?
or?have?any?concerns?with?me?taking?next?week?off.?I?appreciate?you?
considering?this?request.Thank?you,?[Your?name]###?Response:
Write?an?email?to?my?boss?that?I?need?next?week?08/01?-?08/04?off.

2. 創(chuàng)建指令數(shù)據(jù)集

在定義了我們的應(yīng)用場(chǎng)景和提示模板后,我們需要?jiǎng)?chuàng)建自己的指令數(shù)據(jù)集。創(chuàng)建高質(zhì)量的指令數(shù)據(jù)集是獲得良好模型性能的關(guān)鍵。研究表明,“對(duì)齊,越少越好” 表明,創(chuàng)建高質(zhì)量、低數(shù)量 (大約 1000 個(gè)樣本) 的數(shù)據(jù)集可以達(dá)到與低質(zhì)量、高數(shù)量的數(shù)據(jù)集相同的性能。

創(chuàng)建指令數(shù)據(jù)集有幾種方法,包括:

  1. 使用現(xiàn)有數(shù)據(jù)集并將其轉(zhuǎn)換為指令數(shù)據(jù)集,例如 FLAN

  2. 使用現(xiàn)有的 LLM 創(chuàng)建合成指令數(shù)據(jù)集,例如 Alpaca

  3. 人力創(chuàng)建指令數(shù)據(jù)集,例如 Dolly。

每種方法都有其優(yōu)缺點(diǎn),這取決于預(yù)算、時(shí)間和質(zhì)量要求。例如,使用現(xiàn)有數(shù)據(jù)集是最簡(jiǎn)單的,但可能不適合您的特定用例,而使用人力可能是最準(zhǔn)確的,但必然耗時(shí)、昂貴。也可以結(jié)合幾種不同方法來(lái)創(chuàng)建指令數(shù)據(jù)集,如 Orca: Progressive Learning from Complex Explanation Traces of GPT-4.。

為了簡(jiǎn)單起見(jiàn),我們將使用 **Dolly**,這是一個(gè)開源的指令跟蹤記錄數(shù)據(jù)集,由數(shù)千名 Databricks 員工在 InstructGPT paper 中描述的幾個(gè)行為類別中生成,包括頭腦風(fēng)暴、分類、確定性回答、生成、信息提取、開放性回答和摘要。

開始編程吧,首先,我們來(lái)安裝依賴項(xiàng)。

!pip?install?"transformers==4.31.0"?"datasets==2.13.0"?"peft==0.4.0"?"accelerate==0.21.0"?"bitsandbytes==0.40.2"?"trl==0.4.7"?"safetensors>=0.3.1"?--upgrade

我們使用 🤗 Datasets library 的 load_dataset() 方法加載 databricks/databricks-dolly-15k?數(shù)據(jù)集。

from?datasets?import?load_dataset
from?random?import?randrange#?從hub加載數(shù)據(jù)集
dataset?=?load_dataset("databricks/databricks-dolly-15k",?split="train")print(f"dataset?size:?{len(dataset)}")
print(dataset[randrange(len(dataset))])
#?dataset?size:?15011

為了指導(dǎo)我們的模型,我們需要將我們的結(jié)構(gòu)化示例轉(zhuǎn)換為通過(guò)指令描述的任務(wù)集合。我們定義一個(gè) formatting_function ,它接受一個(gè)樣本并返回一個(gè)符合格式指令的字符串。

def?format_instruction(sample):return?f"""###?Instruction:
Use?the?Input?below?to?create?an?instruction,?which?could?have?been?used?to?generate?the?input?using?an?LLM.?###?Input:
{sample['response']}###?Response:
{sample['instruction']}
"""

我們來(lái)在一個(gè)隨機(jī)的例子上測(cè)試一下我們的結(jié)構(gòu)化函數(shù)。

from?random?import?randrangeprint(format_instruction(dataset[randrange(len(dataset))]))

3. 使用 trlSFTTrainer 指令微調(diào) Llama 2

我們將使用最近在由 Tim Dettmers 等人的發(fā)表的論文“QLoRA: Quantization-aware Low-Rank Adapter Tuning for Language Generation”中介紹的方法。QLoRA 是一種新的技術(shù),用于在微調(diào)期間減少大型語(yǔ)言模型的內(nèi)存占用,且并不會(huì)降低性能。QLoRA 的 TL;DR; 是這樣工作的:

  • 將預(yù)訓(xùn)練模型量化為 4bit 位并凍結(jié)它。

  • 附加輕量化的、可訓(xùn)練的適配器層。(LoRA)

  • 在使用凍結(jié)的量化模型基于文本內(nèi)容進(jìn)行微調(diào)時(shí),僅微調(diào)適配器層參數(shù)。

如果您想了解有關(guān) QLoRA 及其工作原理的更多信息,我建議您閱讀 Making LLMs even more accessible with bitsandbytes, 4-bit quantization and QLoRA 博客文章。

Flash Attention (快速注意力)

Flash Attention 是一種經(jīng)過(guò)重新排序的注意力計(jì)算方法,它利用經(jīng)典技術(shù) (排列、重計(jì)算) 來(lái)顯著加快速度,將序列長(zhǎng)度的內(nèi)存使用量從二次降低到線性。它基于論文“FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness”。

TL;DR; 將訓(xùn)練加速了 3 倍。在這兒獲得更多信息 FlashAttention。Flash Attention 目前僅支持 Ampere (A10, A40, A100, …) & Hopper (H100, …) GPU。你可以檢查一下你的 GPU 是否支持,并用下面的命令來(lái)安裝它:

注意: 如果您的機(jī)器的內(nèi)存小于 96GB,而 CPU 核心數(shù)足夠多,請(qǐng)減少 MAX_JOBS 的數(shù)量。在我們使用的 g5.2xlarge 上,我們使用了 4

python?-c?"import?torch;?assert?torch.cuda.get_device_capability()[0]?>=?8,?'Hardware?not?supported?for?Flash?Attention'"
pip?install?ninja?packaging
MAX_JOBS=4?pip?install?flash-attn?--no-build-isolation

_安裝 flash attention 是會(huì)需要一些時(shí)間 (10-45 分鐘)_。

該示例支持對(duì)所有 Llama 檢查點(diǎn)使用 Flash Attention,但默認(rèn)是未啟用的。要開啟 Flash Attention,請(qǐng)取消代碼塊中這段的注釋, # COMMENT IN TO USE FLASH ATTENTION 。

import?torch
from?transformers?import?AutoTokenizer,?AutoModelForCausalLM,?BitsAndBytesConfiguse_flash_attention?=?False#?COMMENT?IN?TO?USE?FLASH?ATTENTION
#?replace?attention?with?flash?attention?
#?if?torch.cuda.get_device_capability()[0]?>=?8:
#?????from?utils.llama_patch?import?replace_attn_with_flash_attn
#?????print("Using?flash?attention")
#?????replace_attn_with_flash_attn()
#?????use_flash_attention?=?True#?Hugging?Face?模型id
model_id?=?"NousResearch/Llama-2-7b-hf"?#?non-gated
#?model_id?=?"meta-llama/Llama-2-7b-hf"?#?gated#?BitsAndBytesConfig?int-4?config?
bnb_config?=?BitsAndBytesConfig(load_in_4bit=True,bnb_4bit_use_double_quant=True,bnb_4bit_quant_type="nf4",bnb_4bit_compute_dtype=torch.bfloat16
)#?加載模型與分詞器
model?=?AutoModelForCausalLM.from_pretrained(model_id,?quantization_config=bnb_config,?use_cache=False,?device_map="auto")
model.config.pretraining_tp?=?1?#?通過(guò)對(duì)比doc中的字符串,驗(yàn)證模型是在使用flash?attention
if?use_flash_attention:from?utils.llama_patch?import?forward????assert?model.model.layers[0].self_attn.forward.__doc__?==?forward.__doc__,?"Model?is?not?using?flash?attention"tokenizer?=?AutoTokenizer.from_pretrained(model_id)
tokenizer.pad_token?=?tokenizer.eos_token
tokenizer.padding_side?=?"right"

SFTTrainer 支持與 peft 的本地集成,這使得高效地指令微調(diào)LLM變得非常容易。我們只需要?jiǎng)?chuàng)建 LoRAConfig 并將其提供給訓(xùn)練器。

from?peft?import?LoraConfig,?prepare_model_for_kbit_training,?get_peft_model#?基于?QLoRA?論文來(lái)配置?LoRA
peft_config?=?LoraConfig(lora_alpha=16,lora_dropout=0.1,r=64,bias="none",task_type="CAUSAL_LM",?
)#?為訓(xùn)練準(zhǔn)備好模型
model?=?prepare_model_for_kbit_training(model)
model?=?get_peft_model(model,?peft_config)

在開始訓(xùn)練之前,我們需要定義自己想要的超參數(shù) (TrainingArguments)。

from?transformers?import?TrainingArgumentsargs?=?TrainingArguments(output_dir="llama-7-int4-dolly",num_train_epochs=3,per_device_train_batch_size=6?if?use_flash_attention?else?4,gradient_accumulation_steps=2,gradient_checkpointing=True,optim="paged_adamw_32bit",logging_steps=10,save_strategy="epoch",learning_rate=2e-4,bf16=True,tf32=True,max_grad_norm=0.3,warmup_ratio=0.03,lr_scheduler_type="constant",disable_tqdm=True?#?當(dāng)配置的參數(shù)都正確后可以關(guān)閉tqdm
)

我們現(xiàn)在有了用來(lái)訓(xùn)練模型 SFTTrainer 所需要準(zhǔn)備的每一個(gè)模塊。

from?trl?import?SFTTrainermax_seq_length?=?2048?#?數(shù)據(jù)集的最大長(zhǎng)度序列trainer?=?SFTTrainer(model=model,train_dataset=dataset,peft_config=peft_config,max_seq_length=max_seq_length,tokenizer=tokenizer,packing=True,formatting_func=format_instruction,?args=args,
)

通過(guò)調(diào)用 Trainer 實(shí)例上的 train() 方法來(lái)訓(xùn)練我們的模型。

#?訓(xùn)練
trainer.train()?#?tqdm關(guān)閉后將不顯示進(jìn)度條信息#?保存模型
trainer.save_model()

不使用 Flash Attention 的訓(xùn)練過(guò)程在 g5.2xlarge 上花費(fèi)了 03:08:00。實(shí)例的成本為 1,212$/h ,總成本為 3.7$ 。

使用 Flash Attention 的訓(xùn)練過(guò)程在 g5.2xlarge 上花費(fèi)了 02:08:00。實(shí)例的成本為 1,212$/h ,總成本為 2.6$

使用 Flash Attention 的結(jié)果令人滿意,速度提高了 1.5 倍,成本降低了 30%。

4. 測(cè)試模型、進(jìn)行推理

在訓(xùn)練完成后,我們想要運(yùn)行和測(cè)試模型。我們會(huì)使用 pefttransformers 將 LoRA 適配器加載到模型中。

if?use_flash_attention:#?停止?flash?attentionfrom?utils.llama_patch?import?unplace_flash_attn_with_attnunplace_flash_attn_with_attn()import?torch
from?peft?import?AutoPeftModelForCausalLM
from?transformers?import?AutoTokenizerargs.output_dir?=?"llama-7-int4-dolly"#?加載基礎(chǔ)LLM模型與分詞器
model?=?AutoPeftModelForCausalLM.from_pretrained(args.output_dir,low_cpu_mem_usage=True,torch_dtype=torch.float16,load_in_4bit=True,
)?
tokenizer?=?AutoTokenizer.from_pretrained(args.output_dir)

我們來(lái)再次用隨機(jī)樣本加載一次數(shù)據(jù)集,試著來(lái)生成一條指令。

from?datasets?import?load_dataset?
from?random?import?randrange#?從hub加載數(shù)據(jù)集并得到一個(gè)樣本
dataset?=?load_dataset("databricks/databricks-dolly-15k",?split="train")
sample?=?dataset[randrange(len(dataset))]prompt?=?f"""###?Instruction:
Use?the?Input?below?to?create?an?instruction,?which?could?have?been?used?to?generate?the?input?using?an?LLM.?###?Input:
{sample['response']}###?Response:
"""input_ids?=?tokenizer(prompt,?return_tensors="pt",?truncation=True).input_ids.cuda()
#?with?torch.inference_mode():
outputs?=?model.generate(input_ids=input_ids,?max_new_tokens=100,?do_sample=True,?top_p=0.9,temperature=0.9)print(f"Prompt:\n{sample['response']}\n")
print(f"Generated?instruction:\n{tokenizer.batch_decode(outputs.detach().cpu().numpy(),?skip_special_tokens=True)[0][len(prompt):]}")
print(f"Ground?truth:\n{sample['instruction']}")

太好了!我們的模型可以工作了!如果想要加速我們的模型,我們可以使用 Text Generation Inference 部署它。因此我們需要將我們適配器的參數(shù)合并到基礎(chǔ)模型中去。

from?peft?import?AutoPeftModelForCausalLMmodel?=?AutoPeftModelForCausalLM.from_pretrained(args.output_dir,low_cpu_mem_usage=True,
)?#?合并?LoRA?與?base?model
merged_model?=?model.merge_and_unload()#?保存合并后的模型
merged_model.save_pretrained("merged_model",safe_serialization=True)
tokenizer.save_pretrained("merged_model")#?push合并的模型到hub上
#?merged_model.push_to_hub("user/repo")
#?tokenizer.push_to_hub("user/repo")

原文作者: Philschmid

原文鏈接:?https://www.philschmid.de/instruction-tune-llama-2

譯者: Xu Haoran

http://www.risenshineclean.com/news/37336.html

相關(guān)文章:

  • 專業(yè)鄭州做網(wǎng)站的公司今日國(guó)家新聞
  • 動(dòng)態(tài)網(wǎng)站開發(fā)結(jié)束語(yǔ)東莞優(yōu)化怎么做seo
  • 彩票網(wǎng)站建設(shè)方案看網(wǎng)站時(shí)的關(guān)鍵詞
  • 百度競(jìng)價(jià) 十一 pc網(wǎng)站 手機(jī)網(wǎng)站seo技術(shù)團(tuán)隊(duì)
  • 岳陽(yáng)市委網(wǎng)站免費(fèi)seo網(wǎng)站推廣在線觀看
  • 湛江網(wǎng)站設(shè)計(jì)模板視頻500個(gè)游戲推廣群
  • 網(wǎng)站互動(dòng)營(yíng)銷成人編程培訓(xùn)機(jī)構(gòu)排名前十
  • 融資是什么意思株洲seo優(yōu)化報(bào)價(jià)
  • 馬云1688網(wǎng)站在濮陽(yáng)如何做圖片外鏈在線生成
  • 大型b2c網(wǎng)站開發(fā)百度推廣app下載官方
  • 怎么做領(lǐng)券網(wǎng)站上海知名seo公司
  • 電腦做網(wǎng)站電腦編程百度指數(shù)怎么提升
  • 手機(jī)視頻網(wǎng)站怎么做保定seo推廣公司
  • 尚云網(wǎng)站建設(shè)廣東網(wǎng)約車漲價(jià)
  • 可以做書的網(wǎng)站湘潭seo優(yōu)化
  • 網(wǎng)站建設(shè) 加強(qiáng)宣傳百度開戶資質(zhì)
  • 昆明網(wǎng)站建設(shè)_云南網(wǎng)站建設(shè)網(wǎng)頁(yè)設(shè)計(jì)制作
  • 服務(wù)器做兩個(gè)網(wǎng)站電視劇排行榜百度搜索風(fēng)云榜
  • 做網(wǎng)站需要哪些知識(shí)論述搜索引擎優(yōu)化的具體措施
  • asp網(wǎng)站建設(shè)實(shí)驗(yàn)設(shè)計(jì)推廣軟文是什么意思
  • 論述制作網(wǎng)站的一般過(guò)程百度移動(dòng)端關(guān)鍵詞優(yōu)化
  • title wordpress企業(yè)站seo價(jià)格
  • 網(wǎng)站建設(shè)包含哪些內(nèi)容巨量算數(shù)數(shù)據(jù)分析入口
  • 服務(wù)器網(wǎng)站部署嘉興網(wǎng)絡(luò)推廣
  • 好創(chuàng)意的設(shè)計(jì)網(wǎng)站最大免費(fèi)廣告發(fā)布平臺(tái)
  • 找人做網(wǎng)站排名優(yōu)化山西seo排名廠家
  • 網(wǎng)站開發(fā)的著作權(quán)和版權(quán)進(jìn)一步優(yōu)化落實(shí)
  • 教育網(wǎng)站賞析seo網(wǎng)站分析報(bào)告
  • 西安網(wǎng)站優(yōu)化百度seo推廣軟件
  • 英國(guó)有哪些做折扣的網(wǎng)站有哪些seo外包顧問(wèn)