
1. 项目概述最近在Ubuntu 22.04 LTS上搭建ChatGLM2-6B环境并尝试进行P-Tuning微调训练踩了不少坑。作为一个开源的中文大语言模型ChatGLM2-6B在中文理解和生成方面表现出色但在实际部署和训练过程中会遇到各种环境配置和参数调优的问题。2. 环境准备2.1 硬件要求建议至少配备8GB显存的NVIDIA显卡如RTX 3060 Ti或RTX 4060。纯CPU环境虽然可以运行但推理速度极慢不适合实际使用。2.2 系统选择Ubuntu 22.04 LTS是最佳选择原因有三官方提供了完善的CUDA支持系统稳定性好社区支持广泛注意不建议使用WSL因为可能会遇到显卡驱动和CUDA兼容性问题。3. CUDA和驱动安装3.1 安装NVIDIA驱动不要直接使用命令行安装推荐以下方法打开软件和更新切换到附加驱动标签页选择专有驱动非开源版本等待安装完成3.2 CUDA Toolkit安装建议安装CUDA 11.7或11.8版本sudo apt install nvidia-cuda-toolkit安装完成后验证nvidia-smi nvcc --version3.3 cuDNN安装从NVIDIA官网下载对应版本的cuDNN然后执行sudo dpkg -i libcudnn8_8.x.x.x-1cudaX.Y_amd64.deb sudo dpkg -i libcudnn8-dev_8.x.x.x-1cudaX.Y_amd64.deb4. 基础环境配置4.1 Python环境建议使用Miniconda创建独立环境conda create -n chatglm python3.9 conda activate chatglm4.2 依赖安装安装PyTorch注意选择与CUDA版本匹配的版本pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu117安装其他依赖pip install transformers sentencepiece protobuf gradio5. ChatGLM2-6B部署5.1 模型下载从Hugging Face下载模型git lfs install git clone https://huggingface.co/THUDM/chatglm2-6b5.2 量化版本选择根据显存大小选择量化级别8bit量化约6GB显存4bit量化约4GB显存5.3 启动Web Demo修改官方提供的web_demo.pytokenizer AutoTokenizer.from_pretrained(THUDM/chatglm2-6b, trust_remote_codeTrue) model AutoModel.from_pretrained(THUDM/chatglm2-6b, trust_remote_codeTrue).quantize(8).cuda()然后运行python web_demo.py6. P-Tuning微调6.1 准备训练数据数据格式示例train.json{ content: 这件衣服适合什么场合穿, summary: 这款连衣裙适合商务休闲和约会场合穿着 }6.2 训练参数配置关键参数说明PRE_SEQ_LEN提示序列长度建议128LR学习率建议2e-2quantization_bit量化位数建议86.3 启动训练使用以下命令启动训练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 /path/to/chatglm2-6b \ --output_dir ./output \ --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 87. 常见问题与解决方案7.1 驱动安装失败症状安装后黑屏无法进入系统 解决方案进入恢复模式卸载NVIDIA驱动重新安装开源驱动再次尝试安装专有驱动7.2 CUDA版本不匹配错误信息CUDA error: no kernel image is available for execution 解决方案检查CUDA版本与PyTorch版本是否匹配重新安装对应版本的PyTorch7.3 显存不足解决方案降低batch size使用更低的量化位数启用梯度累积7.4 微调后模型能力退化现象模型在特定领域表现提升但通用能力下降 解决方案在训练数据中加入通用对话样本降低学习率尝试1e-3减少训练步数8. 性能监控工具推荐使用nvitop监控GPU使用情况pip install nvitop nvitop这个工具比nvidia-smi更直观可以实时查看显存占用、GPU利用率等信息。9. 训练优化建议学习率预热前100步使用线性warmup混合精度训练添加--fp16参数梯度裁剪设置--max_grad_norm 1.0早停机制监控验证集loss10. 部署建议对于生产环境部署使用vLLM等高性能推理框架启用连续批处理continuous batching考虑使用Triton推理服务器实现动态批处理在实际使用中发现ChatGLM2-6B对中文长文本的理解能力较强但在处理专业领域问题时仍需微调。微调时要注意平衡专业能力和通用能力避免模型偏科。训练过程中建议定期保存checkpoint并使用TensorBoard监控训练过程。