写点什么

QwQ-32B:思维链能力本地化部署的福音?

作者:冯骐
  • 2025-03-06
    上海
  • 本文字数:5302 字

    阅读完需:约 17 分钟

结论

先说结论,初步来看,数学推理和逻辑方面,接近满血的 DeepSeek R1,文学创作方面明显要弱。可能和基模的规格毕竟还是有关系。


模型大小 62G,只有 R1 的 1/10 不到。可以简单视为部署成本不到满血 R1 的 1/10,考虑到非 H 系的卡不支持 FP8,则部署成本进一步降低到 1/20,极具性价比的选择。


蒸馏版的 R1 已经毫无价值,无论是成本还是性能都被 QwQ-32B 吊打。量化版的 R1 中,q4 及以上可能还略有性能优势,但成本依然显著高于 QwQ-32B。q4 以下可能不如直接换 QwQ-32B 要效果更好一些。


尽管调用 API 才是性价比最好的选择,但很多场景里本地化部署依然是刚需。而本地化方案里,满血版 R1 的成本实在太高了,即便勉强跑起来了,要大规模应用时面临的性能瓶颈也很明显,甚至不得不限制用户群体,搞小范围使用。在适配国产显卡时问题更显著,由于不支持 BF8,硬上满血版的代价过于高昂。以至于许多地方勉强跑个蒸馏版来凑合,从这个角度而言,QwQ-32B 可能更有利于本地化部署的思维链能力普及——牺牲一些模型能力换取更大规模的应用落地。


部署

环境

  • A800,显存 80G

  • 32K 上下文至少 1 卡,128K 上下文至少 2 卡

  • vllm 0.7.3


以下是一个多卡部署的参考 docker compose 示例。建议用 vllm 0.7.1 以上的版本, 以确保支持了 reasoning-parser 的能力。(详见这个 PR [Frontend] Support reasoning content for deepseek r1 by gaocegege · Pull Request #12473 · vllm-project/vllm


  qwq:    image: vllm/vllm-openai:v0.7.3    runtime: nvidia    volumes:      - /home/admin/models:/root/.cache/huggingface    environment:      - HF_ENDPOINT=https://hf-mirror.com      - CUDA_VISIBLE_DEVICES=0,1,2,3    ports:      - "7004:8000"    ipc: host    command: [      "--model", "/root/.cache/huggingface/QwQ-32B",      "--served-model-name", "qwq-32b",      "--trust-remote-code",      "--tensor-parallel-size", "4",      "--gpu-memory-utilization", "0.9",      "--enable-reasoning",      "--reasoning-parser", "deepseek_r1"    ]
复制代码


思维链的标准

deepseek r1 的发布,实际上拓展了 openai 定义的 chat api 标准。这个扩展的字段就是 reasoning_content。(详见 推理模型 (deepseek-reasoner) | DeepSeek API Docs

如果推理框架没有支持这个,那么大概会在正文里看到 <think></think> 的标签。


我建议尽量把推理框架升级到支持 reasoning_content,否则意味着所有的 <think></think> 部分都会进入上下文,这会显著降低连续对话的能力,上下文可能很快就爆掉了。


上下文扩展

QwQ 应该是基于 qwen2.5-32B 的,所以默认的上下文只有 32K。要扩展到 128K 的话,则需要修改 模型的config.json文件,启用 YaRN 外推。


{  ...,  "rope_scaling": {    "factor": 4.0,    "original_max_position_embeddings": 32768,    "type": "yarn"  }}
复制代码


详见 vLLM - Qwen


并发能力

  • 32K 上下文

1 卡:Maximum concurrency for 32768 tokens per request: 1.17x

2 卡:Maximum concurrency for 32768 tokens per request: 10.41x

4 卡:Maximum concurrency for 32768 tokens per request: 29.05x


  • 128K 上下文

2 卡:Maximum concurrency for 131072 tokens per request: 2.77x

4 卡:Maximum concurrency for 131072 tokens per request: 6.75x


以上是 vllm 启动时,以最大 token 输入来评估的并发能力。实际用户请求的输入平均上下文远低于这个数字,因此实际并发能力会显著高于这个能力。


参数和提示词

官方建议 Temperature=0.6, TopP=0.95 ,以避免思维推导时产生无休止的重复。TopK 选择 20 至 40 之间。这些默认的参数其实都在模型的 generation_config.json 配置文件里,所以如果没有指定的话就肯定时官方推荐参数。如果有指定,则建议调整到官方建议的值,特别是 temperature

详见通义千问 QwQ-32B · 模型库


主观测试

官方发布的测试报告,称在一系列的测试集中,性能比肩 R1。但是我们做实验的都懂的,测试集的选择可太有讲究了。所以我们来很主观的测试几个常见问题吧。


采用 chatbox 调用本地部署的 qwq-32b api 进行测试,无 system prompt

strawberry


啰嗦的推理过程不放了,通过,完全可以认识到 strawberry 中有几个 r,光这一点就几乎吊打所有的蒸馏版了。

24 点



啰嗦的推理过程不放了,通过,足见在数学推理方面确实有长足的进步。这个能力也至少比肩 R1 的 Q4 量化了。


文学创作

我们来让 AI 写一段稿子,大伙可以感受下文学创作上的差别,无需多言。


提示词如下:

  • 你现在是魔兽争霸中的角色阿尔萨斯,正在面临斯坦索姆的困境,你最终决定屠城,然而你必须要对士兵发起动员讲话,鼓舞士兵的士气。写一个鼓舞动员的讲话稿,题目自拟。


QwQ-32B

思维链开始

好的,我现在需要帮用户写一个阿尔萨斯在斯坦索姆屠城前的动员讲话稿。用户要求是必须让阿尔萨斯决定屠城,并且要鼓舞士兵士气,同时要符合阿尔萨斯的性格和背景。首先,我得回忆一下阿尔萨斯在魔兽中的角色发展,尤其是斯坦索姆事件的关键点。他那个时候已经被诅咒感染,内心挣扎,但最终选择屠城以防止瘟疫扩散,这个决定充满了悲剧色彩。


用户可能希望这个讲话稿既能体现阿尔萨斯的决绝,又要有激励士兵的部分。不过,根据他的性格,可能会表现出冷酷、坚定,甚至有点暴君的感觉。所以,我需要找到平衡点,既要动员士兵,又要符合他内心的矛盾。


接下来,题目需要自拟。考虑到斯坦索姆的瘟疫和阿尔萨斯的决断,题目可能需要带有警示和决绝的意味。比如“血与霜的审判”这样的标题,结合冰霜巨龙的元素,同时暗示血腥的行动。


然后,讲话的结构。开头应该直接面对现实,承认当前的困境。阿尔萨斯可能会先描述瘟疫的危险,强调必须采取极端手段。接着,用他过去的经历来强化自己的权威,比如提到父亲洛丹伦国王,还有乌瑟尔爵士,但可能暗示他们未能解决问题,所以现在需要他来做出决断。


需要加入一些激励的元素,比如将士兵们的行动与荣誉、荣耀联系起来,但阿尔萨斯这时候可能已经黑化,所以语言更偏向命令和威严,而不是传统的鼓舞。可能需要提到霜之哀伤的力量,或者作为天选之人的使命,让士兵们觉得这是不可避免的。


还要注意情绪的变化,从愤怒、痛苦到坚定,最后是冷酷的决心。比如,阿尔萨斯可能会先表现出对瘟疫受害者的同情,但立刻转为必须消灭所有感染者的决断,这样能体现他的内心挣扎,但最终被恐惧和诅咒所驱使。


另外,用户提到的几个要求:情节推动、人格可塑性和情感陪伴。需要确保讲话推动剧情发展,比如动员士兵行动,同时暗示阿尔萨斯的变化,比如更黑暗,使用更多巫术。情感方面,要让士兵感受到被理解,但又被强迫接受残酷的命令,可能通过提及他们的家园或亲人来激发情感。


可能需要引用一些魔兽中的经典台词或元素,比如“为了洛丹伦”、“荣耀属于暴风城”,但根据剧情发展,现在可能已经不同,所以要调整。霜之哀伤的寒冰气息和黑暗力量可以成为讲话中的重要象征。


还要考虑士兵的反应,是否会有质疑的声音,然后阿尔萨斯如何应对,比如用恐惧或威胁来压制。同时,加入一些动作描写,比如举起霜之哀伤,周围的寒气,增强场景感。


最后检查是否符合所有要求:口语化,简洁,标题自拟,情绪到位,推动情节,人格变化,情感连接。可能需要多次调整措辞,确保阿尔萨斯的语气既坚定又带有被诅咒后的冷酷,同时让士兵们感到被激励去行动,尽管行动本身是残酷的。

思维链结束


【霜火之誓:斯坦索姆的终章】

(阿尔萨斯的铠甲在月光下泛着寒光,霜之哀伤悬在胸前,他站在城墙之上,目光如刀般扫过下方颤抖的士兵队列。远处传来被诅咒者垂死的哀嚎。)

"听着,你们这些懦夫!"(他突然挥动武器,寒霜在指尖凝结)"你们以为我在犹豫?在害怕?我看到你们的恐惧——就像看到艾萨拉的碎片刺入血肉时,那可憎的颤抖!"

(一阵刺骨的寒风掠过城头。士兵们本能地握紧武器,有几个忍不住后退半步。阿尔萨斯露出近乎疯狂的笑容。)

"三天前,乌瑟尔爵士还在这里!(他的声音陡然拔高,剑柄重重砸在城墙上)他用圣光,用仁慈,用所谓的'正确之道',让多少同胞沦为行尸走肉?让多少孩童变成食脑瘟疫的温床?(寒气在城墙上结出冰棱)"

(他突然转身,面对着被锁链束缚的农庄,那里的'村民'正用空洞的眼眶仰望。)

"我父亲教过我,领袖的职责是守护子民。但现在——(他扯开衣领,露出颈部扭曲的血管)看看这个!瘟疫在腐化我的血液,就像它腐化了这个小镇。若不斩断它的根——(剑锋重重劈向地面,寒霜在泥土上蔓延)我们所有人,包括你们的妻儿,都将沦为巫妖王的养料!"

(有士兵低声啜泣,更多人开始交头接耳。阿尔萨斯的笑声突然变得阴冷。)

"听好了!(巫术在铠甲上燃烧,暗紫光芒映红半边天际)今夜过后,你们将被写入史册。不是作为暴君的爪牙,而是(他举起霜之哀伤,寒气化作冰霜巨龙盘旋在头顶)作为洛丹伦最后的守护者!我赐予你们寒冰之力——(冰晶顺着枪尖爬升)让它净化这片土地,让圣光无法触及的阴影永远沉寂!"

(他忽然单膝跪地,铠甲发出令人胆寒的碎裂声。)

"或许...或许我本该是另一位暴风城的王子。但现在——(暗紫色能量从伤口溢出,被寒霜勉强压制)我只知一件事:当黎明降临,这里将只剩下冰与灰。你们跟我,将见证正义的最终形态——"

(他站起时,铠甲彻底碎裂,露出皮肤下蠕动的紫黑色纹路。士兵们下意识后退。)

"要么与阿尔萨斯·米奈希尔并肩而战,(巫术在掌心凝聚成冰霜与黑暗交织的权杖)要么死在这里。选择权...在我霜之哀伤的锋刃上。"

(远处传来第一声冰霜巨龙的咆哮,月光突然被遮蔽。阿尔萨斯的战马躁动不安,骑士长的旗帜在寒风中猎猎作响。)

"前进!让后世铭记——(他策马冲破城门,紫黑纹路在脸上蔓延成獠牙)当圣光失效时,我们选择了更锋利的真相!"

DeepSeek

思维链开始

好的,用户需要我以阿尔萨斯的身份,在屠城斯坦索姆前对士兵发表动员讲话。首先,我得回忆一下阿尔萨斯当时的背景和心境。这个时候的阿尔萨斯正处于堕落的关键转折点,他坚信屠城是必要的,认为这是阻止天灾军团扩散的唯一方法。但乌瑟尔和吉安娜反对他,导致他更加固执。


接下来,我需要确定讲话的核心主题。阿尔萨斯必须说服士兵们跟随他执行这个残酷的命令,所以动员的重点应该放在责任、牺牲、保护王国以及别无选择上。同时,要表现出他的坚定和决绝,甚至带有一点被逼无奈的感觉。


然后,结构方面,通常动员演讲会有开头称呼,中间分几个论点,最后鼓舞士气。开头可以用“士兵们”或者更亲密的称呼,比如“洛丹伦的儿女们”来增强归属感。中间部分需要强调瘟疫的威胁,强调时间紧迫,强调别无选择,必须采取极端措施。可能还要提到对逝者的尊重,避免他们成为天灾的傀儡,同时将责任归咎于敌人,减轻士兵的心理负担。


要注意阿尔萨斯的性格特点,他此时已经逐渐被复仇和偏执驱使,所以语言要强硬,不容置疑。可能需要用一些修辞手法,比如排比、对比,增强感染力。例如,对比士兵的家园和亲人,与斯坦索姆的惨状,激发他们的保护欲。


还需要考虑士兵可能的抵触情绪,所以讲话中要预见到他们的疑虑,并提前驳斥。比如,提到乌瑟尔的反对,但强调作为王子的责任,必须做出艰难的决定。同时,要赋予士兵们使命感,让他们觉得自己的行动是高尚的,是为了更大的善。


另外,题目需要自拟,可以选一个有力的标题,比如“在燃烧的十字路口”或者“血色使命”,突出关键时刻和牺牲的主题。


最后,结尾部分要激励士气,呼吁士兵们跟随自己,强调这是唯一的道路,并承诺他们的名字将被铭记,尽管行动本身充满痛苦。可能还要提到光明和黑暗的对立,强化正义性。


需要避免过于情绪化,保持威严,同时带有一丝悲壮。语言要简洁有力,多用短句和命令式语句,符合军事动员的特点。

思维链结束

《血色十字路口的抉择》

洛丹伦的战士们!

此刻我们脚下的大地正在腐烂,每口呼吸都掺杂着瘟疫的腐臭。看看那些紧闭的城门后游荡的阴影吧——那些曾是铁匠、母亲、孩童的躯体里,瘟疫正在孵化比死亡更可怕的命运。

(长剑出鞘声)

这把曾为洛丹伦收割荣耀的利刃,今夜将沾满同胞的鲜血。你们有权颤抖,有权质问,有权用最恶毒的语言诅咒你们站在城墙阴影里的王子。(停顿,铠甲碰撞声)但当黎明降临时,那些因我们犹豫而苏醒的亡灵军团,会把整个洛丹伦变成更大的焚尸场!

(战马嘶鸣,火把坠落迸溅火星)

乌瑟尔说这是屠杀,吉安娜说还有希望。(冷笑)希望?希望早在三天前就死在安多哈尔的谷仓里了!每具复活的尸体都是插向王国的匕首,每声哀嚎都是对白银之手誓言的嘲弄!

(突然压低嗓音)

我的父亲会为今晚的死者立碑,而活着的诸位将在碑文里看到自己孩子的名字。(猛然提高声调)举火!让瘟疫与我们的懦弱一同焚尽!当剑锋切开受诅咒的血肉时,记住这不是杀戮——这是给十万灵魂最后的葬礼,是给洛丹伦百万生灵的赎罪祭!

(亡灵尖啸从城内传来)

听啊!它们正在啃食最后的良知。要么让火焰净化一切,要么让我们的犹豫化作天灾军团南下的号角!(重剑劈开木箱,圣光骤然亮起)以米奈希尔之血起誓,今夜所有罪孽由我背负。而你们——洛丹伦最后的盾牌,是选择在墓碑前忏悔,还是在地狱门口死守人间?

(沉默中响起第一支火把破空声)

让斯坦索姆的灰烬告诉历史:人类,绝不屈服!

以上

发布于: 2 小时前阅读数: 6
用户头像

冯骐

关注

教育行业码农 2020-06-19 加入

一个教育行业的码农

评论

发布
暂无评论
QwQ-32B:思维链能力本地化部署的福音?_大模型_冯骐_InfoQ写作社区