目前绝大多数LLM模型都是python实现的,运行速度有限(包括ChatGLM2-6b),幸好有大神将其用C++重写了一遍,让运行速度大大提高。

项目地址:li-plus/chatglm.cpp: C++ implementation of ChatGLM-6B & ChatGLM2-6B (github.com)

部署过程如下(环境:WSL 2 ubuntu 22.04,显卡: N卡RTX 4060) - 注:无显卡,纯CPU也行

1、克隆项目

git clone --recursive https://github.com/li-plus/chatglm.cpp.git && cd chatglm.cpp

2、编译

注:执行下面操作前,请先确保ubuntu环境里有make, cmake环境(没有请自行google或baidu)

纯CPU环境:

cmake -B build
cmake --build build -j --config Release

有(nvidia cuda) GPU 环境:

cmake -B build -DGGML_CUBLAS=ON && cmake --build build -j --config Release

3、模型转换

原生的ChatGLM2-6B模型无法直接使用,需要将其转换成ggml的bin文件,假如我们已提前下载了 THUDM/chatglm2-6b-int4 · Hugging Face,放在windows主系统的e:\chatglm2-6b-in4目录

python3 convert.py -i /mnt/e/chatglm2-6b-int4 -t q4_0 -o chatglm2-6b-int4.bin

执行完后,将在当前目录下,得到1个名为chatglm2-6b-int4.bin

4、CLI 验证

 ./build/bin/main -m /home/jimmy/code/models/chatglm2-6b-int4.bin -i

有显卡的情况下,c++版本与python版本速度的区别不太明显,但在纯CPU环境下,c++版本明显快很多。

5、python绑定

纯CPU环境:

pip install -U chatglm-cpp

nvidia CUDA环境: 

CMAKE_ARGS="-DGGML_CUBLAS=ON" pip install -U chatglm-cpp

Mac环境:

CMAKE_ARGS="-DGGML_METAL=ON" pip install -U chatglm-cpp

安装好以后,cd examples目录:

  • CLI模式验证
 python cli_chat.py -m /home/jimmy/code/models/chatglm2-6b-int4.bin -i

  • web_demo

  • api-demo

先安装

pip install 'chatglm-cpp[api]'

然后就可以验证了:

MODEL=/home/jimmy/code/models/chatglm2-6b-int4.bin uvicorn api_demo:app --host 127.0.0.1 --port 8080

MODEL=后面的路径,大家根据情况换成模型的实际路径,这里的api_demo.app,实际是在examples/api_demo.py里指定的

同时从源码里可以看到,对外暴露了2个url,如果顺利的话,启动后将看到类似以下输出:

如果启动过程中报错:

pandas PydanticImportError:`BaseSettings`已移动到`pydantic-settings`包中

可以尝试:

pip install ydata-profiling

启动成功 后,用ApiPost验证一下:

  •  longchain-api

先启动

MODEL=/home/jimmy/code/models/chatglm2-6b-int4.bin uvicorn chatglm_cpp.langchain_api:app --host 127.0.0.1 --port 8000

然后测试longchain-client

python langchain_client.py

源代码如下:

from langchain.llms import ChatGLM

llm = ChatGLM(endpoint_url="http://127.0.0.1:8000", max_token=2048, top_p=0.7, temperature=0.95, with_history=False)
print(llm.predict("你好"))

如果运行过程中报错

PydanticUserError: If you use `@root_validator` with pre=False (the default) you MUST specify `skip_on_failure=True`. Note that `@root_validator` is deprecated and should be replaced with `@model_validator`. For further information visit https://errors.pydantic.dev/2.0.2/u/root-validator-pre-skip

尝试:

pip install ydata-profiling

参考文章:

ChatGLM | ️ Langchain

langchain.llms.chatglm.ChatGLM — LangChain 0.0.262

chatglm.cpp使用手记的更多相关文章

  1. ROS学习手记 - 8 编写ROS的Publisher and Subscriber

    上一节我们完成了 message & srv 文件的创建和加入编译,这次我们要玩简单的Publisher 和 Subscriber 要玩 Publisher 和 Subscriber, 需要具 ...

  2. Linux.NET实战手记—自己动手改泥鳅(上)

    各位读者大家好,不知各位读者有否阅读在下的前一个系列<Linux.NET 学习手记>,在前一个系列中,我们从Linux中Mono的编译安装开始,到Jexus服务器的介绍,以及如何在Linu ...

  3. Linux.NET学习手记(7)

    前一篇中,我们简单的讲述了下如何在Linux.NET中部署第一个ASP.NET MVC 5.0的程序.而目前微软已经提出OWIN并致力于发展VNext,接下来系列中,我们将会向OWIN方向转战. 早在 ...

  4. Linux.NET学习手记(8)

    上一回合中,我们讲解了Linux.NET面对OWIN需要做出的准备,以及介绍了如何将两个支持OWIN协议的框架:SignalR以及NancyFX以OwinHost的方式部署到Linux.NET当中.这 ...

  5. 关于《Linux.NET学习手记(8)》的补充说明

    早前的一两天<Linux.NET学习手记(8)>发布了,这一篇主要是讲述OWIN框架与OwinHost之间如何根据OWIN协议进行通信构成一套完整的系统.文中我们还直接学习如何直接操作OW ...

  6. 使用“Cocos引擎”创建的cpp工程如何在VS中调试Cocos2d-x源码

    前段时间Cocos2d-x更新了一个Cocos引擎,这是一个集合源码,IDE,Studio这一家老小的整合包,我们可以使用这个Cocos引擎来创建我们的项目. 在Cocos2d-x被整合到Cocos引 ...

  7. U3D DrawCall优化手记

    在最近,使用U3D开发的游戏核心部分功能即将完成,中间由于各种历史原因,导致项目存在比较大的问题,这些问题在最后,恐怕只能通过一次彻底的重构来解决 现在的游戏跑起来会有接近130-170个左右的Dra ...

  8. Json CPP 中文支持与入门示例

    在每一个Json Cpp自带*.cpp文件头加上: #include "stdafx.h" 将Json Cpp对自带的头文件的引用修改为单引号方式,例如json_reader.cp ...

  9. 信息系统实践手记5-CACHE设计一例

    说明:信息系统实践手记系列是系笔者在平时研发中先后遇到的大小的问题,也许朴实和细微,但往往却是经常遇到的问题.笔者对其中比较典型的加以收集,描述,归纳和分享. 摘要:此文描述了笔者接触过的部分信息系统 ...

  10. 信息系统实践手记6-JS调用Flex的性能问题一例

    说明:信息系统实践手记系列是系笔者在平时研发中先后遇到的大小的问题,也许朴实和细微,但往往却是经常遇到的问题.笔者对其中比较典型的加以收集,描述,归纳和分享. 摘要:此文描述了笔者接触过的部分信息系统 ...

随机推荐

  1. 【HUST】网安|计算机网络安全实验|实验二 DNS协议漏洞利用实验

    写在最前: 这是我个人的实验记录,实现方式有很多种,多台虚拟机更容易做netwox. 认真整理和记录了一下容易出问题的地方. 代码仓库开了. 文章目录 涉及代码的仓库地址 计算机网络安全实验二 DNS ...

  2. 典型相关分析 CCA

    最近有小伙伴在问我一个数据分析的问题, 做毕设, 实证分析. 不知道改如何处理数据. 看了下设计的量表大致是这样的, 都是 5级的里克特量表, 大致分为两波, X, Y. 小伙伴认为就只有两个变量, ...

  3. 多数据库迁移的艺术:Alembic在复杂环境中的精妙应用

    title: 多数据库迁移的艺术:Alembic在复杂环境中的精妙应用 date: 2025/05/11 00:35:52 updated: 2025/05/11 00:35:52 author: c ...

  4. 关于The JSON value could not be converted to System.DateTime的解决方案

    如下json格式提交到后台后报: The JSON value could not be converted to System.DateTime. Path: $.beginTime | LineN ...

  5. Seata源码—1.Seata分布式事务的模式简介

    大纲 1.Seata分布式事务框架简介 2.Seata AT模式实现分布式事务的机制 3.Seata AT模式下的写隔离机制 4.Seata AT模式下的读隔离机制 5.官网示例说明Seata AT模 ...

  6. AssemblyResolve巧解未能加载文件或程序集“Newtonsoft.Json, Version=6.0.0.0的问题

    问题:未能加载文件或程序集"Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aee ...

  7. demo阐述js中let和var 的不同

    当我们使用 var 和 let 来声明变量时,它们在作用域和变量提升方面的差异会产生一些不同的结果.下面是一个示例来说明这些差异. // 使用 var 声明变量 function varExample ...

  8. 异常分析 JedisConnectionException: java.net.SocketTimeoutException: Read timed out

    问题描述   测试Redis分布式锁的时候,如果一次执行大量数据,系统会报出如下异常: JedisConnectionException: java.net.SocketTimeoutExceptio ...

  9. HanTTS简单文档

    先下载 https://gitee.com/dhfhub/HanTTS 然后输入命令 main.py synthesize --text 你的话 --src "syllables/" ...

  10. 「Temp」「转载」「补档」LaTeX 公式大全

    转载于此处 因为洛谷要隐藏以前的内容,所以提前复制一份下来. 本篇公式采用 MathJax3 渲染,不同于 KaTeX 渲染,部分箭头功能无法使用,所以删除了此部分. code { font-fami ...