Ubuntu下ChatGLM2-6B环境搭建与P-Tuning微调实战

发布时间:2026/9/11 18:34:20

Ubuntu下ChatGLM2-6B环境搭建与P-Tuning微调实战 1. 项目概述最近在Ubuntu系统上搭建ChatGLM2-6B环境并进行P-Tuning微调训练时踩了不少坑。作为一个开源的中文大语言模型ChatGLM2-6B在中文处理方面表现优异但在实际部署和训练过程中会遇到各种问题。本文将详细记录从环境搭建到微调训练的全过程特别是那些官方文档没有提及的细节和解决方案。2. 环境准备2.1 系统选择与配置为什么选择Ubuntu而不是Windows主要原因有三点ChatGLM2-6B项目包含大量.sh脚本文件在Windows下运行需要额外配置Linux环境下CUDA支持更好驱动问题更少大多数深度学习框架在Linux下的性能表现更稳定建议使用Ubuntu 22.04 LTS版本这是目前最稳定的选择。如果不想安装双系统也可以使用Windows的WSL2子系统但需要注意WSL2对GPU的支持需要额外配置。2.2 硬件要求最低配置要求CPU至少4核内存16GB以上显卡NVIDIA GPU至少8GB显存RTX 3060及以上实测中RTX 40608GB显存可以流畅运行基础推理和微调训练。如果没有独立显卡纯CPU环境也能运行但性能极差仅适合测试用途。3. CUDA环境安装3.1 驱动安装避坑指南网上大多数教程都建议手动下载CUDA Toolkit安装但这种方法在Ubuntu 22.04上容易导致系统崩溃。更稳妥的方法是打开软件和更新切换到附加驱动标签页选择专有驱动非开源版本等待安装完成重要提示安装前不要随意更换软件源。国内镜像站虽然下载速度快但可能存在依赖包不全的问题导致后续安装失败。3.2 基础依赖安装在安装CUDA前先确保以下基础工具已安装sudo apt update sudo apt install -y gcc g make build-essential3.3 CUDA Toolkit安装推荐使用conda管理CUDA环境conda install -c nvidia cuda-toolkit11.8选择11.8版本是因为它目前与PyTorch的兼容性最好。安装完成后验证nvcc --version nvidia-smi3.4 cuDNN安装cuDNN是NVIDIA提供的深度学习加速库conda install -c nvidia cudnn8.6.04. ChatGLM2-6B环境搭建4.1 创建conda环境conda create -n chatglm python3.9 conda activate chatglm4.2 安装PyTorch选择与CUDA 11.8兼容的版本pip install torch2.0.1cu118 torchvision0.15.2cu118 torchaudio2.0.2 --extra-index-url https://download.pytorch.org/whl/cu1184.3 安装ChatGLM依赖git clone https://github.com/THUDM/ChatGLM2-6B cd ChatGLM2-6B pip install -r requirements.txt4.4 模型下载可以从Hugging Face下载预训练模型git lfs install git clone https://huggingface.co/THUDM/chatglm2-6b如果网络不稳定可以使用国内镜像源。5. P-Tuning微调实战5.1 准备训练数据以AdvertiseGen数据集为例格式要求为JSON{ content: 输入文本, summary: 期望输出 }5.2 微调参数配置关键参数说明PRE_SEQ_LEN前缀序列长度影响模型记忆能力LR学习率决定训练速度和质量quantization_bit量化位数降低显存占用示例启动命令PRE_SEQ_LEN128 LR2e-2 NUM_GPUS1 torchrun --standalone --nnodes1 --nproc-per-node$NUM_GPUS main.py \ --do_train \ --train_file AdvertiseGen/train.json \ --validation_file AdvertiseGen/dev.json \ --preprocessing_num_workers 10 \ --prompt_column content \ --response_column summary \ --overwrite_cache \ --model_name_or_path ./chatglm2-6b \ --output_dir ./output/adgen-chatglm2-6b-pt-$PRE_SEQ_LEN-$LR \ --overwrite_output_dir \ --max_source_length 64 \ --max_target_length 128 \ --per_device_train_batch_size 1 \ --per_device_eval_batch_size 1 \ --gradient_accumulation_steps 16 \ --predict_with_generate \ --max_steps 3000 \ --logging_steps 10 \ --save_steps 1000 \ --learning_rate $LR \ --pre_seq_len $PRE_SEQ_LEN \ --quantization_bit 85.3 训练监控推荐使用nvitop监控GPU状态conda install -c conda-forge nvitop nvitop6. 常见问题与解决方案6.1 训练后通用能力下降现象微调后模型在专业领域表现提升但通用对话能力下降。解决方案在训练数据中混入通用对话样本降低学习率尝试1e-3到5e-3减少训练步数6.2 显存不足问题解决方法降低batch size使用梯度累积gradient_accumulation_steps启用8bit或4bit量化6.3 训练速度慢优化建议增加gradient_accumulation_steps使用更大的batch size检查CUDA和cuDNN版本是否匹配7. 性能优化技巧7.1 混合精度训练在启动命令中添加--fp167.2 梯度检查点减少显存占用--gradient_checkpointing7.3 数据预处理优化使用多线程预处理--preprocessing_num_workers 88. 训练结果评估典型的训练日志如下{ epoch: 0.42, train_loss: 3.3751344401041665, train_runtime: 54080.5566, train_samples: 114599, train_samples_per_second: 0.888, train_steps_per_second: 0.055 }关键指标解读train_loss训练损失值越低越好train_samples_per_second每秒处理的样本数train_steps_per_second每秒完成的训练步数9. 模型部署与应用9.1 加载微调后的模型from transformers import AutoTokenizer, AutoModel tokenizer AutoTokenizer.from_pretrained(output/adgen-chatglm2-6b-pt-128-2e-2, trust_remote_codeTrue) model AutoModel.from_pretrained(output/adgen-chatglm2-6b-pt-128-2e-2, trust_remote_codeTrue).cuda()9.2 Web Demo部署python web_demo.py --model-path output/adgen-chatglm2-6b-pt-128-2e-210. 经验总结在实际微调过程中最大的挑战是平衡专业能力和通用能力。建议采取以下策略训练数据中保持30%的通用对话样本学习率不宜过大建议2e-3到5e-3定期在验证集上测试通用对话能力使用早停机制防止过拟合另一个重要发现是量化虽然能降低显存占用但会轻微影响模型性能。如果显存充足建议使用16bit或32bit精度训练。
延伸阅读

更多相关文章

2026/9/10 19:14:19

Shell变量基础与进阶:从入门到精通

Shell 变量基础知识 变量是暂时存储数据的地方及数据标记,所存储的数据存在于内存空间中,通过正确地调用内存空间中变量的名字就可以取出与变量对应的数据。 变量的内容一般要加双引号,以防止出错,特别是当值里的内容之间有空格时…

2026/9/10 5:57:40

RA8D1开发板双Flash管理与FAL框架实战

1. RA8D1 Vision Board与FAL框架概述RA8D1 Vision Board是瑞萨电子基于Cortex-M85架构推出的一款高性能开发板,主打机器视觉应用场景。这块板子最吸引人的地方在于它同时集成了片上Flash和外挂Flash存储,为视觉算法、模型参数等大容量数据存储提供了硬件…

2026/9/5 16:24:31

Windows新手Claude Code+DeepSeek本地部署实战指南

1. 这不是“又一个AI工具安装教程”,而是一份专为Windows新手写的Claude Code落地实操手记 我第一次在公司内部分享Claude Code时,台下三位刚转行做前端的同事,当场就卡在了“npm.ps1无法加载”这一步——不是他们不会敲命令,而是…

2026/9/11 18:33:16

设计模式16-责任链模式:请求的传递与拦截

责任链模式:让请求沿着一条链自己找主人审批流、过滤链、拦截器、异常兜底,这些场景都适合把处理者串成一条链,谁有资格处理就处理,否则传给下一家。一、痛点:写死在一处的层层判断 报销审批规则经常是这样&#xff1a…

2026/9/10 16:39:38

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/10 11:16:38

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/9 16:31:09

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/10 12:32:02

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/10 15:19:50

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/10 15:49:53

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码