ChatGLM-6B如何推理在MLU370

2023-11-09 23:50
文章标签 推理 6b chatglm mlu370

本文主要是介绍ChatGLM-6B如何推理在MLU370,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

提示:关于如何登录使用370,可以查看上一篇博文

文章目录

  • 前言
  • 一、MLU370
  • 二、操作过程
    • 1.源码下载
    • 2.部署环境
      • 1.进入云平台
      • 2.编译transformers_mlu-4.27.1
      • 3.修改模型读取
      • 4.运行成功
  • 总结


前言

有各种类型的预训练架构,包括自动编码模型(例如BERT)、自回归模型(例如GPT)和编码器-解码器模型(例如T5)。然而,没有一个预训练框架在三个主要类别的所有任务中表现最好,包括自然语言理解 (NLU)、无条件生成和条件生成。我们提出了一种基于自回归大规模空白填充的通用语言模型(GLM)来解决这一挑战。通过添加二维位置编码和允许任意顺序预测跨度,GLM改进了空白填充预训练,这在NLU任务上比BERT和T5的性能有所提高。同时,通过改变空格的数量和长度,可以对不同类型的任务预训练GLM。在NLU、条件生成和无条件生成的广泛任务中,在相同模型大小和数据的情况下,GLM优于BERT、T5和GPT,并且在单个BERTLarge参数为1.25倍的预训练模型中获得了最佳性能,证明了其对不同下游任务的泛化能力
引自ChatGLM-6B论文


一、MLU370

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
本次采用MLU370-M8做示例说明,如需体验M8卡,可阅读前文来获取体验资源

二、操作过程

1.源码下载

代码如下(示例):

这里我们已经编译完成了代码,直接下载即可,模型选用0.1.0版本。
ChatGLM-6B修改后源码:https://pan.baidu.com/s/1qFDOrpHpX-NFy3q5PhAixQ?pwd=0eek
ChatGLM-6B修改后模型:链接:https://pan.baidu.com/s/1VxHhb0E6tMO17DvSp_0Hpg?pwd=izue
模型改动eg:因为mlu目前支持版本为1.9不支持1.10得skip_init,将skip_init以函数得形式写入即可
transformers-4.27.1:https://github.com/xiaojunjun65/transformers-mlu_4.27.1
需要源码编译,本代码是经过mlu转换过的(具体转换方式可以参考上一篇博文)

2.部署环境

1.进入云平台

可参考上一篇如何使用MLU370博文

(pytorch) root@notebook-glm-6b-y4amqq-notebook-0:/workspace/volume/glm-6b-guojun/glm-6b# 

进入之后显示如下,然后将上述源码放入同一目录前面有个pytorch即显示进入环境成功

2.编译transformers_mlu-4.27.1

pip install -e ./transformers_v4.27.1_mlu/
tomli              2.0.1
tomlkit            0.11.7
torch              1.9.0
torch-mlu          1.13.0-torch1.9
torchvision        0.10.0a0+300a8a4
tqdm               4.65.0
transformers       4.27.1           /workspace/volume/glm-6b-guojun/glm-6b/transformers_v4.27.1_mlu
typed-ast          1.5.4
typing             3.7.4.3
typing_extensions  4.5.0
urllib3            1.26.15
wheel              0.38.4
wrapt              1.15.0
zipp               3.15.0

如上图pip list输出结果完成后,即安装成功

pip install sentencepiece

3.修改模型读取

import os
import platform
import signal
from transformers import AutoTokenizer, AutoModeltokenizer = AutoTokenizer.from_pretrained("/workspace/volume/glm-6b-guojun/glm-6b/chatglm-6b_data", trust_remote_code=True)model = AutoModel.from_pretrained("/workspace/volume/glm-6b-guojun/glm-6b/chatglm-6b_data", trust_remote_code=True).half().mlu()model = model.eval()

4.运行成功

用户:给我讲一个故事ChatGLM-6B:我可以讲一个故事。请告诉我你想要听什么样的故事,是浪漫的故事、冒险的故事、科幻的故事还是其他类型的故事中的哪种?用户:老人与海ChatGLM-6B:老人与海是一篇著名的海明威小说,讲述了一个叫老人和一个亚拉伯拉罕鱼的故事。老人是一个年迈的捕鱼人,他住在一个海边的小屋里,每天都去捕鱼。他非常擅长捕鱼,但他的健康状况开始下降,他不得不放弃他的工作。一天,老人决定去捕一条更大的鱼,但他不知道这条鱼会有多大。他带着他的渔网和鱼叉,开始了他的捕鱼之旅。他穿过大海,游过许多鲨鱼和海龟的领地,但他并没有找到那条巨大的鱼。最终,他终于找到了鱼叉,但他没有叉到鱼。老人感到非常失望,但他并没有放弃。他继续游着,直到他终于游到了鱼的位置。他用他的渔网抓住了鱼,但他没有留下它。老人把鱼带回了小屋,他和他的妻子一起吃掉了它。虽然老人没有捕到那条巨大的鱼,但他从这次经历中学到了很多东西。他意识到,即使他不能完成他的梦想,他仍然可以享受生活。这个故事告诉我们,即使我们遇到困难,我们也不能放弃。我们应该坚持不懈,直到我们最终成功。
欢迎使用 ChatGLM-6B 模型,输入内容即可进行对话,clear 清空对话历史,stop 终止程序用户:你好和我说下今天北京的天气ChatGLM-6B:你好,根据我所掌握的信息,今天北京的天气是多云转晴,最高气温约为 18°C,最低气温约为 5°C。此外,今天早晨可能会有些雾霾,需要做好防护措施。希望您度过愉快的一天!用户:今天的天气适合穿什么类型的衣服ChatGLM-6B:今天的气温较为适宜,但雾霾天气需要注意防护措施,选择吸湿性强、透气性好的衣物,如棉麻质地的衬衫、轻薄羽绒服、运动夹克等,以保持身体舒适度和健康。同时也要注意搭配合适的鞋子和袜子,避免因为穿着不当而影响活动和出行。用户:适合去哪里玩ChatGLM-6B:如果喜欢户外活动,可以前往北京周边的城市,如张家口、天津、德州等地,享受阳光和沙滩。如果喜欢在室内活动,可以去各大商场、公园、博物馆等地,体验不同的文化和艺术。无论选择哪种方式,都需要根据自己的兴趣和喜好来做出选择。
Every 2.0s: cnmon                                                                      notebook-glm-6b-y4amqq-notebook-0: Mon Jun 26 21:47:42 2023Mon Jun 26 21:47:42 2023
+------------------------------------------------------------------------------+
| CNMON v4.20.18                                                               |
+-------------------------------+----------------------+-----------------------+
| Card  VF  Name       Firmware | Inited        Driver | Util        Ecc-Error |
| Fan   Temp      Pwr:Usage/Cap |         Memory-Usage |         vMemory-Usage |
|===============================+======================+=======================|
| 0     /   MLU370-M8    v1.1.6 | On          v4.20.18 | 38%         N/A       |
|  0%   35C         69 W/ 300 W | 21744 MiB/ 47868 MiB | 31929 MiB/1048576 MiB |
+-------------------------------+----------------------+-----------------------+
| 1     /   MLU370-M8    v1.1.6 | On          v4.20.18 | 0%          N/A       |
|  0%   33C         52 W/ 300 W |     0 MiB/ 47868 MiB | 10240 MiB/1048576 MiB |
+-------------------------------+----------------------+-----------------------++------------------------------------------------------------------------------+
| Processes:                                                                   |
|  Card  VF  PID    Command Line                             MLU Memory Usage  |
|==============================================================================|
|  0     /   9159   python                                          21689 MiB  |
+------------------------------------------------------------------------------+

总结

整体运行效果不卡顿,速度很快,下面附一篇大致得修改方向供参考

# Cambricon PyTorch Model Migration Report
## Cambricon PyTorch Changes
| No. |  File  |  Description  |
| 1 | cli_demo.py:7 | change "model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().cuda()" to "model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().mlu() " |
| 2 | web_demo_old.py:5 | change "model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().cuda()" to "model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().mlu() " |
| 3 | api.py:4 | add "import torch_mlu" |
| 4 | api.py:6 | change "DEVICE = "cuda"" to "DEVICE = "mlu" " |
| 5 | api.py:12 | change "if torch.cuda.is_available():" to "if torch.mlu.is_available(): " |
| 6 | api.py:13 | change "with torch.cuda.device(CUDA_DEVICE):" to "with torch.mlu.device(CUDA_DEVICE): " |
| 7 | api.py:14 | change "torch.cuda.empty_cache()" to "torch.mlu.empty_cache() " |
| 8 | api.py:15 | change "torch.cuda.ipc_collect()" to "torch.mlu.ipc_collect() " |
| 9 | api.py:54 | change "model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().cuda()" to "model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().mlu() " |
| 10 | web_demo.py:6 | change "model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().cuda()" to "model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().mlu() " |
| 11 | web_demo2.py:15 | change "model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().cuda()" to "model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().mlu() " |
| 12 | utils.py:41 | change "model = AutoModel.from_pretrained(checkpoint_path, trust_remote_code=True, **kwargs).half().cuda()" to "model = AutoModel.from_pretrained(checkpoint_path, trust_remote_code=True, **kwargs).half().mlu() " |
| 13 | ptuning/web_demo.py:6 | add "import torch_mlu" |
| 14 | ptuning/web_demo.py:157 | change "model = model.half().cuda()" to "model = model.half().mlu() " |
| 15 | ptuning/web_demo.py:158 | change "model.transformer.prefix_encoder.float().cuda()" to "model.transformer.prefix_encoder.float().mlu() " |
| 16 | ptuning/trainer.py:59 | add "import torch_mlu" |
| 17 | ptuning/trainer.py:455 | change "# postpone switching model to cuda when:" to "# postpone switching model to mlu when: " |
| 18 | ptuning/trainer.py:561 | change "self.use_cuda_amp = False" to "self.use_mlu_amp = False " |
| 19 | ptuning/trainer.py:597 | change "args.half_precision_backend = "cuda_amp"" to "args.half_precision_backend = "mlu_amp" " |
| 20 | ptuning/trainer.py:604 | change "if args.half_precision_backend == "cuda_amp":" to "if args.half_precision_backend == "mlu_amp": " |
| 21 | ptuning/trainer.py:605 | change "self.use_cuda_amp = True" to "self.use_mlu_amp = True " |
| 22 | ptuning/trainer.py:623 | change "self.scaler = torch.cuda.amp.GradScaler()" to "self.scaler = torch.mlu.amp.GradScaler() " |
| 23 | ptuning/trainer.py:638 | change "and self.use_cuda_amp" to "and self.use_mlu_amp " |
| 24 | ptuning/trainer.py:1335 | change "self.use_cuda_amp = False" to "self.use_mlu_amp = False " |
| 25 | ptuning/trainer.py:2272 | change "if torch.cuda.is_available():" to "if torch.mlu.is_available(): " |
| 26 | ptuning/trainer.py:2274 | change "torch.cuda.random.set_rng_state(checkpoint_rng_state["cuda"])" to "torch.mlu.random.set_rng_state(checkpoint_rng_state["mlu"]) " |
| 27 | ptuning/trainer.py:2277 | change "torch.cuda.random.set_rng_state_all(checkpoint_rng_state["cuda"])" to "torch.mlu.random.set_rng_state_all(checkpoint_rng_state["mlu"]) " |
| 28 | ptuning/trainer.py:2366 | change "if torch.cuda.is_available():" to "if torch.mlu.is_available(): " |
| 29 | ptuning/trainer.py:2369 | change "rng_states["cuda"] = torch.cuda.random.get_rng_state_all()" to "rng_states["mlu"] = torch.mlu.random.get_rng_state_all() " |
| 30 | ptuning/trainer.py:2371 | change "rng_states["cuda"] = torch.cuda.random.get_rng_state()" to "rng_states["mlu"] = torch.mlu.random.get_rng_state() " |
| 31 | ptuning/trainer.py:2607 | change "if self.use_cuda_amp or self.use_cpu_amp:" to "if self.use_mlu_amp or self.use_cpu_amp: " |
| 32 | ptuning/trainer.py:2612 | change "else torch.cuda.amp.autocast(cache_enabled=cache_enabled, dtype=self.amp_dtype)" to "else torch.mlu.amp.autocast(cache_enabled=cache_enabled, dtype=self.amp_dtype) " |
| 33 | ptuning/trainer.py:2615 | change "ctx_manager = torch.cuda.amp.autocast()" to "ctx_manager = torch.mlu.amp.autocast() " |
| 34 | ptuning/trainer_seq2seq.py:17 | add "import torch_mlu" |
| 35 | ptuning/main.py:31 | add "import torch_mlu" |

上述就是mlu转换引擎做的事,有问题留言!

这篇关于ChatGLM-6B如何推理在MLU370的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/379177

相关文章

PyInstaller问题解决 onnxruntime-gpu 使用GPU和CUDA加速模型推理

前言 在模型推理时,需要使用GPU加速,相关的CUDA和CUDNN安装好后,通过onnxruntime-gpu实现。 直接运行python程序是正常使用GPU的,如果使用PyInstaller将.py文件打包为.exe,发现只能使用CPU推理了。 本文分析这个问题和提供解决方案,供大家参考。 问题分析——找不到ONNX Runtime GPU 动态库 首先直接运行python程序

【有啥问啥】大模型应用中的哈希链推理任务

大模型应用中的哈希链推理任务 随着人工智能技术的快速发展,尤其是大模型(如GPT、BERT、Vision Transformer等)的广泛应用,确保数据处理和模型推理的透明性与安全性变得愈发重要。哈希链推理任务作为一种技术手段,能够在大模型应用中保障数据的完整性和推理过程的可信性。本文将深入探讨哈希链推理任务的数学基础、技术细节、应用场景,并展望未来发展趋势。 一、哈希链与哈希链推理任务

yolov8-obb旋转目标检测onnxruntime和tensorrt推理

onnxruntime推理 导出onnx模型: from ultralytics import YOLOmodel = YOLO("yolov8n-obb.pt") model.export(format="onnx") onnx模型结构如下: python推理代码: import cv2import mathimport numpy as npimport onnxr

第一个100%开源的MoE大模型,7B的参数,1B的推理成本

尽管大语言模型 (LM) 在各种任务上取得了重大进展,但在训练和推理方面,性能和成本之间仍然需要权衡。 对于许多学者和开发人员来说,高性能的 LM 是无法访问的,因为它们的构建和部署成本过高。改善成本 - 性能的一种方法是使用稀疏激活混合专家 (MoE)。MoE 在每一层都有几个专家,每次只激活其中的一个子集(参见图 2)。这使得 MoE 比具有相似参数量的密集模型更有效,因为密集模型为每个

3天把Llama训成Mamba,性能不降,推理更快!

近日,Mamba方面又搞出了有意思的研究:来自康奈尔、普林斯顿等机构的研究人员成功将Llama提炼成了Mamba模型,并且设计了新的推测解码算法,加速了模型的推理。\ 先来看一张其乐融融的图片(一眼AI): 右边的小羊驼代表Llama,而左边的蛇(Mamba)也是我们的老熟人了。 至于到底能不能其乐融融,咱就不管了,之所以有此场景,是因为Mamba方面又搞出了有意思的研究: ——如何把

深度学习|模型推理:端到端任务处理

引言 深度学习的崛起推动了人工智能领域的诸多技术突破,尤其是在处理复杂数据与任务的能力方面。模型推理作为深度学习的核心环节,决定了模型在真实应用场景中的表现。而端到端任务处理(End-to-End Task Processing)作为深度学习的一种重要范式,通过从输入到输出的直接映射,显著提升了任务处理的效率和精度。在传统机器学习中,特征提取、数据清理、模型选择等步骤需要独立处理,过程繁琐且

pytorch pyro 贝叶斯神经网络 bnn beyesean neure network svi ​定制SVI目标和培训循环,变更推理

定制SVI目标和培训循环¶ Pyro支持各种基于优化的贝叶斯推理方法,包括Trace_ELBO作为SVI(随机变分推理)的基本实现。参见文件(documents的简写)有关各种SVI实现和SVI教程的更多信息I, 二,以及罗马数字3了解SVI的背景。 在本教程中,我们将展示高级用户如何修改和/或增加变分目标(或者:损失函数)以及由Pyro提供的训练步骤实现,以支持特殊的用例。 基本SVI用

论文速读|ROS-LLM:具有任务反馈和结构化推理的具身智能ROS 框架

论文地址:https://arxiv.org/pdf/2406.19741  ROS-LLM 框架旨在通过集成大型语言模型(LLM)和机器人操作系统(ROS),实现对机器人的直观编程。该框架支持通过聊天界面接收自然语言提示,并能够根据 ROS 环境中的传感器读数自动提取和执行行为。框架支持三种行为模式:序列、行为树和状态机。此外,通过模仿学习,用户可以向系统添加新的机器人动作。该研究通过实验

vllm源码解析(一):整体架构与推理代码

vlllm官方代码更新频发,每个版本都有极大变动, 很难说哪个版本好用. 第一次阅读vllm源码是0.4.0版本,对这版圈复杂度极高的调度代码印象深刻 0.4.1对调度逻辑进行重构,完全大变样, 读代码速度快赶不上迭代的速度了。 现在已经更新到0.5.4, 经过长时间观察,发现主要的调度逻辑基本也稳定了下来, 应该可以作为一个固话的版本去阅读。 本文解读依据vllm 0.5.4版本. 没有修改任

Qwen-7B-Chat大模型安装训练推理-helloworld

初始大模型之helloworld编写 开发环境:modelscope GPU版本上测试的,GPU免费36小时 ps:可以不用conda直接用环境自带的python环境使用 魔搭社区 安装conda wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh 1.2 bash Minicond