尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Linux服务器部署大模型实战:从Ollama到vLLM的完整指南

Linux服务器部署大模型实战:从Ollama到vLLM的完整指南 1. 项目概述为什么部署大模型最后都绕不开Linux服务器大模型这波浪潮起来之后我身边越来越多同事开始接触“大模型Linux服务器部署”这个事。有的是公司内部要做私有化的知识库问答有的是个人买了块显卡想在服务器上跑一个私有聊天机器人还有的是课程作业需要把模型跑起来出接口。不管哪种需求最后落地的时候基本都会走到同一条路把开源大模型部署到一台Linux服务器上对外提供API接口。这篇文章我会把自己从零开始踩坑到真正跑通的经验写出来涵盖硬件选型、驱动环境、推理框架选择、Ollama和vLLM两套完整实操流程以及最近帮朋友排查时遇到的典型问题。适合刚接触大模型部署、或者已经在Windows上跑过但想迁到Linux服务器上的朋友。全文不会绕弯子就是直接告诉你什么方案能跑通、为什么这么选、以及哪些坑我已经替你踩过了。1.1 为什么推荐Linux而不是Windows这不是在制造阵营对立而是实际对比下来Linux服务器部署大模型的成本确实低得多。一个很现实的原因是生态。NVIDIA驱动、CUDA工具包、PyTorch等深度学习框架基本都是Linux上优先适配。官方文档里给的安装命令大多是apt、yumGPU容器镜像也默认基于Linux像nvidia-container-toolkit这种组件在Windows上压根没法直接用。你真想在Windows里跑大模型服务最常见的方式是装WSL2本质还是开了一个Linux子系统那还不如直接上Linux来得干净。另一个原因是资源占用。Windows系统本身吃内存和CPU加上图形界面、后台服务一台服务器如果装了Windows白白占掉好几个G的内存这对跑大模型来说是实实在在的浪费。Linux命令行界面下系统占用非常低同样一台机器能留给模型推理的资源更多。再说运维层面。真实生产环境里大模型通常要作为后台服务常驻运行需要配systemd、写日志轮转、设置开机自启、用Docker做环境隔离这些操作在Linux下都是一条命令或者一个配置文件的事。Windows上做类似的守护进程管理要多费不少劲。所以我的建议很简单正儿八经要部署就用Linux哪怕只是在一台旧电脑上玩装个Ubuntu Server也值得。1.2 本次部署的整体思路与方案选型在动手装环境之前先理清楚整条链路。大模型部署看起来高大上拆开其实就四步准备好硬件和系统、装好GPU驱动和运行环境、把模型文件加载到显存、对外提供推理接口。模型文件怎么加载、接口怎么提供这一步的选择最多。目前主流方案有两类一类是Ollama这种开箱即用的工具适合个人使用和小并发场景另一类是vLLM这类专门为生产设计的推理引擎适合并发高、要求吞吐量的服务。我这次会两套都讲但侧重点不同。如果只是自己测试、局域网内几十个人用Ollama是最短路径一条命令装完两条命令就能跑起来如果是公司内部多个业务系统接入或者要做性能压测vLLM是更稳的选择它用到了一系列针对GPU显存和调度优化的手段吞吐量比Ollama高不少。模型方面以当前主流的开源中文模型Qwen2.5系列为例正好覆盖7B、14B这种最常用的规模。这类模型在消费级显卡上能跑在专业GPU服务器上也能跑非常典型。2. 环境准备硬件、系统、驱动与容器很多人容易犯一个错误模型还没下载呢先把环境一通猛装最后发现显卡驱动跟CUDA版本对不上或者Docker起不来白白折腾一整天。部署大模型其实讲究顺序先确定显存规格再装对应驱动最后才轮到推理框架。2.1 显存估算与硬件选型大模型推理最核心的瓶颈就是显存。模型参数不是从磁盘流式读取的而是要完整装进显存等待被调用显存不够直接OOM连跑都跑不起来。显存占用怎么估算一个最简单的公式模型权重显存约等于参数量乘以每个参数的字节数。以FP16精度为例每个参数占2字节那么一个7B参数的模型权重就需要约14GB显存。14B模型是28GB听起来还够用但这还只是权重部分。实际推理时还要加上KV Cache、CUDA上下文、推理引擎自身的临时缓冲区通常额外预留2到4GB才算稳妥。所以选硬件前先做一道简单的数学题。如果你手头是一张消费级RTX 4090 24GB跑7B模型用FP16完全没问题跑14B模型就会比较紧张需要用量化方案压缩权重比如INT4精度下7B模型只需要约4GB14B约8GB。如果是企业级的A100 80GB或者多卡服务器那基本上主流开源模型都能放心跑。我整理了一个参考表格大家可以直接对照硬件配置可跑模型规模推荐精度适合场景RTX 3060 12G7B以下INT4/INT8个人学习、低并发测试RTX 4090 24G7B-13BFP16/INT8个人使用、小团队服务L40S/A100 48G以上14B-70BFP16企业内部生产服务多卡A100/H80070B及以上FP16/INT8高并发、大规模服务这里提醒一句买卡不要只看显存还要注意显存带宽。大模型推理是典型的带宽密集型任务显存带宽低的卡跑起来会很吃力。消费级显卡里4090的带宽就明显高于同系列的60级别这也是为什么同样7B模型4090跑起来速度快一大截。2.2 Linux系统安装与GPU驱动系统选择上Ubuntu 22.04 LTS是当前最稳的选择因为NVIDIA驱动、CUDA、PyTorch都有针对它的预编译包遇到问题搜索也最容易找到答案。Debian、CentOS系也能装但配套工具链总是慢半拍。国内的一些服务器系统如果基于Ubuntu或CentOS的包管理方式同样可以按对应命令操作。装好系统后的第一件事不是直接装CUDA而是先看一眼驱动状态。执行nvidia-smi如果已经能显示出GPU型号和显存说明驱动是好的只需要确认版本如果提示command not found则先安装驱动。Ubuntu下最简单的方式是通过系统自带的驱动管理器# 推荐使用ubuntu-drivers工具自动选择合适驱动 sudo ubuntu-drivers autoinstall # 重启后验证 nvidia-smi驱动版本和CUDA版本是配套关系。注意nvidia-smi显示的是当前驱动支持的最高CUDA版本实际使用不一定要装到那么高关键是你要用的推理框架需要什么版本。比如vLLM当前要求CUDA 12.x那驱动至少选支持CUDA 12的版本。这一点容易搞混我在后面vLLM安装环节还会再说。2.3 容器与Python环境环境隔离这件事吃过亏的人才懂。我见过有人直接在系统环境里装PyTorch装到一半把系统的Python环境弄坏了连pip都用不了。大模型部署涉及Python、CUDA运行时、各种依赖库版本之间相互影响很大强烈建议用Docker或者Python虚拟环境隔离。Docker方案对生产环境最友好。安装Docker后还需要装nvidia-container-toolkit这样容器里才能使用GPU# 以Ubuntu为例安装nvidia-container-toolkit curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \ sed s#deb https://#deb [signed-by/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g | \ sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list sudo apt-get update sudo apt-get install -y nvidia-container-toolkit sudo systemctl restart docker装完后用docker run加--gpus all参数容器内就能直接调用GPU了。这条命令在之后的Ollama部署中还会用到因为官方镜像本身就推荐用容器方式运行。3. 推理框架选型Ollama还是vLLM框架选型是整个部署过程中最容易纠结的环节。我的建议是别纠结先想清楚你的场景是“给自己用”还是“给别人用”这两个答案对应的框架完全不同。3.1 Ollama上手最快的本地推理工具Ollama本质上是一个大模型运行和管理工具它帮用户解决了两件麻烦事一是模型下载和格式转换二是推理服务的启动。它把常见的开源模型做成了可以直接拉取的归档一条ollama pull命令就能下载好按要求量化过的模型一条ollama run就能启动交互式对话。很多人说的“ollma部署大模型”指的就是这个工具。Ollama还内置了一个兼容OpenAI格式的HTTP API服务默认监听11434端口。这就意味着你不需要额外写适配代码任何会调OpenAI接口的程序都能通过改一下base_url来对接本地模型非常方便。它的缺点是并发吞吐能力一般。长上下文、多用户并发场景下Ollama的性能会明显下滑而且可调的参数比较少不太适合做精细的性能调优。这一点从架构上也能理解它把易用性放在第一位是个通用工具而非大规模推理引擎。3.2 vLLM面向生产的高并发推理引擎同样是启动一个OpenAI兼容API服务vLLM的性能表现要好得多。它做对了几件事使用PagedAttention管理KV Cache显存利用率大幅提升内置连续批处理机制多个并发请求会动态拼接到同一个批次里推理而不会一个请求卡住其他请求支持张量并行多张GPU卡可以协同推理同一个模型。代价是上手成本高一些模型格式、启动参数都需要自己关注对环境的依赖也更多。大多数情况下需要装PyTorch和一堆依赖包不像Ollama那样一个二进制文件搞定。不过一旦部署好vLLM的服务质量和稳定性对得起这个折腾过程。我做过一次简单压测同样一台机器跑同样一个7B模型vLLM的每秒请求处理数差不多是Ollama的三到四倍而且越到高并发差距越明显。3.3 两套方案的适用场景对比我整理了一个对比表方便你按自己的场景选择对比项OllamavLLM安装复杂度极低一条命令中等需要Python环境模型管理自动下载、量化、管理需要自己准备模型文件并发性能一般适合轻量使用优秀适合生产环境API格式OpenAI兼容OpenAI兼容显存优化较基础强PagedAttention多卡支持有限原生支持张量并行推荐场景个人学习、小团队企业内部服务、高并发如果你拿不准我建议先装Ollama把链路跑通哪怕后面生产环境要用vLLM先能成功调用一次模型再说心态上就不慌了。4. 实操在Linux服务器上把大模型真正跑起来理论讲再多不如亲手把服务拉起来。下面两套方案我都按完整流程写出来照着敲命令就能跑通。4.1 使用Ollama部署大模型Ollama的安装可以算是我见过最友好的之一。一条命令搞定curl -fsSL https://ollama.com/install.sh | sh脚本会自动完成二进制安装和systemd服务注册。装完后默认服务就启动了可以用ollama list查看现有模型列表。因为Ollama默认把模型存放在/usr/share/ollama/.ollama/models如果系统盘空间不大建议先改到数据盘再下载模型。方法是通过环境变量指定# 修改服务配置追加Environment行 sudo mkdir -p /etc/systemd/system/ollama.service.d sudo tee /etc/systemd/system/ollama.service.d/override.conf EOF [Service] EnvironmentOLLAMA_MODELS/data/ollama/models EOF sudo systemctl daemon-reload sudo systemctl restart ollama第一次下载模型前做个检查很关键看看磁盘剩余空间够不够。以Qwen2.5 7B的4bit量化版为例文件大小大约4.7GB14B的量化版约9GB。用以下命令拉取模型# 拉取Qwen2.5 7Bollama会自动选择合适的量化版本 ollama pull qwen2.5:7b下载速度看网络情况如果比较慢可以考虑把模型下载请求发到模型托管平台ModelScope然后在Ollama中导入已有的GGUF格式文件。这条路径适合服务器网络到国外资源延迟较高的场景。模型拉下来之后先直接在终端里试一轮对话确认没有报错ollama run qwen2.5:7b进入交互界面后随便聊两句比如让它写一段Python代码看看响应速度和回答质量。确认没问题再用curl测试HTTP API是否正常curl http://localhost:11434/v1/chat/completions \ -H Content-Type: application/json \ -d {model: qwen2.5:7b, messages: [{role: user, content: 你好}]}看到返回JSON里包含content字段这一步就圆满了。这时候你的Linux服务器已经变成了一台有OpenAI兼容接口的模型服务器局域网内任何程序都能通过http://服务器IP:11434来调用。4.2 使用vLLM部署大模型vLLM的安装稍麻烦一些但它给我的安全感更足因为我能精确控制每一块显存怎么用。推荐用Docker部署免去Python环境互踩的麻烦。这里以Qwen2.5 7B为例# 拉取官方vLLM镜像版本号可以按需调整 docker pull vllm/vllm-openai:latest # 启动服务加 --gpus all 才能让容器使用GPU docker run --gpus all \ --ipchost \ -p 8000:8000 \ vllm/vllm-openai:latest \ --model Qwen/Qwen2.5-7B-Instruct \ --served-model-name qwen2.5-7b \ --max-model-len 8192注意这里的几个参数--served-model-name是你对外提供的模型名可以随便起调用API时要用这个名字--max-model-len控制最大上下文长度直接影响KV Cache占用如果显存紧张可以下调到4096--port默认是8000我用-p把宿主机8000映射到容器8000。首次启动时vLLM会从模型仓库下载模型文件。如果下载缓慢一样建议先通过ModelScope把模型文件下载到本地然后挂载目录进去# 假设模型文件已下载到/data/models/Qwen2.5-7B-Instruct docker run --gpus all \ --ipchost \ -v /data/models:/models \ -p 8000:8000 \ vllm/vllm-openai:latest \ --model /models/Qwen2.5-7B-Instruct \ --served-model-name qwen2.5-7b \ --max-model-len 8192启动后观察日志看到约等于“Starting vLLM server on http://0.0.0.0:8000”的提示说明服务已经起来了。同样用curl验证一下接口curl http://localhost:8000/v1/chat/completions \ -H Content-Type: application/json \ -d {model: qwen2.5-7b, messages: [{role: user, content: 用Python写一个快速排序}]}vLLM还提供了一个很有用的指标接口访问http://localhost:8000/metrics可以获取Prometheus格式的性能指标包括吞吐量、请求延迟、显存使用等。生产环境中接入监控系统时非常有用。4.3 让模型服务常驻后台与开机自启用docker ps看容器状态是很快但Docker容器重启策略只能保证容器崩溃时自动起来没法保证宿主机重启后容器跟着起来。一个更稳妥的做法是给容器加--restartalways参数docker run --gpus all \ --restartalways \ --ipchost \ -p 8000:8000 \ vllm/vllm-openai:latest \ --model /models/Qwen2.5-7B-Instruct \ --served-model-name qwen2.5-7bOllama则更简单安装脚本默认就注册了systemd服务无非在遇到OOM问题时需要检查服务状态。查看服务最近日志的命令是journalctl -u ollama --no-pager -n 100如果看到OutOfMemory相关的字样说明需要调整Ollama的最大上下文长度参数OLLAMA_NUM_PARALLEL等。Ollama官方支持通过OLLAMA_NUM_PARALLEL控制并行请求数这个值设大了可能显存不够设小了浪费性能建议从1开始慢慢加。5. 常见问题与排查技巧实录部署过程不会一帆风顺这里把我在实际项目中碰到的典型问题和解决思路整理出来希望能帮你少走弯路。5.1 显存不足导致OOM显存不够是最常见的问题尤其在用FP16精度跑模型的时候。一次我在一台24GB显存的机器上部署一个13B模型模型加载成功了但一发起推理请求就报CUDA out of memory。这种问题排查思路很固定。先用nvidia-smi看一下当前显存占用看看是模型本身就占不满还是加载模型后剩余显存不够分配KV Cache。如果剩余显存不多优先调整--max-model-len参数把上下文长度从8192降到4096KV Cache的占用会显著下降。还不行的话就只能换更低精度的量化版模型比如从FP16换成INT4显存需求可能从28GB降到7GB左右。还有一个容易忽略的点是同一个GPU上可能同时跑了好几个推理服务。用nvidia-smi能看到每个进程的显存占用把不用的进程清掉释放显存有时候比调整模型参数更立竿见影。5.2 模型下载缓慢或失败大模型文件动辄几个GB网络环境不好时下载半小时以上是常事。Ollama的模型源默认在海外如果下载速度不理想可以考虑从ModelScope客户端下载模型文件后在Ollama中导入。ModelScope上有专门的Ollama支持下载完的GGUF文件可以用ollama create命令打包成本地模型ollama create my-qwen -f /data/gguf/ModelfileModelfile里只需要写一行FROM /data/gguf/qwen2.5-7b-q4_k_m.gguf然后Ollama就会把它注册成本地模型。对vLLM来说我强烈建议提前用huggingface-cli或者ModelScope的Python SDK把模型仓库完整下载到本地部署时挂载进去。这样做不仅能规避网络不稳定问题还能避免每次重新部署都要重复下载大文件的痛苦。5.3 推理速度慢与并发能力不足推理速度慢先分清楚是“单请求慢”还是“并发时整体吞吐低”。单个请求就慢大概率是模型太大或者显存带宽不够。有条件的减小模型规模或者使用更激进的量化比如跑7B模型用FP16在24GB显存上可能只有20 tokens每秒左右换成4bit量化能到40到50。如果并发时整体吞吐低则需要关注推理引擎的批处理能力。Ollama的默认并行度很低可以通过环境变量OLLAMA_NUM_PARALLEL调高并行请求数但注意观察显存占用vLLM则默认开启连续批处理并发表现一般不用调太多参数。最后一个性能杀手是上下文长度。很多人习惯把max-model-len设得很高比如32768但用户实际使用过程中根本不会一次传这么多token。长上下文意味着KV Cache占满显存不仅可用的批处理空间变小甚至可能导致需要额外重复计算。先评估业务需求再设置合适的max-model-len一般8192已经能满足绝大多数场景。6. 写在最后一些部署体会和实用建议做Linux服务器部署大模型这件事回头看最耗时间的其实不是安装本身而是环境适配和问题排查。版本对不对、驱动匹配不匹配、显存够不够每一步都有可能卡住。我个人比较推荐的路径是第一阶段先用Ollama把链路整体跑通熟悉模型下载、API调用、基本参数调整别一上来就折腾vLLM第二阶段再部署vLLM重点观察它在并发场景下的性能优势结合vLLM的metrics指标做参数调优第三阶段才开始考虑多卡并行、微调等进阶操作。这个过程中写文档记录每一条命令和环境版本非常值得哪怕只是记在备忘录里也能在下次重装时省下大量时间。最后分享一个小技巧部署完成后第一时间把服务配置写成纯Docker Compose文件提交到Git仓库包括启动命令、环境变量、端口映射。之后无论换机器还是重建环境只要拉代码、跑docker compose up就能恢复服务。这个习惯我在好几个项目里都验证过是真的省心。
返回列表