QwQ32B硬刚671B DeepSeek,低成本,4090可跑

1. 简介

关于UCloud(优刻得)旗下的compshare算力共享平台
UCloud(优刻得)是中国知名的中立云计算服务商,科创板上市,中国云计算第一股。
Compshare GPU算力平台隶属于UCloud,专注于提供高性价4090算力资源,配备独立IP,支持按时、按天、按月灵活计费,支持github、huggingface访问加速。
使用下方链接注册可获得20元算力金,免费体验10小时4090云算力,此外还有3090和P40,价格每小时只需要8毛,赠送的算礼金够用一整天。
https://www.compshare.cn/?ytag=GPU_lovelyyoshino_Lcsdn_csdn_display

最近,Qwen发布了最新的32B推理模型QwQ-32B,其性能在许多基准测试中表现出色,甚至不逊色于671B参数的满血版DeepSeek R1。QwQ-32B基于Qwen2.5-32B,并通过强化学习(RL)进行进一步优化。目前实测需要全部放在GPU上需要四卡4090,单卡只能放cpu一起跑

QwQ-32B模型
目前相关镜像已经存入网站:QwQ-32B-深度思考满血版中了。此外还有Deepseek-R1 671BOllama-DeepSeek-R1-32BOllama-DeepSeek-R1-70B可供选择

2. 环境设置

为了使用QwQ-32B模型,首先需要更新pip并安装必要的依赖包。以下是相关的命令行代码:

# 升级pip
python -m pip install --upgrade pip

# 更换 pypi 源加速库的安装
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

# 安装依赖包
pip install modelscope==1.9.5
pip install transformers==4.48.3
pip install streamlit==1.24.0
pip install sentencepiece==0.1.99
pip install accelerate==1.3.0 
pip install transformers_stream_generator==0.0.4


# 下载安装包
wget https://developer.download.nvidia.com/compute/cuda/12.1.0/local_installers/cuda_12.1.0_530.30.02_linux.run


apt install gcc-11

# 设置安装包可执行
chmod +x cuda_12.1.0_530.30.02_linux.run
sh cuda_12.1.0_530.30.02_linux.run

3. 强化学习的应用

扩展强化学习(RL)在提升模型性能方面展现出巨大的潜力,超越了传统的预训练和后训练方法。研究表明,RL可以显著改善模型的推理能力。例如,DeepSeek R1通过整合冷启动数据和多阶段训练,达到了最先进的性能,使得复杂推理成为可能。

DeepSeek R1

QwQ-32B拥有320亿参数,其性能可与具有6710亿参数的DeepSeek-R1相媲美。该模型尚未发布完整技术报告,但官方页面对其强化学习方法进行了简要说明:

  1. 从一个冷启动检查点开始,实施基于结果奖励的强化学习(RL)。
  2. 初始阶段专注于数学和编码任务,使用数学问题准确性验证器和代码执行服务器来确保解决方案的正确性。
  3. 随着训练的推进,两个领域的性能持续提升。

在第一阶段后,增加了通用能力的强化学习,使用来自通用奖励模型的奖励和一些基于规则的验证器进行训练。

4. 开放权重与访问

QwQ-32B模型在Hugging FaceModelScope上以开放权重形式发布,遵循Apache 2.0许可证,并可通过Qwen Chat访问。

QwQ-32B访问

5. 性能评估

QwQ-32B在一系列基准测试中进行了评估,重点关注数学推理、编码能力和一般问题解决能力。以下是QwQ-32B与其他领先模型的性能比较:

性能比较

6. 使用QwQ-32B

以下是通过Hugging Face Transformers和阿里云DashScope API使用QwQ-32B的示例代码:

6.1 使用Hugging Face Transformers

from transformers import AutoModelForCausalLM, AutoTokenizer

model_name = "Qwen/QwQ-32B"

model = AutoModelForCausalLM.from_pretrained(
    model_name,
    torch_dtype="auto",
    device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained(model_name)

prompt = "How many r's are in the word \"strawberry\""
messages = [
    {"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(
    messages,
    tokenize=False,
    add_generation_prompt=True
)

model_inputs = tokenizer([text], return_tensors="pt").to(model.device)

generated_ids = model.generate(
    **model_inputs,
    max_new_tokens=32768
)
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]
print(response)

运行python api_qwq.py完成测试
在这里插入图片描述

6.2 可视化

以下是一个使用Streamlit构建的QwQ-32B聊天机器人的示例代码,默认提供是非流式的对话平台:

# 导入所需的库
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
import streamlit as st

# 在侧边栏中创建一个标题和一个链接
with st.sidebar:
    st.markdown("## Qwen/QwQ-32B LLM")
    max_length = st.slider("max_length", 0, 32768, 4096, step=1)

# 创建一个标题和一个副标题
st.title("💬 Qwen/QwQ-32B Chatbot")
st.caption("🚀 A streamlit chatbot powered by Hugging Face Transformers")

# 定义模型路径
model_name = "Qwen/QwQ-32B"

# 定义一个函数,用于获取模型和tokenizer
@st.cache_resource
def get_model():
    tokenizer = AutoTokenizer.from_pretrained(model_name)
    model = AutoModelForCausalLM.from_pretrained(
        model_name,
        torch_dtype="auto",
        device_map="auto"
    )
    model.eval()  
    return tokenizer, model

# 加载模型和tokenizer
tokenizer, model = get_model()

if "messages" not in st.session_state:
    st.session_state["messages"] = [{"role": "assistant", "content": "有什么可以帮您的?"}]

# 显示聊天记录
for msg in st.session_state.messages:
    st.chat_message(msg["role"]).write(msg["content"])

# 处理用户输入
if prompt := st.chat_input():
    st.session_state.messages.append({"role": "user", "content": prompt})
    st.chat_message("user").write(prompt)
    
    messages = [{"role": "user", "content": prompt}]
    text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
    
    model_inputs = tokenizer([text], return_tensors="pt").to(model.device)

    generated_ids = model.generate(
        **model_inputs,
        max_new_tokens=max_length
    )
    
    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]
    st.session_state.messages.append({"role": "assistant", "content": response})
    st.chat_message("assistant").write(response)

如果想要流式的对话平台,请替换为下面的代码:

# 导入所需的库
from transformers import AutoTokenizer, AutoModelForCausalLM, TextIteratorStreamer
import torch
import streamlit as st
from threading import Thread

# 在侧边栏中创建一个标题和一个链接
with st.sidebar:
    st.markdown("## Qwen/QwQ-32B LLM")
    max_length = st.slider("max_length", 0, 32768, 4096, step=1)
# 创建一个标题和一个副标题
st.title("💬 Qwen/QwQ-32B Chatbot")
st.caption("🚀 A streamlit chatbot powered by Hugging Face Transformers")

# 定义模型路径
model_name = "Qwen/QwQ-32B"


# 定义一个函数,用于获取模型和tokenizer
@st.cache_resource
def get_model():
    tokenizer = AutoTokenizer.from_pretrained(model_name)
    model = AutoModelForCausalLM.from_pretrained(
        model_name,
        torch_dtype="auto",
        device_map="auto"
    )
    model.eval()  
    return tokenizer, model

# 加载模型和tokenizer
tokenizer, model = get_model()

if "messages" not in st.session_state:
    st.session_state.messages = [{"role": "assistant", "content": "有什么可以帮您的?"}]

# 显示聊天记录
for message in st.session_state.messages:
    with st.chat_message(message["role"]):
        st.markdown(message["content"])

# 定义生成响应的函数
def generate_response(prompt):
    messages = [{"role": "user", "content": prompt}]
    text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
    
    model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
    streamer = TextIteratorStreamer(tokenizer, skip_prompt=True)

    generation_kwargs = {
        "input_ids": model_inputs['input_ids'].to(model.device),
        "streamer": streamer,
        "max_new_tokens": max_length,  # 可以根据需要调整
        "temperature": 0.95,
        "top_p": 0.8,
    }

    # 启动生成线程
    thread = Thread(target=model.generate, kwargs=generation_kwargs)
    thread.start()
    
    generated_text = ""
    for new_text in streamer:
        generated_text += new_text
        yield generated_text  # 流式输出生成的文本

    thread.join()  # 等待线程完成

# 处理用户输入
if prompt := st.chat_input("请输入问题"):
    st.session_state.messages.append({"role": "user", "content": prompt})
    with st.chat_message("user"):
        st.markdown(prompt)

    with st.chat_message("assistant"):
        message_placeholder = st.empty()  # 创建一个占位符
        for new_text in generate_response(prompt):
            message_placeholder.markdown(new_text)  # 更新占位符内容

    # 将生成的完整内容添加到消息记录中
    st.session_state.messages.append({"role": "assistant", "content": new_text})

# 清空按钮
if st.button("清空"):
    st.session_state.messages = [{"role": "assistant", "content": "有什么可以帮您的?"}]
    st.experimental_rerun()

在终端中运行以下命令启动 streamlit 服务,并按照 compshare 的指示将端口映射到本地,然后在浏览器中打开链接 http://外部链接:11434/,即可看到聊天界面。

streamlit run /workspace/streamlit_qwq.py --server.address 0.0.0.0 --server.port 11434

在这里插入图片描述

7. 在线体验:

https://chat.qwen.ai
https://huggingface.co/spaces/Qwen/QwQ-32B-Demo

在这里插入图片描述

8. 参考链接

https://qwenlm.github.io/blog/qwq-32b/
https://x.com/Alibaba_Qwen/status/1897366093376991515
https://mp.weixin.qq.com/s/ZtnUV0RLf6_CR04Sbm-Wyw

为了充分利用公众号的碎片化时间,我们精心整理了经典博客文章、面试经验和一线开源项目等优质内容,并进行系统化的分享。这些资源不仅涵盖了前沿技术和行业动态,还提供了实用的学习和实战经验,使读者能够在短时间内快速获取有价值的信息。通过这种方式,我们希望帮助大家在忙碌的生活中有效利用零散时间,持续补充和深化知识,提升自身的专业素养和竞争力。无论是在通勤途中还是闲暇时光,都能轻松获取知识,助力个人成长。可以点击下面的图标关注公众号↓

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敢敢のwings

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值