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