1. 部署前先想清楚:你的场景决定一切
1.1 本地部署和调用API,到底怎么选
很多朋友一听到“大模型”三个字,手里攥着服务器就想往上装,结果装到一半发现显存爆炸、速度感人、维护成本比买API还贵。我平时被问得最多的问题就是:“博主,我到底要不要在自己服务器上部署大模型?”
我的回答一般比较直接:先看你的业务到底需不需要本地部署。
如果只是写摘要、做翻译、跑RAG问答这类通用任务,厂商API完全够用,按量付费还不用管运维。可一旦涉及私有数据不能出内网、单条调用频率高到API按量计费吃不消、或者需要自定义模型行为和微调,那本地部署就成了刚需。毕竟数据主权和数据合规这两个词,在不少行业里不是选择题,而是必答题。
还有一个容易被忽视的点:本地部署是学习大模型技术栈最好的入口。 模型怎么推理、显存怎么分配、请求怎么排队、并发怎么调优,这些事不亲手摸一遍服务器,光靠看文档是学不会的。哪怕你最后生产环境还是用云API,本地把这套链路跑通一遍,收益也远大于那几天折腾的时间成本。
1.2 硬件评估:显存是硬通货
确定要本地部署之后,第一个绕不开的话题就是硬件。
大模型推理的核心瓶颈不在CPU,不在内存大小,而在 GPU显存。显存决定了你能跑多大参数的模型、能同时服务多少个并发请求。这里的逻辑其实跟搬家很像:冰箱能不能搬进新房,不看你家客厅有多宽敞,而是看电梯门能不能进。模型能不能跑,也先看显存入口够不够。
我见过很多踩坑案例,比如用一张8G显存的卡去跑13B模型,加载权重就把显存吃满了,生成一个token要等半天,最后只能含泪换模型或者切量化。选硬件之前,请先用一个简单算式评估:
模型文件大小(GB)约等于参数(B)× 精度字节数。
7B模型用FP16,权重就要14GB;用Q4量化,大概压缩到4GB左右。推理时除了权重,还需要给KV Cache和激活值留空间,所以实际操作中要预留1.5到2倍的余量。
如果手上已经有服务器,先别急着下单买卡,用 nvidia-smi 看一眼当前GPU的显存和驱动状态,再决定是买新卡、租云GPU,还是老实选个小参数量模型。我见过有人用16G显存的卡硬跑70B量化模型,虽然能勉强加载,但生成速度慢到怀疑人生,这种体验属于典型的“能用和好用之间的巨大鸿沟”。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Linux环境准备:驱动、CUDA与基础工具
2.1 确认硬件与驱动状态
在Linux服务器上部署大模型,第一步不是急着 pip install 什么,而是先把底层环境摸清楚。
先说驱动。NVIDIA显卡需要安装对应版本的驱动,驱动版本和CUDA版本之间有兼容矩阵,版本对不上后面各种幺蛾子。登录服务器后,先输入:
bash复制nvidia-smi
如果正常输出显卡型号、驱动版本、显存占用等信息,说明驱动已经就绪。如果提示 command not found,那就要先装驱动。Ubuntu/Debian系可以用:
bash复制sudo apt update
sudo apt install nvidia-driver-535
CentOS/RHEL系则用:
bash复制sudo yum install nvidia-driver-latest
装完驱动建议重启一下服务器再验证。为什么非要重启?因为驱动涉及内核模块加载,不重启容易加载了旧模块,看起来装好了实际上还是没生效。
2.2 CUDA与cuDNN安装要点
驱动就绪不等于CUDA就绪。很多人把驱动和CUDA混为一谈,实际上驱动是跑在系统层面的,CUDA是GPU计算的运行时和工具链,模型推理框架需要依赖CUDA。
检查CUDA版本:
bash复制nvcc --version
这里有个很容易踩的坑:nvidia-smi 显示的CUDA版本是驱动支持的“最高版本”,并不代表系统里已经安装了对应版本的CUDA Toolkit。 比如 nvidia-smi 显示 CUDA Version: 12.2,只能说明驱动支持到12.2,但你系统里的运行时版本可能还是11.8。我当时第一次部署时就在这卡了两天,后来才发现两个命令查出来的版本不一样,场景完全不同。
安装CUDA推荐用官方runfile而不是deb包,因为runfile可以自定义安装路径,避免污染系统目录。装完之后记得把环境变量写进 ~/.bashrc:
bash复制export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
再执行 source ~/.bashrc 让配置生效。
cuDNN主要影响部分框架的卷积运算性能,对大模型推理的影响没有训练那么明显。不过如果你后面要跑微调或基于Transformer的自定义模型,建议还是装一下。安装方式很简单,解压后拷贝到CUDA目录即可,注意版本要与CUDA匹配。
另外建议顺手装几个基础工具,部署时用得上:
bash复制sudo apt install git wget curl htop tmux
为什么特意提 tmux?因为大模型下载和镜像构建往往耗时很长,SSH一断整个进程就没了,放在 tmux 会话里跑,想断就断、想续就续,非常稳。
3. 模型选型与量化:别一上来就冲70B
3.1 主流开源模型怎么挑
环境准备好之后,接下来就是挑模型。很多新手的心态是“参数越大越厉害”,一上来就要跑70B甚至更大的模型,结果部署完之后只能看它转圈圈,体验极差。
我个人的建议是:先根据显存反推模型规模,再根据任务场景选模型系列。
当前开源生态里,几个主流系列各有侧重:
- Qwen系列:中文能力出色,文档和社区资源丰富,从0.5B到72B都有,适合中英文混合场景。
- Llama系列:英文能力较强,生态工具链完善,微调教程多,适合作为学习基座模型。
- DeepSeek系列:推理和代码能力突出,近几年热度很高,部署资料也比较多。
- Mistral系列:欧洲团队出品,参数效率高,小尺寸也有不错的性能。
如果显存是16G,优先考虑7B到14B的量化模型;如果有24G显存,可以考虑14B全精度或14B到32B的量化模型。硬上更大参数只会得到一个“能加载但没法用”的尴尬状态。
3.2 量化原理与选型建议
量化是部署大模型绕不开的话题。原理其实不复杂:模型的权重默认是FP16或FP32精度,占据大量显存。量化就是把权重从高精度压缩到低精度,比如从16位压缩到4位整数,代价是牺牲少量精度,换来显存占用大幅下降。
你可能会担心量化后模型变笨。实际体验是,4-bit量化对大多数任务的影响微乎其微,尤其是聊天、摘要、代码生成这类场景,基本感知不到质量下降。但在数学推理、长文本精确抽取这类任务上,量化确实会有一点精度损失,需要自己实测。
目前主流的量化格式有GGUF、GPTQ、AWQ等。GGUF配合llama.cpp/Ollama,部署简单,兼容性好,CPU和GPU都能跑;GPTQ和AWQ则更多用在vLLM这类高性能推理框架里,显存管理更精细。
选量化等级时记住一个原则:能用4-bit跑更大模型,就不要用8-bit跑小模型。 因为大模型即使量化了,其知识覆盖面和推理能力通常仍然优于小模型全精度。当然这只是通用经验,具体还要用你自己的测试集验证。
4. 推理框架选型:Ollama、vLLM、llama.cpp谁更合适
4.1 三种主流方案对比
环境备好、模型选定,接下来就是选推理框架。框架决定了部署的难度、支持并发的上限,以及后续维护的舒适度。
当前主流的开源推理框架主要有三个:Ollama、vLLM、llama.cpp。三者的定位和适用场景差异很大,选错了后面折腾程度翻倍。
我用一个表格直观展示它们的核心差异:
| 框架 | 定位 | 上手难度 | 并发能力 | 适合场景 |
|---|---|---|---|---|
| Ollama | 一键部署,开箱即用 | 极低 | 中等 | 个人使用、小团队内部工具、快速原型 |
| vLLM | 高性能推理引擎 | 中高 | 极高 | 生产环境、高并发API服务、需要精细调参 |
| llama.cpp | 轻量级推理库 | 中 | 较低 | CPU推理、边缘设备、需要深度二次开发 |
4.2 框架选择建议
Ollama 是我最推荐新手起步的方案。它把模型下载、权重转换、推理服务全部封装成几条命令,还自动处理GPU加速和端口监听,几乎是零门槛。内部原理上,Ollama基于llama.cpp,但在易用性上做了大量封装。你只需要 ollama pull qwen2.5:7b,然后 ollama run qwen2.5:7b,一个可交互的模型就跑起来了。它还自带OpenAI兼容的API接口,对后端开发者极其友好。
vLLM 则适合上了规模的生产场景。它最核心的武器是 PagedAttention,一种类似虚拟内存的管理方式,让显存利用率大幅提升。同样的单卡部署,vLLM的吞吐能到Ollama的好几倍,非常适合需要对外提供高并发API服务的场景。代价是配置参数多、部署流程复杂,对新手不算友好。
llama.cpp 是三者中最底层的方案。它支持纯CPU推理,也能调用GPU,对显存不够用的小伙伴来说是个救命选项。但它不提供开箱即用的API服务,需要自己写代码调用、自己管理进程。适合有开发能力、需要深度定制的场景。
从项目时间规划上,我建议两条腿走路:先用Ollama快速验证模型效果和业务可行性,如果后续并发上来了再平滑迁移到vLLM。不要一上来就研究vLLM的调度参数,很容易把热情耗光在环境配置上。
5. 完整部署实操:用Ollama跑通第一个模型
5.1 安装与模型拉取
这一节我用一个完整流程带你走一遍,全部命令都亲自验证过。
先装Ollama。官方提供了一键安装脚本:
bash复制curl -fsSL https://ollama.com/install.sh | sh
脚本会自动识别系统架构、下载对应二进制文件并注册systemd服务。装完先确认状态:
bash复制systemctl status ollama
如果服务没有自动启动,手动执行:
bash复制sudo systemctl start ollama
sudo systemctl enable ollama
服务启动后,拉取模型:
bash复制ollama pull qwen2.5:7b
这里我特意选7B模型,是因为它对显存和内存的要求都比较友好,适合作为第一个跑通的模型。如果你显存吃紧,还可以拉 qwen2.5:1.5b 或 llama3.2:3b。
拉取完成后,可以直接在终端里对话验证:
bash复制ollama run qwen2.5:7b
输入一句“你好,用一句话介绍你自己”,能正常回复就说明链路已经通了。
5.2 服务化配置与API调用
终端里跑通只是第一步,真正要给业务用,得把它变成HTTP服务。Ollama默认启动时会监听 127.0.0.1:11434,但如果你想在局域网内其他机器上访问,需要修改环境变量。
编辑systemd服务配置文件:
bash复制sudo systemctl edit ollama
写入:
ini复制[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
保存后重启服务:
bash复制sudo systemctl daemon-reload
sudo systemctl restart ollama
这时候其他机器访问 http://服务器IP:11434 就能连上了。调用API测试:
bash复制curl http://localhost:11434/api/generate -d '{
"model": "qwen2.5:7b",
"prompt": "用一句话解释什么是大模型",
"stream": false
}'
返回的JSON里 response 字段就是模型生成的内容。
如果要对接OpenAI生态的SDK,Ollama也原生支持兼容接口:
bash复制curl http://localhost:11434/v1/chat/completions -d '{
"model": "qwen2.5:7b",
"messages": [{"role": "user", "content": "你好"}]
}'
这意味着你可以直接用 openai Python包或LangChain来对接本地Ollama,业务代码不用做大改动。
必须提醒一下:对外网暴露11434端口之前,一定要考虑安全措施。 最简单的方式是用防火墙限制来源IP,或者加一层反向代理做鉴权。我自己踩过坑,裸奔的Ollama服务会被互联网上大量扫描工具盯上,轻则日志刷爆,重则被人恶意调用来刷token,账单和资源全完。
6. 性能调优实践:吞吐、时延与显存优化
6.1 调整并发与批处理参数
模型能跑了,下一步是关注性能。这阶段追求的目标有两个:降低单次请求时延、提升整体吞吐。
同样的硬件,不同的框架和参数,最终性能差距可能有一倍以上。先说说最影响体验的几个因素:
第一,并发数量。 Ollama默认的并发数是1,也就是说同一时刻只有一个请求在推理,其他请求全部排队。对内部工具来说问题不大,但对外提供服务就完全不够用了。可以通过环境变量提高并发:
bash复制sudo systemctl edit ollama
ini复制[Service]
Environment="OLLAMA_NUM_PARALLEL=4"
注意并发调到4意味着显存要多准备约4份KV Cache空间,如果显存本来就不宽裕,这个值不宜设太大。
第二,上下文长度。 上下文越长,推理时KV Cache占用越大,速度也会明显下降。默认通常能到4K或8K,但如果你的业务用不了那么长,可以手动限制:
bash复制ollama run qwen2.5:7b --num-ctx 2048
适当减少上下文长度,对生成速度的提升非常明显。
6.2 显存管理技巧
显存管理是部署过程中最容易出问题的地方。
先说第一条经验:不用模型的时候把它退掉。 Ollama默认会保留已加载的模型在显存中,哪怕10分钟没有请求也不释放。如果多个人共用一台服务器,且各自拉取了不同模型,显存很容易被占满。可以通过环境变量控制空闲卸载时间:
bash复制Environment="OLLAMA_KEEP_ALIVE=5m"
意思是模型空闲5分钟后自动从显存卸载,释放资源给其他任务。
第二条经验是监控。部署完第一时间配置监控,至少得知道“现在的显存用了多少”。我自己常用的组合是:
bash复制watch -n 1 nvidia-smi
实时刷新GPU状态,观察显存增长是否正常。如果发现显存被多次不同的推理引擎重复占用,可以排查一下是不是有旧进程没清理:
bash复制ps aux | grep python
第三条经验比较重要:如果你的服务器同时跑微调和推理,建议给两者分配不同的GPU。 用 CUDA_VISIBLE_DEVICES 环境变量可以指定进程使用哪张卡:
bash复制CUDA_VISIBLE_DEVICES=0 python run_inference.py
CUDA_VISIBLE_DEVICES=1 python run_training.py
物理隔离,互不干扰,排查问题也更有头绪。
7. 常见问题与排查技巧实录
7.1 启动失败类问题
问题一:Ollama服务启动失败,提示端口被占用。 多半是之前残留了旧进程,先用 lsof -i:11434 查占用,kill 掉之后再启动即可。
问题二:拉取模型时进度条卡住不动。 这通常和网络环境有关。可以设置代理(如果你有合规的代理通道),或者检查一下DNS解析是否正常:
bash复制curl -I https://registry.ollama.ai
如果网络不通,也可以直接从国内镜像站下载模型文件,再通过Ollama的本地导入功能加载,具体步骤官方文档写得很清楚。
问题三:CUDA error: out of memory。 这个最常见也最好理解——显存不够了。要么换更小的模型,要么开更低保的量化,要么关闭系统中的其他GPU进程释放显存。
7.2 性能不达标类问题
有朋友反馈:“我配置还可以,但生成速度就是上不去。”这种情况一般有三个排查方向:
先查输入到输出的日志耗时分布。 用curl直接请求API,加上 time 命令看总耗时:
bash复制time curl http://localhost:11434/api/generate -d '{"model":"qwen2.5:7b","prompt":"你好","stream":false}'
如果首字延迟很大,说明模型加载或调度花费太长时间;如果生成长文本整体慢,大概率是单线程推理瓶颈。
然后看CPU是否有异常占用。 有些框架在GPU推理之外,还需要CPU做tokenization、采样等工作,CPU跑满了也会拖慢整体速度。
最后看是不是显存不足导致的部分层跑在CPU上。 用 nvidia-smi 确认模型内存是否全部落在GPU上。如果发现GPU显存占用刚好卡在某个临界点,有一部分权重被交换到了内存,速度就会断崖式下跌。这种情况必须调整模型大小或量化等级。
7.3 稳定性问题
跑了一段时间后,服务可能出现“前几次请求正常,后面开始报错”的诡异现象。
这类问题大概率是内存泄漏或显存碎片化。推理框架长跑之后,显存中会散落大量碎片,新的KV Cache申请不到连续显存,就会申请失败。治本方案是周期性重启服务,或者在没业务低谷时用脚本自动reset:
bash复制sudo systemctl restart ollama
如果是vLLM,可以通过它的 --max-num-seqs 参数限制最大并发序列数,减少显存碎片产生的概率。
还有一个头部服务经常遇到的问题:请求队列堆叠导致的服务雪崩。 原因往往是某个请求上下文特别长,占用大量显存,后续请求全部排队。解决思路是给服务加一层负载均衡,或者设置合理的超时时间,宁可丢弃超时请求也不要让它们占据资源。
8. 后续还能往这些方向扩展
部署跑通了只是起点,后面可以折腾的方向还有很多,我挑三个最有价值的讲讲。
方向一:接入前端应用。 模型已经通过API提供能力了,接下来比较自然的就是做个聊天界面或者把它嵌入到现有业务里。用Gradio或Streamlit可以快速搭建一个Web演示页,让非技术同事也能体验模型效果。这个阶段你会发现,大模型的价值不在模型本身,而在跟业务场景结合的方式。
方向二:搭建RAG知识问答。 让模型回答私有文档、企业知识库里的内容,是本地部署最常见的生产需求。流程大致是:先把文档切块、向量化存入向量数据库,用户提问时先做相似性检索,再把检索结果拼进Prompt让大模型生成答案。开源工具链里Dify、FastGPT、LangChain都能快速搭一套原型,数据不出内网,隐私问题也解决了。
方向三:尝试模型微调。 如果通用模型在某些专业任务上的表现不尽如人意,微调是提升效果最直接的手段。在Linux服务器上用LLaMA-Factory这类开源工具,准备好训练数据后执行一条命令就能开始训练。注意微调比推理更吃显存,7B模型全参数微调需要40G以上显存,一般建议用LoRA这类参数高效微调方法,只需要约8-12G显存就能在消费级显卡上跑起来。
我在实际部署中发现,每台服务器的情况都不一样,别人能跑通的配置换到自己机器上未必行,所以复盘和记录特别重要。建议每完成一次环境搭建,就用Markdown记录下驱动版本、CUDA版本、依赖列表和踩坑过程,这些记录在下次部署时就是最宝贵的参考。
最后再分享一个小技巧:部署完成后,把 ollama list 和 nvidia-smi 的输出存放到一个固定路径,作为服务器的“健康基线”。后续每次调整配置,都拿当前状态和基线对比,很快就能发现哪些改动影响了性能。这套方法帮我省下了无数排查时间,希望你也能用上。
