[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"content-run-chatglm2-on-m2-macbook":3,"$f3hmpetcw48c6":23},{"id":4,"type":5,"slug":6,"title":7,"date":8,"category":9,"tags":10,"body_markdown":15,"permalink":16,"excerpt_src":16,"media_type":16,"media_title":16,"media_author":16,"media_url":16,"rating":16,"layout":16,"pv":17,"admin_only":17,"created_at":18,"updated_at":18,"deleted_at":16,"status":19,"html":20,"excerpt":21,"cover":22},136,"article","run-chatglm2-on-m2-macbook","在M2 Macbook上运行ChatGLM2","2023-07-11 18:30","tech",[11,12,13,14],"AI","ChatGLM2","M2","Macbook","\n## 介绍\n\nChatGLM 是一个“开源双语对话语言模型”（官方介绍），也就是我们所熟知的“大语言模型”，或者简单理解为开源版ChatGPT平替（之一）。ChatGLM有时候也被叫作“清华大学的大语言模型”，但它的作者应该是和清华大学有合作，总之和清华大学有点关系就是了。\n\nChatGLM2 是 ChatGLM 的第二个版本，性能更强大，支持更长的上下文，推理更高效。目前 ChatGLM2 已经开源，能够下载到的模型是 6B 参数训练的，因此也叫 ChatGLM2-6B 。\n\n本文主要记录一下在 M2 Macbook 上运行 ChatGLM2 的过程。\n\n\u003C!-- more -->\n\n## 下载模型\n\nChatGLM-6B 的下载地址 \u003Chttps:\u002F\u002Fhuggingface.co\u002FTHUDM\u002Fchatglm2-6b> ，在 Files and versions 页面中找到 Clone repository，按照指引即可克隆下来：\n\n```sh\ngit lfs install\ngit clone https:\u002F\u002Fhuggingface.co\u002FTHUDM\u002Fchatglm2-6b\n```\n\n整个模型有 13G 左右，需要比较长的时间。\n\n> 注意，自行解决科学上网等问题。\n\n## 下载ChatGLM.cpp\n\n默认的模型在 Mac 系统下推理性能比较差，因此有人基于 ggml 重新实现了一个 ChatGLM.cpp，完全使用 C++ 实现，性能更好。\n\nChatGLM.cpp 的下载地址 \u003Chttps:\u002F\u002Fgithub.com\u002Fli-plus\u002Fchatglm.cpp>，按照指引克隆下来：\n\n```sh\ngit clone --recursive https:\u002F\u002Fgithub.com\u002Fli-plus\u002Fchatglm.cpp.git && cd chatglm.cpp\n```\n\n## 安装依赖\n\n接下来需要安装一些 Python 依赖。\n\n> 如果你没有安装 Python 3 的话，可以通过 Homebrew 安装：`brew install python3`\n\n```sh\npip install protobuf transformers==4.30.2 cpm_kernels torch==2.0 gradio mdtex2html sentencepiece accelerate\n```\n\n## 转换模型\n\n接下来需要将原始的模型转换成 ChatGLM.cpp 可以使用的格式。\n\n```sh\npython convert.py -i ..\u002Fchatglm2-6b\u002F -t q4_0 -o chatglm2-ggml.bin\n```\n\n其中`..\u002Fchatglm2-6b`是原始的模型目录，`chatglm2-ggml.bin`是转换后的模型文件。参数`-t`是量化类型，官方说明如下：\n\n- `q4_0` 4-bit integer quantization with fp16 scales.\n- `q5_0` 5-bit integer quantization with fp16 scales.\n- `q5_1` 5-bit integer quantization with fp16 scales and minimum values.\n- `q8_0` 8-bit integer quantization with fp16 scales.\n- `f16` half precision floating point weights without quantization.\n- `f32` single precision floating point weights without quantization.\n\n总之`q4_0`是对机器性能要求最低的，这里就选它了。\n\n## 编译ChatGLM.cpp\n\nChatGLM.cpp 的编译需要使用`cmake`，如果没有安装的话使用 Homebrew 安装：`brew install cmake`。\n\n```sh\ncmake -B build\ncmake --build build -j\n```\n\n## 运行ChatGLM.cpp\n\n```sh\n.\u002Fbuild\u002Fbin\u002Fmain -m chatglm2-ggml.bin -p 你好\n你好👋！我是人工智能助手 ChatGLM2-6B，很高兴见到你，欢迎问我任何问题。\n```\n\n可以使用`-i`参数进入交互式模式：\n\n```sh\n.\u002Fbuild\u002Fbin\u002Fmain -m chatglm2-ggml.bin -i\n    ________          __  ________    __  ___\n   \u002F ____\u002F \u002F_  ____ _\u002F \u002F_\u002F ____\u002F \u002F   \u002F  |\u002F  \u002F_________  ____\n  \u002F \u002F   \u002F __ \\\u002F __ `\u002F __\u002F \u002F __\u002F \u002F   \u002F \u002F|_\u002F \u002F\u002F ___\u002F __ \\\u002F __ \\\n \u002F \u002F___\u002F \u002F \u002F \u002F \u002F_\u002F \u002F \u002F_\u002F \u002F_\u002F \u002F \u002F___\u002F \u002F  \u002F \u002F\u002F \u002F__\u002F \u002F_\u002F \u002F \u002F_\u002F \u002F\n \\____\u002F_\u002F \u002F_\u002F\\__,_\u002F\\__\u002F\\____\u002F_____\u002F_\u002F  \u002F_(_)___\u002F .___\u002F .___\u002F\n                                              \u002F_\u002F   \u002F_\u002F\n\nWelcome to ChatGLM.cpp! Ask whatever you want. Type 'clear' to clear context. Type 'stop' to exit.\n\nPrompt   > 你好\nChatGLM2 > 你好👋！我是人工智能助手 ChatGLM2-6B，很高兴见到你，欢迎问我任何问题。\nPrompt   >\n```\n\n简单试了一下鸡兔同笼的问题：\n\n![](\u002Fassets\u002Ftech\u002F2023\u002Frun-chatglm2-on-m2-macbook\u002F01.png)\n\n可见 ChatGLM.cpp 的中文理解非常不错，数学成绩也还行，但是后续实测中代码的理解上还有待提高，和 ChatGPT 有差距。但不管怎样，一个本地能运行的大语言模型，也可以干很多事了，突然对这个行业的未来充满了期待。\n",null,0,"2026-08-28 04:37:17","published","\u003Ch2>介绍\u003C\u002Fh2>\n\u003Cp>ChatGLM 是一个“开源双语对话语言模型”（官方介绍），也就是我们所熟知的“大语言模型”，或者简单理解为开源版ChatGPT平替（之一）。ChatGLM有时候也被叫作“清华大学的大语言模型”，但它的作者应该是和清华大学有合作，总之和清华大学有点关系就是了。\u003C\u002Fp>\n\u003Cp>ChatGLM2 是 ChatGLM 的第二个版本，性能更强大，支持更长的上下文，推理更高效。目前 ChatGLM2 已经开源，能够下载到的模型是 6B 参数训练的，因此也叫 ChatGLM2-6B 。\u003C\u002Fp>\n\u003Cp>本文主要记录一下在 M2 Macbook 上运行 ChatGLM2 的过程。\u003C\u002Fp>\n\u003Ch2>下载模型\u003C\u002Fh2>\n\u003Cp>ChatGLM-6B 的下载地址 \u003Ca href=\"https:\u002F\u002Fhuggingface.co\u002FTHUDM\u002Fchatglm2-6b\">https:\u002F\u002Fhuggingface.co\u002FTHUDM\u002Fchatglm2-6b\u003C\u002Fa> ，在 Files and versions 页面中找到 Clone repository，按照指引即可克隆下来：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>git lfs install\ngit clone https:\u002F\u002Fhuggingface.co\u002FTHUDM\u002Fchatglm2-6b\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>整个模型有 13G 左右，需要比较长的时间。\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>注意，自行解决科学上网等问题。\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Ch2>下载ChatGLM.cpp\u003C\u002Fh2>\n\u003Cp>默认的模型在 Mac 系统下推理性能比较差，因此有人基于 ggml 重新实现了一个 ChatGLM.cpp，完全使用 C++ 实现，性能更好。\u003C\u002Fp>\n\u003Cp>ChatGLM.cpp 的下载地址 \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fli-plus\u002Fchatglm.cpp\">https:\u002F\u002Fgithub.com\u002Fli-plus\u002Fchatglm.cpp\u003C\u002Fa>，按照指引克隆下来：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>git clone --recursive https:\u002F\u002Fgithub.com\u002Fli-plus\u002Fchatglm.cpp.git &amp;&amp; cd chatglm.cpp\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2>安装依赖\u003C\u002Fh2>\n\u003Cp>接下来需要安装一些 Python 依赖。\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>如果你没有安装 Python 3 的话，可以通过 Homebrew 安装：\u003Ccode>brew install python3\u003C\u002Fcode>\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cpre>\u003Ccode>pip install protobuf transformers==4.30.2 cpm_kernels torch==2.0 gradio mdtex2html sentencepiece accelerate\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2>转换模型\u003C\u002Fh2>\n\u003Cp>接下来需要将原始的模型转换成 ChatGLM.cpp 可以使用的格式。\u003C\u002Fp>\n\u003Cpre>\u003Ccode>python convert.py -i ..\u002Fchatglm2-6b\u002F -t q4_0 -o chatglm2-ggml.bin\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>其中\u003Ccode>..\u002Fchatglm2-6b\u003C\u002Fcode>是原始的模型目录，\u003Ccode>chatglm2-ggml.bin\u003C\u002Fcode>是转换后的模型文件。参数\u003Ccode>-t\u003C\u002Fcode>是量化类型，官方说明如下：\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>q4_0\u003C\u002Fcode> 4-bit integer quantization with fp16 scales.\u003C\u002Fli>\n\u003Cli>\u003Ccode>q5_0\u003C\u002Fcode> 5-bit integer quantization with fp16 scales.\u003C\u002Fli>\n\u003Cli>\u003Ccode>q5_1\u003C\u002Fcode> 5-bit integer quantization with fp16 scales and minimum values.\u003C\u002Fli>\n\u003Cli>\u003Ccode>q8_0\u003C\u002Fcode> 8-bit integer quantization with fp16 scales.\u003C\u002Fli>\n\u003Cli>\u003Ccode>f16\u003C\u002Fcode> half precision floating point weights without quantization.\u003C\u002Fli>\n\u003Cli>\u003Ccode>f32\u003C\u002Fcode> single precision floating point weights without quantization.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>总之\u003Ccode>q4_0\u003C\u002Fcode>是对机器性能要求最低的，这里就选它了。\u003C\u002Fp>\n\u003Ch2>编译ChatGLM.cpp\u003C\u002Fh2>\n\u003Cp>ChatGLM.cpp 的编译需要使用\u003Ccode>cmake\u003C\u002Fcode>，如果没有安装的话使用 Homebrew 安装：\u003Ccode>brew install cmake\u003C\u002Fcode>。\u003C\u002Fp>\n\u003Cpre>\u003Ccode>cmake -B build\ncmake --build build -j\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2>运行ChatGLM.cpp\u003C\u002Fh2>\n\u003Cpre>\u003Ccode>.\u002Fbuild\u002Fbin\u002Fmain -m chatglm2-ggml.bin -p 你好\n你好👋！我是人工智能助手 ChatGLM2-6B，很高兴见到你，欢迎问我任何问题。\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>可以使用\u003Ccode>-i\u003C\u002Fcode>参数进入交互式模式：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>.\u002Fbuild\u002Fbin\u002Fmain -m chatglm2-ggml.bin -i\n    ________          __  ________    __  ___\n   \u002F ____\u002F \u002F_  ____ _\u002F \u002F_\u002F ____\u002F \u002F   \u002F  |\u002F  \u002F_________  ____\n  \u002F \u002F   \u002F __ \\\u002F __ `\u002F __\u002F \u002F __\u002F \u002F   \u002F \u002F|_\u002F \u002F\u002F ___\u002F __ \\\u002F __ \\\n \u002F \u002F___\u002F \u002F \u002F \u002F \u002F_\u002F \u002F \u002F_\u002F \u002F_\u002F \u002F \u002F___\u002F \u002F  \u002F \u002F\u002F \u002F__\u002F \u002F_\u002F \u002F \u002F_\u002F \u002F\n \\____\u002F_\u002F \u002F_\u002F\\__,_\u002F\\__\u002F\\____\u002F_____\u002F_\u002F  \u002F_(_)___\u002F .___\u002F .___\u002F\n                                              \u002F_\u002F   \u002F_\u002F\n\nWelcome to ChatGLM.cpp! Ask whatever you want. Type 'clear' to clear context. Type 'stop' to exit.\n\nPrompt   &gt; 你好\nChatGLM2 &gt; 你好👋！我是人工智能助手 ChatGLM2-6B，很高兴见到你，欢迎问我任何问题。\nPrompt   &gt;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>简单试了一下鸡兔同笼的问题：\u003C\u002Fp>\n\u003Cp>\u003Cimg src=\"https:\u002F\u002Fassets.toobug.net\u002Fassets\u002Ftech\u002F2023\u002Frun-chatglm2-on-m2-macbook\u002F01.png\" alt=\"\">\u003C\u002Fp>\n\u003Cp>可见 ChatGLM.cpp 的中文理解非常不错，数学成绩也还行，但是后续实测中代码的理解上还有待提高，和 ChatGPT 有差距。但不管怎样，一个本地能运行的大语言模型，也可以干很多事了，突然对这个行业的未来充满了期待。\u003C\u002Fp>\n","\u003Ch2>介绍\u003C\u002Fh2>\n\u003Cp>ChatGLM 是一个“开源双语对话语言模型”（官方介绍），也就是我们所熟知的“大语言模型”，或者简单理解为开源版ChatGPT平替（之一）。ChatGLM有时候也被叫作“清华大学的大语言模型”，但它的作者应该是和清华大学有合作，总之和清华大学有点关系就是了。\u003C\u002Fp>\n\u003Cp>ChatGLM2 是 ChatGLM 的第二个版本，性能更强大，支持更长的上下文，推理更高效。目前 ChatGLM2 已经开源，能够下载到的模型是 6B 参数训练的，因此也叫 ChatGLM2-6B 。\u003C\u002Fp>\n\u003Cp>本文主要记录一下在 M2 Macbook 上运行 ChatGLM2 的过程。\u003C\u002Fp>\n","https:\u002F\u002Fassets.toobug.net\u002Fassets\u002Ftech\u002F2023\u002Frun-chatglm2-on-m2-macbook\u002F01.png",{"total":17,"totalRoots":17,"comments":24,"pv":17},[]]