Lora微调大模型

import os
import warnings
os.environ["CUDA_VISIBLE_DEVICES"] = "0"
os.environ['TRANSFORMERS_OFFLINE'] = '1'

warnings.filterwarnings("ignore")

from transformers import (AutoModelForCausalLM,
                          AutoTokenizer,
                          TrainingArguments,
                          Trainer,
                          DataCollatorForSeq2Seq)

from peft import (LoraConfig, 
                  get_peft_model, 
                  TaskType)

from datasets import load_dataset

_tokenizer = AutoTokenizer.from_pretrained("Qwen2-0___5B")
_model = AutoModelForCausalLM.from_pretrained("Qwen2-0___5B")

# for name ,param in _model.named_parameters():
#     print(name)

_dataset = load_dataset("json",data_files="data.json",split="train")

def preprocess_dataset(example):
    MAX_LENGTH = 256
    _input_ids, _attention_mask, _labels = [], [], []
    _instruction = _tokenizer(f"User: {example['instruction']}Assistant: ",add_special_tokens=False)
    _response = _tokenizer(example["output"] + _tokenizer.eos_token,add_special_tokens=False)
    _input_ids = _instruction["input_ids"] + _response["input_ids"]
    _attention_mask = _instruction["attention_mask"] + _response["attention_mask"]
    _labels = [-100] * len(_instruction["input_ids"]) + _response["input_ids"]
    if len(_input_ids) > MAX_LENGTH:
        _input_ids = _input_ids[:MAX_LENGTH]
        _attention_mask = _attention_mask[:MAX_LENGTH]
        _labels = _labels[:MAX_LENGTH]
    return {
        "input_ids": _input_ids,
        "attention_mask": _attention_mask,
        "labels": _labels
    }


_dataset = _dataset.map(preprocess_dataset,remove_columns=_dataset.column_names)
_dataset = _dataset.shuffle()


config = LoraConfig(task_type=TaskType.CAUSAL_LM, 
                    target_modules="all-linear",
                    r=8,
                    lora_alpha=16)


_model = get_peft_model(_model, config)

# model.print_trainable_parameters()

_training_args = TrainingArguments(
    output_dir="checkpoints/lora",
    per_device_train_batch_size=10,
    gradient_accumulation_steps=2,
    num_train_epochs=100,
    save_steps=300
)

trainer = Trainer(
    model=_model,
    args=_training_args,
    train_dataset=_dataset,
    data_collator=DataCollatorForSeq2Seq(tokenizer=_tokenizer,padding=True)
)

trainer.train()
from transformers import (
                          AutoModelForCausalLM,
                          AutoTokenizer,
                          pipeline)
import peft
_model = AutoModelForCausalLM.from_pretrained("Qwen2-0___5B")
_tokenizer = AutoTokenizer.from_pretrained("Qwen2-0___5B")
_peft_model = peft.peft_model.PeftModelForCausalLM.from_pretrained(model =_model,model_id = "/home/easyai/Desktop/ai/ai/checkpoints/lora/checkpoint-7500")
pipe = pipeline("text-generation",model = _peft_model,tokenizer=_tokenizer)
ipt = f"User:你是谁? Anwser:"
print(pipe(ipt))

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LoRA(Large-scale Reinforcement Learning from Image Pixels with Latent Actions)是一种用于微调大型模型的方法,它结合了强化学习和图像像素级别的训练。LoRA的目标是通过观察环境中的图像像素,并根据这些像素采取相应的行动来学习一个能够解决复杂任务的模型。 具体来说,LoRA使用了一个基于像素的强化学习框架,其中模型通过观察环境中的图像像素来学习如何采取最佳行动。这种方法的一个关键特点是,模型不需要任何先验知识或手工设计的特征,而是直接从原始像素数据中学习。 LoRA的训练过程包括两个阶段:预训练和微调。在预训练阶段,使用自编码器来学习图像的表示。自编码器是一种无监督学习方法,它通过将输入图像压缩成低维编码,然后再将编码解压缩为重构图像。通过这种方式,自编码器可以学习到图像的有用特征。 在微调阶段,使用强化学习算法(如Proximal Policy Optimization)来优化模型的策略。模型通过观察环境中的图像像素,并根据当前的状态选择最佳的行动。通过与环境进行交互并根据奖励信号进行反馈,模型逐渐优化其策略,以实现更好的性能。 LoRA的优势在于它能够处理高维度的原始输入数据,并且不需要手工设计的特征。通过使用像素级别的训练,LoRA可以学习到更丰富和复杂的特征表示,从而提高模型的性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值