Qwen-7B-Chat 本地化部署使用
通义千问 简介
通义千问是阿里云推出的超大规模语言模型,以下是其优缺点:
优点
- 强大的基础能力:具备语义理解与抽取、闲聊、上下文对话、生成与创作、知识与百科、代码、逻辑与推理、计算、角色扮演等多种能力。可以续写小说、编写邮件、解答学习问题、生成创意文案等,还能辅助程序员写代码、读代码、查bug、优化代码,支持200多种编程语言。
- 多模态理解:通义千问2.0版本支持文本回答、图片理解、文档解析三种模式,用户可以上传图片和文档并询问与之相关的问题。例如通义智文可智能阅读网页、论文、图书和文档,帮助用户获取提要和概述,通义听悟可对音频内容进行转写、翻译、角色分离等多种处理。
- 模型优化与创新:采用了transformer框架,并对架构进行了多处修改,如选择不受限的嵌入方法、采用ROPE位置编码并使用FP32精确度、在模型中移除大多数层的偏差并在QKV注意力层添加偏差、采用Swiglu激活函数等,提高了模型的性能表现和精确度。还利用简单的免训练技术扩展上下文长度,包括NTK感知插值、动态NTK感知插值、logn - scaling、window attention等,有效扩展了Transformer模型的上下文长度,而不影响计算效率或准确性。
- 开源与生态发展:不断推进模型的开源进展,开源了多种参数规模的模型以及多模态大模型,如Qwen - 7B、Qwen - 14B、Qwen - 72B等,累计下载量超过150万,催生出150多款新模型、新应用,推动了AI领域的技术交流和发展。
- 成本效益优势:发布的推理模型QwQ - 32B参数规模为320亿,性能与激活参数370亿的DeepSeek - R1相当,通过精简参数降低了部署成本,为行业提供了更具性价比的解决方案,适用于实时性要求较高的应用场景,可在保证输出质量的前提下,显著降低算力成本。
- 安全与合规性:阿里云为通义千问提供安全可隔离的专属数据存储空间,通过服务器端加密机制,实现高安全性、高合规性的数据保护,保障用户数据隐私。
缺点
- 特定任务表现待提升:在一些非常专业、精细的特定任务上,可能还需要进一步优化和训练才能达到更理想的效果。例如在复杂的科学计算、某些专业领域的深度分析等方面,可能不如专门针对这些领域开发的模型表现出色。
- 存在错误和不准确情况:尽管通义千问具有强大的知识理解和生成能力,但像其他大语言模型一样,也可能会生成错误或不准确的信息,尤其是在处理一些复杂、模糊或罕见的问题时。
- 多语言处理局限:虽然预训练数据涉及多语言,但主要以中文和英文为主,在处理其他小语种语言任务时,可能不如专门的多语言模型表现好。
- 商业化落地挑战:对于其开源模型,在商业化落地过程中,面临着技术迭代速度快、行业竞争压力大、在具体行业中的适配性需验证等问题,例如医疗、金融等领域对模型精度和合规性要求极高,需要进一步探索如何满足这些领域的实际需求。
下载模型
git clone https://www.modelscope.cn/models/qwen/Qwen-7B-Chat.git
git clone https://modelscope.cn/models/qwen/Qwen-1_8B-Chat.git
下载Qwen
git clone https://github.com/QwenLM/Qwen.git
安装依赖、启动
cd /mnt/workspace/Qwen-7B-Chat/Qwenpip install -r requirements.txt pip install -r requirements_web_demo.txt python web_demo.py
web_demo.py 代码
# Copyright (c) Alibaba Cloud.
#
# This source code is licensed under the license found in the
# LICENSE file in the root directory of this source tree."""A simple web interactive chat demo based on gradio."""
import os
from argparse import ArgumentParserimport gradio as gr
import mdtex2htmlimport torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from transformers.generation import GenerationConfig# 32G内存都没跑起来,只能跑小的,要么量化后再跑
#DEFAULT_CKPT_PATH = 'Qwen/Qwen-7B-Chat'
DEFAULT_CKPT_PATH = '/mnt/workspace/Qwen-7B-Chat/Qwen-1_8B-Chat'def _get_args():parser = ArgumentParser()parser.add_argument("-c", "--checkpoint-path", type=str, default=DEFAULT_CKPT_PATH,help="Checkpoint name or path, default to %(default)r")parser.add_argument("--cpu-only", action="store_true", help="Run demo with CPU only")parser.add_argument("--share", action="store_true", default=False,help="Create a publicly shareable link for the interface.")parser.add_argument("--inbrowser", action="store_true", default=False,help="Automatically launch the interface in a new tab on the default browser.")parser.add_argument("--server-port", type=int, default=8000,help="Demo server port.")parser.add_argument("--server-name", type=str, default="0.0.0.0",help="Demo server name.")args = parser.parse_args()return argsdef _load_model_tokenizer(args):tokenizer = AutoTokenizer.from_pretrained(args.checkpoint_path, trust_remote_code=True, resume_download=True,)if args.cpu_only:device_map = "cpu"else:device_map = "auto"model = AutoModelForCausalLM.from_pretrained(args.checkpoint_path,device_map=device_map,trust_remote_code=True,resume_download=True,).eval()config = GenerationConfig.from_pretrained(args.checkpoint_path, trust_remote_code=True, resume_download=True,)return model, tokenizer, configdef postprocess(self, y):if y is None:return []for i, (message, response) in enumerate(y):y[i] = (None if message is None else mdtex2html.convert(message),None if response is None else mdtex2html.convert(response),)return ygr.Chatbot.postprocess = postprocessdef _parse_text(text):lines = text.split("\n")lines = [line for line in lines if line != ""]count = 0for i, line in enumerate(lines):if "```" in line:count += 1items = line.split("`")if count % 2 == 1:lines[i] = f'<pre><code class="language-{items[-1]}">'else:lines[i] = f"<br></code></pre>"else:if i > 0:if count % 2 == 1:line = line.replace("`", r"\`")line = line.replace("<", "<")line = line.replace(">", ">")line = line.replace(" ", " ")line = line.replace("*", "*")line = line.replace("_", "_")line = line.replace("-", "-")line = line.replace(".", ".")line = line.replace("!", "!")line = line.replace("(", "(")line = line.replace(")", ")")line = line.replace("$", "$")lines[i] = "<br>" + linetext = "".join(lines)return textdef _gc():import gcgc.collect()if torch.cuda.is_available():torch.cuda.empty_cache()def _launch_demo(args, model, tokenizer, config):def predict(_query, _chatbot, _task_history):print(f"User: {_parse_text(_query)}")_chatbot.append((_parse_text(_query), ""))full_response = ""for response in model.chat_stream(tokenizer, _query, history=_task_history, generation_config=config):_chatbot[-1] = (_parse_text(_query), _parse_text(response))yield _chatbotfull_response = _parse_text(response)print(f"History: {_task_history}")_task_history.append((_query, full_response))print(f"Qwen-Chat: {_parse_text(full_response)}")def regenerate(_chatbot, _task_history):if not _task_history:yield _chatbotreturnitem = _task_history.pop(-1)_chatbot.pop(-1)yield from predict(item[0], _chatbot, _task_history)def reset_user_input():return gr.update(value="")def reset_state(_chatbot, _task_history):_task_history.clear()_chatbot.clear()_gc()return _chatbotwith gr.Blocks() as demo:gr.Markdown("""\
<p align="center"><img src="https://qianwen-res.oss-cn-beijing.aliyuncs.com/logo_qwen.jpg" style="height: 80px"/><p>""")gr.Markdown("""<center><font size=8>Qwen-Chat Bot</center>""")gr.Markdown("""\
<center><font size=3>This WebUI is based on Qwen-Chat, developed by Alibaba Cloud. \
(本WebUI基于Qwen-Chat打造,实现聊天机器人功能。)</center>""")gr.Markdown("""\
<center><font size=4>
Qwen-7B <a href="https://modelscope.cn/models/qwen/Qwen-7B/summary">🤖 </a> |
<a href="https://huggingface.co/Qwen/Qwen-7B">🤗</a>  |
Qwen-7B-Chat <a href="https://modelscope.cn/models/qwen/Qwen-7B-Chat/summary">🤖 </a> |
<a href="https://huggingface.co/Qwen/Qwen-7B-Chat">🤗</a>  |
Qwen-14B <a href="https://modelscope.cn/models/qwen/Qwen-14B/summary">🤖 </a> |
<a href="https://huggingface.co/Qwen/Qwen-14B">🤗</a>  |
Qwen-14B-Chat <a href="https://modelscope.cn/models/qwen/Qwen-14B-Chat/summary">🤖 </a> |
<a href="https://huggingface.co/Qwen/Qwen-14B-Chat">🤗</a>  |
 <a href="https://github.com/QwenLM/Qwen">Github</a></center>""")chatbot = gr.Chatbot(label='Qwen-Chat', elem_classes="control-height")query = gr.Textbox(lines=2, label='Input')task_history = gr.State([])with gr.Row():empty_btn = gr.Button("🧹 Clear History (清除历史)")submit_btn = gr.Button("🚀 Submit (发送)")regen_btn = gr.Button("🤔️ Regenerate (重试)")submit_btn.click(predict, [query, chatbot, task_history], [chatbot], show_progress=True)submit_btn.click(reset_user_input, [], [query])empty_btn.click(reset_state, [chatbot, task_history], outputs=[chatbot], show_progress=True)regen_btn.click(regenerate, [chatbot, task_history], [chatbot], show_progress=True)gr.Markdown("""\
<font size=2>Note: This demo is governed by the original license of Qwen. \
We strongly advise users not to knowingly generate or allow others to knowingly generate harmful content, \
including hate speech, violence, pornography, deception, etc. \
(注:本演示受Qwen的许可协议限制。我们强烈建议,用户不应传播及不应允许他人传播以下内容,\
包括但不限于仇恨言论、暴力、色情、欺诈相关的有害信息。)""")demo.queue().launch(share=args.share,inbrowser=args.inbrowser,server_port=args.server_port,server_name=args.server_name,)def main():args = _get_args()model, tokenizer, config = _load_model_tokenizer(args)_launch_demo(args, model, tokenizer, config)if __name__ == '__main__':main()

相关文章:
Qwen-7B-Chat 本地化部署使用
通义千问 简介 通义千问是阿里云推出的超大规模语言模型,以下是其优缺点: 优点 强大的基础能力:具备语义理解与抽取、闲聊、上下文对话、生成与创作、知识与百科、代码、逻辑与推理、计算、角色扮演等多种能力。可以续写小说、编写邮件、解…...
QGIS获取建筑矢量图-Able Software R2V
1.QGIS截图 说明:加载天地图矢量图层,然后进行截图。 2.Able Software R2V 说明:Able Software R2V 是一款将光栅图像(如扫描图纸、航拍照片)自动转换为矢量图形(如DXF格式)的软件&a…...
CSS:换行与不换行
一、CSS 不允许换行 在 CSS 中,有几种方法可以控制文本不换行: 1. 使用 white-space 属性 .no-wrap {white-space: nowrap; } white-space: nowrap; 会强制文本在一行显示,不换行。 2. 使用 overflow 和 text-overflow 通常与 white-sp…...
【MiniMind】不能全局用 `pip install --upgrade pip`
Q:WARNING: Running pip as the ‘root’ user can result in broken permissions and conflicting behaviour with the system package manager, possibly rendering your system unusable. It is recommended to use a virtual environment instead: https://pip.…...
form实现pdf文件转换成jpg文件
说明: 我希望将pdf文件转换成jpg文件 请去下载并安装 Ghostscript,gs10050w64.exe 配置环境变量:D:\Program Files\gs\gs10.05.0\bin 本地pdf路径:C:\Users\wangrusheng\Documents\name.pdf 输出文件目录:C:\Users\wan…...
STM32单片机入门学习——第13节: [6-1] TIM定时中断
写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难,但我还是想去做! 本文写于:2025.04.04 STM32开发板学习——第13节: [6-1] TIM定时中断 前言开发板说明引用解答和科普一…...
量子纠错码实战:从Shor码到表面码
引言:量子纠错的必要性 量子比特的脆弱性导致其易受退相干和噪声影响,单量子门错误率通常在10⁻~10⁻量级。量子纠错码(QEC)通过冗余编码测量校正的机制,将逻辑量子比特的错误率降低到可容忍水平。本文从首个量子纠错…...
【2】搭建k8s集群系列(二进制)之安装etcd数据库集群
一、etcd服务架构 Etcd 是一个分布式键值存储系统,Kubernetes 使用 Etcd 进行数据存储,所以先 准备一个 Etcd 数据库,为解决 Etcd 单点故障,应采用集群方式部署,这里使用 3 台组建集群,可容忍 1 台机器故障…...
Linux常用命令详解:从基础到进阶
目录 一、引言 二、文件处理相关命令 (一)grep指令 (二)zip/unzip指令 编辑 (三)tar指令 (四)find指令 三、系统管理相关命令 (一)shutdown指…...
【Docker】使用Docker快速部署n8n和unclecode/crawl4ai
Docker部署自动化工具n8n和crawl4ai详细教程 前言 本文将详细介绍如何使用 Docker 来部署和运行自动化工作流工具 n8n 以及 crawl4ai。这两个工具对于需要进行自动化工作流程的开发者来说都非常有用。 一、环境准备 在开始之前,请确保您的系统已经安装了&#x…...
数据库权限获取
1. into outfile(手写) 1.1. 利用条件 • web 目录具有写入权限,能够使用单引号 • 知道网站绝对路径(根目录,或则是根目录往下的目录都行) • secure_file_priv 没有具体值(在 mysql/my.ini 中查看) 1.2. secure_file_priv 介绍 secure_file_priv 是用来限制 loa…...
基于spring boot的外卖系统的设计与实现【如何写论文思路与真正写出论文】
目录 系统开发实现链接: 背景与分析: 背景(题目): 用户功能 配送员功能 管理员功能 分析: 过程(主体展示为主,部分功能不一一展示): 目录 论文前面…...
Kubernetes 存储 Downward API
1.介绍 1.提供容器元数据 比如我们 golang语言 我们说他会根据当前CPU的数量 以此去确认我们的进程 线程 和协程之间的关系 以此去释放我们当前CPU的更大的 这么一个并行任务的能力 但是这里会出现一个问题 容器它是把当前的应用 封装在我们固定的名称空间了 而且给它以特定的…...
使用ctags+nvim自动更新标签文件
ctags是一个强大的语言分析工具,可以分析多种语言并生成语法结构文件,通过这些文件可以快速进行函数跳转,但是这有一个缺点,就是每次在项目里更新了代码之类的比如新增了一个函数,都需要重新使用ctags -R .来重新更新标…...
RK3568 gpio模拟i2c 配置hym8563 RTC时钟
1、使用模拟i2c,确认使用的gpio未被占用,为gpio功能 以GPIO0_C6 GPIO0_C7为例,查看管脚的复用关系。 cat /sys/kernel/debug/pinctrl/pinctrl-rockchip-pinctrl/pinmux-pins2、使用内核模块i2c-gpio.c 内核make menuconfig 开启i2c_gpio支持 Device Drivers->I2C sup…...
HANA如何在存储过程里执行动态SQL
业务场景需求: 在HANA里如何实现动态的SQL控制,比如需要多个单据里,实现某个自定义字段不允许重复 一般的写法是需要在每个业务单据里加对应的存储过程控制,这样的话,需要在每个业务单据里进行控制,SQL维…...
01人工智能基础入门
一、AI应用场景和发展历程 1.1行业应用 1、deepdream图像生成、yolo目标检测 2、知识图谱、画风迁移 3、语音识别、计算机视觉 4、用户画像 5、百度人工智能布局 1.2发展历程 人工智能的发展经历了 3 个阶段: 1980年代是正式成形期,尚不具备影响力。 …...
嵌入式AI的本地化部署的好处
嵌入式AI本地化处理(即边缘计算)的核心优势在于将AI算力下沉至设备端,直接处理数据而非依赖云端,这种模式在多个维度上展现出显著价值: 一、数据隐私与安全性提升 1. 敏感数据本地存储 金融、医疗等涉及隐私的行业…...
进程和内存管理
目录 一.进程的基本信息 1.1进程的定义 1.2进程的特征 1.3进程的组成 1.4线程产生的背景 1.5线程的定义 1.6进程与线程的区别 1.7进程的类别 1.8进程的优先级 1.8.1进程优先级的概念 1.8.2PRI和NI 1.9僵尸进程 1.9.1僵尸进程的定义 1.9.2僵尸进程产生的原因 1.9…...
001 vue
https://cn.vuejs.org/ 文章目录 v-bindv-modelv-on修饰符条件渲染/控制:v-if v-show列表渲染 M:即Model,模型,包括数据和一些基本操作 V:即View,视图,页面渲染结果 VM:即View-Mode…...
css动态设置div宽高,calc函数
在css中使用calc函数 calc() 是 CSS 中的一种函数,用于动态计算长度值。它允许你在 CSS 属性中进行数学运算,结合不同的单位(如 px、%、em 等),从而创建更加灵活和响应式的布局 表达式规则 运算符:支持加…...
MySQL篇(四)事务相关知识详解
MySQL篇(四)事务相关知识详解 MySQL篇(四)事务相关知识详解一、事务的特性(ACID)原子性(Atomicity)一致性(Consistency)隔离性(Isolation)持久性(…...
React 项目使用 pdf.js 及 Elasticpdf 教程
摘要:本文章介绍如何在 React 中使用 pdf.js 及基于 pdf.js 的批注开发包 Elasticpdf。简单 5 步可完成集成部署,包括数据的云端同步,示例代码完善且简单,文末有集成代码分享。 1. 工具库介绍与 Demo 1.1 代码包结构 ElasticP…...
性能测试之jmeter的基本使用
简介 Jmeter是Apache的开源项目,基于Java开发,主要用于进行压力测试。 优点:开源免费、支持多协议、轻量级、功能强大 官网:https://jmeter.apache.org/index.html 安装 安装步骤: 下载:进入jmeter的…...
CAD插件实现:所有文字显示到列表、缩放、编辑——CAD-c#二次开发
当图中有大量文字,需要全部显示到一个列表时并缩放到需要的文字时,可采用插件实现,效果如下: 附部分代码如下: private void BtnSelectText_Click(object sender, EventArgs e){var doc Application.DocumentManager.…...
【Git】“warning: LF will be replaced by CRLF”的解决办法
一、原因分析 不同操作系统的换行符标准不同: • Windows:使用 CRLF(\r\n)表示换行; • Linux/Mac:使用 LF(\n)表示换行 Git 检测到本地文件的换行符与仓库设置或目标平台不兼容时…...
vue2(13) 组件注册的学习笔记
文章目录 Vue2 组件注册学习笔记一、组件注册的基本概念二、全局注册三、局部注册四、组件名的命名规范五、在模块系统中注册组件六、基础组件的自动化全局注册七、总结Vue2 组件注册学习笔记 一、组件注册的基本概念 在Vue中,组件是可复用的Vue实例,具有封装的模板和逻辑。…...
【spring Cloud Netflix】OpenFeign组件
1.概述 Feign旨在使编写Java Http客户端变得更容易。前面在使用RibbonRestTemplate进行服务的远程调用 时,利用RestTemplate对Http请求的封装处理,形成了一套模板化的调用方法。但是在实际开发中,由 于对服务的依赖调用可不止一处࿰…...
go游戏后端开发20:房间消息推送处理
创建房间逻辑前的概念梳理及代码实现 在编写创建房间的逻辑之前,我们需要先创建几个关键概念。 第一个概念是“联盟”。联盟可以理解为一个组织,它持有多个房间。一个联盟下可能挂载多个房间,这是我们的第一个概念。 第二个概念是“管理”…...
Oracle数据库数据编程SQL<8 文本编辑器Notepad++和UltraEdit(UE)对比>
首先,用户界面方面。Notepad是开源的,界面看起来比较简洁,可能更适合喜欢轻量级工具的用户。而UltraEdit作为商业软件,界面可能更现代化,功能布局更复杂一些。不过,UltraEdit支持更多的主题和自定义选项&am…...
