一文学会GLM-4-9B-Chat模型Lora微调(二)!

引言

上篇文章介绍了使用智谱GLM-4开源代码来微调“GLM-4-9B-Chat”模型的步骤和一些关键参数,但是微调完无法直接使用微调后的模型进行推理,需要对模型合并后才能进行部署和推理;这篇文章主要演示下如何验证微调后的模型、合并和部署微调后的模型。

如果还没看过上篇文章的同学,可以先看一遍哈:一文学会GLM-4-9B-Chat模型Lora微调(一)!

模型验证

看完上篇文章的同学微调之后会看到如下"output"文件夹:

在这里插入图片描述
这里的checkpoint-xxx文件夹里保存的是微调完之后的模型权重文件,这里需要注意的是checkpoint-xxx都是基于上一段checkpoint-xxx的权重继续计算得来的,比如checkpoint-150是基于checkpoint-100继续计算得来的。

所以我们验证的时候可以任意选一个checkpoint来测试,这里我们用checkpoint-200的权重来测试;智谱也为我们准备好了验证代码,使用以下命令即可完成模型验证:

python inference.py output/checkpoint-200/

其中“output/checkpoint-200/”为微调后的模型权重位置,可以自行修改;另外还有一点,在验证模型时如果基础模型的位置发生变化需要修改checkpoint-xxx文件夹中"adapter_config.json"文件:
在这里插入图片描述
将"base_model_name_or_path"的值改为基础模型在服务器的实际位置即可。执行成功后有以下输出内容:
在这里插入图片描述

模型合并

验证完模型后想部署起来还需要将微调好的权重给合并到基础模型中,模型合并主要使用Peft库的"merge_and_unload()"模型合并方法,合并完之后将新的权重和模型文件保存起来就可以了;以下是模型合并代码:

import torch
from peft import PeftModel
from transformers import AutoTokenizer, AutoModelForCausalLM, AutoConfig

# 定义基础模型路径
base_model_path = "/root/shared-storage/glm-4"
# 定义微调后的checkpoint路经
checkpoint_path = "/root/workspace/GLM-4-main/finetune_demo/output/checkpoint-2500"
# 定义合并后模型的输出路经
output_path = "/root/workspace/GLM-4-main/finetune_demo/merge_output"


def apply_lora(model_name_or_path, output_path, lora_path):
    print(f"Loading the base model from {model_name_or_path}")
    base = AutoModelForCausalLM.from_pretrained(
        model_name_or_path, torch_dtype=torch.float16, low_cpu_mem_usage=True, trust_remote_code=True
    )

    print(f"Loading the LoRA adapter from {lora_path}")
    lora_model = PeftModel.from_pretrained(
        base,
        lora_path,
        torch_dtype=torch.float16,
    )

    # 模型合并
    print("Applying the LoRA")
    model = lora_model.merge_and_unload()

    print(f"Saving the target model to {output_path}")
    model.save_pretrained(output_path)

    print(f"Loading the tokenizer from {model_name_or_path}")
    base_tokenizer = AutoTokenizer.from_pretrained(
        model_name_or_path, use_fast=True, padding_side="left", trust_remote_code=True
    )

    print(f"Saving the tokenizer to {output_path}")
    base_tokenizer.save_pretrained(output_path)
    print(f"Updated model and tokenizer saved to {output_path}")


# 调用函数合并并保存模型
apply_lora(base_model_path, output_path, checkpoint_path)

使用的时候大家只需要将"base_model_path"、“checkpoint_path”、"output_path"这几个参数改为自己本地服务器的位置即可。

合并完成后会输出以下文件:
在这里插入图片描述
可以看到整个目录结构和文件跟"GLM-4-9B-Chat"基础模型的结构是一样的,只是将微调后的权重文件合并起来了。

模型部署

合并完之后的模型部署方式跟部署"GLM-4-9B-Chat"基础模型的方式是一样的,这里就不重复介绍了;有不知道怎么部署的可以看我这篇文章哈:超详细GLM-4-chat模型部署

后面会介绍Llama-factory模型微调框架的部署和使用以及其他大模型相关最新技术知识点!感兴趣的同学可以持续关注~

  • 14
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`glm4-9b-1m` 和 `glm4-9b-chat` 都是由 CSDN 开发的 AI 模型,它们都是基于大语言模型构建的工具,旨在提供智能问答、代码生成等服务。然而,它们之间存在一些关键的区别: ### `glm4-9b-1m` - **目的定位**:`glm4-9b-1m` 通常指代一个较为通用的语言模型,其设计目标可能是处理多种任务,包括但不限于文本理解、自然语言生成、翻译等多个领域。 ### `glm4-9b-chat` - **特定功能**:`glm4-9b-chat` 更专注于聊天交互场景。这个名称暗示了它特别优化为了提供流畅的人机对话体验,能够更好地理解上下文、保持对话连贯,并能快速响应用户的提问或指令。 ### 区别 1. **应用场景**:`glm4-9b-1m` 可能更适用于需要广泛能力支持的任务,如多模态理解和生成、文本到文本转换等多种应用;而 `glm4-9b-chat` 则专门针对实时交互需求,尤其适合于需要快速响应和高互动性的环境,比如客服机器人、即时通讯助手等。 2. **技术细节**:尽管具体的内部架构细节可能不对外公开,但可以合理推测,`glm4-9b-chat` 的训练数据集可能包含了大量的对话历史记录,以及更多关于对话管理的知识,这有助于提升模型在连续对话过程中的性能。此外,它可能还经过了特定的优化,使得在对话过程中上下文保持一致性和流畅性成为可能。 3. **性能侧重点**:考虑到 `glm4-9b-chat` 的命名,我们可以假设该模型在处理连续对话任务上有着更高的效率和质量保证。这可能意味着在对话的持续性、话题转移的平滑过渡等方面有更强的表现。 ### 相关问题: 1. 这两个模型在训练数据集的选择上有何差异? 2. 对于需要大量交互式对话的应用来说,如何评估并选择最适合的模型? 3. 如果希望开发一款虚拟助理软件,应该考虑哪些因素来决定采用 `glm4-9b-1m` 还是 `glm4-9b-chat`?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值