macbook安装chatglm2-6b

1、前言

  chatglm安装环境还是比较简单的,比起Stable diffusion安装轻松不少。
  安装分两部分,一是github的源码,二是Hugging Face上的模型代码;安装过程跟着官方的readme文档就能顺利安装。以下安装内容,绝大部分是官方readme内容

note1:执行默认你在conda环境下运行,我就不累赘了
note2:默认认为你会把里面模型路径改为你本地的路径

2、环境

系统:macOS Ventura(13.4.1)
芯片:m2
内存:16G
python版本:2.10.11
python虚拟环境:anconda

3、代码下载

note:默认各位已经安装好git、brew软件

3.1、下载运行模型的代码

  逐行运行如下命令,克隆(git clone)代码、进入克隆好的目录、安装代码的python依赖

git clone https://github.com/THUDM/ChatGLM2-6B
cd ChatGLM2-6B
pip install -r requirements.txt

3.2、安装 Git Large File Storage

  使用brew包管理软件git lfs,其他方式可参考前面的蓝色超链接

brew install git-lfs

输入如下命令,验证是否安装成功

git lfs install

输出Git LFS initialized.即为安装成功

3.3、下载模型

3.3.1、下载未量化模型

  在运行模型代码以外目录,终端使用以下命令,会下载不包含lfs文件模型文件

GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/THUDM/chatglm2-6b

在这里插入图片描述
这里假定你顺利克隆,不能克隆,你懂的,你可以访问网站THUDM/chatglm2-6b
  克隆完之后,是不包含lfs的实体文件的。此时需要,去chatglm2-6b清华网盘下载模型文件,将文件全部下载,并覆盖到模型下面。

3.3.2、下载int4未量化模型

  在运行模型代码以外目录,终端使用以下命令,会下载不包含lfs文件模型文件

GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/THUDM/chatglm2-6b-int4

  克隆完之后,是不包含lfs的实体文件的。此时需要,去chatglm2-6b-int4清华网盘下载模型文件,将文件全部下载,并覆盖到模型下面。

4、运行模型

4.1、安装mps

curl -O https://mac.r-project.org/openmp/openmp-14.0.6-darwin20-Release.tar.gz
sudo tar fvxz openmp-14.0.6-darwin20-Release.tar.gz -C /

以下为项目FAQ引用

参考https://mac.r-project.org/openmp/
假设: gcc(clang)是14.x版本,其他版本见R-Project提供的表格此时会安装下面几个文件:/usr/local/lib/libomp.dylib, /usr/local/include/ompt.h, /usr/local/include/omp.h, /usr/local/include/omp-tools.h
注意:如果你之前运行ChatGLM项目失败过,最好清一下Hugging Face的缓存,i.e. 默认下是 rm -rf ${HOME}/.cache/huggingface/modules/transformers_modules/chatglm-6b-int4。由于使用了rm命令,请明确知道自己在删除什么。

参考Accelerated PyTorch training on Mac,命令行输入:

python
mps_device = torch.device("mps")
x = torch.ones(1, device=mps_device)
print (x)

进入python命令行,查看输出是否为tensor([1.], device='mps:0')确认是否支持mps,验证完毕关闭终端或者输入quit()退出

4.2、修改运行模型代码

  mac只能使用本地的文件运行,所以我们用前面下载的模型路径,进行加载。加载模型的方式有多种,但是修改方式都是统一的,即修改tokenizer和model变量加载代码。
未修改前:

tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm2-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("THUDM/chatglm2-6b", trust_remote_code=True).cuda()

模型修改后:

tokenizer = AutoTokenizer.from_pretrained("/Users/hui/data/chatglm2-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("/Users/hui/data/chatglm2-6b", trust_remote_code=True).half().to('mps')

int4模型修改后【这里增加修复报错的两行代码】:

import os
os.environ['KMP_DUPLICATE_LIB_OK'] = 'True'
tokenizer = AutoTokenizer.from_pretrained("/Users/hui/data/chatglm2-6b-int4", trust_remote_code=True)
model = AutoModel.from_pretrained("/Users/hui/data/chatglm2-6b-int4", trust_remote_code=True).float()

4.3、加载模型的demo种类

  按照readme描述,加载demo的方式有cli_demo.py、web_demo.py、web_demo2.py、api.py、openai_api.py这些方式运行模型并交互,你认真看项目会发现,我列的文件名差不多就项目的全部文件了。
  这里还未调通前,建议使用cli_demo.py来测试,因为这个加载方式是最容易发现错误的模式,调通后,建议改web_demo2.py来玩耍。
加载模型项目的文件下,命令行运行:

python cli_demo.py

在这里插入图片描述
  在用户行,输入问题,耐心等待输出的ChatGLM行输出答案,同时观察到系统是基本都是使用虚拟内存进行运行的,此时你的系统会很卡。这里是使用half方法情况下的内存情况,如果把half方法去掉,那么虚拟内存会到16G,输入问题的时候,你的8个cpu也会都使用率过半。

5、加载模型知识

  加载模型都是方式都是一样,这里区别在于你加载模型在哪里运行,有cpu和gpu两种方式。
这里总结下文档和网上看到一下方式。

5.1、gpu方式

  gpu方式其实就是使用cuda()方法,即加载代码的结尾使用cuda(),使用gpu方式可以指定模型加载的进度,默认模型不指定的时候是16位浮点,可以在cuda()前面再用有参quantize()方法指定为8位或者4位。
note:cuda肯定要求你是英伟达显卡啦,英伟达的技术
例:

# 按需修改,目前只支持 4/8 bit 量化
model = AutoModel.from_pretrained("THUDM/chatglm2-6b", trust_remote_code=True).quantize(8).cuda()

5.2、cpu方式

  cpu方式使用float()和to(‘mps’)进行指定,就不能使用quantize()指定了,会报错,可以使用half()进行指定,我也是尝鲜,所以不知道这个方法的用法,但是从表现来看,节省了一半以上的内存,但是只在to(‘mps’)上生效,float()加上没有效果,还是使用了19G虚拟内存。
例:

model = AutoModel.from_pretrained("/Users/hui/data/chatglm2-6b", trust_remote_code=True).half().to('mps')

5.3、使用压缩向量模型

  官方提供4精度模型(即THUDM/chatglm2-6b-int4)运行,使用起来,的确快了不少,但是总体上来也是龟速。
这个只是换了个小模型,同样可以用gpu和cpu加载起来

6、遇到的报错

报错1:

AssertionError: Torch not compiled with CUDA enabled

这事因为用了cuda()方法加载模型,报错意思是你的torch不是适配cuda编译的,但也不用更换,因为我的是mac,只有m2芯片,没有gpu,故不用折腾,使用上面提到的cpu方式加载即可

报错2:

OMP: Error #15: Initializing libomp.dylib, but found libomp.dylib already initialized.

这种情况是在int4模型加载才会出现,出现问题原因是系统中存在多个mps的环境。解决方式是加载时设置环境变量,加载前,加入如下代码:

import os
os.environ['KMP_DUPLICATE_LIB_OK'] = 'True'

看意思就是允许多个动态库加载

报错3

Failed to load cpm_kernels:Unknown platform: darwin

THUDM/ChatGLM-6B/issues/6这里从issue回复看,没用到相关功能,不用理会即可。实际只有int4模型才会提示,而且也不影响使用。

报错4:

cannot import name 'COMMON_SAFE_ASCII_CHARACTERS' from 'charset_normalizer.constant'

是因为缺失了部分东西,重新安装即可。
运行如下命令安装:

pip install chardet

报错5:

AttributeError: 'NoneType' object has no attribute 'int4WeightExtractionHalf'

这个报错int4模型下才会出现,解决方式就是改为float()方式运行解决

参考博客:
1、MAC安装ChatGLM-6B报错:Unknown platform: darwin
2、Python—OMP: Error #15: Initializing libomp.dylib, but found libiomp5.dylib already initialized.
3、cannot import name ‘COMMON_SAFE_ASCII_CHARACTERS‘ from ‘charset_normalizer.constant‘ ,已解决!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【苹果推软件】安装OS imessage和faceTime

推荐内容IMESSGAE相关 作者推荐内容参考此文档来操作 *** 点击即可查看作者要求内容信息作者推荐内容1.参考此文档来操作 *** 点击即可查看作者要求内容信息作者推荐内容2.参考此文档来操作 *** 点击即可查看作者要求内容信息作者推荐内容3.参考此文档来操作 *** 点击即可查看…

SpringBoot 实现 Excel 导入导出,百万数据量,性能爆表!

点击关注公众号,Java干货及时送达👇 前言 最近我做过一个MySQL百万级别数据的excel导出功能,已经正常上线使用了。 这个功能挺有意思的,里面需要注意的细节还真不少,现在拿出来跟大家分享一下,希望对你会有…

CVE 官网提交流程

CVE 官网提交流程 一、进入官网申请二、公开流程三、拓展四、补充(部分公司单独提交cve申请) 一、进入官网申请 https://cveform.mitre.org/ 选择申请CVE ID即可。 Vulnerability type翻译(chatgpt-3.5)buffer overflow缓冲区溢…

如何解决谷歌Chrome浏览器空白页的问题

如何解决谷歌Chrome浏览器空白页的问题 谷歌Chrome浏览器突然不打开任何网页,无论是任何站点(如http://www.baidu.com), 还是Chrome浏览器的设置页面(chrome://settings/), 扩展页面 ( chrome://extensions/ ) , 所有其他浏览器(如IE浏览器,Mozilla Firefox浏览器等)很好…

Vivaldi 6.1发布,可绕过微软限制使用Bing Chat

ChatGPT狂飙160天,世界已经不是之前的样子。 新建了人工智能中文站https://ai.weoknow.com 每天给大家更新可用的国内可用chatGPT资源 最新版本的 Vivaldi 可在桌面端伪装成 Edge,使其用户受益,并为工作空间和标签增加了更多的功能。 支持微…

安装Chatgdt搜索答辩老师常提的问题

🍅选题推荐——以防找不到我们,点击上方订阅专栏✌✌ 2024年计算机Java Python安卓APP微信小程序asp.net项目PHP毕业设计2000个热门选题推荐计算机毕业设计如何选题? 计算机毕业设计开题报告如何书写 论文的书写如何写出一篇好论文 计算机毕业…

重磅!微软Bing爆炸级更新!答案图文并茂,网友:逼 ChatGPT 放大招?

点击下方卡片,关注“CVer”公众号 AI/CV重磅干货,第一时间送达 点击进入—>【Transformer】微信技术交流群 杨净 明敏 发自 凹非寺转载自:量子位(QbitAI) 所有人都能上手微软Bing了! 今天,微…

chatgpt赋能python:如何在Python中去掉空行

如何在Python中去掉空行 如果你经常使用Python进行文本处理,你可能会遇到需要去掉文件中的空行(或多余的空格)的情况。这个问题看似简单,但实际上有多种方法可以解决。在本文中,我们将介绍其中的两种方法,…

chatgpt赋能python:如何在Python中输入空行

如何在Python中输入空行 如果你是一名有10年Python编程经验的工程师,那么你肯定知道Python作为一门高级编程语言,在处理文本时非常灵活。然而,在编写Python代码的过程中,有时候需要在文本中插入一些空行以使其更加易读。本文将介…

chatgpt赋能python:Python如何去除空行?

Python如何去除空行? 在Python编程中,经常会遇到需要去除文本文件或字符串中的空行的情况。空行通常是在文件或字符串中不希望存在的,因为它们可能会影响代码的可读性和执行效率。但是,如何才能在Python中高效地去除空行呢&#…

chatgpt赋能python:如何在Python中添加空行?

如何在Python中添加空行? 如果你是一个有经验的Python工程师,在编写代码时你可能会遇到需要添加空行的情况。但是有几种方法可以实现这一点,你应该用哪种方法呢?在本文中,我们将探讨如何在Python中添加空行以及各种添…

陶瓷工厂的进销存管理系统的设计与实现

毕业设计(论文) 论文题目XXX陶瓷工厂的进销存管理系统的设计与实现Thesis TopicThe Design and Implementation of the XXX Ceramic Factory Inventory Management System 毕业设计(论文)任务书 第1页 毕业设计(论文&a…

【小程序全面解析】生命周期、常用组件,代码示例和使用场景

文章目录 人工智能福利文章前言小程序生命周期应用生命周期页面生命周期使用场景 小程序的基础组件视图容器表单组件媒体组件 总结写在最后 ✍创作者:全栈弄潮儿 🏡 个人主页: 全栈弄潮儿的个人主页 🏙️ 个人社区,欢迎…

超级实用永久免费的软著源代码材料格式文档生成辅助工具——软著源代码生成工具,软著文档生成,软著鉴别材料生成,软著源代码辅助生成

截止2023年5月工具一万次下载啦!用过都说好 软著的全称是计算机软件著作权 申请软件著作权登记的时候会被要求提交60页的源代码。没有经验的开发者朋友第一次申请的时候难免会遇到因代码文档格式不正确、代码里含有其他版权信息等原因被要求补正的问题,从…

AidLux AI 应用案例悬赏征集活动正式启动!

ChatGPT爆火之后,AI领域的人才需求迎来了疯狂增长,AI学习也一跃成为业界大热门。 但AI囊括知识广、学习周期长,要克服理论、实战等多重阻碍并不容易。 而持续降低AI学习门槛是我们一直在做的事情。 为此,我们举办了多期AidLux …

教你玩转ChatGPT

文章目录 前言一、chatgpt是什么?二、使用步骤1.创建chatgpt账号2.获取机构id和api-keys3.准备环境3.1问题 4.示例3.1查看所有可用模型3.2使用文本模型进行问答3.2图像生成3.2图像编辑3.2图像变化3.2内容过滤 总结 前言 随着人工智能的不断发展,机器学习…

ART虚拟机 | 接口方法调用的具体实现

Java语言中,一个新创建的类只能继承一个父类,但是可以实现多个接口。这两种不同的语言特性使得多态在虚拟机中的实现也不相同。具体而言,当我们调用virtual方法时,可以使用对象所属类的virtual table进行派发,其中的元…

[MATLAB学习笔记]peaks函数1013(2)

>> Z peaksZ 1 至 10 列0.0001 0.0001 0.0002 0.0004 0.0007 0.0011 0.0017 0.0025 0.0034 0.00430.0001 0.0002 0.0004 0.0006 0.0010 0.0017 0.0026 0.0037 0.0051 0.00640.0002 0.0003 0.0005 0.000…

chatgpt赋能python:Python代码转为C语言——提高效率的必经之路

Python代码转为C语言——提高效率的必经之路 Python是一种高级编程语言,具有易学易用的优点,因此越来越多的程序员选择使用Python来开发应用程序和脚本。但是,在开发高性能应用程序时,Python的效率问题会成为拦路虎。因此&#x…

chatgpt赋能python:Python数据转换:介绍和使用方法

Python数据转换:介绍和使用方法 在Python编程中,数据转换是一项常用的操作,通过数据转换,可以把某种数据类型转换成其他数据类型。这对于处理数据和提高代码的可读性和可维护性都是非常有帮助的。在本文中,我们将介绍…