【AI大模型】从零开始运用LORA微调ChatGLM3-6B大模型并私有数据训练

🚀 作者 :“大数据小禅”

🚀 文章简介 :本专栏后续将持续更新大模型相关文章,从开发到微调到应用,需要下载好的模型包可私。

🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬


1.什么是ChatGLM3-6B

  • ChatGLM3 是智谱AI和清华大学 KEG 实验室联合发布的对话预训练模型。ChatGLM3-6B 是 ChatGLM3 系列中的开源模型,在保留了前两代模型对话流畅、部署门槛低等众多优秀特性的基础上,ChatGLM3-6B 引入了如下特性:

  • 更强大的基础模型: ChatGLM3-6B 的基础模型 ChatGLM3-6B-Base 采用了更多样的训练数据、更充分的训练步数和更合理的训练策略。在语义、数学、推理、代码、知识等不同角度的数据集上测评显示,* ChatGLM3-6B-Base 具有在 10B 以下的基础模型中最强的性能*。

  • 更完整的功能支持: ChatGLM3-6B 采用了全新设计的 Prompt 格式 ,除正常的多轮对话外。同时原生支持工具调用(Function Call)、代码执行(Code Interpreter)和 Agent 任务等复杂场景。

  • 更全面的开源序列: 除了对话模型 ChatGLM3-6B 外,还开源了基础模型 ChatGLM3-6B-Base 、长文本对话模型 ChatGLM3-6B-32K 和进一步强化了对于长文本理解能力的 ChatGLM3-6B-128K。以上所有权重对学术研究完全开放 ,在填写 问卷 进行登记后亦允许免费商业使用。

2.什么是LORA微调技术

  • LoRA(Low-Rank Adaptation)微调技术是一种用于微调大型预训练语言模型的方法。这种技术的核心思想是通过在原有的模型中引入少量的额外参数来实现模型的微调,而不是改变模型的全部参数。这样做可以在保持预训练模型的大部分知识的同时,使模型适应特定的任务或数据集。
  • LoRA主要通过在模型的每个变换器层中引入两个低秩矩阵(A 和 B)来实现。这些矩阵与原始的注意力矩阵或前馈网络权重矩阵相乘,以引入新的可训练参数。在实践中,通过这种方式添加的参数数量远少于原始模型的参数总量,从而大幅减少了微调过程中的计算和存储需求。
  • LoRA技术特别适合于需要在资源受限环境下迅速部署模型的场景,例如在移动设备上或在云端服务中处理大量用户请求时。此外,这种方法也适用于那些需要对模型进行频繁更新的应用

3.算力平台

  • 由于模型微调需要用到大量算力,对GPU要求较高,推荐小伙伴租借算力平台的服务器进行使用
  • 本文使用的环境:Ubantu + RTX4090 24G
  • 直接到算力平台租借即可
    在这里插入图片描述

4.环境搭建

4.1 虚拟环境conda工具搭建并激活
  • 安装conda 建议直接安装Anaconda即可本地
mkdir -p ~/miniconda3
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh
bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3
rm -rf ~/miniconda3/miniconda.sh
  • conda create -n chatglm3 python=3.11
  • conda activate chatglm3
4.2 CUDA版本查看和torch版本匹配
  • 输入命令nvidia-smi
    在这里插入图片描述
  • 版本匹配情况查看:https://pytorch.org/get-started/previous-versions/ 修改对应的requirements.txt的torch版本即可
    在这里插入图片描述
    在这里插入图片描述
4.3 git lfs下载
  • 想要使用git拉大的数据需要下载git lfs
  • 乌班图操作(不同系统操作不一样 mac使用brew直接安装)
    在Ubuntu系统上安装Git Large File Storage (Git LFS) 的步骤如下:
  1. 安装Git(如果尚未安装): 确保你的系统上已经安装了Git。可以通过运行以下命令来安装Git:

    sudo apt-get update
    sudo apt-get install git
    
  2. 添加Git LFS的包仓库: 为了安装Git LFS,你需要首先添加它的包仓库到你的系统中。使用下面的命令:

    curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
    
  3. 安装Git LFS: 添加仓库后,你可以通过运行以下命令来安装Git LFS:

    sudo apt-get install git-lfs
    
  4. 设置Git LFS: 安装完成后,你需要运行以下命令来设置Git LFS:

    git lfs install
    

这将设置Git LFS的全局Git钩子。

4.4 模型下载和代码拉取
  • 模型下载地址 https://huggingface.co/THUDM/chatglm3-6b 需要科学上网
  • 或者 https://www.modelscope.cn/models/ZhipuAI/chatglm3-6b/ 推荐 都可以直接下载
  • git clone + .git地址 - 》git clone https://huggingface.co/THUDM/chatglm3-6b
  • 拉官方代码: git clone https://github.com/THUDM/ChatGLM3.git
    在这里插入图片描述
4.5 依赖下载
  • 进入到拉下来的代码的根目录 运行即可下载相关的全部依赖
  • pip install -r requirements.txt

5 模型微调

5.1 数据准备
  • 这里需要准备json格式数据并按照官方给的格式进行排列,有train.json和train.json数据 存放到项目的目录即可 格式如下
  • 自己造数据即可
{"conversations": [{"role": "user", "content": "你好"}, {"role": "assistant", "content": "您好,我是 大数据小禅,一个由 大数据小禅的微调实验室 打造的人工智能助手,请问有什么可以帮助您的吗?"}]}
{"conversations": [{"role": "user", "content": "你好呀,你叫什么名字呀"}, {"role": "assistant", "content": "您好!我是一个人工智能助手,你可以叫我 大数据小禅。很高兴见到您,请问有什么事情是我可以为您服务的呢?"}]}
{"conversations": [{"role": "user", "content": "能介绍一下你自己吗?"}, {"role": "assistant", "content": "当然可以,我是 大数据小禅,一个由 大数据小禅的微调实验室 开发的人工智能助手,可以为您提供回答和帮助。"}]}
{"conversations": [{"role": "user", "content": "谁训练了你?"}, {"role": "assistant", "content": "大数据小禅的微调实验室 训练了我,我的目的是回答用户问题并提供必要的支持。"}]}
{"conversations": [{"role": "user", "content": "你有什么优势?"}, {"role": "assistant", "content": "作为 大数据小禅,我的优势包括对自然语言的理解和生成能力,我致力于为用户提供准确、有用的回答和解决方案。"}]}
5.2 LORA微调
  • 硬件要求
  • 显存:24GB及以上(推荐使用30系或A10等sm80架构以上的NVIDIA显卡进行尝试)
    内存:16GB
    RAM: 2.9 /16 GB
    GPU RAM: 15.5/16.0 GB
  • 准备上面的两个数据集合,执行以下命令进行微调,对应的路径需要换成是自己环境的 ,需要有一定的时间等待,数据越多越久
  • !CUDA_VISIBLE_DEVICES=0 NCCL_P2P_DISABLE="1" NCCL_IB_DISABLE="1" /root/miniconda3/envs/chatglm3/bin/python finetune_hf.py /root/autodl-tmp/ChatGLM3/mydata /root/autodl-tmp/model/chatglm3-6b configs/lora.yaml
    在这里插入图片描述
5.3 微调前后对比
  • 微调前 对大数据小禅这个博主的名字胡说
    在这里插入图片描述
  • 微调后 按照我们数据集的内容回答
  • 命令推理 !CUDA_VISIBLE_DEVICES=0 NCCL_P2P_DISABLE="1" NCCL_IB_DISABLE="1" /root/miniconda3/envs/chatglm3/bin/python inference_hf.py output/checkpoint-3000/ --prompt "大数据小禅是谁"
    在这里插入图片描述在这里插入图片描述

6 总结

  • 到这里已经完成了LORA微调ChatGLM3-6B,整体下来如何自己造的数据不够多和精准,效果并不是那么好
  • 后续将更新更多微调方式
  • 需要大模型语言包的朋友们可以看主页
### 如何使用LoRAChatGLM3-6B进行微调 #### 使用LoRA方法的背景 低秩适应(Low-Rank Adaptation, LoRA)是一种高效的参数优化技术,通过仅更新模型权重矩阵中的低秩部分来实现快速收敛和较小计算开销[^1]。 #### 准备工作 在开始之前,请确保已安装必要的依赖库加载数据集。以下是所需的主要工具包: - `transformers`:用于加载预训练模型及其分词器。 - `peft`:支持LoRA和其他高效微调策略。 - `datasets`:处理自定义或公开的数据集。 #### 安装依赖项 运行以下命令以安装所需的Python库: ```bash pip install transformers peft datasets accelerate torch ``` #### 示例代码 下面是一个完整的示例脚本,展示如何基于LoRA微调ChatGLM3-6B: ```python import torch from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig from peft import LoraConfig, get_peft_model, prepare_model_for_kbit_training # 加载模型配置 model_name_or_path = "/root/autodl-tmp/ChatGLM3/basic_demo/cli_demo.py" tokenizer = AutoTokenizer.from_pretrained(model_name_or_path) # 配置量化设置 (可选) bnb_config = BitsAndBytesConfig( load_in_4bit=True, bnb_4bit_use_double_quant=True, bnb_4bit_quant_type="nf4", bnb_4bit_compute_dtype=torch.bfloat16 ) # 初始化基础模型 base_model = AutoModelForCausalLM.from_pretrained( model_name_or_path, quantization_config=bnb_config, device_map={"": 0} # 将模型放置到GPU上 ) # 设置LoRA超参数 lora_config = LoraConfig( r=8, # 秩大小 lora_alpha=32, target_modules=["q_proj", "v_proj"], # 调整目标模块 lora_dropout=0.05, bias="none", task_type="CAUSAL_LM" ) # 应用LoRA适配层 base_model.gradient_checkpointing_enable() base_model = prepare_model_for_kbit_training(base_model) peft_model = get_peft_model(base_model, lora_config) # 打印可训练参数数量 print(f"Trainable parameters: {sum(p.numel() for p in peft_model.parameters())}") # 训练过程省略... ``` 上述代码片段展示了如何利用LoRA调整特定模块,减少整体内存占用量。 #### 数据集准备 对于对话格式的任务,通常需要将输入转换成适合因果语言建模的形式。例如: ```python def preprocess_function(examples): inputs = ["问:" + item["instruction"] + "\n答:" for item in examples["data"]] targets = [item["output"] for item in examples["data"]] return tokenizer(inputs, text_target=targets, padding="max_length", truncation=True, max_length=512) dataset = dataset.map(preprocess_function, batched=True) train_dataset = dataset['train'] eval_dataset = dataset['validation'] ``` 此函数会将每条样本转化为“问...答”的结构化形式[^2]。 #### 模型保存与导出 完成训练后可以轻松存储LoRA权重文件以便后续部署: ```python peft_model.save_pretrained("./outputs/lora_chatglm3") ``` --- ###
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大数据小禅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值