【AIGC】本地部署通义千问 1.5 (PyTorch)

这篇具有很好参考价值的文章主要介绍了【AIGC】本地部署通义千问 1.5 (PyTorch)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

今天想分享一下 Qwen 1.5 官方用例的二次封装( huggingface 说明页也有提供源码),其实没有太多的技术含量。主要是想记录一下如何从零开始在不使用第三方工具的前提下,以纯代码的方式本地部署一套大模型,相信这对于技术人员来说还是非常有用的。

虽然现在人人都可以用像 ollama 这种工具一键部署本地大模型,但想通过这种方式将大模型深度接入现有系统可就有点麻烦。 因此我觉得还是有必要各位分享一下这种纯代码的模式,希望能够帮助到更多的人。

1. 模型下载

通过之前的文章可以知道,现在国内可以通过 https://hf-mirror.com/ 下载 huggingface 大模型。在配置好环境变量后,可以通过以下命令下载 Qwen:

yuanzhenhui@MacBook-Pro ~ % cd /Users/yuanzhenhui/Documents/code_space/git/processing/python/tcm_assistant/transformer/model/qwen
yuanzhenhui@MacBook-Pro qwen % huggingface-cli download --resume-download Qwen/Qwen1.5-7B-Chat --local-dir .
Consider using `hf_transfer` for faster downloads. This solution comes with some limitations. See https://huggingface.co/docs/huggingface_hub/hf_transfer for more details.
Fetching 14 files:   7%|█▊                       | 1/14 [00:00<00:06,  1.87it/s]downloading https://hf-mirror.com/Qwen/Qwen1.5-7B-Chat/resolve/294483ad23713036574b30587b186713373f4271/README.md to /Users/yuanzhenhui/.cache/huggingface/hub/models--Qwen--Qwen1.5-7B-Chat/blobs/0963c198257a0607c4d2def66a84aec172240afd.incomplete
README.md: 4.26kB [00:00, 6.40MB/s]
Fetching 14 files: 100%|████████████████████████| 14/14 [00:01<00:00, 12.81it/s]
/Users/yuanzhenhui/Documents/code_space/git/processing/python/tcm_assistant/transformer/model/qwen

由于我之前已经 checkout 过一遍了,因此会显示上面的输出。如果是第一次 checkout 那么你可能要等一段时间才能全部下载完成(毕竟还挺大的)。

如果你是 MacOS 的用户那么模型的路径将会如下所示:

(base) yuanzhenhui@MacBook-Pro hub % pwd
/Users/yuanzhenhui/.cache/huggingface/hub
(base) yuanzhenhui@MacBook-Pro hub % ls
models--BAAI--bge-large-zh-v1.5	models--Qwen--Qwen1.5-7B-Chat	version.txt
(base) yuanzhenhui@MacBook-Pro hub % 

由于下载的是 “Qwen/Qwen1.5-7B-Chat” 因此下载下来后会以“models–Qwen–Qwen1.5-7B-Chat”名称进行保存。

这时有小伙伴会问,huggingface-cli 命令中不是有写“–local-dir .”参数吗?如果模型不是保存在这个参数指定的位置,那么这个参数有什么用途?这个“.”(本地目录)又有什么意义?

其实通过 local-dir 存放的是大模型的软连接和配置文件,如下图所示:

(base) yuanzhenhui@MacBook-Pro qwen % tree -l
.
├── LICENSE
├── README.md
├── config.json
├── generation_config.json
├── merges.txt
├── model-00001-of-00004.safetensors -> ../../../../../../../../../.cache/huggingface/hub/models--Qwen--Qwen1.5-7B-Chat/blobs/9e8f7873d7c4c74b8883db207a08bf8a783ec8c26da6b3d660a0929048ce6422
├── model-00002-of-00004.safetensors -> ../../../../../../../../../.cache/huggingface/hub/models--Qwen--Qwen1.5-7B-Chat/blobs/e573fdaf3eba785c4b31b8858288f762f3541f09d75b53dfb1ae4d8ee5011d65
├── model-00003-of-00004.safetensors -> ../../../../../../../../../.cache/huggingface/hub/models--Qwen--Qwen1.5-7B-Chat/blobs/1d7cd36508251baa069a894f6ee98da5929e8b0788ff9c9faa7934ad102f845a
├── model-00004-of-00004.safetensors -> ../../../../../../../../../.cache/huggingface/hub/models--Qwen--Qwen1.5-7B-Chat/blobs/189e7a297229937ec93912c940ef05019738c56ff0720c811fd083f5dd400dce
├── model.safetensors.index.json
├── tokenizer.json -> ../../../../../../../../../.cache/huggingface/hub/models--Qwen--Qwen1.5-7B-Chat/blobs/33ea6c72ebb92a237fa2bdf26c5ff16592efcdae
├── tokenizer_config.json
└── vocab.json

0 directories, 13 files

model-00001-of-00004.safetensors、model-00002-of-00004.safetensors 等都是连接到 …/.cache/huggingface/hub 地址的。可能作者考虑到模型的复用问题吧,因此没有将模型直接下载到本地指定目录,而是将软连接建在这个目录底下,这个就不做深究了。

2. 代码部署使用

在真正使用前,按照 Qwen 1.5 的官方说明,我们还需要将 transformer 升级到 4.37.0 版本及其以上。如下图:
【AIGC】本地部署通义千问 1.5 (PyTorch),# Python &amp; 人工智能,AIGC,pytorch,人工智能
既然这样,那就直接 pip install --upgrade 吧,如下图:

(base) yuanzhenhui@MacBook-Pro qwen % pip install --upgrade transformers
Requirement already satisfied: transformers in /Users/yuanzhenhui/anaconda3/lib/python3.11/site-packages (4.37.0)
Collecting transformers
  Downloading transformers-4.39.3-py3-none-any.whl.metadata (134 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 134.8/134.8 kB 358.9 kB/s eta 0:00:00
Requirement already satisfied: filelock in /Users/yuanzhenhui/anaconda3/lib/python3.11/site-packages (from transformers) (3.13.1)
Requirement already satisfied: huggingface-hub<1.0,>=0.19.3 in /Users/yuanzhenhui/anaconda3/lib/python3.11/site-packages (from transformers) (0.20.3)
Requirement already satisfied: numpy>=1.17 in /Users/yuanzhenhui/anaconda3/lib/python3.11/site-packages (from transformers) (1.26.4)
Requirement already satisfied: packaging>=20.0 in /Users/yuanzhenhui/anaconda3/lib/python3.11/site-packages (from transformers) (23.2)
Requirement already satisfied: pyyaml>=5.1 in /Users/yuanzhenhui/anaconda3/lib/python3.11/site-packages (from transformers) (6.0.1)
Requirement already satisfied: regex!=2019.12.17 in /Users/yuanzhenhui/anaconda3/lib/python3.11/site-packages (from transformers) (2023.10.3)
Requirement already satisfied: requests in /Users/yuanzhenhui/anaconda3/lib/python3.11/site-packages (from transformers) (2.31.0)
Requirement already satisfied: tokenizers<0.19,>=0.14 in /Users/yuanzhenhui/anaconda3/lib/python3.11/site-packages (from transformers) (0.15.2)
Requirement already satisfied: safetensors>=0.4.1 in /Users/yuanzhenhui/anaconda3/lib/python3.11/site-packages (from transformers) (0.4.2)
Requirement already satisfied: tqdm>=4.27 in /Users/yuanzhenhui/anaconda3/lib/python3.11/site-packages (from transformers) (4.65.0)
Requirement already satisfied: fsspec>=2023.5.0 in /Users/yuanzhenhui/anaconda3/lib/python3.11/site-packages (from huggingface-hub<1.0,>=0.19.3->transformers) (2023.10.0)
Requirement already satisfied: typing-extensions>=3.7.4.3 in /Users/yuanzhenhui/anaconda3/lib/python3.11/site-packages (from huggingface-hub<1.0,>=0.19.3->transformers) (4.9.0)
Requirement already satisfied: charset-normalizer<4,>=2 in /Users/yuanzhenhui/anaconda3/lib/python3.11/site-packages (from requests->transformers) (2.0.4)
Requirement already satisfied: idna<4,>=2.5 in /Users/yuanzhenhui/anaconda3/lib/python3.11/site-packages (from requests->transformers) (3.4)
Requirement already satisfied: urllib3<3,>=1.21.1 in /Users/yuanzhenhui/anaconda3/lib/python3.11/site-packages (from requests->transformers) (2.0.7)
Requirement already satisfied: certifi>=2017.4.17 in /Users/yuanzhenhui/anaconda3/lib/python3.11/site-packages (from requests->transformers) (2024.2.2)
Downloading transformers-4.39.3-py3-none-any.whl (8.8 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.8/8.8 MB 2.6 MB/s eta 0:00:00
Installing collected packages: transformers
  Attempting uninstall: transformers
    Found existing installation: transformers 4.37.0
    Uninstalling transformers-4.37.0:
      Successfully uninstalled transformers-4.37.0
Successfully installed transformers-4.39.3

轻轻松松就能够升级到 4.39.3 版本了。接下来就可以编写部署代码,如下图:

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

"""
由于 Qwen 1.5 已经整合到 transformers 里面了,因此我这边使用的正是 transformers 的调用方式
"""

# 大模型名称和模型定义
model_name = "Qwen/Qwen1.5-7B-Chat"
model = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype="auto", device_map="auto")

# 这里对大模型角色进行定义
sys_content = "You are a helpful assistant"

# 获取千问 token 实例
def setup_qwen_tokenizer():
    return AutoTokenizer.from_pretrained(model_name)

# 设置问答输入信息
def setup_model_input(tokenizer, prompt):
    # 判断硬件使用情况,有 cuda 用 cuda 没有 cuda 用 cpu
    if torch.cuda.is_available():  
        device = torch.device("cuda")  
    else:  
        device = torch.device("cpu")
    # 需要提问的内容的 json 格式    
    messages = [
        {"role": "system", "content": sys_content},
        {"role": "user", "content": prompt}
    ]
    # 该函数将使用提供了标记化器来生成输入文本,然后对其进行标记化并将其转换为PyTorch张量。
    text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True) 
    return tokenizer([text], return_tensors="pt").to(device)

# 提交问题并获取回复
def msg_generate(prompt):
    tokenizer = setup_qwen_tokenizer()
    # 整理模型所需的输入信息
    model_inputs = setup_model_input(tokenizer, prompt)
    # 根据模型生成id集合
    generated_ids = model.generate(model_inputs.input_ids, max_new_tokens=512)
    # 删除没有响应的id
    generated_ids = [output_ids[len(input_ids):] for input_ids, output_ids in zip(
        model_inputs.input_ids, generated_ids)]
    # 根据id集合对返回信息进行解码获得返回结果
    return tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]


if __name__ == '__main__':
    # 这里提供一个调用实例
    prompt = "中医药理论是否能解释并解决全身乏力伴随心跳过速的症状?"
    response = msg_generate(prompt)
    print(">>> "+response)

将 msg_generate 封装之后就能够根据需要提供对外服务了(在外层加一层 flask 不就可以直接提供接口了么,再加个精美一点的 UI 界面,老板又可以割一波韭菜了,技术人员保住饭碗不是梦…开个玩笑)。具体的执行效果如下图:

(base) yuanzhenhui@MacBook-Pro qwen % python qwen_model.py 
Loading checkpoint shards: 100%|██████████████████| 4/4 [00:00<00:00,  8.75it/s]
WARNING:root:Some parameters are on the meta device device because they were offloaded to the disk and cpu.
Special tokens have been added in the vocabulary, make sure the associated word embeddings are fine-tuned or trained.
>>> 中医药理论确实可以尝试解释和治疗全身乏力和心跳过速的综合症状,但需要具体辨证论治,因为中医认为人体的病症是内外环境、脏腑功能失衡的结果。以下是可能的解释和治疗方法:

1. 全身乏力:中医认为这是“气虚”、“血虚”或“阴阳两虚”的表现。气虚可能导致人体机能下降,运化无力;血虚则可能影响血液滋养全身,导致四肢乏力。心悸(心跳过速)可能是心气不宁,心神不安,或是心血不足,心脉瘀阻等问题。调理方法可能包括补气养血、益心安神等,比如黄芪、人参、当归、熟地、枣仁等中药。

2. 心跳过速:中医认为可能是心火上炎、心血瘀阻、心神不宁等引起。针对不同的病因,可能采用清热解毒、活血化瘀、镇静安神等方法,如黄连、丹参、麦冬、柏子仁等。

3. 实践中,中医会通过望、闻、问、切四诊合参,全面了解患者的整体情况,然后开具个性化的处方。如果心跳过速伴有其他症状,如胸闷、心慌、失眠、面色苍白等,可能还需要结合西医的心电图检查和其他检查结果。

4. 请注意,虽然中医药有其独特的疗效,但对于严重的或持续存在的症状,还是建议及时就医,以西医的诊断和治疗为主,中医辅助调养。

总的来说,中医药在调理全身状况,改善亚健康状态,特别是对于一些慢性病的治疗上有独特优势,但对于急性病和严重症状,应遵循医嘱,中西医结合为宜。

由于我用的是 Mac 因此只能用 cpu 跑,就一个问题也跑了将近 20 分钟,所以建议大家本地部署还是用 gpu 吧。当然了千问团队也很贴心弄了GGUF 版本(专门为 cpu 用户提供的),但是我没有尝试过我就不多说什么了。

但说真的能够代码部署那后面的可塑性就很强了,相信接下来会有更多的企业投身到“人工智能+”的行列吧,在这里真的要感谢阿里千问团队付出的努力和无私的分享。文章来源地址https://www.toymoban.com/news/detail-852072.html

到了这里,关于【AIGC】本地部署通义千问 1.5 (PyTorch)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 通义千问部署搭建

    部署参考视频 通义千问-7B-预训练-模型库 弹出新页面 2.2.1 问题1 :ImportError: This modeling file requires the following packages that were not found in your environment: transformers_stream_generator. Run pip install transformers_stream_generator 解决方法 pip install transformers_stream_generator 这就好了,重新运行下 Valu

    2024年02月10日
    浏览(34)
  • 【AIGC调研系列】通义千问、文心一言、抖音云雀、智谱清言、讯飞星火的特点分析

    通义千问、文心一言、抖音云雀、智谱清言、讯飞星火这五款AI大模型各有特色,它们在市场上的定位和竞争策略也有所不同。 通义千问 :由阿里巴巴推出,被认为是最接近ChatGPT水平的国产AI模型[7]。它不仅提供了长文档处理功能,还能够进行市场调研、竞品分析和设计理念

    2024年04月25日
    浏览(46)
  • 除了chatGPT网站外,国内有些可以使用的AI网站 文心一言 讯飞星火 豆包 通义千问 人工智能网站 AI网站

    2023年随着人工智能技术的不断发展,AI网站如ChatGPT等越来越受到人们的关注。这些网站具有多种作用,可以帮助人们更方便地获取信息、解决问题,甚至进行创作。 首先,AI网站可以提供智能问答服务。与传统的搜索引擎相比,AI网站能够更好地理解用户的问题,并提供更为

    2024年02月04日
    浏览(85)
  • 玩一玩通义千问Qwen开源版,Win11 RTX3060本地安装记录!

    大概在两天前,阿里做了一件大事儿。 就是开源了一个低配版的通义千问模型--通义千问-7B-Chat。 这应该是国内第一个大厂开源的大语言模型吧。 虽然是低配版,但是在各类测试里面都非常能打。 官方介绍: Qwen-7B是基于Transformer的大语言模型, 在超大规模的预训练数据上进

    2024年02月13日
    浏览(50)
  • llama.cpp部署通义千问Qwen-14B

    llama.cpp是当前最火热的大模型开源推理框架之一,支持了非常多的LLM的量化推理,生态比较完善,是个人学习和使用的首选。最近阿里开源了通义千问大语言模型,在众多榜单上刷榜了,是当前最炙手可热的开源中文大语言模型。今天在github上看到前几天llama.cpp已经支持Qwe

    2024年02月03日
    浏览(53)
  • 初步体验通过 Semantic Kernel 与自己部署的通义千问开源大模型进行对话

    春节之前被 Semantic Kernel 所吸引,开始了解它,学习它。 在写这篇博文之前读了一些英文博文,顺便在这里分享一下: Intro to Semantic Kernel – Part One Intro to Semantic Kernel – Part Two Build a custom Copilot experience with your private data using and Kernel Memory Semantic Kernel: The New Way to Create Artific

    2024年02月19日
    浏览(45)
  • 云端服务器应用实践:函数计算X 通义千问快速部署 AI 个人助手应用

    🎬 鸽芷咕 :个人主页  🔥 个人专栏 :《写作技巧》 《C++干货基地》 ⛺️生活的理想,就是为了理想的生活! 通义千问,是阿里云推出的一个超大规模的语言模型,功能包括多轮对话、文案创作、逻辑推理、多模态理解、多语言支持。能够跟人类进行多轮的交互,也融入了

    2024年02月02日
    浏览(65)
  • 【通义千问】大模型Qwen GitHub开源工程学习笔记(4)-- 模型的量化与离线部署

    量化方案基于AutoGPTQ,提供了Int4量化模型,其中包括Qwen-7B-Chat和Qwen-14B-Chat。更新承诺在模型评估效果几乎没有损失的情况下,降低存储要求并提高推理速度。量化是指将模型权重和激活的精度降低以节省存储空间并提高推理速度的过程。AutoGPTQ是一种专有量化工具。Int4是指

    2024年02月08日
    浏览(45)
  • python免费调用阿里云通义千问(q-wen-max)大模型API

    通义千问 通义千问,是基于阿里巴巴达摩院在自然语言处理领域的研究和积累。采用更先进的算法和更优化的模型结构,能够更准确地理解和生成自然语言、代码、表格等文本。 支持更多定制化需求。除了基本的文本生成和问答能力,还支持更多的定制化需求,可以针对不

    2024年04月27日
    浏览(38)
  • Linux Ubuntu 和 Mac ,Windows 部署离线通义千问1.8B参数 4-bit量化大模型详细教程 全网唯一

     代码为我自己写的 python 程序,应该是全网最简单的大模型部署方案,一个模型文件1.3GB,一个python代码即可开始玩耍~ 首先说明,本文下面的内容需要一点点python基础,需要会安装 python和 pip 安装依赖库,如果你不会或者不想这么麻烦,只想要下载就能马上使用的大模型

    2024年01月24日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包