
大模型这个东西前两年还只是论文里的概念今年已经变成很多公司和个人开发者手里的常规工具了。尤其是开源模型的崛起类似Qwen、Llama、DeepSeek这些模型权重全部开放让自己部署一个私有大模型从极客折腾变成了完全可行的工程实践。我在这上面踩了不少坑也终于把整套流程跑通了。如果你手里有一台Linux服务器想把大模型部署上去自己用或者想开放给公司内部调用这篇文章基本能覆盖你从零到上线的大部分问题。先说说这套东西到底是什么、能解决什么问题在Linux服务器上部署大模型本质就是把一个开源的大语言模型权重下载下来用推理框架加载到GPU显存里对外提供一套API接口让业务代码可以像调用OpenAI那样调用你自己的模型。这样做的好处很多——数据不出内网、按量收费的API成本省掉、可以针对业务做定制微调也不用担心第三方服务不稳定。适合谁来参考需要给团队搭建内网AI能力的后端工程师、做独立产品想集成AI能力的开发者以及刚入坑大模型想了解部署这套流程的在校学生。哪怕你只有一台普通PC显卡性能一般文章里也会讲清楚怎么用CPU兜底或者用量化小模型凑合跑。1. 先想清楚在Linux服务器上部署大模型到底在折腾什么很多人第一次接触大模型部署这个概念会懵觉得是不是要训练一个模型不是。部署和训练完全是两码事。训练是在海量数据上调整模型参数需要几十甚至几百张GPU跑几周到几个月。部署则是把已经训练好的模型权重加载进推理框架用GPU做前向计算响应一次次的请求。你只需要关心模型怎么加载、推理框架怎么配置、显存够不够、并发能不能撑住。这背后涉及几个关键组件模型权重开源社区下载的权重文件比如Qwen2.5-7B-Instruct参数量70亿fp16精度下约占14GB显存。推理框架Ollama、vLLM、Transformers这类工具负责把权重加载进显存、执行张量计算、把请求转成token再生成文本。API服务把推理能力封装成HTTP接口让外部系统通过OpenAI兼容的格式调用。硬件资源GPU是核心如果没有GPU也可以用CPU硬扛但速度会慢很多。整个部署过程的核心矛盾就是显存大小和模型大小之间的博弈。显存不够模型就装不进去。模型太大就得靠量化用更低精度表示参数来压缩体积。所以你会看到动不动就有人聊q4_k_mawqgptq本质上都是在用精度换显存。我见过不少人在这一步就放弃问我的显卡只有8GB显存能部署7B模型吗答案是可以但要用4bit量化。也有土豪直接上A100直接跑70B模型。搞清楚自己的硬件边界再决定用哪个模型这是部署的第一步。另外Linux服务器相比Windows更适合部署大模型原因很实际NVIDIA驱动和CUDA生态在Linux下最完整vLLM这些框架对Linux的支持最好服务器环境也更接近生产环境。如果你用的是带NVIDIA显卡的Linux机器下面的内容直接照着做就行。2. 部署前的硬性准备硬件、系统与基础环境很多人在部署中翻车不是因为模型选错了而是环境没准备好。这一节把前置条件掰开讲清楚。2.1 硬件选型显存、内存、CPU如何估算先给一个最朴素的显存估算公式模型显存占用 ≈ 参数量B× 精度字节数 × 1.2 到 1.5 的冗余系数fp16精度下每个参数占2字节所以7B模型7 × 2 14GB加上推理时的KV Cache和中间激活值实际建议至少24GB显存。13B模型13 × 2 26GB实际至少32GB。70B模型70 × 2 140GB单卡基本没戏需要多卡并行。如果显存不够就用量化。4bit量化下每个参数约0.5字节7B模型只要大约4GB显存8GB显卡也能跑起来。代价是效果有一定损耗不过对于日常对话、文本生成这种场景感知不明显。内存方面建议至少是模型显存占用的两倍。CPU要有一块像样的因为部分算子会落到CPU上瓶颈往往出现在数据加载和tokenize环节。至于GPU型号消费级的RTX 409024GB能舒服地跑7B-13B模型专业级的A100/A800/H800则是大规模部署的选择。2.2 系统与驱动Ubuntu NVIDIA驱动 CUDA推荐使用Ubuntu 20.04或22.04 LTS稳定且社区资料多。全新服务器先升级系统并安装依赖apt update apt upgrade -y apt install -y build-essential dkms linux-headers-$(uname -r)如果系统里没有NVIDIA驱动最容易的方式是通过官方runfile或者apt安装。apt方式最省心apt install -y nvidia-driver-535 reboot重启后执行nvidia-smi看到类似这样的输出就说明驱动正常----------------------------------------------------------------------------- | NVIDIA-SMI 535.xxx Driver Version: 535.xxx CUDA Version: 12.2 | -----------------------------------------------------------------------------注意nvidia-smi显示的CUDA Version是驱动支持的最高CUDA版本不是当前环境装的CUDA。后面实际用CUDA要么装完整的CUDA Toolkit要么直接用pip装PyTorch时自带的CUDA依赖后者省事很多。2.3 Python环境虚拟环境是必须的很多模型和推理框架依赖不同版本的Python和PyTorch直接装在系统里极容易冲突。强烈建议用conda或venv隔离环境。conda安装简单下载Miniconda后一路默认即可wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh source ~/.bashrc创建虚拟环境conda create -n llm python3.10 -y conda activate llm后面所有跟模型相关的依赖全部装在这个环境里与系统隔离出问题直接删环境重来成本很低。3. 模型量级与推理框架的匹配选择模型选多大框架选哪个决定了你后续的体验。这一节我把常用组合和选型逻辑讲清楚。3.1 本地最先试的Ollama轻量、开箱即用如果你的诉求是最快速度跑起来Ollama绝对是最优解。它把模型下载、推理引擎、API服务全部打包了一条命令就能搞定。安装curl -fsSL https://ollama.com/install.sh | sh下载模型并运行ollama run qwen2.5:7b这条命令会自动去拉取Qwen2.5-7B模型然后进入交互式对话。关闭交互模式后也可以用APIcurl http://localhost:11434/api/generate -d { model: qwen2.5:7b, prompt: 你好 }Ollama还内置了OpenAI兼容接口端口是11434格式为/v1/chat/completions这意味着你原来写好的OpenAI SDK调用只要把base_url改一下就能接过来。Ollama适合个人开发和快速验证它牺牲了一些高级控制项比如不能精细调KV Cache策略、不能做pipeline并行但对于中小流量完全够用。3.2 更专业的vLLM吞吐量优先如果要把模型部署成一个正式的API服务接受成百上千的并发请求vLLM是更合适的选择。vLLM用了PagedAttention技术显存利用率极高吞吐量比常规推理实现高几倍。安装pip install vllm启动Qwen2.5-7Bpython -m vllm.entrypoints.openai.api_server \ --model Qwen/Qwen2.5-7B-Instruct \ --served-model-name qwen2.5-7b \ --tensor-parallel-size 1 \ --host 0.0.0.0 \ --port 8000启动后使用OpenAI SDK访问from openai import OpenAI client OpenAI( api_keyEMPTY, base_urlhttp://your-server-ip:8000/v1 ) response client.chat.completions.create( modelqwen2.5-7b, messages[{role: user, content: 你好}] ) print(response.choices[0].message.content)vLLM的调优参数比较多后面实操章节我会详细展开。3.3 其他方案Transformers、TGI、SGLang对比框架特点适合场景TransformersHuggingFace官方库最通用能跑所有模型研究、调试、跑通流程vLLM高吞吐、PagedAttention、OpenAI兼容生产环境API服务Ollama一键安装、内置模型仓库个人开发、内网快速搭建TGIHuggingFace出品为生产优化大规模生产、依赖HF生态SGLang新锐高性能、结构化输出需要高级推理控制追求极致性能选框架有个简单原则能跑通就行选Ollama要上生产选vLLM搞学术实验选Transformers。不要一上来就折腾TGI和SGLang除非你的业务场景确实需要它们的高级特性。4. 实操在Linux上完整部署一个开源模型以Qwen2.5-7B-Instruct为例纸上谈兵聊完了现在来真实的实操。我以Qwen2.5-7B-Instruct为例分别用Ollama和vLLM两种方式部署一遍全部命令都在Linux服务器上执行过。4.1 用Ollama三步跑起来第一步安装Ollamacurl -fsSL https://ollama.com/install.sh | sh安装脚本会自动检测系统和GPU配置好systemd服务。第二步下载并运行模型ollama run qwen2.5:7b首次运行会显示下载进度如果是国内服务器下载速度可能会比较慢。实在慢的话可以配置国内镜像源Ollama支持通过OLLAMA_HOST和镜像地址环境变量来优化。第三步测试APIcurl http://localhost:11434/v1/chat/completions \ -H Content-Type: application/json \ -d { model: qwen2.5:7b, messages: [{role: user, content: 部署大模型需要注意什么}] }返回结果就是一个标准的JSON包含assistant的回复内容。到这里模型已经跑起来了前后十分钟都不到。4.2 用vLLM以OpenAI兼容接口部署vLLM的安装需要Python环境建议在conda环境里操作conda create -n vllm python3.10 -y conda activate vllm pip install vllm如果服务器没有NVIDIA驱动vLLM装完也是白搭运行前一定先执行nvidia-smi确认GPU可见。启动服务python -m vllm.entrypoints.openai.api_server \ --model /data/models/Qwen2.5-7B-Instruct \ --served-model-name qwen2.5-7b \ --tensor-parallel-size 1 \ --host 0.0.0.0 \ --port 8000这里我指定了本地路径/data/models/Qwen2.5-7B-Instruct因为生产环境一般会先把模型权重download到本地避免每次启动都去HuggingFace拉取。下载模型可以用modelscope或者huggingface-cli# 用modelscope下载国内速度快 pip install modelscope modelscope download --model Qwen/Qwen2.5-7B-Instruct --local_dir /data/models/Qwen2.5-7B-Instruct启动成功后控制台会打印类似INFO: Started server process [xxxx]的字样此时用curl测试curl http://localhost:8000/v1/models能返回模型列表就说明服务正常。测试对话curl http://localhost:8000/v1/chat/completions \ -H Content-Type: application/json \ -d { model: qwen2.5-7b, messages: [{role: user, content: 你好介绍一下你自己}], temperature: 0.7, max_tokens: 512 }4.3 关键参数怎么调max-model-len、gpu-memory-utilization、tensor-parallel-sizevLLM里最重要的三个参数我一个个解释max-model-len这个参数控制模型最大上下文长度。Qwen2.5-7B-Instruct支持最长32768个token的上下文但是上下文越长KV Cache占用显存就越大。如果你设置为32768显存里有很大一部分要预留给Cache能同时处理的并发请求就会减少。一般业务场景设8192足够如果只是做简单问答设4096更稳妥。gpu-memory-utilization这个参数控制vLLM最多使用显存的百分比默认是0.9。如果服务器上还有其他进程建议调低到0.7或0.8防止OOM。我自己的经验是专用推理服务器可以设0.95既能利用显存又不至于让PyTorch分配失败如果有其他服务共宿老老实实0.8。tensor-parallel-size当模型单卡装不下时设为2、4、8表示用多少张GPU并行推理。这个参数不是越多越好多卡并行会引入通信开销只有模型大到单卡无法承载时才用得上。对7B模型来说一张4090就够跑千万别设成2白白浪费卡。一个我自己踩过的坑vLLM默认会尝试从HuggingFace加载tokenizer和config但如果服务器无法访问外网会卡在下载阶段很久。解决办法是先手动把模型下载到本地然后启动命令里直接指定本地路径。5. 上线前后的性能调优与稳定性排查模型跑起来了只是第一步我在实际部署中还遇到过各种奇怪问题。这一节把调优思路和故障排查经验整理出来。5.1 显存与并发如何估算最大并发上线前总会被问这个服务能支撑多少并发可以用一个粗略公式最大并发 ≈ 总显存 - 模型权重占用 / 每个请求的KV Cache大小KV Cache大小跟模型大小、上下文长度、量化方式相关很难精确计算但可以用实测方式参考。先用nvidia-smi看看空闲显存。假设总显存24GB模型权重占14GB剩余约10GB。如果每个请求平均输出512个token上下文长度设4096每个请求KV Cache大约占0.5-1GB那并发大概在10-20之间。想要提升并发常见做法降低max-model-len限制最大上下文减少KV Cache预留。使用量化模型让模型权重占用更小腾出更多显存给Cache。增加GPU数量用tensor-parallel-size或者多实例部署。合理设置流式输出而不是一次性等完整结果减少峰值压力。5.2 常见故障与排查方法速查表现象可能原因解决办法CUDA out of memory显存不足或碎片调低gpu-memory-utilization、换量化模型、减少max-model-len模型下载慢/失败网络问题使用Modelscope镜像、或先下载到本地再加载API请求超时并发高、模型推理慢开启流式输出、增加GPU、限制max_tokensRailway/云服务器端口不通防火墙或安全组检查云安全组入站规则放行对应端口ImportError: libcublas.soCUDA依赖缺失安装PyTorch对应版本的CUDA依赖pip install torch --index-url ...Ollama启动后GPU不可用驱动未装或权限不足检查nvidia-smi确认用户有权限访问GPU中文输出乱码模型未正确加载tokenizer重试加载确认模型路径正确不要随意改加载方式5.3 后台运行与开机自启开发时可以前台跑但生产环境必须让服务在后台稳定运行服务器重启后也要自动拉起。我习惯用systemd管理vLLM服务。新建一个service文件vim /etc/systemd/system/vllm.service内容如下[Unit] DescriptionvLLM API Server Afternetwork.target [Service] Userroot WorkingDirectory/data EnvironmentPATH/root/miniconda3/envs/vllm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin ExecStart/root/miniconda3/envs/vllm/bin/python -m vllm.entrypoints.openai.api_server \ --model /data/models/Qwen2.5-7B-Instruct \ --served-model-name qwen2.5-7b \ --tensor-parallel-size 1 \ --host 0.0.0.0 \ --port 8000 [Install] WantedBymulti-user.target执行systemctl daemon-reload systemctl enable vllm systemctl start vllm systemctl status vllm查看日志用journalctl -u vllm -f非常方便。5.4 Linux运维实用命令清单部署和排查过程中下面这些命令我几乎每天都要用# 查看显存状态 nvidia-smi # 查看内存和swap free -h # 查看磁盘占用 df -h # 查看端口占用 lsof -i:8000 # 查看进程 ps aux | grep vllm top # 查看GPU进程 nvidia-smi --query-compute-appspid,used_memory --formatcsv # 持续查看日志 journalctl -u vllm -f # 测API耗时 curl -w time_total: %{time_total}s\n -X POST http://localhost:8000/v1/chat/completions ...用得多了自然会记住初期记不住也没关系用的时候查就行。6. 项目上线后的一些经验和后续扩展方向前几节把部署流程和问题排查讲得比较透了最后聊一点我自己的体会。踩过几次坑之后我最深的感受是部署大模型的难点不在跑起来而在稳定地跑下去。跑起来只需要一条ollama run命令但要让服务在业务流量下稳定不OOM、延迟可控、请求不超时这才是真正的功夫。一个很实用的经验先小后大。第一次部署不要一上来就上70B模型用7B模型跑通全链路再换更大的模型。这个全链路包括模型加载、API调用、权限管理、日志监控、告警。很多问题在小模型上出现时更容易定位。另外有条件的话一定要做好监控。至少要看四类指标GPU显存利用率接近100%时说明模型权重大或并发高及时扩容。GPU温度长时间高温会降低性能甚至烧卡注意散热。API响应延迟P95延迟超过用户预期时优化模型或提升硬件。错误率频繁超时或500错误要查服务日志和GPU显存碎片。后续扩展方向上如果你想让模型更贴合业务可以做领域微调用LoRA在消费级显卡上也能跑如果想让多个模型共享显存可以用vLLM的多模型部署或者单独起多实例按路由分发如果要接入企业微信这类办公系统把API用到的base_url指向你的服务就行实际上大模型只是个后端跟这些系统集成是很自然的事。最后再分享一个小技巧部署完成后一定要在防火墙上限制端口访问权限不要把8000端口直接裸奔到公网。用nginx做反向代理加一层鉴权这样既安全负载均衡也更方便。大模型部署并不是什么高不可攀的事只要你有一台带NVIDIA显卡的Linux服务器照着上面这些步骤走一遍很快就能跑起来属于自己的模型服务。等真正跑通了你会回来感谢自己按下回车那一刻的勇气。