chatglm.cpp使用手记
目前绝大多数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
参考文章:
langchain.llms.chatglm.ChatGLM — LangChain 0.0.262
chatglm.cpp使用手记的更多相关文章
- ROS学习手记 - 8 编写ROS的Publisher and Subscriber
上一节我们完成了 message & srv 文件的创建和加入编译,这次我们要玩简单的Publisher 和 Subscriber 要玩 Publisher 和 Subscriber, 需要具 ...
- Linux.NET实战手记—自己动手改泥鳅(上)
各位读者大家好,不知各位读者有否阅读在下的前一个系列<Linux.NET 学习手记>,在前一个系列中,我们从Linux中Mono的编译安装开始,到Jexus服务器的介绍,以及如何在Linu ...
- Linux.NET学习手记(7)
前一篇中,我们简单的讲述了下如何在Linux.NET中部署第一个ASP.NET MVC 5.0的程序.而目前微软已经提出OWIN并致力于发展VNext,接下来系列中,我们将会向OWIN方向转战. 早在 ...
- Linux.NET学习手记(8)
上一回合中,我们讲解了Linux.NET面对OWIN需要做出的准备,以及介绍了如何将两个支持OWIN协议的框架:SignalR以及NancyFX以OwinHost的方式部署到Linux.NET当中.这 ...
- 关于《Linux.NET学习手记(8)》的补充说明
早前的一两天<Linux.NET学习手记(8)>发布了,这一篇主要是讲述OWIN框架与OwinHost之间如何根据OWIN协议进行通信构成一套完整的系统.文中我们还直接学习如何直接操作OW ...
- 使用“Cocos引擎”创建的cpp工程如何在VS中调试Cocos2d-x源码
前段时间Cocos2d-x更新了一个Cocos引擎,这是一个集合源码,IDE,Studio这一家老小的整合包,我们可以使用这个Cocos引擎来创建我们的项目. 在Cocos2d-x被整合到Cocos引 ...
- U3D DrawCall优化手记
在最近,使用U3D开发的游戏核心部分功能即将完成,中间由于各种历史原因,导致项目存在比较大的问题,这些问题在最后,恐怕只能通过一次彻底的重构来解决 现在的游戏跑起来会有接近130-170个左右的Dra ...
- Json CPP 中文支持与入门示例
在每一个Json Cpp自带*.cpp文件头加上: #include "stdafx.h" 将Json Cpp对自带的头文件的引用修改为单引号方式,例如json_reader.cp ...
- 信息系统实践手记5-CACHE设计一例
说明:信息系统实践手记系列是系笔者在平时研发中先后遇到的大小的问题,也许朴实和细微,但往往却是经常遇到的问题.笔者对其中比较典型的加以收集,描述,归纳和分享. 摘要:此文描述了笔者接触过的部分信息系统 ...
- 信息系统实践手记6-JS调用Flex的性能问题一例
说明:信息系统实践手记系列是系笔者在平时研发中先后遇到的大小的问题,也许朴实和细微,但往往却是经常遇到的问题.笔者对其中比较典型的加以收集,描述,归纳和分享. 摘要:此文描述了笔者接触过的部分信息系统 ...
随机推荐
- nndeploy开源推理框架教程来袭,模型推理全流程,轻松上手,一键精通!
大家好,我们是 nndeploy 开源团队.我们专注于打造一款端到端的模型推理和部署框架 -- nndeploy,旨在为用户提供高效.便捷.灵活且兼容主流框架的模型推理和部署体验. 此次,我们开发了 ...
- 8.6K star!完全免费+本地运行+无需GPU,这款AI搜索聚合神器绝了!
嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 FreeAskInternet是一款革命性的开源项目,它完美结合了多引擎搜索和智能语言模型, ...
- 鸿蒙Next开发实战教程-使用WebSocket实现即时聊天
鸿蒙系统提供了WebSocket库,使用它可以很方面的实现即时聊天功能,今天就使用WebSocket来实现一个完整的聊天功能. 首先创建一个WebSocket实例: let ws = webSocke ...
- K8s新手系列之Endponit
概述 官方文档:https://kubernetes.io/zh-cn/docs/reference/kubernetes-api/service-resources/endpoints-v1/ En ...
- B1076 Wifi密码 (15 分)
描述 下面是微博上流传的一张照片:"各位亲爱的同学们,鉴于大家有时需要使用 wifi,又怕耽误亲们的学习,现将 wifi 密码设置为下列数学题答案:A-1:B-2:C-3:D-4:请同学们自 ...
- 【译】Visual Studio 2022 v17.14 现已正式发布!
我们很高兴地宣布 Visual Studio 2022 17.14 正式发布!此版本延续了我们的使命--为开发者提供更快.更智能且更高效的工具,以应对各种开发工作. 在这个版本中有很多开发者喜欢的东西 ...
- ESP实现Web服务器
ESP实现Web服务器 典型的基于 ESP32 的静态网页与图片嵌入展示的 本地 Web Server(AP 模式)项目 项目功能概述 ESP32 创建一个 Wi-Fi 热点,启动一个 HTTP We ...
- 鸿蒙运动开发实战:打造 Keep 式轨迹播放效果
前言 在运动类应用中,轨迹播放效果是提升用户体验的关键功能之一.它不仅能直观展示用户的运动路线,还能通过动态效果增强运动的趣味性.Keep 作为一款知名的运动健身应用,其轨迹播放效果深受用户喜爱.那么 ...
- 2 MyBatis动态sql之where标签|转
1 MyBatis动态SQL之if 语句 2 MyBatis动态sql之where标签|转 3 MyBatis动态SQL之set标签|转 4 MyBatis动态SQL之trim元素|转 5 MyBat ...
- 【UEFI】HOB 从概念到代码
总述 使用 HOB 的原因是因为,在 PEI 阶段内存尚未完全初始化,到了 DXE 阶段才完整初始化了内存,所以无法通过简单的内存地址传递数据,并且我们仍然有一些对于内存空间存储的需求,因此发明了 H ...