开源模型应用落地-qwen模型小试-入门篇(五)

一、前言

    这是关于qwen模型入门的最后一篇文章。主要介绍如何使用魔搭的API在本地调用qwen模型。此外,通过阅读这一系列的文章,如果您真的亲自动手实践过,我相信您已经掌握了qwen模型的基本使用方法。


二、术语

2.1. ModelScope社区

    打造下一代开源的模型即服务共享平台,为泛AI开发者提供灵活、易用、低成本的一站式模型服务产品,让模型应用更简单。

    汇聚各领域最先进的机器学习模型,提供模型探索体验、推理训练、部署和应用的一站式服务。


三、前置条件

3.1.windows操作系统

3.2.提前下载好Qwen-1.8B-Chat模型

    当然通过代码在线下载也可以...只是没必要浪费这个时间

3.3. 安装依赖库(记得要在虚拟环境下执行哦)

pip install modelscope -i https://pypi.tuna.tsinghua.edu.cn/simple

四、技术实现

4.1. 非流式调用

def chat(model,tokenizer,message,history):
    try:
        resp,his = model.chat(tokenizer, message, system='你是一位乐于助人的人工智能助手,愿意解决人类提出的各种问题', history=history)
        return resp,his
    except Exception:
        traceback.print_exc()

4.2. 流式调用

def chat_stream(model,tokenizer,message,history):
    position = 0
    result = []
    try:
        for response in model.chat_stream(tokenizer, message, system='你是一位乐于助人的人工智能助手,愿意解决人类提出的各种问题',history=history):
            result.append(response[position:])
            position = len(response)
            yield "".join(result)

    except Exception:
        traceback.print_exc()

五、完整代码

import traceback

from modelscope import AutoModelForCausalLM,AutoTokenizer
from modelscope import GenerationConfig
import time

modelPath = "E:\\model\\qwen-1_8b-chat"


def chat_stream(model,tokenizer,message,history):
    position = 0
    result = []
    try:
        for response in model.chat_stream(tokenizer, message, system='你是一位乐于助人的人工智能助手,愿意解决人类提出的各种问题',history=history):
            result.append(response[position:])
            position = len(response)
            yield "".join(result)

    except Exception:
        traceback.print_exc()

def chat(model,tokenizer,message,history):
    try:
        resp,his = model.chat(tokenizer, message, system='你是一位乐于助人的人工智能助手,愿意解决人类提出的各种问题', history=history)
        return resp,his
    except Exception:
        traceback.print_exc()

def loadTokenizer():
    tokenizer = AutoTokenizer.from_pretrained(modelPath,trust_remote_code=True)
    return tokenizer

def loadModel(config):
    model = AutoModelForCausalLM.from_pretrained(modelPath, device_map="cpu",trust_remote_code=True).eval()
    model.generation_config = config
    return model

if __name__ == '__main__':
    config = GenerationConfig.from_pretrained(modelPath, trust_remote_code=True, top_p=0.9, temperature=0.9,
                                              repetition_penalty=1.1, do_sample=True, max_new_tokens=8192)
    tokenizer = loadTokenizer()
    model = loadModel(config)

    start_time = time.time()
    message = "能介绍一些我家的特产吗?"
    history = [('hi,你好','你好!有什么我可以帮助你的吗?'),('我家在广州,很好玩哦','广州是一个美丽的城市,有很多有趣的地方可以去。'),]

    resp,his = chat(model,tokenizer,message,history)
    print(f'resp: {resp}, his: {his}')


    response = chat_stream(model,tokenizer,message,history)
    result = []
    for r in response:
        result.append(r)

    print(result[-1])

    end_time = time.time()
    print("执行耗时: {:.2f}秒".format(end_time-start_time))


modelscope vs transformers的差异:

modelscope:

transformers:


六、附带说明

    可能有些朋友会认为这些内容很简单,或者觉得在网上可以找到这些资料。但我可以负责任地说,虽然网上可能有一些代码,但核心部分通常被屏蔽了。自己去摸索的话,可能会花费很长时间,最终仍然无法成功运行。现在,我将所有的基础知识以适合阅读的、最连贯的方式呈现给您,希望能帮助有需要的您快速入门,减少走弯路的时间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/335042.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HCIA—— 16每日一讲:HTTP和HTTPS、无状态和cookie、持久连接和管线化、(初稿丢了,这是新稿,请宽恕我)

学习目标: HTTP和HTTPS、无状态和cookie、持久连接和管线化、HTTP的报文、URI和URL(初稿丢了,这是新稿,请宽恕我😶‍🌫️) 学习内容: HTTP无状态和cookieHTTPS持久连接和管线化 目…

流量控制与熔断利器:Sentinel介绍

这是《百图解码支付系统设计与实现》专栏系列文章中的第(19)篇,也是流量控制系列的第(6)篇。点击上方关注,深入了解支付系统的方方面面。 本篇聊聊流量控制与熔断利器Sentinel,背后的原理&…

分享行政检察院法律监督模型的构建价值和运用范式

数字检察是检察工作现代化的重要依托。在数字化时代背景下,行政检察监督办案要深入推进检察大数据战略,推动办案模式从“个案为主、数量驱动”向“类案为主、数据赋能”转变,通过数据分析、数据碰撞、数据挖掘发现治理漏洞或者监督线索&#…

项目上线存在的缓存问题以及存在的debugger和console.log等问题

下载uglifyjs-webpack-plugin插件 在vue.config文件中进行配置 publicPath: process.env.NODE_ENV production ? ./ : /,outputDir: n-sim-ipc-manage-build,productionSourceMap: false,configureWebpack: config > {//打包文件增加hashconfig.output.filename js/[nam…

大模型日报-20240120

这里写目录标题 视觉Mamba来了:速度提升2.8倍,内存能省87%一键实景转动画,清华系初创公司全球首发4D骨骼动画框架,还能生成个性化角色如何利用革命性的蛋白质结构工具来发现药物?AlphaFold 发现了数千种可能的致幻剂扎…

IPFoxy运营干货|谷歌广告Google Ads建立广告需要注意什么?

编辑投放谷歌广告需要多少个步骤和什么准备工作,本文将来讲述,主要分5个内容:一、投放前竞对研究;二、投放前广告账户设置;三、建立广告系列;四、建立广告组;五、广告长期策略。接下来我们来开始…

Python 面向对象绘图(Matplotlib篇-16)

Python 面向对象绘图(Matplotlib篇-16)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ�…

链表存数相加算法(leetcode第2题)

题目描述: 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这…

无偿分享一个很有用的看源码小技巧

怎么在 idea 里面查看 git 提交记录呢?这个界面是藏在哪里的呢,我的 idea 里面怎么没有呢? 好的,是我疏忽了,我先入为主的认为这个大家应该都知道是怎么来的。 但是确实是有一些同学是不太清楚的,那我这篇…

大数据导论(2)---大数据与云计算、物联网、人工智能

文章目录 1. 云计算1.1 云计算概念1.2 云计算的服务模式和类型1.3 云计算的数据中心与应用 2. 物联网2.1 物联网的概念和关键技术2.2 物联网的应用和产业2.3 大数据与云计算、物联网的关系 1. 云计算 1.1 云计算概念 1. 首先从商业角度给云计算下一个定义:通过网络…

C#调用C++ dll异常排查

基本情况 最近在做的一款程序,长时间运行总会出现莫名的问题。有时是自动关闭,有时程序报错,有时调用的dll异常…… 提出假设——dll内存泄漏 由于开始与C组合作时,使用其提供的dll出现过数据读写时异常(内存操作异常…

Leetcoder Day9|栈与队列part01

语言:Java/C 目录 理论基础 C 栈 队列 Java 栈 队列 ​编辑 232.用栈实现队列 225. 用队列实现栈 Queue Deque 今日心得 理论基础 又是考研时数据结构里接触到的老朋友,栈是先进后出,队列是先进先出。 C 现在刷题除了思路还…

CHAPTER 11: 《DESIGN A NEWS FEED SYSTEM》 第 11 章:《设计新闻系统》

在本章中,您将被要求设计一个新闻提要系统。什幺是新闻系统?根据Facebook 页面,“News feed 是中间不断更新的故事列表。您的主页。动态消息包括状态更新、照片、视频、链接、应用活动记录和喜欢您在 Facebook 上关注的人、页面和群组“[1]。…

linux C语言socket函数send

在Linux中,使用C语言进行网络编程时,send函数是用于发送数据到已连接的套接字的重要函数之一。它通常用于TCP连接,但也可以用于UDP(尽管对于UDP,通常更推荐使用sendto,因为它允许你指定目标地址和端口&…

插入排序(一)——直接插入排序与希尔排序

目录 一.前言 二.排序的概念及其运用 1.1排序的概念 1.2 常用排序算法 三.常用排序算法的实现 3.1 插入排序 3.1.1 基本思想 3.1.2 直接插入排序 3.1.3 希尔排序(缩小增量排序) 四.全部代码 sort.c sort.h test.c 五.结语 一.前言 本文我们…

SpringBoot 3.1.7 集成Mybatis

一、介绍 Mybatis的中文官网并没找到与SpringBoot最新的集成的教程,有的都是老式的配置方法,所以记录一下怎么我是怎么集成SpringBoot 3.1.7 集成Mybatis 的方法 有条件的可以打开源网站 https://github.com/mybatis/spring-boot-starter 没有条件的我…

虚拟机下载docker

一,Docker简介 百科说:Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制&#xff…

GetShell的姿势

0x00 什么是WebShell 渗透测试工作的一个阶段性目标就是获取目标服务器的操作控制权限,于是WebShell便应运而生。Webshell中的WEB就是web服务,shell就是管理攻击者与操作系统之间的交互。Webshell被称为攻击者通过Web服务器端口对Web服务器有一定的操作权…

nodejs前端项目的CI/CD实现(二)jenkins的容器化部署

一、背景 docker安装jenkins,可能你会反问,这太简单了,有什么好讲的。 我最近就接手了一个打包项目,它是一个nodejs的前端项目,jenkins已在容器里部署且运行OK。 但是,前端组很追求新技术,不…

【STM32】STM32学习笔记-I2C通信外设(34)

00. 目录 文章目录 00. 目录01. I2C简介02. I2C外设简介03. I2C框图04. I2C基本结构05. 主机发送06. 主机接收07. 软件/硬件波形对比08. 预留09. 附录 01. I2C简介 I2C(Inter-Integrated Circuit)总线是一种由NXP(原PHILIPS)公司开发的两线式…