1. 硬件资源准备你的电脑够强吗想要在本地运行GLM-4或Qwen2这样的大语言模型首先得看看你的硬件配置是否达标。这就像想玩最新的大型游戏得先确认显卡能不能带得动。我实测过多次部署过程发现硬件配置直接决定了模型能否跑起来、跑得流畅。1.1 GLM-4的硬件需求GLM-4-9B这个模型官方给出的最低配置要求是操作系统LinuxDebian系列最佳内存至少32GBGPU显存大于8GB支持CUDA或ROCM并且要支持BF16推理我实际测试时用的是NVIDIA A10 24GB显卡搭配30GB内存的Ubuntu 22.04系统跑起来还算流畅。如果你只有消费级显卡比如RTX 309024GB显存也能勉强运行但可能会遇到显存不足的问题。1.2 Qwen2的硬件需求Qwen2-7B的官方推荐配置更高端GPUNVIDIA A100 80GBCUDA11.8版本PyTorch2.1.2cu118不过别被吓到我用NVIDIA A10 24GB显卡也能跑起来只是batch size要调小一些。实测显存占用在16GB左右所以如果你有RTX 409024GB显存应该也能胜任。1.3 实测配置分享这是我的实际测试环境供你参考OS: Ubuntu 22.04 Memory: 30GB CUDA Version: 12.1 GPU: NVIDIA A10 24GB*1 Python: 3.12.3 PyTorch: 2.3.0如果你的配置比这低可能需要考虑模型量化或者使用云服务。我刚开始尝试时用了一台16GB内存的笔记本结果连环境都装不上这个坑希望大家能避开。2. 环境搭建从零开始的Python环境有了合适的硬件接下来就是搭建运行环境了。这一步很关键就像盖房子要先打地基一样。2.1 Python环境配置我强烈建议使用Anaconda来管理Python环境它能很好地解决不同项目间的依赖冲突问题。具体操作如下# 创建专用环境 conda create -n glm4 python3.10 conda activate glm42.2 安装PyTorchPyTorch是大模型运行的基础框架安装时要特别注意版本匹配# 根据CUDA版本选择对应的PyTorch pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121我遇到过因为PyTorch版本不对导致模型无法加载的问题折腾了半天才发现是版本不兼容。所以一定要确认你的CUDA版本和PyTorch版本匹配。2.3 安装其他依赖GLM-4和Qwen2都有自己的依赖包可以通过requirements.txt安装# 对于GLM-4 git clone https://github.com/THUDM/GLM-4.git cd GLM-4/basic_demo pip install -r requirements.txt # 对于Qwen2 pip install transformers4.40.0注意GLM-4的requirements.txt里包含了torch建议先去掉再手动安装合适版本的PyTorch。3. 模型下载国内用户的加速方案模型权重文件通常很大GLM-4-9B大约18GBQwen2-7B约15GB。直接从Hugging Face下载对国内用户来说速度很慢这里分享几个实测有效的加速方法。3.1 使用魔搭社区魔搭(ModelScope)是阿里云提供的模型托管平台国内下载速度飞快from modelscope import snapshot_download # 下载GLM-4 model_dir snapshot_download(ZhipuAI/glm-4-9b-chat) # 下载Qwen2 model_dir snapshot_download(Qwen/Qwen2-7B-Instruct)我第一次用时没设置缓存目录结果默认下载到了系统目录后来发现可以通过cache_dir参数指定下载位置model_dir snapshot_download(ZhipuAI/glm-4-9b-chat, cache_dir./models)3.2 手动下载权重文件如果自动下载失败也可以手动下载访问魔搭社区或Hugging Face找到模型页面在Files and versions中逐个下载模型文件放到对应的目录结构中我整理过GLM-4的目录结构应该是这样的glm-4-9b-chat/ ├── config.json ├── generation_config.json ├── model-00001-of-00010.safetensors ├── ... └── tokenizer.json4. GLM-4的三种部署方式模型下载好后就可以开始部署了。GLM-4支持多种部署方式我来分享最实用的三种。4.1 使用Transformers直接部署这是最简单的方式适合快速测试import torch from transformers import AutoModelForCausalLM, AutoTokenizer device cuda model_path /path/to/glm-4-9b-chat tokenizer AutoTokenizer.from_pretrained(model_path, trust_remote_codeTrue) model AutoModelForCausalLM.from_pretrained( model_path, torch_dtypetorch.bfloat16, device_mapauto ).eval() query 你好 messages [{role: user, content: query}] response model.chat(tokenizer, messages) print(response)注意trust_remote_codeTrue是必须的因为GLM-4使用了自定义的模型代码。4.2 使用vLLM加速推理vLLM是一个高性能推理框架特别适合批量请求from transformers import AutoTokenizer from vllm import LLM, SamplingParams model_path /path/to/glm-4-9b-chat prompt [{role: user, content: 请介绍下自己}] tokenizer AutoTokenizer.from_pretrained(model_path, trust_remote_codeTrue) llm LLM(modelmodel_path, tensor_parallel_size1, trust_remote_codeTrue) sampling_params SamplingParams(temperature0.95, max_tokens512) inputs tokenizer.apply_chat_template(prompt, tokenizeFalse, add_generation_promptTrue) outputs llm.generate(inputs, sampling_params) print(outputs[0].outputs[0].text)vLLM的PagedAttention技术能显著提高吞吐量在我的测试中相比原生Transformers能有2-3倍的性能提升。4.3 启动OpenAI兼容API如果你想提供API服务可以这样启动python -m vllm.entrypoints.openai.api_server \ --model /path/to/glm-4-9b-chat \ --served-model-name glm-4 \ --trust-remote-code \ --max-model-len 512然后用OpenAI的SDK调用from openai import OpenAI client OpenAI(base_urlhttp://localhost:8000/v1, api_keyNone) response client.chat.completions.create( modelglm-4, messages[{role: user, content: 请介绍下自己}] ) print(response.choices[0].message.content)这种部署方式特别适合需要集成到现有系统的场景。5. Qwen2的部署技巧Qwen2的部署与GLM-4类似但也有一些需要注意的区别点。5.1 Transformers基础部署from transformers import AutoModelForCausalLM, AutoTokenizer model_path /path/to/Qwen2-7B-Instruct tokenizer AutoTokenizer.from_pretrained(model_path) model AutoModelForCausalLM.from_pretrained( model_path, torch_dtypeauto, device_mapauto ).eval() prompt 请介绍大型语言模型 messages [ {role: system, content: You are a helpful assistant.}, {role: user, content: prompt} ] inputs tokenizer.apply_chat_template(messages, return_tensorspt).to(cuda) outputs model.generate(inputs, max_new_tokens512) print(tokenizer.decode(outputs[0], skip_special_tokensTrue))注意Qwen2不需要设置trust_remote_codeTrue这点与GLM-4不同。5.2 使用vLLM部署Qwen2from vllm import LLM, SamplingParams llm LLM(model/path/to/Qwen2-7B-Instruct, trust_remote_codeTrue) sampling_params SamplingParams(temperature0.8, max_tokens1024) outputs llm.generate(请用中文介绍你自己, sampling_params) print(outputs[0].outputs[0].text)Qwen2在vLLM上的性能表现相当不错我在A10显卡上测试每秒能生成约30个token。5.3 常见问题解决在实际部署中你可能会遇到这些问题显存不足尝试减小max_model_len或使用量化模型生成质量差调整temperature和top_p参数加载失败确认模型路径正确文件完整我遇到过最头疼的问题是模型生成乱码后来发现是stop_token_ids设置不对。Qwen2的正确设置是stop_token_ids [151645, 151643] # 来自generation_config.json6. 高级部署方案Ollama集成对于需要长期运行的服务我推荐使用Ollama来管理模型。6.1 Ollama安装与配置# 安装 curl -fsSL https://ollama.com/install.sh | sh # 启动服务 ollama serve # 设置开机自启 sudo systemctl enable ollama6.2 模型管理# 拉取GLM-4模型 ollama pull glm4:9b-chat-fp16 # 运行模型 ollama run glm4:9b-chat-fp16Ollama会自动处理模型更新和依赖关系特别适合生产环境。6.3 API服务启动服务后可以通过REST API调用from openai import OpenAI client OpenAI(base_urlhttp://localhost:11434/v1, api_keyNone) response client.chat.completions.create( modelglm4:9b-chat-fp16, messages[{role: user, content: 请写一首关于春天的诗}] ) print(response.choices[0].message.content)Ollama的优点是简单易用缺点是灵活性不如直接使用Transformers或vLLM。7. 性能优化技巧经过多次部署实践我总结出这些提升性能的方法使用Flash Attention能显著加速注意力计算pip install flash-attn --no-build-isolation量化模型4bit量化后显存占用可减少60%model AutoModelForCausalLM.from_pretrained( model_path, load_in_4bitTrue, device_mapauto )调整batch size根据显存情况找到最佳值启用连续批处理在vLLM中设置llm LLM(modelmodel_path, enable_chunked_prefillTrue)我在A10显卡上测试GLM-4经过优化后从最初的每秒15token提升到了35token效果非常明显。8. 实际应用案例最后分享两个我在实际项目中应用的例子案例1智能客服系统使用GLM-4作为后端通过vLLM提供API服务平均响应时间控制在1.5秒内支持同时处理20对话。案例2内容生成工具基于Qwen2开发采用4bit量化可以在RTX 3090上流畅运行生成一篇1000字文章约需30秒。部署大模型确实有一定门槛但一旦跑通带来的能力提升是非常值得的。我在第一次成功运行GLM-4时看到它流畅地回答问题的感觉至今难忘。希望这篇指南能帮你少走弯路顺利部署自己的大模型应用。