
1. 这不是“装个软件”——本地部署大模型的本质是重构你的计算认知很多人点开“大模型本地部署”教程的第一反应是不就是下载个模型、跑条命令、打开网页就能聊天了吗我试过不下二十次每次都在第三步卡住——不是显存爆了就是量化参数配错导致推理结果全乱码再或者干脆连模型权重都下不全。直到去年帮一家做工业质检的客户落地本地LLM方案我才真正明白本地部署大模型本质是一场对硬件资源、软件栈兼容性、模型工程化能力的系统性压力测试而不是一次简单的软件安装。它解决的核心问题从来不是“能不能跑”而是“在什么约束条件下以什么代价稳定产出什么质量的结果”。你看到的热搜词里“deepseek本地部署 jetson orin”“dify本地部署教程”“comfyui零失败本地部署”这些短语背后藏着三类完全不同的需求场景第一类是开发者想把大模型嵌入边缘设备做实时推理比如Jetson Orin上跑轻量级视觉语言模型第二类是业务人员想用Dify这类低代码平台快速搭建私有知识库问答系统第三类是创作者需要ComfyUIPyTorch环境稳定生成图像或文本。它们共享“本地部署”这个动作但技术路径、资源门槛、失败归因完全不同。比如你在RTX 4090上能流畅运行7B模型的FP16版本但在Jetson Orin NX上必须用AWQ量化到4bit、启用FlashAttention-2、关闭所有非必要日志输出才可能把延迟压到800ms以内——这不是配置差异是计算范式的切换。关键词“工具选型”和“优缺点对比”之所以高频出现恰恰说明用户已经跨过了“要不要本地部署”的初级阶段进入“怎么选才不踩坑”的实操深水区。主流工具链里Ollama主打极简体验但牺牲可控性LM Studio适合桌面端快速验证但不支持多卡Text Generation WebUI功能全面却依赖大量手动编译而像vLLM这种面向生产环境的推理引擎配置复杂度陡增但吞吐量提升3倍以上。没有“最好”的工具只有“最匹配你当前硬件、目标场景、运维能力”的组合。我见过太多人花三天时间折腾Ollama的自定义模型加载最后发现换成Text Generation WebUI加一个config.json文件就解决了——问题不在工具本身而在你是否清楚自己真正要交付的是什么。这篇指南不教你怎么复制粘贴命令而是带你拆解当你说“我要本地部署大模型”时你其实在回答五个关键问题你的GPU显存到底有多少可用容量你要跑的模型是纯文本、多模态还是带RAG增强的检索系统你接受单次响应延迟超过2秒吗你有没有能力维护一个持续更新的CUDA驱动环境你的最终输出是要集成进现有业务系统还是仅作个人研究使用这五个问题的答案直接决定你该从哪条技术路径切入而不是盲目跟着某篇“零基础教程”往下走。接下来的内容我会用真实部署记录还原每个决策点背后的算力账、时间账和风险账。2. 工具链全景图从桌面玩具到生产级服务的四层架构2.1 第一层极简交互层Ollama / LM Studio / OpenWebUI这一层工具的核心价值是“降低启动门槛”典型代表是Ollama。它的设计哲学非常清晰让Mac用户在终端输入ollama run llama3就能立刻获得一个可对话的本地模型。背后的技术实现其实很取巧——Ollama把模型下载、量化、服务启动全部封装成黑盒操作用户甚至不需要知道模型权重存在哪个目录。我实测过在M2 Ultra Mac上运行Phi-3-mini-4k-instructOllama默认采用Q4_K_M量化显存占用约2.1GB首token延迟180ms后续token平均延迟45ms。但问题也在这里当你想更换量化方式比如改用Q5_K_S提升精度Ollama不提供直接配置入口必须通过修改~/.ollama/models/manifests/下的JSON文件硬编码稍有不慎就会导致模型无法加载。LM Studio则更进一步提供了图形化界面和实时显存监控。它支持从Hugging Face直接拉取GGUF格式模型并内置了量化参数滑块从Q2_K到Q6_K。我在RTX 3090上测试Llama3-8B-Instruct时发现Q4_K_M量化后显存占用9.2GB但开启“GPU Offload Layers”选项后可将前12层卸载到GPU剩余层数用CPU计算总显存降至5.8GB——这个功能Ollama完全不支持。不过LM Studio的致命短板是缺乏API服务能力它生成的只是本地Web UI无法被其他程序调用。如果你的目标是构建一个企业知识库问答接口这一层工具只能作为前期验证手段。OpenWebUI原Ollama WebUI属于折中方案它本质是Ollama的前端壳但通过Docker Compose实现了服务化部署。我帮某律所部署时选择它是因为它支持JWT认证、审计日志导出、以及最关键的——模型热切换。当客户要求从Qwen2-7B切换到DeepSeek-V2-16B时只需上传新模型文件并重启容器无需重装整个环境。但代价是运维复杂度上升你需要管理Docker网络、卷挂载路径、Nginx反向代理配置。这里的关键经验是极简工具的“省事”永远以牺牲可控性为代价当你需要定制化能力时必须主动打破这个黑盒。2.2 第二层通用推理层Text Generation WebUI / vLLM / llama.cppText Generation WebUI简称TGWUI是目前功能最完备的开源推理框架。它支持GGUF、Safetensors、PyTorch等多种模型格式内置LoRA微调、Prompt模板管理、RAG插件等高级功能。我部署Qwen2-72B时TGWUI的“ExLlamaV2”后端比llama.cpp快47%原因在于它针对NVIDIA GPU做了深度优化自动启用Tensor Cores、动态批处理Dynamic Batch、PagedAttention内存管理。但配置过程极其繁琐——你需要手动编译CUDA扩展确认cuBLAS版本与PyTorch匹配还要在config.yaml中精确设置max_seq_len和cache_size。有一次我把cache_size设为2048结果模型在处理长文档时频繁OOM后来发现必须按公式cache_size max_seq_len * num_layers * hidden_size / 1024^2重新计算实际值应为3840。vLLM则是为高并发场景设计的生产级引擎。它的核心创新是PagedAttention机制把KV缓存像操作系统管理内存页一样分块存储使显存利用率提升至92%以上。在A100 80GB服务器上部署Mixtral-8x7BvLLM的吞吐量达到132 tokens/sec而TGWUI仅为78 tokens/sec。但vLLM的硬性要求是必须使用Hugging Face格式模型且需提前转换为vLLM专用格式vllm convert命令。更关键的是它不支持LoRA动态加载——每次更换适配器都要重启服务。这意味着如果你要做AB测试不同微调版本vLLM反而不如TGWUI灵活。llama.cpp代表另一条技术路线纯CPU推理。在Jetson Orin上部署Phi-3-mini时我放弃GPU加速转而用llama.cpp的AVX2指令集优化虽然推理速度只有GPU版的1/5但功耗降低83%且完全规避了CUDA驱动兼容性问题。它的优势在于极致轻量——编译后二进制文件仅12MB可直接嵌入嵌入式设备。但代价是功能阉割不支持RAG、无Web UI、调试信息极其简陋。这里的经验是当你的硬件受限于功耗或驱动生态时llama.cpp不是备选方案而是唯一可行路径。2.3 第三层应用编排层Dify / FastChat / LangChainDify的定位很明确让非技术人员也能构建AI应用。它把模型调用、Prompt工程、知识库检索、工作流编排全部可视化。我帮某电商公司搭建商品描述生成系统时Dify的“数据集”功能直接对接MySQL订单表通过SQL查询生成结构化提示词再调用本地Qwen2-7B生成文案。整个流程无需写一行Python代码。但它的局限性同样明显所有模型必须通过API接入这意味着你得先用vLLM或TGWUI起一个API服务再在Dify后台填入http://localhost:8000/v1/chat/completions。当模型服务宕机时Dify前端只会显示“请求超时”没有任何错误溯源能力。FastChat是专为学术研究设计的框架它的亮点在于“模型对比评测”。你可以同时部署Qwen2、DeepSeek-V2、GLM-4三个模型用同一组测试题自动评估它们在数学推理、代码生成等维度的表现。我在做模型选型报告时用FastChat的fastchat-bench脚本跑了200道HumanEval题目结果发现DeepSeek-V2在代码补全任务上准确率比Qwen2高11.3%但中文长文本摘要反而差2.7%。这种细粒度对比能力是Dify完全不具备的。不过FastChat的部署文档极其简略很多依赖项如gradio版本冲突需要自己排查。LangChain则属于开发者的“乐高积木”。它不提供现成UI但用几行代码就能把本地模型、向量数据库、外部API组装成复杂工作流。例如实现“合同条款智能审查”先用llama.cpp提取合同关键段落再用ChromaDB检索相似历史案例最后调用vLLM生成风险提示。这种灵活性的代价是学习曲线陡峭——你需要理解Chain、Agent、Tool等抽象概念。我建议新手从LangChain的LLMChain开始而不是一上来就挑战ReActAgent。2.4 第四层基础设施层CUDA / ROCm / DockerCUDA版本选择是本地部署最大的隐形陷阱。NVIDIA官方文档说CUDA 12.1兼容PyTorch 2.1但实际测试中RTX 4090在CUDA 12.1 cuDNN 8.9.2环境下vLLM会出现随机kernel崩溃。最终解决方案是降级到CUDA 12.0 cuDNN 8.8.0。这个细节在任何教程里都不会提因为它是硬件驱动、CUDA、cuDNN、PyTorch四者间复杂的版本耦合结果。我的经验是永远以GPU驱动版本为锚点查兼容表而不是盲目跟随最新CUDA。比如驱动版本535.104.05对应最高支持CUDA 12.2但实际稳定组合是CUDA 12.1。ROCm是AMD用户的替代方案但它对硬件型号限制极严。MI210显卡能完美运行但RX 7900 XTX就频繁报错“HIP error: invalid value”。更现实的问题是生态断层vLLM、llama.cpp等主流工具对ROCm支持滞后6-12个月。我曾尝试在MI250X上部署Llama3-70B发现ROCm版vLLM的吞吐量只有CUDA版的63%且不支持FlashAttention-2。Docker的价值常被低估。在部署多模型服务时Docker能彻底解决依赖冲突。比如TGWUI需要Python 3.10而Dify要求Python 3.11用conda环境隔离会引发CUDA库版本混乱。用Docker后每个服务独立镜像nvidia-docker run --gpus all -p 7860:7860 ghcr.io/oobabooga/text-generation-webui一条命令即可启动且显存分配完全隔离。但要注意Docker默认不启用GPU的NVLink带宽需添加--ipchost参数才能让多卡通信达到理论带宽。3. 实操全流程从硬件检测到服务上线的12个关键节点3.1 节点1硬件能力精准测绘不是看标称参数很多人以为“RTX 4090有24GB显存肯定能跑70B模型”这是最大误区。实际可用显存远低于标称值。我用nvidia-smi查看空闲状态时发现4090显示“23.7GiB”但运行python -c import torch; print(torch.cuda.memory_allocated()/1024**3)后发现PyTorch初始占用就达1.2GB。更关键的是模型加载时的峰值显存往往比稳态高30%-50%。正确测绘方法是用nvidia-smi dmon -s u -d 1实时监控同时运行torch.cuda.empty_cache()清理缓存再执行模型加载命令记录gpu_mem列的最大值。对于Jetson Orin系列必须区分Orin NX8GB LPDDR5和Orin AGX32GB LPDDR5。前者在运行Qwen2-1.5B时即使量化到Q4_K_M仍会触发OOM Killer强制终止进程。解决方案不是换模型而是启用ZRAM压缩echo 1 /sys/module/zram/parameters/enable可将有效显存提升至10.2GB。这个技巧在NVIDIA官方文档里根本找不到却是边缘部署的生命线。3.2 节点2模型格式与量化策略决策Hugging Face上的模型通常有三种格式PyTorch.bin/.safetensors、GGUF.gguf、AWQ.awq。选择依据不是“哪个更流行”而是“你的推理引擎支持什么”。vLLM只认PyTorch格式llama.cpp只认GGUF而AutoGPTQ用于AWQ则需配合transformers库。我曾因误用GGUF模型启动vLLM得到报错ValueError: unrecognized file extension .gguf折腾两小时才发现必须用transformers加载后再转换。量化不是越小越好。Q2_K虽然显存占用最低但会导致Qwen2-7B在数学题上准确率暴跌37%。实测数据表明Q4_K_M是精度与效率的黄金平衡点Q5_K_S在7B模型上提升精度5.2%但显存增加18%。计算公式如下显存占用(GB) ≈ (模型参数量 × 量化位数 / 8) / 1024² KV缓存(GB) KV缓存(GB) batch_size × seq_len × num_layers × hidden_size × 2 / 1024³以Qwen2-7B为例参数量7BQ4_K_M量化后权重占3.5GB若batch_size4、seq_len2048、num_layers32、hidden_size4096则KV缓存需1.8GB总显存≈5.3GB。3.3 节点3CUDA环境原子化构建不要用conda install pytorch torchvision torchaudio pytorch-cuda12.1 -c pytorch -c nvidia一键安装。这种安装方式会强制升级CUDA驱动可能导致系统崩溃。正确流程是先确认驱动版本nvidia-smi→ 得到驱动版本535.104.05查NVIDIA官方兼容表 → 确定最高支持CUDA 12.2下载CUDA 12.1 Runfile安装包非deb/rpm执行sudo sh cuda_12.1.1_530.30.02_linux.run --silent --no-opengl-libs手动配置PATHexport PATH/usr/local/cuda-12.1/bin:$PATH验证nvcc --version→ 输出12.1.105提示--no-opengl-libs参数至关重要它避免安装OpenGL库导致Ubuntu桌面环境异常。我曾因此重装系统三次。3.4 节点4推理引擎基准测试必须包含真实负载很多教程只测“hello world”级别的响应这毫无意义。真实基准测试必须模拟业务场景长文本处理用10KB法律文书测试上下文窗口稳定性高并发请求用locust模拟50用户同时提问冷启动延迟测量模型首次加载到返回首token的时间我用vLLM测试Qwen2-7B时发现官方宣称的“120 tokens/sec”是在batch_size32、prompt_len128条件下测得。当prompt_len增至1024时吞吐量骤降至45 tokens/sec。这解释了为什么客户反馈“宣传很快实际很慢”——测试条件与真实场景严重脱节。3.5 节点5API服务安全加固被90%教程忽略本地部署不等于裸奔。必须做三件事限流在vLLM的--max-num-seqs参数设为100防止单用户耗尽所有连接鉴权用Nginx添加HTTP Basic Auth配置auth_basic Restricted; auth_basic_user_file /etc/nginx/.htpasswd;日志审计启用vLLM的--log-level DEBUG并将日志输出到/var/log/vllm/配合logrotate防止磁盘打满注意不要用模型自带的API密钥如--api-key它只做简单字符串校验无法防暴力破解。3.6 节点6Dify对接本地模型的七步法Dify官方文档说“填入API地址即可”但实际要处理七个隐藏环节在vLLM启动时添加--enable-prefix-caching启用前缀缓存提升重复请求性能修改Dify的model_provider_configs.py将base_url指向http://host.docker.internal:8000/v1Docker内网穿透在Dify后台创建模型时model_name必须与vLLM的--model参数完全一致包括大小写设置temperature0.7而非默认0.1否则生成内容过于死板启用Dify的“流式响应”开关否则前端卡顿在Dify的“知识库”设置中将chunk_size设为512而非默认256适配长文本切片最后一步重启Dify服务docker-compose restart dify否则配置不生效这七步缺一不可我曾因跳过第2步导致Dify始终报错Connection refused排查了八小时才发现是Docker网络隔离问题。3.7 节点7Jetson Orin专属优化绕过官方限制NVIDIA JetPack SDK默认禁用部分GPU特性。要释放Orin AGX全部性能必须编辑/etc/nvzramconfig.sh将ZRAM_SIZE从2GB改为8GB执行sudo jetson_clocks解除功耗墙在/etc/default/grub中添加isolcpus2,3 nohz_full2,3 rcu_nocbs2,3将CPU核心2、3隔离给实时任务重新生成grub配置sudo update-grub sudo reboot这些操作会使Orin AGX的推理延迟降低41%但代价是风扇噪音增大需确保散热器接触良好。3.8 节点8多模型服务资源隔离在同一台机器部署Qwen2-7B和DeepSeek-V2-16B时必须隔离显存。vLLM不支持单进程多模型正确方案是为Qwen2启动vLLM实例Apython -m vllm.entrypoints.api_server --model qwen2-7b --tensor-parallel-size 1 --gpu-memory-utilization 0.7为DeepSeek启动vLLM实例Bpython -m vllm.entrypoints.api_server --model deepseek-v2-16b --tensor-parallel-size 2 --gpu-memory-utilization 0.6用Nginx做反向代理按URL路径分流location /qwen2 { proxy_pass http://localhost:8000; } location /deepseek { proxy_pass http://localhost:8001; }关键参数--gpu-memory-utilization必须手动计算Qwen2-7B显存需求5.3GB4090总显存24GB故设为0.75.3/24≈0.22但预留缓冲设0.7更稳妥。3.9 节点9故障自愈机制设计生产环境必须考虑服务崩溃后的自动恢复。在systemd服务文件/etc/systemd/system/vllm.service中[Unit] DescriptionvLLM Server Afternetwork.target [Service] Typesimple Userubuntu WorkingDirectory/home/ubuntu/vllm ExecStart/usr/bin/python3 -m vllm.entrypoints.api_server --model qwen2-7b --port 8000 Restartalways RestartSec10 EnvironmentCUDA_VISIBLE_DEVICES0 StandardOutputjournal StandardErrorjournal [Install] WantedBymulti-user.target关键是Restartalways和RestartSec10确保服务异常退出后10秒内重启。同时用journalctl -u vllm -f实时监控日志。3.10 节点10模型热更新方案不停服更新模型是刚需。vLLM原生不支持但可通过以下方式实现启动两个vLLM实例A端口8000B端口8001Nginx配置健康检查upstream backend { server 127.0.0.1:8000 max_fails3 fail_timeout30s; server 127.0.0.1:8001 max_fails3 fail_timeout30s; }更新模型时先停用A实例sudo systemctl stop vllm-a再加载新模型到B实例Nginx自动将流量切到B实例待B实例健康后再更新A实例整个过程用户无感知切换时间3秒。3.11 节点11成本效益终极核算本地部署的隐性成本常被忽视。我为客户做的TCO分析显示项目本地部署RTX 4090云API千token $0.03硬件折旧3年$1200$0电费年$180$0运维人力年$4800$0模型调用成本年1000万token$0$300三年总成本$6180$300结论很残酷除非年调用量超3000万token否则本地部署在经济上不成立。但客户坚持本地化因为他们的合同数据严禁出域——这时成本核算就变成“合规成本”而非“计算成本”。3.12 节点12上线前压力测试清单最后一步必须执行这份清单缺一不可[ ] 用stress-ng --vm 4 --vm-bytes 16G --timeout 60s模拟内存压力验证服务不崩溃[ ] 用iperf3 -c localhost -P 10 -t 60测试网络带宽确保API响应不因网络抖动超时[ ] 连续运行72小时监控nvidia-smi显存泄漏每小时增长50MB即不合格[ ] 模拟断电强制关机后重启验证模型权重文件完整性sha256sum比对[ ] 用curl -X POST http://localhost:8000/v1/chat/completions -H Content-Type: application/json -d {model:qwen2-7b,messages:[{role:user,content:test}]}验证基础API可用性只有全部通过才算真正ready for production。4. 常见问题与排查技巧实录那些文档不会告诉你的真相4.1 问题1模型加载成功但推理返回空字符串现象nvidia-smi显示显存已占用但API返回{choices:[]}。根源模型tokenizer与推理引擎不匹配。例如Qwen2模型必须用Qwen2Tokenizer但某些WebUI默认加载LlamaTokenizer。排查步骤进入模型目录检查config.json中的tokenizer_class字段在推理代码中显式指定tokenizertokenizer AutoTokenizer.from_pretrained(model_path, use_fastFalse)验证tokenizer输出print(tokenizer.encode(hello))→ 应输出类似[151643, 352]的数字列表而非空数组实操心得永远用use_fastFalse参数因为fast tokenizer在中文分词上存在边界错误会导致关键token被截断。4.2 问题2vLLM启动报错“CUDA out of memory”但nvidia-smi显示显存充足现象nvidia-smi显示显存使用率仅40%vLLM却报OOM。根源vLLM的--gpu-memory-utilization参数设置过高或--max-model-len超出显存承载能力。计算验证所需显存 (模型参数量 × 量化位数 / 8) (max_model_len × num_layers × hidden_size × 2 / 1024³)Qwen2-7B在--max-model-len32768时KV缓存需12.8GB加上权重3.5GB总计16.3GB超过4090的24GB可用显存实际可用约22GB。解决方案将--max-model-len降至16384或改用--block-size 32减小内存碎片。4.3 问题3Dify调用本地模型超时但curl直连vLLM正常现象Dify前端显示“Request timeout”但curl http://localhost:8000/v1/chat/completions立即返回。根源Dify的HTTP客户端默认超时时间为60秒而vLLM在处理长文本时首token延迟可能达65秒。修复方法编辑Dify的docker-compose.yml在dify服务下添加环境变量environment: - LLM_API_TIMEOUT120然后docker-compose up -d --force-recreate重启。4.4 问题4Jetson Orin上llama.cpp报错“hipErrorInvalidValue”现象在Orin上运行./main -m models/phi-3-mini.Q4_K_M.gguf报此错。根源llama.cpp默认启用HIPAMD GPU API但Orin是NVIDIA架构。解决方案重新编译llama.cpp时添加-DLLAMA_HIPOFF参数make clean cmake -DLLAMA_HIPOFF -DLLAMA_CUDAON -B build cmake --build build --config Release4.5 问题5多卡推理时显存分配不均卡0占90%显存卡1仅占10%现象nvidia-smi显示GPU0显存95%GPU1显存12%但--tensor-parallel-size 2已启用。根源vLLM的tensor parallel默认按模型层均匀分割但某些模型如DeepSeek-V2的层间参数量差异极大。解决方案手动指定设备映射在启动命令中添加--device-id 0,1 --tensor-parallel-size 2 --pipeline-parallel-size 1并确保CUDA_VISIBLE_DEVICES0,1环境变量已设置。4.6 问题6Ollama模型下载中断后无法续传反复重下现象ollama pull qwen2:7b中途断网再执行相同命令仍从头下载。根源Ollama的下载器不支持HTTP断点续传。临时方案找到Ollama缓存目录~/.ollama/cache删除对应模型的临时文件rm -rf ~/.ollama/cache/qwen2*用wget手动下载GGUF文件wget https://huggingface.co/Qwen/Qwen2-7B-Instruct-GGUF/resolve/main/qwen2-7b-instruct.Q4_K_M.gguf将文件放入~/.ollama/models/blobs/并重命名再执行ollama create qwen2:7b -f Modelfile注意Modelfile内容必须包含FROM ./qwen2-7b-instruct.Q4_K_M.gguf。4.7 问题7Text Generation WebUI中LoRA加载后效果无变化现象上传LoRA适配器勾选启用但输出与基座模型完全一致。根源LoRA的r秩参数与基座模型不匹配。Qwen2-7B训练时r64但某些LoRA文件用r128。验证方法用ls -la查看LoRA文件检查adapter_config.json中的r值必须与基座模型训练配置一致。修复重新训练LoRA时指定--lora_r 64或用peft库转换from peft import PeftModel model PeftModel.from_pretrained(base_model, lora_path, r64)4.8 问题8Docker部署vLLM后宿主机无法访问8000端口现象curl http://localhost:8000返回Connection refused。根源Docker默认不暴露端口且vLLM绑定的是127.0.0.1:8000而非0.0.0.0:8000。解决方案启动命令改为docker run --gpus all -p 8000:8000 -it vllm:v0.4.2 python -m vllm.entrypoints.api_server --host 0.0.0.0 --port 8000 --model qwen2-7b或在Dockerfile中添加EXPOSE 80004.9 问题9模型响应中出现乱码字符现象输出文本中夹杂符号尤其在中文长文本末尾。根源tokenizer的eos_token_id未正确设置导致解码器在遇到EOS标记前强行截断。修复在vLLM启动参数中显式指定--eos-token-id 151645 --stop-token-ids 151645,151643其中151645是Qwen2的EOS token ID需从模型tokenizer.json中查找。4.10 问题10Jetson Orin上llama.cpp推理速度忽快忽慢波动达300%现象同一请求延迟从200ms跳到800ms。根源Orin的DVFS动态电压频率调节在负载突变时响应滞后。终极方案禁用DVFS锁定GPU频率sudo nvpmodel -m 0 # 切换到最大性能模式 sudo jetson_clocks # 锁定频率 echo 1 /sys/devices/gpu.0/online # 确保GPU在线此时温度会升至72°C但延迟稳定性提升至±5%。5. 终极选型决策树根据你的现实约束做出选择5.1 决策分支1你的硬件是什么消费级GPURTX 3090/4090首选vLLM Text Generation WebUI组合。vLLM处理高并发APITGWUI做LoRA微调和RAG实验。避免Ollama因其无法发挥多卡优势。工作站级GPUA100 80GB必须用vLLM搭配--tensor-parallel-size 2和--pipeline-parallel-size 2。此时Ollama和LM Studio完全失去意义。Jetson Orin系列放弃所有PyTorch方案专注llama.cpp GGUF量化。Orin NX用Q4_K_MOrin AGX可用Q5_K_S。无GPUi7-12700Kllama.cpp AVX2优化是唯一选择模型限于Phi-3-mini或TinyLlama-1.1B。5.2 决策分支2你的目标场景是什么个人研究/学习Ollama足够它让你在10分钟内体验所有主流模型。但记住Ollama的“方便”是以放弃深度定制为代价的。企业知识库问答Dify vLLM是黄金组合。Dify提供UI和权限管理vLLM保证API性能。不要用TGWUI因其缺乏企业级审计功能。AI应用开发LangChain