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

一、前言

     刚开始接触AI时,您可能会感到困惑,因为面对众多开源模型的选择,不知道应该选择哪个模型,也不知道如何调用最基本的模型。但是不用担心,我将陪伴您一起逐步入门,解决这些问题。

     在信息时代,我们可以轻松地通过互联网获取大量的理论知识和概念。然而,仅仅掌握理论知识并不能真正帮助我们成长和进步。实践是将理论知识转化为实际技能和经验的关键。


二、术语

2.1. Hugging Face

    是一个知名的开源社区和平台,专注于自然语言处理(NLP)技术和人工智能模型的开发和共享。该社区致力于提供易于使用的工具和资源,帮助研究人员、开发者和数据科学家在NLP领域进行创新和应用。

   Hugging Face最著名的贡献是其开源软件库,其中包括了许多流行的NLP模型的实现和预训练模型的集合,如BERT、GPT、RoBERTa等。这些模型在各种NLP任务,如文本分类、命名实体识别、情感分析等方面取得了很好的表现,并被广泛应用于学术界和工业界。

2.2. Transformers

    Hugging Face的Transformer是一个流行的开源Python库,用于自然语言处理(NLP)任务和模型开发。它提供了一系列易于使用的API和工具,用于加载、训练和部署各种预训练的NLP模型,如BERT、GPT、RoBERTa等。

2.3. ModelScope魔搭社区

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

2.4. Qwen

    是一个全能的语言模型系列,包含各种参数量的模型,如Qwen(基础预训练语言模型,即基座模型)和Qwen-Chat(聊天模型,该模型采用人类对齐技术进行微调)。


三、前置条件

3.1. windows操作系统

3.2. 下载Qwen-1_8B-Chat模型

从huggingface下载:https://huggingface.co/Qwen/Qwen-1_8B-Chat/tree/main

从魔搭下载:https://modelscope.cn/models/qwen/Qwen-1_8B-Chat/files


四、技术实现

4.1. 本地推理

#Tokenizer加载

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

#Model加载

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

#直接调用

def generate(model,tokenizer,message):
    try:
        inputs = tokenizer(message, return_tensors='pt')
        pred = model.generate(**inputs)
        return tokenizer.decode(pred.cpu()[0], skip_special_tokens=True)
    except Exception:
        traceback.print_exc()

执行结果如下:

#流式调用

def chat(model,tokenizer,message):
    position = 0
    result = []
    try:
        for response in model.chat_stream(tokenizer, message, system='你是一个乐于助人的助手,为人类解决各种问题。',history=None):
            result.append(response[position:])

            position = len(response)

            yield "".join(result)
    except Exception:
        traceback.print_exc()

执行结果如下:

4.2. 完整代码

import traceback
from transformers import AutoTokenizer, AutoModelForCausalLM
import time

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

def chat(model,tokenizer,message):
    position = 0
    result = []
    try:
        for response in model.chat_stream(tokenizer, message ,history=None):
            result.append(response[position:])

            position = len(response)

            yield "".join(result)
    except Exception:
        traceback.print_exc()

def generate(model,tokenizer,message):
    try:
        inputs = tokenizer(message, return_tensors='pt')
        pred = model.generate(**inputs)
        return tokenizer.decode(pred.cpu()[0], skip_special_tokens=True)
    except Exception:
        traceback.print_exc()

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

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

if __name__ == '__main__':
    model = loadModel()
    tokenizer = loadTokenizer()
    start_time = time.time()
    message = "广东的省会是哪里?"
    response = generate(model,tokenizer,message)
    print(response)

    response = chat(model,tokenizer,message)
    for r in response:
        print(r)

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

  • 58
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

开源技术探险家

以微薄之力温暖这个世界

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

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

打赏作者

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

抵扣说明:

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

余额充值