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

慈云数据 2024-05-28 技术支持 53 0

🚀 作者 :“大数据小禅”

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

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


目录导航

      • 1.什么是ChatGLM3-6B
      • 2.什么是LORA微调技术
      • 3.算力平台
      • 4.环境搭建
        • 4.1 虚拟环境conda工具搭建并激活
        • 4.2 CUDA版本查看和torch版本匹配
        • 4.3 git lfs下载
        • 4.4 模型下载和代码拉取
        • 4.5 依赖下载
        • 5 模型微调
          • 5.1 数据准备
          • 5.2 LORA微调
          • 5.3 微调前后对比
          • 6 总结

            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,整体下来如何自己造的数据不够多和精准,效果并不是那么好
                                    • 后续将更新更多微调方式
                                    • 需要大模型语言包的朋友们可以看主页
微信扫一扫加客服

微信扫一扫加客服

点击启动AI问答
Draggable Icon