ChatGLM-6B tuning 推理源码解析

from peft import LoraConfig, get_peft_model, TaskType

def load_lora_config(model):
    config = LoraConfig(
        task_type=TaskType.CAUSAL_LM,
        inference_mode=False,
        r=8,
        lora_alpha=32,
        lora_dropout=0.1,
        target_modules=["query_key_value"]
    )
    return get_peft_model(model, config)


tokenizer = AutoTokenizer.from_pretrained("../ChatGLM-Tuning-master/chatglm-6b", trust_remote_code=True)
from transformers import AutoModel
import torch


model = AutoModel.from_pretrained("../ChatGLM-Tuning-master/chatglm-6b", trust_remote_code=True).half().cuda()

from peft import PeftModel
model = PeftModel.from_pretrained(model, "../ChatGLM-Tuning-master/output").half()

这段代码主要涉及到使用PEFT(Parallel Efficient Transformers)模型进行任务处理和推理。下面逐行解释代码的功能:

  1. 导入必要的库和模块:

     

    javascriptCopy code

    from peft import LoraConfig, get_peft_model, TaskType

    该行代码导入了LoraConfigget_peft_modelTaskType等相关功能函数。

  2. 定义加载PEFT模型配置的函数:

     

    arduinoCopy code

    def load_lora_config(model):
        config = LoraConfig(
            task_type=TaskType.CAUSAL_LM,
            inference_mode=False,
            r=8,
            lora_alpha=32,
            lora_dropout=0.1,
            target_modules=["query_key_value"]
        )
        return get_peft_model(model, config)

    该函数接受一个model参数,并使用LoraConfig创建一个config对象,其中指定了任务类型为TaskType.CAUSAL_LM(因果语言模型),推理模式为Falser参数为8,lora_alpha参数为32lora_dropout参数为0.1,target_modules参数为["query_key_value"]。然后使用get_peft_model函数modelconfig作为参数传递,返回PEFT模型

  3. 导入必要的库和模块:

     

    pythonCopy code

    tokenizer = AutoTokenizer.from_pretrained("../ChatGLM-Tuning-master/chatglm-6b", trust_remote_code=True)
    from transformers import AutoModel
    import torch
    
    
    model = AutoModel.from_pretrained("../ChatGLM-Tuning-master/chatglm-6b", trust_remote_code=True).half().cuda()
    

    该部分导入了AutoTokenizer类和AutoModel类等必要的库和模块,并创建了一个tokenizer对象。

  4. 加载预训练的模型:

     

    scssCopy code

    model = AutoModel.from_pretrained("../ChatGLM-Tuning-master/chatglm-6b", trust_remote_code=True).half().cuda()

    该行代码使用AutoModel类从指定路径的预训练模型加载模型,并通过.half()方法将模型转换为半精度浮点数表示,然后使用.cuda()将模型移动到GPU上。

  5. 导入必要的库和模块:

     

    javascriptCopy code

    from peft import PeftModel

    该行代码导入了PeftModel类。

  6. 加载PEFT模型:

     

    makefileCopy code

    model = PeftModel.from_pretrained(model, "../ChatGLM-Tuning-master/output").half()

    该行代码使用PeftModel类从指定路径的输出加载PEFT模型,并通过.half()方法将模型转换为半精度浮点数表示。

总结:该段代码主要完成了加载PEFT模型和相关配置的操作,包括创建LoraConfig对象、加载预训练模型、转换模型表示为半精度浮点数,并最终返回PEFT模型。

  1. 代码中导入的 peft 模块是一个自定义的模块,提供了 PEFT 模型相关的功能。

  2. load_lora_config 函数根据传入的 model 参数创建了一个 LoraConfig 对象,并设置了一些参数,如任务类型、推理模式、r 值、lora_alpha 值、lora_dropout 值和目标模块等。然后调用 get_peft_model 函数,传入 modelconfig,返回 PEFT 模型。

  3. tokenizer 对象通过 AutoTokenizer.from_pretrained 方法从指定路径的预训练模型加载预训练的分词器。

  4. 通过 AutoModel.from_pretrained 方法从指定路径的预训练模型加载预训练的模型,并使用 .half() 方法将模型转换为半精度浮点数表示,然后使用 .cuda() 将模型移动到 GPU 上。

  5. 导入了 PeftModel 类。

  6. PeftModel.from_pretrained 方法用于加载 PEFT 模型,传入的参数包括之前加载的模型 model 和指定路径的输出。该方法返回一个 PEFT 模型,并通过 .half() 方法将模型转换为半精度浮点数表示。

总结:这段代码主要完成了加载 PEFT 模型和相关配置的操作,包括创建 LoraConfig 对象、加载预训练模型和分词器,转换模型表示为半精度浮点数,并最终返回 PEFT 模型。这些操作涉及到了模型配置、分词器的加载、模型的加载和转换等步骤,用于准备和配置 PEFT 模型的环境。

  1. 代码中的 from peft import LoraConfig, get_peft_model, TaskType 导入了自定义模块 peft 中的 LoraConfigget_peft_modelTaskType

  2. load_lora_config 函数用于加载 LoraConfig 对象,该对象是 PEFT 模型的配置。在函数中,创建了一个 LoraConfig 对象 config,并通过设置不同的参数值来配置模型。其中的参数包括:

  • task_type=TaskType.CAUSAL_LM:指定任务类型为因果语言模型。
  • inference_mode=False:指定推理模式为非推理模式,即训练模式。
  • r=8:指定 PEFT 模型的 r 值为 8。
  • lora_alpha=32:指定 PEFT 模型的 lora_alpha 值为 32。
  • lora_dropout=0.1:指定 PEFT 模型的 lora_dropout 值为 0.1。
  • target_modules=["query_key_value"]:指定 PEFT 模型的目标模块为 "query_key_value"。

然后,调用 get_peft_model 函数,传入 modelconfig,返回配置好的 PEFT 模型。

  1. tokenizer 对象使用 AutoTokenizer.from_pretrained 方法从指定路径的预训练模型加载预训练的分词器。trust_remote_code=True 表示信任远程代码。

  2. from transformers import AutoModel 导入了 AutoModel 类,用于加载预训练模型。

  3. model 对象通过 AutoModel.from_pretrained 方法从指定路径的预训练模型加载预训练的模型,并使用 .half() 方法将模型转换为半精度浮点数表示。然后,使用 .cuda() 将模型移动到 GPU 上。

  4. from peft import PeftModel 导入了自定义模块 peft 中的 PeftModel

  5. model 对象通过 PeftModel.from_pretrained 方法从指定路径的输出加载 PEFT 模型,并使用 .half() 方法将模型转换为半精度浮点数表示。

总结:该段代码的作用是加载 PEFT 模型并配置相关参数,包括创建 LoraConfig 对象、加载预训练模型和分词器,转换模型表示为半精度浮点数,并最终返回配置好的 PEFT 模型。这些操作涉及到模型配置、分词器的加载、模型的加载和转换等步骤,用于准备和配置 PEFT 模型的环境。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值