GLM-4-9B-Chat-1M一键部署教程基于vLLM的高效推理实践最近智谱AI开源的GLM-4-9B-Chat-1M模型挺火的支持1M上下文长度差不多能处理200万中文字符这容量对于处理长文档、代码库分析或者多轮对话来说太有用了。不过很多朋友在部署时遇到了显存不够、推理速度慢的问题特别是处理长文本的时候。今天我就来分享一下怎么在星图GPU平台上用vLLM框架快速部署这个模型。vLLM的PagedAttention技术能有效管理显存再加上多GPU并行推理即使是1M长度的文本也能跑得起来。我最近刚在星图上部署了一套效果还不错下面就把具体步骤和注意事项都告诉你。1. 环境准备与镜像选择在星图平台上部署第一步就是选对镜像和配置。这直接关系到后面能不能顺利跑起来。1.1 选择合适的GPU配置GLM-4-9B-Chat-1M是个9B参数的模型看起来不大但因为它支持1M上下文实际推理时需要的内存可不少。根据官方文档和我的实测经验不同上下文长度需要的显存大概是这样上下文长度单卡显存需求推荐GPU配置8K tokens约18GB单卡24GB (如A10)32K tokens约30GB单卡40GB (如A100)128K tokens约60GB双卡40GB1M tokens约320GB4卡80GB或8卡40GB如果你主要处理8K-32K长度的文本单张24GB显存的卡就够用了。但要是真想用满1M长度那就得准备多张高显存卡了。1.2 创建星图GPU实例在星图控制台创建实例时我建议这样配置镜像选择直接选vLLM官方镜像或者PyTorch基础镜像。我用的pytorch/pytorch:2.3.0-cuda12.1-cudnn8-runtime这个镜像已经包含了CUDA 12.1和PyTorch 2.3.0省了不少事。GPU规格根据你的预算和需求来选。测试的话用A1024GB就行生产环境建议A10040GB/80GB。存储空间模型文件大概18GB加上一些缓存建议分配至少50GB的存储。创建好实例后SSH连接进去咱们就可以开始安装环境了。2. 安装vLLM与依赖vLLM的安装其实挺简单的但有几个细节要注意不然容易踩坑。2.1 基础环境检查先看看CUDA和Python环境对不对# 检查CUDA版本 nvidia-smi # 检查Python版本 python --version # 我用的Python 3.10这个版本比较稳定2.2 安装vLLM直接pip安装就行但建议用清华源下载快很多# 更新pip pip install --upgrade pip # 安装vLLM pip install vllm -i https://pypi.tuna.tsinghua.edu.cn/simple # 安装transformersGLM模型需要 pip install transformers -i https://pypi.tuna.tsinghua.edu.cn/simple安装完成后可以验证一下python -c import vllm; print(fvLLM版本: {vllm.__version__})如果看到版本号输出说明安装成功了。3. 下载GLM-4-9B-Chat-1M模型模型可以从Hugging Face或者魔搭社区下载。国内用户用魔搭会快一些。3.1 从魔搭社区下载先安装modelscopepip install modelscope -i https://pypi.tuna.tsinghua.edu.cn/simple然后下载模型# 创建模型目录 mkdir -p /home/models cd /home/models # 下载GLM-4-9B-Chat-1M from modelscope import snapshot_download model_dir snapshot_download(ZhipuAI/glm-4-9b-chat-1m, cache_dir/home/models)下载完成后模型会保存在/home/models/ZhipuAI/glm-4-9b-chat-1m目录下。整个模型大概18GB下载需要一些时间耐心等待。3.2 模型文件结构检查下载完成后检查一下模型文件是否完整ls -lh /home/models/ZhipuAI/glm-4-9b-chat-1m/ # 应该看到这些文件 # - config.json # - configuration_chatglm.py # - modeling_chatglm.py # - pytorch_model-00001-of-00002.bin # - pytorch_model-00002-of-00002.bin # - tokenizer.json # - tokenizer_config.json如果文件都齐全就可以准备启动了。4. 单GPU部署与测试我们先从简单的单GPU部署开始确保基础功能正常。4.1 启动vLLM服务器用这个命令启动单GPU服务# 进入模型目录 cd /home/models/ZhipuAI/glm-4-9b-chat-1m # 启动vLLM OpenAI兼容服务器 python -m vllm.entrypoints.openai.api_server \ --model /home/models/ZhipuAI/glm-4-9b-chat-1m \ --served-model-name glm-4-9b-chat-1m \ --max-model-len 8192 \ --dtype float16 \ --trust-remote-code \ --port 8000 \ --host 0.0.0.0这里有几个重要参数解释一下--max-model-len 8192设置最大上下文长度为8192 tokens这个值根据你的显存调整--dtype float16用半精度推理省显存--trust-remote-codeGLM模型需要这个参数--port 8000服务端口--host 0.0.0.0允许外部访问启动后你会看到类似这样的输出INFO 07-15 14:30:22 llm_engine.py:197] Initializing an LLM engine (v0.4.0)... INFO 07-15 14:30:22 llm_engine.py:198] Engine args: ... INFO 07-15 14:30:22 llm_engine.py:199] CUDA device count: 1 INFO 07-15 14:30:22 model_runner.py:168] Loading model weights... INFO 07-15 14:30:45 llm_engine.py:347] # GPU blocks: 1143, # CPU blocks: 128 INFO 07-15 14:30:45 llm_engine.py:348] Total GPU memory usage: 17768 MB INFO 07-15 14:30:45 api_server.py:743] Started server process [12345] INFO 07-15 14:30:45 api_server.py:744] Waiting for startup event... INFO 07-15 14:30:45 api_server.py:749] Started INFO 07-15 14:30:45 api_server.py:751] Listening on http://0.0.0.0:8000看到最后一行说明服务启动成功了。4.2 测试API接口开一个新的终端窗口测试一下服务是否正常# 测试聊天接口 curl http://localhost:8000/v1/chat/completions \ -H Content-Type: application/json \ -d { model: glm-4-9b-chat-1m, messages: [ {role: system, content: 你是一个有帮助的助手}, {role: user, content: 你好请介绍一下你自己} ], temperature: 0.7, max_tokens: 100 }如果一切正常你会收到JSON格式的回复{ id: chat-abc123, object: chat.completion, created: 1721034645, model: glm-4-9b-chat-1m, choices: [{ index: 0, message: { role: assistant, content: 你好我是智谱AI开发的GLM-4-9B-Chat模型... }, finish_reason: stop }], usage: { prompt_tokens: 20, completion_tokens: 45, total_tokens: 65 } }4.3 Python客户端测试也可以用Python代码测试这样更灵活from openai import OpenAI # 初始化客户端 client OpenAI( base_urlhttp://localhost:8000/v1, api_keytoken-abc123 # vLLM默认不需要token但可以设置 ) # 发送请求 response client.chat.completions.create( modelglm-4-9b-chat-1m, messages[ {role: user, content: 用Python写一个快速排序算法} ], temperature0.7, max_tokens500 ) print(response.choices[0].message.content)运行这个脚本应该能看到模型生成的快速排序代码。5. 多GPU并行推理配置单GPU处理长文本时显存可能不够这时候就需要多GPU并行。vLLM通过tensor-parallel-size参数支持张量并行。5.1 多GPU启动命令假设你有4张GPU卡可以这样启动python -m vllm.entrypoints.openai.api_server \ --model /home/models/ZhipuAI/glm-4-9b-chat-1m \ --served-model-name glm-4-9b-chat-1m \ --tensor-parallel-size 4 \ --max-model-len 131072 \ --dtype float16 \ --trust-remote-code \ --port 8000 \ --host 0.0.0.0 \ --gpu-memory-utilization 0.9关键参数说明--tensor-parallel-size 4使用4张GPU进行张量并行--max-model-len 131072现在可以设置更大的上下文长度了--gpu-memory-utilization 0.9GPU内存使用率上限90%留点余量5.2 1M上下文长度配置如果要真正使用1M上下文长度需要更多GPU和特殊配置# 8卡A100/H100配置 python -m vllm.entrypoints.openai.api_server \ --model /home/models/ZhipuAI/glm-4-9b-chat-1m \ --served-model-name glm-4-9b-chat-1m \ --tensor-parallel-size 8 \ --max-model-len 1048576 \ --dtype bfloat16 \ --trust-remote-code \ --enable-chunked-prefill \ --max-num-batched-tokens 8192 \ --port 8000 \ --host 0.0.0.0这里有几个专门针对1M长度的参数--enable-chunked-prefill启用分块预填充减少显存峰值--max-num-batched-tokens 8192限制批处理token数避免OOM--dtype bfloat16用bfloat16精度某些情况下更稳定5.3 验证多GPU运行启动后检查日志确认多GPU是否生效INFO 07-15 14:35:22 llm_engine.py:199] CUDA device count: 8 INFO 07-15 14:35:22 llm_engine.py:200] Tensor parallel size: 8 INFO 07-15 14:35:22 llm_engine.py:201] Pipeline parallel size: 1 INFO 07-15 14:35:22 llm_engine.py:202] Total number of GPUs: 8看到Tensor parallel size: 8就说明多GPU并行生效了。6. 长文本处理实战GLM-4-9B-Chat-1M的核心优势就是长文本处理咱们来实际测试一下。6.1 准备长文本测试数据先创建一个长文本文件测试# 生成测试长文本 test_text 人工智能AI是计算机科学的一个分支它企图了解智能的实质并生产出一种新的能以人类智能相似的方式做出反应的智能机器。该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。 人工智能从诞生以来理论和技术日益成熟应用领域也不断扩大。可以设想未来人工智能带来的科技产品将会是人类智慧的容器。人工智能可以对人的意识、思维的信息过程的模拟。人工智能不是人的智能但能像人那样思考也可能超过人的智能。 人工智能是一门极富挑战性的科学从事这项工作的人必须懂得计算机知识、心理学和哲学。人工智能是包括十分广泛的科学它由不同的领域组成如机器学习、计算机视觉等。总的说来人工智能研究的一个主要目标是使机器能够胜任一些通常需要人类智能才能完成的复杂工作。 人工智能的发展历程可以追溯到20世纪40年代。1943年Warren McCulloch和Walter Pitts提出了第一个人工神经网络模型。1950年Alan Turing提出了著名的图灵测试为人工智能的发展奠定了基础。1956年John McCarthy在达特茅斯会议上首次提出了人工智能这一术语标志着人工智能作为一门独立学科的诞生。 在随后的几十年里人工智能经历了多次繁荣与低谷。20世纪60-70年代人工智能在问题求解、自然语言处理等方面取得了一定进展但受限于计算能力和数据量发展缓慢。80年代专家系统的兴起带来了人工智能的又一次繁荣。90年代以后随着计算能力的提升和大数据的出现机器学习特别是深度学习取得了突破性进展推动了人工智能的快速发展。 当前人工智能技术已经广泛应用于各个领域。在医疗健康领域AI可以辅助疾病诊断、药物研发和个性化治疗。在金融领域AI用于风险评估、欺诈检测和智能投顾。在交通领域自动驾驶技术正在逐步成熟。在教育领域智能教学系统和个性化学习平台正在改变传统的教学模式。在制造业智能机器人和自动化生产线提高了生产效率和产品质量。 人工智能的发展也带来了一些挑战和问题。首先是就业问题自动化和智能化可能导致某些工作岗位的消失。其次是隐私和安全问题AI系统需要处理大量个人数据如何保护隐私成为重要课题。此外AI的决策过程往往缺乏透明度这引发了关于算法公平性和可解释性的讨论。还有AI的伦理问题如自主武器系统的使用边界、AI的权利和责任等。 未来人工智能将继续向更广泛、更深层次的方向发展。一方面AI技术将更加普及渗透到日常生活的方方面面。另一方面AI将向通用人工智能AGI方向发展追求更接近人类智能的全面能力。同时人工智能与其他技术的融合也将创造新的可能性如AI与物联网、区块链、量子计算等的结合。 在中国人工智能发展被提升到国家战略层面。2017年国务院发布了《新一代人工智能发展规划》提出了到2030年使中国人工智能理论、技术与应用总体达到世界领先水平的目标。近年来中国在人工智能领域取得了显著进展在计算机视觉、自然语言处理、语音识别等多个子领域达到了世界先进水平。 总之人工智能作为一项颠覆性技术正在深刻改变人类社会。我们需要在推动技术发展的同时关注其带来的社会影响建立健全的法律法规和伦理框架确保人工智能技术的健康发展更好地造福人类。 * 50 # 重复50次生成超长文本 print(f文本长度{len(test_text)} 字符) print(f大约token数{len(test_text) // 3}) # 粗略估算6.2 发送长文本请求用Python客户端发送长文本from openai import OpenAI import time client OpenAI(base_urlhttp://localhost:8000/v1) # 读取或生成长文本 with open(long_text.txt, r, encodingutf-8) as f: long_text f.read() start_time time.time() response client.chat.completions.create( modelglm-4-9b-chat-1m, messages[ {role: system, content: 你是一个专业的文本分析师}, {role: user, content: f请总结以下关于人工智能的长文本的核心观点\n\n{long_text}} ], temperature0.3, max_tokens500 ) end_time time.time() print(f请求耗时{end_time - start_time:.2f}秒) print(f总结结果{response.choices[0].message.content}) print(f使用token数{response.usage.total_tokens})6.3 处理超长文档的技巧处理1M长度的文本时有几个实用技巧分批处理如果文档实在太长可以分成多个片段处理启用chunked-prefill减少显存峰值使用调整批处理大小根据显存情况调整max_num_batched_tokens监控显存使用用nvidia-smi实时监控7. 常见问题与解决方案部署过程中可能会遇到一些问题这里整理了几个常见的7.1 显存不足OOM问题问题现象启动时或推理时出现CUDA out of memory错误。解决方案减少max-model-len值增加tensor-parallel-size使用更多GPU启用enable-chunked-prefill降低gpu-memory-utilization如0.8使用更低的精度如--dtype float16改为--dtype bfloat167.2 推理速度慢问题现象生成响应时间过长。解决方案增加max_num_batched_tokens提高吞吐量使用更多GPU卡检查是否有CPU瓶颈如tokenizer处理慢考虑使用量化版本模型7.3 模型输出异常问题现象输出乱码、重复或无法停止。解决方案 这是GLM-4-9B-Chat-1M在vLLM中的一个已知问题需要设置正确的stop token# 在请求中指定stop token response client.chat.completions.create( modelglm-4-9b-chat-1m, messages[...], stop[|endoftext|, |im_end|], # GLM的停止token temperature0.7, max_tokens1000 )或者在启动服务器时指定python -m vllm.entrypoints.openai.api_server \ --model /home/models/ZhipuAI/glm-4-9b-chat-1m \ --stop-token-ids 151329 151336 151338 \ ...7.4 模型加载失败问题现象加载模型时出错提示trust_remote_code相关问题。解决方案 确保添加了--trust-remote-code参数并且transformers版本足够新pip install transformers4.44.0 -U8. 性能优化建议要让GLM-4-9B-Chat-1M跑得更好可以试试这些优化8.1 批处理优化调整批处理参数可以显著提高吞吐量python -m vllm.entrypoints.openai.api_server \ --model /home/models/ZhipuAI/glm-4-9b-chat-1m \ --max-num-batched-tokens 16384 \ --max-num-seqs 256 \ --max-paddings 128 \ ...max-num-batched-tokens一次批处理的最大token数max-num-seqs同时处理的最大序列数max-paddings允许的最大填充长度8.2 使用量化模型如果显存紧张可以考虑使用量化版本的模型。GLM-4-9B有INT4量化版本显存占用能减少60%以上# 下载量化模型如果有的话 # 然后使用--quantization参数 python -m vllm.entrypoints.openai.api_server \ --model /path/to/quantized-model \ --quantization awq \ ...8.3 启用前缀缓存对于多轮对话场景启用前缀缓存可以避免重复计算python -m vllm.entrypoints.openai.api_server \ --model /home/models/ZhipuAI/glm-4-9b-chat-1m \ --enable-prefix-caching \ --block-size 16 \ ...8.4 监控与调优部署后持续监控性能根据实际情况调整参数# 监控GPU使用情况 watch -n 1 nvidia-smi # 监控服务日志 tail -f /var/log/vllm/server.log # 使用vLLM内置的性能分析 vllm benchmark --model /home/models/ZhipuAI/glm-4-9b-chat-1m9. 生产环境部署建议如果要在生产环境使用还需要考虑更多因素9.1 高可用部署多实例负载均衡部署多个vLLM实例用Nginx做负载均衡健康检查设置健康检查端点自动剔除故障实例自动扩缩容根据负载自动调整实例数量9.2 安全配置API密钥验证启用vLLM的API密钥验证访问控制配置防火墙只允许特定IP访问请求限流防止恶意请求耗尽资源9.3 监控告警性能监控监控GPU使用率、显存使用、请求延迟等业务监控监控请求量、成功率、错误率等设置告警当关键指标异常时及时告警9.4 成本优化自动启停根据业务时段自动启停实例混合精度根据需求选择float16或bfloat16资源复用多个服务共享GPU资源整体用下来GLM-4-9B-Chat-1M在vLLM上的部署还是挺顺利的。最大的优势当然是那个1M的上下文长度处理长文档、代码库或者多轮对话时特别有用。性能方面用多GPU并行后即使是长文本也能保持不错的响应速度。不过也要注意1M长度对显存要求确实高如果没有多张高显存卡可能就得降低max-model-len或者用量化版本了。另外GLM模型在vLLM上有些小问题比如停止token需要手动设置这个按照我上面说的方法解决就行。如果你刚开始接触建议先从单GPU、较短上下文长度开始熟悉了再逐步增加复杂度。实际部署时一定要根据你的具体需求和硬件条件调整参数别人的配置只能参考最适合的配置还得自己测试出来。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。