第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

參數(shù)高效微調(diào)PEFT(一)快速入門(mén)BitFit、Prompt Tuning、Prefix Tuning —— peft教程與實(shí)踐

標(biāo)簽:
雜七雜八

概述

PEFT高效调参项目实战是一系列技术文章,旨在提升深度学习领域中预训练语言模型的参数效率。本文介绍了参数高效微调(PEFT)技术,针对预训练语言模型结合下游任务进行微调时遇到的算力需求高、存储成本大及模型多样性损失问题,PEFT技术通过微调模型的一小部分参数,达到提升模型性能的目的,同时显著降低计算和存储成本。文章通过全量微调Bloom模型生成式问答机器人的案例,展示如何使用PEFT方法,如BitFit和Prefix Tuning等,实现轻量级微调。同时,文章还讨论了BitFit方法的原理与实现,以及如何通过Prefix Tuning适应不同任务需求,提供了详细的代码示例和步骤说明,帮助读者理解并实践PEFT技术在实际项目中的应用。此实战指南为NLP领域在模型微调方向提供了高效且实用的方法,推动了技术在实际场景中的落地与优化。

2. 全量微调Bloom模型:生成式问答机器人案例

2.1 生成式问答机器人概述

生成式问答机器人需要模型能够根据输入的指令生成相应的答案。以Bloom模型为例,该模型是澜舟科技开源的预训练生成模型,特别适用于中文任务。

2.1.1 加载数据集与预处理优化

首先,加载问题-答案对数据集,并进行预处理,包括指令、输入文本和期望输出的整合以及特殊标记符的添加:

from datasets import Dataset
from transformers import AutoTokenizer, AutoModelForCausalLM

ds = Dataset.load_from_disk("alpaca_data_zh")
ds = ds.map(lambda x: {'instruction': x['instruction'], 'input': x['input'], 'output': x['output']}, remove_columns=ds.column_names)
ds = ds.map(lambda x: {'text': f'Human: {x["instruction"]} Human: {x["input"]} Assistant: {x["output"]}'}, remove_columns=['instruction', 'input'])
tokenizer = AutoTokenizer.from_pretrained("langboat/bloom-389m-zh")
ds = ds.map(lambda x: tokenizer(x["text"], truncation=True, max_length=256, padding="max_length", return_tensors="pt"), batched=True)
ds.set_format("torch", columns=["input_ids", "attention_mask"])

2.1.2 创建模型与配置训练器

接着,使用预处理后的数据集创建模型,并配置训练参数和训练器:

model = AutoModelForCausalLM.from_pretrained("langboat/bloom-389m-zh")
tokenizer = AutoTokenizer.from_pretrained("langboat/bloom-389m-zh")
args = TrainingArguments(
    output_dir="./chatbot", 
    per_device_train_batch_size=1, 
    logging_steps=100, 
    num_train_epochs=1
)
trainer = Trainer(
    model=model, 
    args=args, 
    train_dataset=ds, 
    data_collator=DataCollatorForLanguageModeling(tokenizer=tokenizer, mlm=False)
)

2.1.3 模型训练及推理

训练模型并进行推理,验证模型性能:

trainer.train()
pipe = pipeline("text-generation", model=model, tokenizer=tokenizer, device=0)
input = "Human: 考试有哪些技巧?\n"
predictions = pipe(input, max_length=256, do_sample=True)

3. BitFit概述与轻量微调Bloom模型实现

3.1 BitFit方法概述与原理

BitFit通过在Bert模型中仅更新bias参数或部分bias参数,实现微调过程中的参数效率。这种方法显著减少了训练所需资源,同时保持了模型性能。

3.2 BitFit在Bloom模型中的实现

考虑到Bloom模型的特性,我们进行如下步骤实现BitFit方法:

  1. 加载预训练模型和tokenizer

  2. 初始化模型参数:我们只更新bias参数,非bias参数设置为不可训练:

model = AutoModelForCausalLM.from_pretrained("langboat/bloom-389m-zh", low_cpu_mem_usage=True)
for name, param in model.named_parameters():
    if "bias" not in name:
        param.requires_grad = False

4. Prefix Tuning概述与应用

4.1 Prefix Tuning方法原理

Prefix Tuning通过在生成式模型前添加可训练的前缀(Prefix)来适应特定任务,进一步提高微调效率。前缀可以引导模型生成与任务相关的输出,且可以灵活调整以适应不同任务需求。

4.2 Prefix Tuning在不同模型架构中的应用

针对自回归和编码器-解码器架构模型,前缀的添加方式有所不同:

  • 自回归架构模型:在句子的开头添加前缀,调整模型对输入的感知,引导生成更符合任务需求的输出。
  • 编码器-解码器架构模型:在输入端和输出端分别添加前缀,分别影响编码和解码过程,实现更精细的控制。

实例演示与代码示例

5.1 BitFit轻量微调Bloom模型步骤

通过上述步骤,完成BitFit方法下的Bloom模型轻量级微调。

5.2 使用peft库进行微调的简要介绍

尽管peft库未直接支持BitFit,但可以结合其特性实现类似功能,进一步优化模型微调过程。

结论与后续探索

PEFT技术通过优化微调策略,显著降低了模型微调的资源消耗,为大规模预训练模型的下游任务应用提供了高效途径。未来,随着PEFT方法的不断发展,将拓展至更多模型架构和任务场景,推动NLP领域向更高效、更个性化的应用方向发展。

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫(xiě)下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消