Ubuntu 22.04下ChatGLM2-6B部署与P-Tuning微调实战
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-1+cudaX.Y_amd64.deb sudo dpkg -i libcudnn8-dev_8.x.x.x-1+cudaX.Y_amd64.deb4. 基础环境配置
4.1 Python环境
建议使用Miniconda创建独立环境:
conda create -n chatglm python=3.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.py:
tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm2-6b", trust_remote_code=True) model = AutoModel.from_pretrained("THUDM/chatglm2-6b", trust_remote_code=True).quantize(8).cuda()然后运行:
python web_demo.py6. P-Tuning微调
6.1 准备训练数据
数据格式示例(train.json):
{ "content": "这件衣服适合什么场合穿?", "summary": "这款连衣裙适合商务休闲和约会场合穿着" }6.2 训练参数配置
关键参数说明:
- PRE_SEQ_LEN:提示序列长度(建议128)
- LR:学习率(建议2e-2)
- quantization_bit:量化位数(建议8)
6.3 启动训练
使用以下命令启动训练:
PRE_SEQ_LEN=128 LR=2e-2 NUM_GPUS=1 torchrun --standalone --nnodes=1 --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版本是否匹配
- 重新安装对应版本的PyTorch
7.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
- 早停机制:监控验证集loss
10. 部署建议
对于生产环境部署:
- 使用vLLM等高性能推理框架
- 启用连续批处理(continuous batching)
- 考虑使用Triton推理服务器
- 实现动态批处理
在实际使用中发现,ChatGLM2-6B对中文长文本的理解能力较强,但在处理专业领域问题时仍需微调。微调时要注意平衡专业能力和通用能力,避免模型"偏科"。训练过程中建议定期保存checkpoint,并使用TensorBoard监控训练过程。
