【大模型实战篇】vllm本地部署阿里最新的QwQ-32B推理模型以及体验

1. 背景

        3月6日凌晨,阿里巴巴发布并开源全新的推理模型通义千问QwQ-32B。通过大规模强化学习,千问QwQ-32B在数学、代码及通用能力上实现提升。在保持性能的同时,千问QwQ-32B还大幅降低部署使用成本,在消费级显卡上也能实现本地部署。

        来看下效果对比,可以看到QwQ-32B基本与R1持平。但因为只有32B的参数,部署成本要大大低于DeepSeek-R1。感觉之前花了超大代价部署R1的朋友心里在滴血。

2. vllm部署本地版本QwQ-32B

        在背景介绍中提到,可以使用消费级显卡,这里不要被误导了,估计是指量化版本。比如ollama中的QwQ-32B采用了4bit,模型大小20G。

        如果是直接下载的safetensor版本,大小约62G.

        另外采用4090卡部署,加载模型的时候直接卡住。最后是用A800的两张卡加载成功,并且能够正常推理。

        题外话:安装vllm大概花了1个小时,挺耗时间的,而且还是在网速比较好的情况。最耗时的主要是torch相关包以及cudnn相关的包安装。

        所以消费级显卡,还是老老实实采用量化版本吧。

        vllm执行命令比较简单:

扫描二维码关注公众号,回复: 17554396 查看本文章
CUDA_VISIBLE_DEVICES=1,2 \
vllm serve /data/QwQ-32B \
--tensor-parallel-size 2 \
--port xxxx

        加载的话,大概70G显存,推理运行起来之后,占用显存如下,推理速度比较慢,大概是每秒30+token,有时候甚至更低。

3. 推理使用

case1:

from openai import OpenAI

# 设置 OpenAI 的 API 密钥和 API 基础 URL 使用 vLLM 的 API 服务器。
openai_api_key = "EMPTY"
openai_api_base = "xxx"

client = OpenAI(
    api_key=openai_api_key,
    base_url=openai_api_base,
)

# 使用流式输出(stream=True)
chat_response = client.chat.completions.create(
    model="/xxx/QwQ-32B",
    messages=[
        {"role": "system", "content": "You are Qwen, created by Alibaba Cloud. You are a helpful assistant."},
        {"role": "user", "content": "我要玩24点游戏,我手里的牌是5、5、7、9,穷举所有的可能性"},
    ],
    max_tokens=1028,
    stream=True  # 启用流式响应
)

# 处理流式输出
contents = []
for e in chat_response:
    # print(e.choices[0].delta.content,end="")
    contents.append(e.choices[0].delta.content)
print("".join(contents))

推理过程示例:

嗯,用户让我帮他用5、5、7、9这四个数字玩24点游戏,找出所有可能的组合方式。首先我得先回想一下24点的基本规则,就是用这四个数字通过加减乘除和括号,每个数字只能用一次,最后得到24。

那我需要考虑不同的运算顺序和组合方式。首先,可能需要分解问题,把四个数分成不同的组合,然后试各种运算。不过穷举所有可能性的话可能会比较麻烦,但是或许可以通过一些策略来简化。

首先,我可以先尝试组合中是否有明显的乘法或除法的可能。例如,是否可以找到两个数相乘接近24或者更方便的组合。比如5、5、7、9这四个数,有没有可能两个数相乘接近24?

比如5和5,相加是10,可能不够。或者5×5是25,和24很接近,但需要其他数调整。比如25减去某个数?但可能需要其他数字参与。或者比如7和某个数相乘接近的话?

比如,9和某个数相乘呢?9乘以差不多2.666可能是,但不太行。

另一个思路是考虑这四个数的运算是否有标准解法。比如常见的组合比如 (a × b) - (c ÷ d) 这种形式。或者 a × (b - (c ÷ d)) 这样的结构。

或者先尝试一些可能的组合:

比如,先试试5、5、7、9这几个数中有没有可能的组合。

比如用9和5相乘得到45,然后看看另外两个数如何处理才能得到24。比如45减去7是38,再减5也不行,或者可能的话,或者分步操作?

或者,有没有可能用两个数相加减,然后乘以另一个?

或者先尝试可能的得分方式。比如:

是否有一个式子是 (5 × 7) - (9 +5) = 35 -14=21 还不够。

或者 (9 ×5) - (7 ×5)=45-35=10,不行。

或者 5× (9 - (7-5/5)) 这样子?可能不太对。

或者 (5 × (9 - 7)) +5= 5×2+5=15,还不够。

或者尝试分式运算。比如 (5 × (7 - (9 /5)) ),这样计算的话,先算9/5是1.8,7-1.8是5.2,然后5乘以5.2是26,接近,但可能不行。

或者 (5 +5) × (9-7) =10×2=20,还是不够。

可能需要更仔细的尝试。

比如有没有可能像这样:(9 - 5/5) × (7 - ?) 貌似不太行。

或者: (5 × (7 - (9 ÷5))) ?

计算步骤:

9 ÷5是1.8,7-1.8=5.2,5 ×5.2=26,离24差2。

那26减去2或者类似的?

或者换个方式:比如7×((5+5) -9)=? 5+5是10,10-9=1,7×1=7,不行。

或者,7 ×( (5 ×5)-9 ) / something ? 这样计算的话,5×5=25,25-9=16, 然后7×16=112,太大了,除非分母有数,比如除以 112 / 4? 这可能不符合题目要求?

或者,是否有方式构造出分数?

比如, (5 × (5 - (7/9))) 之类的,可能不太容易得到整数。

或者是否有这样的组合:

(9 - (5/5)) × (7 - ))? 需要再考虑另一个操作?

或许应该更系统的列出可能的运算组合。

对于四个数a,b,c,d,可以尝试不同的组合运算:

例如先选两个数进行操作,然后剩下的三个数继续组合?

或者可以用递归的方式,但手动来做可能会比较繁琐。

现在再重新试一遍:

比如,先尝试5和9相乘得到45,然后剩下的5和7,那么45 - (5+7)=33,不行;或者45 -(5×7)=45-35=10,也不行。

或者用(9 -5)得到4,然后和另外的5和7?

case2:

另外,采用脚本的方式也做了尝试:

import torch
from modelscope import AutoModelForCausalLM, AutoTokenizer

model_name = "Qwen/QwQ-32B"

model = AutoModelForCausalLM.from_pretrained(
    model_name,
    torch_dtype=torch.float16,
    device_map="cuda:3"
)

tokenizer = AutoTokenizer.from_pretrained(model_name)

messages = []

print("Chatbot 已启动,输入 'exit' 退出对话。\n")

while True:
    user_input = input("User: ").strip()
    if user_input.lower() == "exit":
        print("Chatbot 结束对话。")
        break

    messages.append({"role": "user", "content": user_input})

    text = tokenizer.apply_chat_template(
        messages,
        tokenize=False,
        add_generation_prompt=True
    )

    model_inputs = tokenizer([text], return_tensors="pt").to("cuda:3")

    generated_ids = model.generate(
        **model_inputs,
        max_new_tokens=1024
    )

    generated_ids = [
        output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
    ]
    response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]

    messages.append({"role": "assistant", "content": response})

    print(f"Bot: {response}\n")

Chatbot 已启动,输入 'exit' 退出对话。

User: 帮我推荐一款耳机
Bot: The attention mask is not set and cannot be inferred from input because pad token is same as eos token. As a consequence, you may observe unexpected behavior. Please pass your input's `attention_mask` to obtain reliable results.
user
帮我推荐一款耳机
assistant
<think>
嗯,用户让我推荐一款耳机,但需要先分析他们的需求。首先,我需要考虑用户可能的使用场景。比如,他们是在通勤时听音乐,还是运动时使用?或者是长时间佩戴办公?不同的场景可能需要不同的类型,比如入耳式、头戴式或耳挂式。

然后,预算范围也很重要。用户没有提到预算,所以可能需要推荐不同价位的产品。比如,预算有限的话,推荐性价比高的,比如小米或者网易云的耳机;中高端的话,索尼、Bose、森海塞尔这些品牌可能更合适。

音质偏好方面,用户可能喜欢低音还是高解析?比如喜欢流行音乐的人可能需要低频好的,而古典或人声可能需要清晰的中高频。不过用户没具体说,可能需要推荐均衡的款式。

降噪功能现在很流行,特别是通勤族。如果用户经常在嘈杂环境使用,主动降噪功能很重要,比如索尼WH-1000XM5或者Bose QC系列。但如果是运动用,可能防水防汗功能更关键,比如Jaybird或者Powerbeats。

佩戴舒适度也不能忽视,长时间使用的话,头戴式可能更舒适,但便携性不如入耳式。用户可能有偏好,但需要询问或假设。

品牌偏好方面,有些用户可能有特定的品牌倾向,比如苹果用户可能更倾向AirPods,安卓用户可能更开放。但用户没提,所以可以推荐多个品牌。

其他功能比如续航时间、触控操作、无线连接稳定性、防水等级等都是考虑因素。比如,喜欢跑步的用户可能需要IPX5以上的防水等级。

可能用户没有提到的需求包括:是否需要支持无线充电,是否需要多设备连接,或者是否有健康监测功能(比如运动耳机的心率监测)。但这些可能属于额外功能,不是必须。

总结下来,我需要先列出不同场景下的推荐,然后分价位和品牌,给出几个选项,并询问用户是否有更具体的需求。比如先给出几个热门型号,然后让用户补充信息,再细化推荐。
</think>

好的!为了给您推荐最适合的耳机,我需要了解一些具体需求。以下是几个关键问题,您可以根据自己的需求选择或补充:

---

### **1. 使用场景**
- **通勤/日常使用**:需要降噪、舒适佩戴、续航长。
- **运动/健身**:防水防汗、佩戴稳固、轻便。
- **游戏/娱乐**:低延迟、高音质(比如索尼LDAC、高解析)。
- **办公/学习**:降噪、清晰通话、长时间佩戴舒适。
- **音乐发烧友**:高解析音质(Hi-Res)、音色偏好(比如监听型或流行型)。

---

### **2. 预算范围**
- **入门级(200元以下)**:基础功能,适合预算有限的用户。
- **中端(200-800元)**:均衡性能,适合大多数日常需求。
- **高端(800元以上)**:专业音质、顶级降噪或特殊功能(如空间音频)。

---

### **3. 关键功能需求**
- **降噪**:主动降噪(ANC)是否重要?
- **音质偏好**:
  - 流行音乐(低频强劲)
  - 人声/古典(中高频清晰)
  - 游戏/电影(低延迟、空间音效)
- **佩戴类型**:
  - 入耳式(耳塞式,便携)
  - 半入耳式(耳甲式,舒适但隔音差)
  - 头戴式(舒适但体积大)
- **其他功能**:
  - 防水防汗(IPX5以上)
  - 触控操作
  - 无线充电
  - 多设备连接(如手机+电脑)
  - 长续航(超过10小时)

---

### **4. 品牌偏好**
- **安卓用户**:推荐索尼、三星、JBL、漫步者。
- **苹果用户**:AirPods系列(尤其是Pro系列)。
- **性价比之选**:Redmi、网易云音乐、万魔(1more)。
- **高端品牌**:索尼(WH-1000XM系列)、Bose(QC系列)、森海塞尔(MOMENTUM系列)。

---

### **初步推荐(根据常见需求)**
#### **场景:通勤/降噪**
- **高端首选**:**索尼WH-1000XM5**(顶级降噪+音质)。
- **性价比之选**:**Redmi Buds 4 Pro**(千元内降噪标杆)。

#### **场景:运动**
- **防水防汗**:**

4. 参考材料

【1】阿里半夜开源全新推理模型,QwQ-32B比肩DeepSeek-R1满血版

【2】魔搭社区-QwQ32B

猜你喜欢

转载自blog.csdn.net/weixin_65514978/article/details/146078090
今日推荐