最近想把Llama-3-8B部署到本地做代码生成,用的是4090 24G显存,按理说8B模型量化成4bit应该跑得动。但我实际用Ollama跑Q4_K_M版本,生成速度只有8-10 token/s,还不如我朋友用CPU跑的速度。我看网上别人同配置都能跑到40+,怀疑是不是我的显存频率设置有问题,或者Ollama默认没开GPU加速?另外我试过用vLLM部署,但量化模型老报错,有没有比较稳的部署方案?求有经验的大佬指点一下,我是刚接触这块,不太确定该往哪个方向调优。
本地部署7B模型显存够但推理很慢,是量化问题还是配置不对?
全部回复
共 38 条大概率是Ollama没吃到GPU,你跑ollama ps看下进程是CPU还是GPU跑的,4090跑8B Q4应该轻松50+。另外别用Ollama的量化,直接下原版GGUF或者用llama.cpp自己量化,vLLM对4bit支持确实一般,建议直接上exllamav2或者sglang,代码生成场景吞吐会好很多。
这速度确实不对劲,4090跑Q4_K_M的8B模型正常应该能到50+ token/s。你检查一下Ollama的日志,看有没有加载到CUDA,有时候它默认会用CPU跑,或者没装对CUDA版本。我之前也遇到过类似问题,后来发现是Ollama的模型没下完整,重新拉了一遍就好了。另外,你换个思路,直接用llama.cpp的官方构建试试,它比Ollama对量化模型的支持更直接,而且能手动指定GPU层数。至于vLLM报错,大概率是量化格式不兼容,你可以试试先转成FP16跑通再量化,或者直接用AWQ格式,vLLM对AWQ支持更友好。还有个小细节,检查下你的PCIe带宽和供电模式,4090在低功耗状态下性能会缩水很多,开个高性能模式说不定有惊喜。如果还不行,试试换llama.cpp的Q5_K_M版本,有时候量化太狠反而会触发CPU回退。
4090跑Q4_K_M的Llama-3-8B只有8-10 token/s,这肯定不是硬件瓶颈,你朋友CPU跑得比你快那更说明问题在软件层。大概率是Ollama没吃到GPU,你可以先跑一下ollama ps看看显存占用和进程状态,如果显示PROCESSOR是CPU那就是没走CUDA。另外量化本身不会拖慢速度,Q4_K_M反而比FP16快不少,但Ollama对某些量化格式的优化确实不如exllama或llama.cpp直接。vLLM报错多半是量化格式不兼容,你试试用FP16或AWQ的版本,或者干脆用llama.cpp的server模式,配合--n-gpu-layers 999参数,把层全塞进显存,速度至少翻三倍。还有个小坑,4090的PCIe带宽如果跑在x8或者开了什么省电模式也会影响,但你这速度更像是没走GPU。建议先装个nvtop看实时占用率,如果GPU利用率是0%,那就是Ollama没调用CUDA,重装一下带gpu版本的Ollama,或者直接换llama.cpp。我自己的经验是,同样模型用llama.cpp跑能到35-40 token/s,Ollama经常会有这种莫名其妙的问题,你可以交叉验证下。
4090跑8B Q4只有8-10 tok/s肯定不对劲,先查一下ollama serve的日志确认有没有加载到CUDA,然后用nvidia-smi看显存占用和功耗,如果功耗只有几十瓦那多半是没走GPU。vLLM对AWQ或者GPTQ支持更稳,你可以试试用llama.cpp的server模式,也支持OpenAI接口,而且对量化兼容性好很多。另外代码生成任务建议把context长度调小一点,KV cache吃满也会拖慢速度。
8-10确实不对,4090跑Q4_K_M的8B起码应该30+。你先确认下ollama的日志或者nvidia-smi看看推理时GPU占用率,大概率是没走GPU。另外别用vLLM跑GGUF,它原生支持的是GPTQ和AWQ,你量化格式不对当然报错,想省事直接ollama跑原版fp16或者换llama.cpp试试,速度会正常很多。
4090跑Q4才10token肯定是不对劲的,先看看ollama serve日志里有没有GPU offload的提示。
先看任务管理器里GPU占用,Ollama默认CPU跑,设OLLAMA_NUM_GPU=1就能翻倍。
Ollama默认确实可能没吃到GPU,你跑一下ollama ps看看显存占用,如果没加载进GPU那就得检查下环境变量或者服务配置。另外8B用Q4_K_M在4090上正常应该30+ token/s,8-10明显不正常,建议先排除是不是CPU在跑。vLLM对量化支持一般,图省事可以直接用llama.cpp或者ExLlamaV2,对4bit支持很稳,速度也快很多。
你这条速度确实离谱,我怀疑是Ollama把模型拆到CPU和GPU混合跑了,或者驱动没装好。试下用nvidia-smi看下推理时GPU利用率,如果没跑满就手动设置OLLAMA_NUM_GPU=999强制全量进显存。vLLM报错大概率是量化格式不兼容,换AWQ或者GPTQ试试,要不直接上llama.cpp的server,配好之后速度能翻好几倍。
显存够但慢,大概率是没走GPU,Ollama有时候会自作主张用CPU。你可以在启动时加个OLLAMA_FLASH_ATTENTION=1,或者直接命令行里指定--gpu。至于vLLM报错,多半是版本和量化库对不上,建议用llama.cpp的编译版,跑4bit很稳,4090跑8B基本能到40+,
Ollama大概率没吃满GPU,试试nvidia-smi看占用率,再手动设下OLLAMA_NUM_GPU=1。
这速度确实不对劲,我3070跑Q4_K_M的8B都有20多token/s,你4090不可能只有8-10。大概率是Ollama没吃满GPU,你打开任务管理器看看显存占用和GPU compute利用率,如果显存没占满但利用率上不去,那就是没走GPU。Ollama默认是自动检测的,但有时候驱动或者环境变量会把它搞到CPU模式去,你试试ollama ps看看当前模型跑在哪个设备上。至于vLLM报错,多半是量化格式不兼容,vLLM对GPTQ和AWQ支持好,但GGUF得靠llama.cpp那套,建议你直接用llama.cpp或者它的server模式,配好n_gpu_layers=-1,速度应该能拉满。还有个坑是电源模式,笔记本的话一定要插电+开性能模式,不然显卡会锁功耗。如果这些都排除了,试试关掉其他吃显存的应用,24G跑8B是绰绰有余的,不存在显存瓶颈。最后说一句,4090跑40+是正常的,你这速度肯定不是硬件问题,就是软件配置没到位。
大概率不是显存频率的问题,4090跑8B Q4理论上不该这么慢。你打开任务管理器或者nvidia-smi看一眼ollama进程的GPU占用率,如果一直是0%那就是没走CUDA,多半是ollama serve没装好或者驱动环境有问题。另外vLLM对量化格式支持比较挑,建议先跑原版FP16试试速度,如果正常再考虑换GPTQ或者AWQ的量化版本。
顺便说下,8-10 token/s确实离谱,我3090跑Q4_K_M都有35左右。你试试在ollama里用ollama run llama3:8b-instruct-q4_K_M --verbose看看有没有打印出GPU offload的信息,或者干脆重装一遍ollama,有时候默认的CPU模式会莫名卡住。稳定方案的话,llama.cpp的server模式配好--n-gpu-layers 99也挺省心的。
40+大概率是人家用vLLM或者SGLang跑的,Ollama对4bit量化支持本来就一般,尤其代码生成这种长上下文场景容易撞上内存带宽瓶颈。你4090显存频率肯定没问题,先跑个nvidia-smi确认下进程是不是真的在GPU上,Ollama有时候会偷偷切回CPU。vLLM报错的话试试不用量化直接加载FP16,24G跑8B其实够用,速度能快很多。
说实话你这速度肯定不正常,4090跑Q4_K_M的8B模型再怎么着也得30+ token/s起步。我猜大概率是Ollama没调用到GPU,你可以在终端跑一下ollama ps看看有没有显示processor是GPU,如果显示CPU那就是纯内存跑,速度当然拉胯。另外你检查下是不是装了老版本驱动或者CUDA没配对,Ollama有时候会静默回退到CPU模式,这坑我踩过。
量化本身不是瓶颈,Q4_K_M对于8B模型来说已经够轻量了,真正影响速度的是解码时的batch size和KV cache分配。Ollama默认设置比较保守,你可以在Modelfile里调一下num_ctx和num_gpu参数,把gpu层数拉满试试。vLLM报错大概率是版本兼容问题,建议直接用官方推荐的transformers+bitsandbytes方案,或者换个思路试试llama.cpp的server模式,那个对量化支持最稳。
还有个容易被忽略的点,你朋友CPU跑得快可能是用的AVX512或者苹果的Metal,x86平台跑Ollama的CPU推理反而有优化优势。你4090如果显存频率被锁在P2状态也会掉速,用nvidia-smi查一下当前功耗和时钟,如果跑在P8那就是节能模式没切过来。最后实在不行就换个推理框架,比如ExLlamaV2,对4bit量化优化非常激进,我实测同模型能比Ollama快一倍。
Ollama默认确实可能没吃满GPU,你先用nvidia-smi看下显存占用和功耗,如果功耗才几十瓦那就是纯CPU在跑,检查下OLLAMA_HOST或者服务日志确认GPU被识别。另外Q4_K_M在8B上本来就不算快,换Q4_0或者Q3_K_S试试,4090跑8B应该能到30+。vLLM对量化支持确实麻烦,我建议直接上llama.cpp的server模式,或者用SGLang,对新手更友好,报错也少。你那个40+的速度大概率是别人用了TP或更好的量化方案,别太纠结数字,先确认GPU在干活。
4090跑这个速度确实不对劲,先检查下ollama的日志看有没有用上GPU,多半是默认跑CPU了。
这速度确实不正常,4090跑Q4_K_M的8B模型,哪怕没优化到位也不该只有个位数。我怀疑不是量化本身的问题,而是Ollama没吃到GPU加速,你可以装个nvtop看下显存占用和GPU利用率,如果跑的时候显存没吃满或者利用率上不去,八成是没加载到CUDA。另外检查下Ollama的日志,确认它是不是用了CPU的fallback,有时候环境变量或者驱动版本不对会这样。
vLLM报错大概率是版本兼容问题,特别是量化格式和CUDA版本不匹配。我建议你先用transformers直接加载模型跑一下,排除框架问题,如果速度正常那就是Ollama配置的锅。还有个更稳的思路,用llama.cpp自己编译一个带CUDA的版本,虽然麻烦点但对4090的优化比Ollama默认的好,速度能拉到30+。
顺便问下你用的是不是PCIe转接卡或者主板插槽带宽不够?4090如果是跑在PCIe 3.0 x4上,数据搬运会卡脖子,但这影响没这么大,主要还是驱动和框架的嫌疑更大。你先从GPU利用率查起吧,这问题八成不是量化精度导致的。
Ollama这边其实有个坑,它默认的num_ctx和batch size都偏保守,你那个8-10的速度大概率是没吃到满血显存带宽,4090跑Q4的7B按理说至少能到30+。我建议你先在Ollama里把num_gpu调成-1强制全量进显存,再拉高num_ctx到8192试试,如果还不行就用ollama run的时候加上--verbose看下实际走的CPU还是GPU。另外你提到vLLM报错,大概率是量化格式不兼容,vLLM对GPTQ和AWQ支持好,但对GGUF支持很弱,想用vLLM的话建议直接上官方FP16或者AWQ版本,别用Q4_K_M。我自己试过最稳的组合是llama.cpp的server模式,配合--n-gpu-layers 99 --threads 8,速度能稳定在35-45,而且不会像Ollama那样有莫名的性能损耗。最后检查一下你的显卡驱动和CUDA版本,有时候Ollama用的默认rocm或cuda路径不对,也会导致没走GPU,用nvidia-smi看看进程里有没有python或者ollama在占用显存就很直观了。
8-10确实不正常,4090跑Q4的8B起码得30+。先确认下ollama的日志有没有显示“offload to gpu”,没显示就是纯CPU在跑。另外别用vLLM搞量化模型,折腾半天不如直接上llama.cpp,支持Q4_K_M很稳,显存占用还低。
看到这个速度我第一反应是Ollama大概率没吃到GPU,你可以先ollama ps看一眼,如果显示的是CPU而不是GPU就说明加速没生效,去装一下CUDA版的Ollama或者检查下环境变量。另外Q4_K_M虽然省显存,但8B模型在4090上瓶颈往往不在显存带宽,而是推理框架的算子优化,Ollama对llama.cpp后端支持其实一般,你可以试试llama.cpp自己编一个带CUDA的版本,开--n-gpu-layers全量加载,速度会有质的提升。你提到vLLM报错,多半是量化格式不兼容,它更吃AWQ或GPTQ这种结构化量化,建议直接跑FP16原版,24G显存完全够,速度能到50+,代码生成这种场景其实不太吃量化,精度损失反而影响输出质量。还有个小坑,4090的PCIe带宽如果是4.0 x8也可能拖后腿,但你桌面端大概率是x16,先排除这个。最后实在不行就换llama.cpp的flash attention版本,我这边同配置跑Qwen2.5-7B能到45 tokens/s,你按这个思路排查一下应该能找到问题。
4090跑这速度绝对不正常,先确认下ollama的日志里有没有显示gpu加载成功,八成是没吃到显卡。
vLLM对q4_k_m支持不好,换awq或gptq格式试试,速度能拉满。