最近想把Llama-3-8B部署到本地做代码生成,用的是4090 24G显存,按理说8B模型量化成4bit应该跑得动。但我实际用Ollama跑Q4_K_M版本,生成速度只有8-10 token/s,还不如我朋友用CPU跑的速度。我看网上别人同配置都能跑到40+,怀疑是不是我的显存频率设置有问题,或者Ollama默认没开GPU加速?另外我试过用vLLM部署,但量化模型老报错,有没有比较稳的部署方案?求有经验的大佬指点一下,我是刚接触这块,不太确定该往哪个方向调优。
本地部署7B模型显存够但推理很慢,是量化问题还是配置不对?
全部回复
共 38 条4090跑Q4才8token/s肯定不正常,先检查下ollama日志是不是没吃到显卡,或者换个llama.cpp试试。
vLLM对量化支持确实一般,可以试试sglang或者直接换AWQ/GPTQ版本,稳很多。
4090跑Q4_K_M的llama-3-8B只有8-10 token/s确实不正常,我怀疑不是量化本身的问题,而是Ollama默认没吃到GPU。你可以先跑一下ollama ps看看有没有显示“PROCESSOR: 100% GPU”,如果显示CPU就说明没走对侧。另外4090的显存带宽是没问题的,频率一般不会成为瓶颈,除非你手动锁了功耗墙,建议检查一下nvidia-smi里的Power Limit是不是默认的450W。vLLM对AWQ或GPTQ的兼容性比GGUF好,但你直接用Ollama的Q4_K_M是GGUF格式,vLLM不支持才对,报错可能就是这个原因。我之前用llama.cpp的server模式跑同款模型,开--n-gpu-layers 99和--flash-attn,能稳定到35-40 token/s,你可以试试把Ollama的OLLAMA_FLASH_ATTENTION=1环境变量开了,很多人忽略这个。还有就是别用Ollama自带的量化,自己用llama.cpp的quantize重新压一个Q4_K_M,版本差异有时候影响挺大的。如果还慢,用nvtop看下实际显存占用和SM利用率,要是占用很高但利用率低,那就是模型并行没开对。部署方案上,代码生成这种场景我建议直接用llama.cpp的server或者llamafile,比Ollama可控多了,Ollama适合聊天不太适合做服务。
Ollama默认确实会走GPU,但你可以用ollama ps看一眼当前模型是不是挂在GPU上,有时候模型太大被拆到CPU跑就会掉到个位数。另外4090跑8B Q4理论上能到40+,你试试把ctx长度调小,或者换Q4_0这种更轻的量化,K_M虽然质量好但开销大一点。vLLM报错多半是量化格式不兼容,建议直接用transformers+bitsandbytes加载,稳定省心,就是速度比vLLM差点,但比你现在强多了。
8-10确实不对劲,4090跑Q4_K_M应该轻松上40+。你先检查下ollama serve日志或者nvidia-smi,大概率是模型没加载到GPU,或者被核显抢了。vLLM对AWQ/GPTQ支持好点,GGUF还是ollama方便,但记得设OLLAMA_NUM_GPU=1强制让显存跑。代码生成可以试试llama.cpp的--no-mmap试试,有时候内存映射也会拖慢。
4090跑Q4_K_M只有8-10 token/s肯定不正常,先确认下ollama的日志里有没有显示gpu offload,另外nvidia-smi看看显存占用率,如果显存没吃满大概率是没走GPU。vLLM对量化支持确实一般,你可以试试llama.cpp的server模式,或者直接用Ollama的CPU+GPU混合模式,把层数调高一点。还有个小坑,检查下是不是主板BIOS把PCIe带宽锁在了x4,这个影响很大。我原来也遇到过类似问题,最后发现是电源管理里PCIe链路状态设成了最大节能,改掉立刻翻倍。
检查下Ollama日志确认有没有走GPU,多半是默认CPU推理了,vLLM换AWQ或GPTQ格式能稳不少。
4090跑Q4_K_M的8B不可能只有8token/s,先查下ollama serve的日志确认有没有走CUDA,另外nvidia-smi看下显存占用,如果只有几百MB说明压根没加载到GPU上。vLLM报错大概率是量化格式不兼容,建议直接拉FP16的AWQ或GPTQ版本,或者干脆用llama.cpp的llama-server,对量化支持最稳。对了,留意下是不是被核显偷跑了,Windows上偶尔会这样。
基本可以排除量化问题,8-10 tok/s明显是没吃到GPU,Ollama在4090上跑Q4_K_M至少该有30+。你先敲ollama ps看看有没有显示GPU字样,没显示就是驱动或环境变量的问题。vLLM报错常见是因为老版本不支持新量化格式,建议直接升到0.6以上配transformers最新版,或者干脆换llama.cpp,省心很多。另外检查一下是不是被核显抢了显存,或者主板BIOS里把PCIe带宽设成了x4。
4090跑Q4_K_M的8B模型,8-10 token/s确实离谱,我1070跑7B都有这个速度。Ollama默认是自动检测GPU的,但偶尔会有驱动或CUDA版本不匹配导致它偷偷用CPU推理,你可以在日志里确认一下有没有加载CUDA库。如果确认走的是GPU,那大概率是量化格式的问题,Q4_K_M其实是K-quant里的一个折中方案,对某些算子支持不好,你可以试试Q4_0或者Q6_K,解码速度通常能快一倍。vLLM报错多半是版本太新,跟transformers不兼容,建议直接pip安装vllm==0.4.2配transformers==4.40.1,这个组合比较稳。另外你朋友CPU跑得快可能是在用llama.cpp的mmap模式,内存带宽吃满,但延迟肯定不如GPU,你可以在Ollama里设OLLAMA_NUM_PARALLEL=1,强制单批处理,有时候反而能提升单个请求的生成速度。最后检查一下NVIDIA的驱动是不是最新,特别是Windows下老驱动容易让显存锁在P2状态,频率上不去,用nvidia-smi -q -d CLOCK看看当前显存频率是不是在boost档位。
Ollama默认确实有可能没吃到满血的GPU,你可以先敲ollama ps看看显存占用和进程状态,另外4090跑Q4_K_M的8B理论速度应该远不止10 token/s。我之前遇到过类似情况,后来发现是主板PCIe通道被降速了,去BIOS里锁一下gen4就正常了。vLLM对AWQ和GPTQ支持比较稳,但Q4_K_M这种GGUF格式它本来就不兼容,建议换llama.cpp或者带--gpu-layers参数的Ollama试试。
4090跑8B Q4才8token/s肯定不正常,先确认下Ollama日志里有没有显示gpu offload层数。
vLLM对量化支持确实挑版本,试试llama.cpp的server模式或LMDeploy,稳很多。
这速度确实不太正常,4090跑Q4_K_M的8B模型正常应该能到40-60 token/s。你先在Ollama里执行ollama ps看看是不是真的加载到GPU了,没显示的话多半是环境变量没配好。另外你那个朋友CPU跑得比你还快,我猜他可能是用llama.cpp直接编译的,Ollama对量化格式的支持有时候会有点迷。vLLM报错的话,试试用GGUF格式配合llama.cpp的server模式,或者直接上ExLlamaV2,对4bit量化支持稳得很,代码生成场景也更友好。
说实话你这速度肯定不正常,4090跑Q4_K_M的8B模型,正常应该奔着50-80 token/s去。Ollama默认确实是走GPU的,但你可以先跑一下ollama ps看看是不是真的把模型加载到显卡上了,有时候内存和显存同时占用就说明没完全用GPU。另外你提到显存频率,这个影响不大,更像是Ollama在CPU和GPU之间分配不均,或者你的CPU内存带宽成了瓶颈,因为量化模型要频繁读权重。vLLM报错大概率是版本兼容问题,试试把vLLM升级到最新版,或者直接用llama.cpp的server模式,那个对量化支持最稳,而且能手动指定gpu层数。我之前遇到过类似情况,最后发现是主板PCIe通道被别的设备占了,导致显卡通讯带宽掉到x4,你可以用nvidia-smi -q看看总线速率是不是x16。还有个小坑,代码生成这种场景,建议把context长度调小一点,比如4096,因为长上下文会显著拖慢decode速度。你要是想省事,直接换llama.cpp编译一个带CUDA的版本,性能通常比Ollama默认的openblas后端好很多。
Ollama默认吃不满4090,试试OLLAMA_NUM_GPU=999或者换llama.cpp手动指定gpu层数。
4090跑8B q4正常应该50+,先nvidia-smi看显存占用确认有没有走GPU,vLLM对量化支持确实拉胯。
大概率是Ollama没吃到GPU,试试ollama ps看下进程,或者直接换llama.cpp的Q4_K_M,速度立马上来。
vLLM对量化支持确实折腾,先用transformers+bitsandbytes跑通再优化也不迟。
4090跑Q4_K_M的Llama-3-8B只有8-10 token/s,这速度确实离谱,我同卡跑同模型基本能稳定在35-45之间。你朋友CPU跑得比你快,大概率是内存带宽够猛,但你这明显是GPU没吃满。先别急着怀疑显存频率,Ollama默认其实会自动加载GPU,但有个坑是它有时候会把部分层扔给CPU,你可以在日志里看有没有“offload”相关的输出,或者直接敲ollama ps看看是不是有进程在跑GPU。如果确认GPU占用率上去了还慢,那可能是你的量化版本和显卡驱动有兼容问题,建议换Q4_K_S或者试试llama.cpp的--n-gpu-layers全量加载。vLLM对量化模型支持确实一般,尤其AWQ和GPTQ容易报错,我后来是用llama.cpp的server模式配OpenAI接口,稳得很,速度也快。另外你检查下电源模式,4090如果开了节能,频率会锁在低档,性能直接砍半。最后问一句,你跑的时候是不是开着浏览器或者别的吃显存的东西?我遇到过显存被占导致Ollama自动降级到CPU的情况。
这速度确实不对劲,4090跑Q4_K_M的8B模型正常应该能到30-50 token/s,8-10基本就是纯CPU在算了。你先在Ollama里执行ollama ps看一眼,如果显示的是CPU而不是GPU,那就是没加载到显卡上,大概率是驱动或者Ollama的CUDA版本没装对,重装一下带GPU支持的版本就行。另外你说试vLLM老报错,大概率是量化格式不兼容,vLLM对GPTQ和AWQ支持比较好,对GGUF支持很拉胯,建议你换个思路,直接用HuggingFace上现成的GPTQ版Llama-3-8B,配合vLLM跑,速度能起飞。还有个小坑,Ollama默认会分配部分显存给KV cache,你可以调低点试试,有时候显存吃紧反而会触发换页拖慢速度。如果还不行,检查下主板PCIe通道是不是跑在x4上,4090被限速也会导致这种问题。总之先排除硬件问题,再考虑换部署框架,大概率不是量化本身的问题。
4090跑8B Q4只有8-10 token/s确实离谱,我3070跑同模型都有20+,你先把ollama的日志翻出来看看,正常情况下启动时会有CUDA相关的提示,没有的话就是纯CPU在跑,多半是环境变量或者驱动问题。另外你确认一下任务管理器里GPU的占用率,如果只有个位数那肯定没走显卡。量化本身对速度影响有限,4bit和8bit差距远没到这种程度,主要还是推理框架没吃满硬件。vLLM报错的话可以试试llama.cpp的server模式,或者直接换ExLlamaV2,对量化模型支持更稳,我最近用ExLlamaV2跑Qwen2.5-7B能到60+ t/s。你这情况大概率是Ollama没正确识别CUDA,重装一下NVIDIA驱动然后检查下CUDA版本匹配,另外主板BIOS里Resizable BAR开没开也有影响,不过这个对7B模型影响不大。最后建议先别用Ollama,直接命令行跑个llama.cpp的可执行文件测试,能排除很多隐性问题。