本地部署 Mistral Small 24B 跑广告文案:完整搭建 + 与 GPT-4o 的盲测对比
目录
$312。这是上个月我给一个客户付的 OpenAI 账单,而其中大头都是广告文案——主标题、Headline、还有 RSA(Responsive Search Ad, 动态搜索广告)描述。那是一个每天在 Meta 和 Google 投大约 $4,200 的账户。我没打算把 GPT-4o 换掉,但我想知道:在批量产出变体这种最费 token 的环节里,躺在我柜子里那块每瓦 $0.60 的 GPU 到底能不能跑出差不多的结果。
Mistral Small 3(24B 版本,2025 年 1 月发布)是我近一段时间看到的第一款"一张消费级 GPU 就能跑、不用折腾量化"的开源权重模型。Mistral 官方的宣传是 RTX 4090 或 32GB 内存的笔记本就能跑。这话就是触发器。我给一台闲置的 Threadripper 主机加了第二张 4090,把同一份 brief 同时喂给两个模型,做了盲评。
下面是我最终落地的搭建方案、我用的广告文案 prompt 模板、盲测 A/B 的结果,以及最后让我决定在哪些客户上保留 GPT-4o、在哪些客户上切换到本地部署的每 token 成本算式。
实际需要的硬件
"4090 就能跑"在技术上是真的,在实操上具有误导性。下面是 Mistral-Small-24B-Instruct-2501(以及 2025 年 3 月的更新版 Small 3.1,同样是 24B、128k 上下文、Apache 2.0 协议)相对实际的规格表:
| 量化(Quantization,一种把模型权重压缩到更少显存的技术) | 文件大小 | 最低显存(VRAM) | 实际场景 |
|---|---|---|---|
| FP16(全精度) | 约 47 GB | 48 GB | 2× RTX 4090 或 A6000 |
| Q8_0 | 约 26 GB | 28 GB | 1× RTX 4090(24GB)—— 紧张 |
| Q6_K | 约 22 GB | 24 GB | 1× RTX 4090, 宽裕 |
| Q4_K_M | 约 17 GB | 20 GB | 1× RTX 3090 / 4070 Ti SUPER |
| Q3_K_L | 约 14 GB | 16 GB | 1× RTX 4060 Ti 16GB |
| Q2_K | 约 12 GB | 14 GB | 边缘场景, 质量会掉 |
4090 上的甜点是 Q6_K。24GB 显存全用上,单卡出 18-22 tokens/秒,和 FP16 的质量损失在盲测里我读不出来。Q4_K_M 适合用 3090 或 4070 Ti SUPER 的朋友。
如果你是 Mac 或者台式机没有独立显卡,用 Ollama 的 MLX(Apple 芯片的机器学习框架)构建版本可以塞进 32GB 统一内存,但只能跑到 4-7 tokens/秒。用来测试 prompt 没问题,用来一下午生产 200 条广告变体就不行了。
两套部署:Ollama 给笔记本,vLLM 给服务器
我两套都跑,机器不同,用途不同。选错了,时间就白费。
Ollama(MacBook Pro M3 Max,64GB): 这是我做 prompt 迭代的机器。安装一行,不用配 Python 环境。
bash# macOS / Linux
curl -fsSL https://ollama.com/install.sh | sh
ollama pull mistral-small:24b-instruct-2501-q6_KOllama 在 http://localhost:11434/v1 暴露一个兼容 OpenAI 的端点,意味着我所有现成的工具(LangChain、LlamaIndex、我自己的脚本)都可以无修改地指向它,就像指 GPT-4o 一样。M3 Max 上首 token 延迟大约 1.2 秒(典型广告文案 prompt),完整的 80 token 回答 6-8 秒。所有不需要并行的活都用它:做 prompt 工程、审一小批、做大批量生产前的 sanity check。
vLLM(Linux 机器,2× RTX 4090,Threadripper 3970X): 这是生产机器。vLLM 是一个高吞吐推理引擎(它会自动把进来的请求打包成 batch,保持 GPU 满载),批处理场景下差别是碾压级的。Ollama 同时服务一个用户,vLLM 把请求打包,在并发 8 的情况下能把同一张 4090 推到 1,200-1,800 tokens/秒的聚合吞吐。
bash# 用官方 Mistral Small 3.1 构建版启动 vLLM
pip install vllm
vllm serve mistralai/Mistral-Small-3.1-24B-Instruct-2503 \
--quantization awq-q4 \
--max-model-len 8192 \
--tensor-parallel-size 2 \
--gpu-memory-utilization 0.92服务器上我跑 AWQ(Activation-aware Weight Quantization, 激活感知权重量化)Q4,因为显存不紧张,而且 AWQ 在 Hopper/Ada(NVIDIA 较新的 GPU 架构)上的 kernel 支持比 GGUF(Ollama 用的量化格式)好。广告文案 prompt 这个长度下,输出质量和 Q6_K 区分不出来。如果只有一张 4090,把 --tensor-parallel-size 1、量化留 --quantization awq-q4 就行,装得下。
vLLM 默认在 :8000 起一个 OpenAI 兼容服务。任何用 OpenAI 接口的广告工具,只要把 base URL 指向 http://your-server:8000/v1 就能用。
我实际在用的广告文案 prompt
我前三个版本的 prompt 都是"为一个 DTC 护肤品牌写 10 条 Google Ads headline"。输出是一坨套话。开始出活的版本加了四样东西:
text你是一位资深直效营销文案(direct-response copywriter),写过 $50M+ 的
付费社交和搜索投放。你为转化率写,不为调性写。
产品: {{product_name}}
优惠: {{offer}}
目标受众: {{persona}}
语气: {{tone}} # 例如 clinical-authoritative、warm-confessional、urgent
渠道: {{channel}} # meta_primary_text、google_rsa_headline、linkedin_intro
最大长度: {{max_chars}} 字符
禁用词: {{banned_phrases}} # 例如 "revolutionary"、"game-changing"、emoji
每条变体按以下规则:
1. 用最强的具体利益开篇,不要泛泛的声称
2. 前 8 个词里出现一个数字或具名证据
3. 一个 CTA(Call To Action, 行动号召)动词,不要 "点击了解更多"
4. 如果痛点模式更强,前 4 个词避免用第二人称 "你"
5. 输出 JSON: {"variants": [{"primary": "...", "headline": "...", "angle": "..."}]}
生成 {{n}} 条变体。各条之间角度要分散,不要把同一个意思换说法。
至少覆盖以下 3 种不同的心理钩子: 社会认同、损失厌恶、好奇心缺口、
身份认同、具体性、反常识。
{{n}} 条变体输出后,内部再做一遍去重,删除角度重复的。比模型选择更关键的两件事:(1) 文末的角度列表——没有这个,每条变体都在换措辞;(2) 禁用词字段——禁掉同样的五个套话,消除了两个模型都爱默认输出的"revolutionary、game-changing"废话中的 80%。
我每个客户在 Notion 上维护一个定制版本。从一个 DTC(Direct-To-Consumer, 直接面向消费者)品牌切到 B2B SaaS 客户,30 秒改完,不用重写 prompt。
盲测基准
我跨 5 个真实客户账户生成了 50 份广告文案 brief——3 个 DTC 电商、1 个 B2B SaaS、1 个本地服务。每份 brief 把同一段 prompt 跑两遍:一遍对 gpt-4o-2024-08-06(当时的生产模型),一遍对我 vLLM 服务器上的 Mistral Small 3.1。相同的 temperature(0.7)、相同的 top-p(0.9)、相同的 prompt 文本。我打乱输出顺序、抹掉模型名,让一位资深营销人从没见过这两份输出的人在四个维度上 1-5 打分:
- Hook 力度——第一行能不能让拇指停下来
- 具体性——具体数字、具名成分、真实顾虑 vs 模糊声称
- 渠道匹配——这个真的会投到它声称的版位上吗
- 原创性——是和其他 9 条同一个角度,还是一个新角度
50 份 brief × 4 个维度 × 2 个评分人 = 400 个评分。结果如下:
| 指标 | GPT-4o | Mistral Small 3.1(本地) | 差距 |
|---|---|---|---|
| Hook 力度(平均 /5) | 4.1 | 3.7 | -0.4 |
| 具体性 | 4.3 | 3.4 | -0.9 |
| 渠道匹配 | 4.0 | 3.9 | -0.1 |
| 原创性 | 3.5 | 3.8 | +0.3 |
| 整体偏好(盲测配对, 占成对比例) | 54% | 42% | 4% 平局 |
翻译一下:GPT-4o 仍然是更好的广告文案模型。Mistral Small 3.1 在渠道匹配和原创性上持平或更好,具体性明显更弱——这和我定性观察一致。Mistral 更有创意、更不具体。"给我一个新角度"或"给我 10 个没试过的 hook",它有竞争力。"列出这个受众关于视黄醇的三个具体顾虑并逐个回应",GPT-4o 真的赢。
这才是我实际在用的结论。
决定我最终方案的算式
本地部署真正吊打 API 的是成本。小客户那边我一个月大约跑 1,800 次广告文案生成——平均每次 600 输入 token + 350 输出 token。
GPT-4o 成本:
- 输入: 1,800 × 600 / 1,000,000 × $2.50 = $2.70
- 输出: 1,800 × 350 / 1,000,000 × $10.00 = $6.30
- 小计: 每月 $9.00(按裸 token 算)
$9 不是真实成本。OpenAI 每天 token 量低于 100 万基本等于免费,但同一个账户我还用 GPT-4o 做另外 5 件事——策略总结、brief 扩展、图片 prompt、偶尔的分析。广告文案大约占总 GPT-4o 花费的 40%。上个月那个账户的账单一共 $312,其中 $112 是广告文案。
本地部署成本(2× 4090 主机):
- 硬件按 3 年摊销:约 $3,800 / 36 个月 = 每月 $106
- 电费: 2× 4090 各约 300W + 系统 ≈ 700W,24/7 → 按 $0.18/kWh 算每月约 $90
- 小计: 每月约 $196,不限量
盈亏平衡:1,800 次/月用现在这个定价,API $112 vs 自建 $196。我目前的量,GPT-4o 还是便宜。
规模一上来就变。5,000 次/月,API 账单 $311,自建还是 $196。10,000 次,API $622,自建还是 $196。所以小客户我留 GPT-4o,大批量的活(500 条变体的广告冲刺、关键词扩展到文案的循环)路由到本地主机。本地主机现在在两个客户上回本,其他客户用 API。
还有第三条路提一下:OpenRouter 上托管的 Mistral Small,输入约 $0.20/M token、输出 $0.60/M token。不用硬件、不用配置、同一个模型。如果只是好奇,或者量没到盈亏平衡,这条最合适。失去的是数据隐私的好处,但保留住了成本优势。
如果让我重新开始我会跳过的三件事
这三件事花的时间比省的多。
第一,"我需要把 7B / 13B / 24B 三个档都对比一遍。" 我做了。7B 模型在广告文案上根本不行——具体性直接崩。13B 能用。24B 是第一个不用重度人工改写就能直接用的档位。直接上 24B。不要花一周试小档位。
第二,LM Studio 的弯路。 LM Studio 是很好的试模型 GUI,但它的推理后端(llama.cpp 的一个 fork 量化路径)在同一档量化下比 vLLM 明显慢。我浪费了一天。要 GUI 用 Ollama,要吞吐用 vLLM。选一个。
第三,微调。 我用 LoRA(Low-Rank Adaptation, 一种参数高效微调方法)在过去一个客户 800 条赢下来的广告上微调过 Mistral Small。盲测打分没动。通用基础模型 + 更好的 prompt 击败了微调版本。广告文案的微调是 2026 年的问题,不是 2025 年的。上面那个 prompt 模板已经干了 80% 的活。
我反复回到的那个结论
GPT-4o 在真正重要的维度——具体性和 hook 力度——上仍然是更好的广告文案模型。小账户直接用 API 就行。批量生产多个客户的 agency、或者任何有数据隐私要求的(医疗、金融、法律),本地部署 Mistral Small 24B 现在是一个真正可用的方案,不是科学项目。模型够好,硬件合理,vLLM 让吞吐问题消失了。
我现在两个都跑。本地主机负责批量产出,GPT-4o 负责最终挑选以及我真的需要更好的模型的那部分活。上个月 $312 的账单项现在降到了 $190 左右,第二张 4090 到 Q1 末能回本。
如果你只拿走一件事:别用本地部署替换 API。把本地模型垫在 API 下面。两层叠在一起,比单独任何一层都更便宜、更快。