GLM-4-9B-Chat-1M部署教程:3步完成Linux服务器GPU环境配置
想快速在Linux服务器上部署支持百万字长文本的GLM-4-9B-Chat-1M大模型?这篇教程将手把手带你完成从环境配置到模型推理的全过程,无需复杂操作,跟着做就行。
最近智谱AI开源的GLM-4-9B-Chat-1M模型确实让人眼前一亮——90亿参数就能处理100万tokens(约200万字)的超长文本,还支持26种语言。不过很多朋友在部署时遇到了各种问题:CUDA环境配置复杂、显存不够用、推理速度慢等等。
其实部署过程没那么复杂,只要环境配置正确,一张RTX 4090就能流畅运行这个模型。下面我就把在Linux服务器上部署的完整流程分享给大家,包括环境检查、依赖安装、模型下载和性能优化技巧。
1. 环境准备与系统要求
在开始之前,先确认你的服务器满足基本要求。GLM-4-9B-Chat-1M对硬件有一定要求,但不算特别苛刻。
最低配置要求:
- 操作系统:Ubuntu 18.04+ 或 CentOS 7+
- 内存:至少32GB RAM
- 显卡:NVIDIA GPU,至少8GB显存(推荐16GB以上)
- 存储:至少50GB可用空间(模型文件约18GB)
推荐配置:
- 操作系统:Ubuntu 20.04 LTS
- 内存:64GB RAM
- 显卡:RTX 4090 (24GB) 或 A100 (40GB)
- 存储:NVMe SSD,100GB以上空间
先检查你的GPU是否支持CUDA:
# 检查NVIDIA驱动是否安装 nvidia-smi # 查看CUDA版本(如果已安装) nvcc --version如果看到GPU信息输出,说明驱动已安装。如果没有,需要先安装NVIDIA驱动和CUDA工具包。
2. 安装CUDA和cuDNN
CUDA环境是运行GPU加速的基础,这里以Ubuntu 20.04为例介绍安装步骤。
安装CUDA 11.8(兼容性最好):
# 下载并安装CUDA 11.8 wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run sudo sh cuda_11.8.0_520.61.05_linux.run # 设置环境变量 echo 'export PATH=/usr/local/cuda-11.8/bin:$PATH' >> ~/.bashrc echo 'export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc source ~/.bashrc安装cuDNN 8.6(加速深度学习运算):
# 需要从NVIDIA官网下载对应版本的cuDNN # 下载后解压并复制到CUDA目录 tar -xvf cudnn-linux-x86_64-8.6.0.163_cuda11-archive.tar.xz sudo cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda/include sudo cp -P cudnn-*-archive/lib/libcudnn* /usr/local/cuda/lib64 sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*验证安装是否成功:
# 检查CUDA nvcc --version # 检查cuDNN cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 23. 创建Python虚拟环境
为了避免包冲突,建议使用conda或venv创建独立的Python环境。
使用conda创建环境:
# 安装miniconda(如果未安装) wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh # 创建Python 3.10环境 conda create -n glm4 python=3.10 -y conda activate glm4或者使用venv:
# 创建虚拟环境 python -m venv glm4-env source glm4-env/bin/activate4. 安装Python依赖包
安装运行GLM-4-9B-Chat-1M所需的Python包,主要包括PyTorch、Transformers和vLLM。
安装PyTorch(与CUDA 11.8兼容的版本):
pip install torch==2.0.1+cu118 torchvision==0.15.2+cu118 torchaudio==2.0.2 --extra-index-url https://download.pytorch.org/whl/cu118安装其他必要依赖:
pip install transformers>=4.44.0 pip install vllm pip install accelerate pip install tiktoken pip install sentencepiece验证PyTorch是否能识别GPU:
import torch print(f"CUDA available: {torch.cuda.is_available()}") print(f"CUDA version: {torch.version.cuda}") print(f"GPU device: {torch.cuda.get_device_name(0)}")如果输出显示CU可用,并且能识别到你的GPU,说明环境配置正确。
5. 下载GLM-4-9B-Chat-1M模型
模型文件比较大(约18GB),建议使用git lfs下载,如果网络不稳定可以分多次下载。
安装git lfs:
# Ubuntu/Debian curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash sudo apt-get install git-lfs git lfs install # CentOS/RHEL curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.rpm.sh | sudo bash sudo yum install git-lfs git lfs install下载模型文件:
# 从Hugging Face下载 git clone https://huggingface.co/THUDM/glm-4-9b-chat-1m # 如果下载中断,可以使用以下命令继续 cd glm-4-9b-chat-1m git lfs pull下载过程可能需要一段时间,取决于你的网络速度。模型文件较大,建议在网络稳定的环境下进行。
6. 使用vLLM加速推理
vLLM是一个高性能的推理框架,可以显著提升生成速度并减少显存占用。
创建推理脚本:
# inference_vllm.py from transformers import AutoTokenizer from vllm import LLM, SamplingParams import torch # 模型路径 model_path = "./glm-4-9b-chat-1m" # 修改为你的实际路径 # 初始化tokenizer tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True) # 配置vLLM参数 llm = LLM( model=model_path, tensor_parallel_size=1, # 单GPU设为1,多GPU可增加 max_model_len=1048576, # 1M上下文长度 trust_remote_code=True, enforce_eager=True, gpu_memory_utilization=0.9 # GPU内存使用率 ) # 设置生成参数 sampling_params = SamplingParams( temperature=0.7, top_p=0.9, max_tokens=1024 ) # 准备输入 prompt = [{"role": "user", "content": "请介绍一下GLM-4模型的主要特点"}] inputs = tokenizer.apply_chat_template( prompt, tokenize=False, add_generation_prompt=True ) # 生成回复 outputs = llm.generate(inputs, sampling_params) print(outputs[0].outputs[0].text)运行推理:
python inference_vllm.py第一次运行时会需要一些时间初始化模型,后续请求会快很多。
7. 显存优化技巧
如果你的显存不够大,可以尝试以下优化方法:
使用量化技术减少显存占用:
# 使用8-bit量化 llm = LLM( model=model_path, quantization="awq", # 或者 "squeezellm" tensor_parallel_size=1, max_model_len=131072, # 减少上下文长度以节省显存 trust_remote_code=True )调整vLLM参数优化显存使用:
llm = LLM( model=model_path, max_model_len=32768, # 根据显存调整 gpu_memory_utilization=0.85, # 调整内存使用率 swap_space=4, # 使用4GB磁盘空间作为交换 enable_chunked_prefill=True, # 启用分块预填充 max_num_batched_tokens=8192 # 限制批处理token数 )监控GPU使用情况:
# 实时监控GPU使用情况 watch -n 1 nvidia-smi # 或者使用更详细的监控 nvidia-smi --query-gpu=timestamp,name,utilization.gpu,utilization.memory,memory.total,memory.free,memory.used --format=csv -l 18. 常见问题解决
在部署过程中可能会遇到一些问题,这里提供一些常见问题的解决方法:
问题1:CUDA out of memory
# 解决方法:减少max_model_len或启用量化 llm = LLM( model=model_path, max_model_len=16384, # 减少上下文长度 gpu_memory_utilization=0.8 # 降低内存使用率 )问题2:模型加载失败
# 确保安装了正确版本的transformers pip install transformers==4.44.0 # 检查模型文件是否完整 ls -lh glm-4-9b-chat-1m/ # 应该看到10个左右的模型文件,每个约1.8GB问题3:生成速度慢
# 调整vLLM参数提升速度 llm = LLM( model=model_path, max_num_seqs=16, # 增加并行序列数 max_num_batched_tokens=16384, # 增加批处理大小 disable_log_stats=False # 启用日志查看性能 )9. 性能测试与优化建议
部署完成后,建议进行简单的性能测试,确保模型正常运行。
创建测试脚本:
# benchmark.py import time from transformers import AutoTokenizer from vllm import LLM, SamplingParams # 初始化 model_path = "./glm-4-9b-chat-1m" tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True) llm = LLM(model=model_path, max_model_len=8192) # 测试短文本生成 start_time = time.time() prompt = "中国的首都是哪里?" outputs = llm.generate(prompt, SamplingParams(max_tokens=50)) generation_time = time.time() - start_time print(f"生成时间: {generation_time:.2f}秒") print(f"生成内容: {outputs[0].outputs[0].text}") print(f"生成token数: {len(outputs[0].outputs[0].token_ids)}")不同GPU型号的性能参考:
- RTX 4090 (24GB): 约15-25 tokens/秒
- RTX 3090 (24GB): 约12-20 tokens/秒
- A100 (40GB): 约30-50 tokens/秒
- V100 (32GB): 约8-15 tokens/秒
实际性能会受到提示长度、生成长度、温度参数等因素影响。
整体用下来,GLM-4-9B-Chat-1M的部署过程比想象中要简单一些,主要是环境配置要仔细。CUDA版本和PyTorch版本的兼容性很重要,一定要匹配好。显存方面,24GB的RTX 4090运行起来比较流畅,如果显存小一些的话,可以通过调整max_model_len和启用量化来优化。
推理速度方面,vLLM的加速效果确实明显,比直接用Transformers快不少。如果你主要处理长文本,建议适当降低max_model_len,没必要每次都跑满100万tokens,毕竟大部分场景用不到这么长的上下文。
最后提醒一下,第一次运行模型时需要较长的加载时间,这是正常的,模型需要时间初始化和分配显存。后续的推理请求就会快很多了。如果你打算长期使用,可以考虑将模型加载为常驻服务,这样避免重复加载的开销。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。