wsl下Linux使用chatglm.cpp记录

news2024/12/23 4:41:38

目录

前言

一些说明

过程

git chatglm.cpp代码

安装相关包

convert量化ggml

cmake构建项目

命令行模型推理

webdemo模型推理

APIServer

性能表现

gpu推理设置


前言

Linux之前用的少,多数还是在Windows下操作,导致对Linux很陌生,而且思维定势的,一有什么操作,还是习惯性在Windows下操作。

在chatglm.cpp操作上也是如此,但是代码可不管你这些,该报错就报错。so可能还是尝试下Linux。而wsl下Linux就是一个比较方便使用Linux环境的方法,wsl很轻量化,避免了你还得再安装虚拟机软件,而且VMWare可能还和docker存在冲突。

wsl下Linux基本操作间如下链接,本文主要讲后续如何在wsl下的Linux环境使用chatglm.cpp

wsl初步使用记录-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/to_love_/article/details/137559827

一些说明

wsl下的Linux环境还是比较干净,相比云服务器提供了毕竟完善的软件安装,wsl下的Linux系统一些软件都需要自己安装的。

对于这些不一样的地方,我进行颜色标识,方便快速查阅。

过程

git chatglm.cpp代码

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

正常是没问题的,不过我这里一直连不上github.com,提示连接被拒绝,而且是秒拒

试着ping结果ip是127.0.0.1,怪不得,应该和我Windows本机使用了Github加速代理有关,本质上是给hosts加了github.com的映射记录。

而且吧,wsl还有个机制,他会自动同步Windows宿主机的hosts记录到Linux下的hosts文件。当然可以关闭自动更新

sudo vim /etc/wsl.conf

增加

[network]
generateHosts = false

小提示:这里使用了vim编辑器,需要保存的话,先按ESC键,然后输入:wq即可保存并退出。

cat /etc/wsl.conf即可查看文件是否已更新

cat /etc/hosts查看Linux下hosts文件,是否还有错误的github.com映射信息

有的话,通过sudo vim /etc/hosts删掉,并增加20.205.243.166 github.com,这样访问githun.com就会去找这个新增的IP记录(注意:ip地址可能会变,则需要更新)

这个时候再次ping github.com,IP信息已经变过来了。

接下来重启Linux环境

wsl --shutdown ubuntu(这里看你具体的wsl系统名)

重新进入Linux环境

wsl -d ubuntu

这个时候就可以正常执行git操作了

安装相关包

python3 -m pip install torch tabulate tqdm transformers accelerate sentencepiece

这个时候会提示pip不存在(python倒是有了),那么再安装下pip

sudo apt install python3-pip
接下来即可正常pip install了,不过这几个包都很大,下载包很慢。那么可以先Ctrl+C停掉安装过程,在如上命令后加 -i https://pypi.tuna.tsinghua.edu.cn/simple,这样通过清华pip镜像源下载就飞快了

convert量化ggml

python3 chatglm_cpp/convert.py -i THUDM/chatglm3-6b -t q4_0 -o chatglm3-ggml.bin

如果使用该命令,如果当前模型文件不存在,会自动从huggingface下载模型。

这个时候问题又来了,由于网络原因,会提示你连不上huggingface,那么就需要通过镜像来下载,即需要设置huggingface模型下载地址的环境变量

export HF_ENDPOINT="https://hf-mirror.com"

查看是否已更新echo $HF_ENDPOINT

继续执行如上命令,这速度嗖嗖的~

很快q4_0量化模型也好了

cmake构建项目

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

其实,这里也需要先安装cmake

sudo apt update
sudo apt install cmake

命令行模型推理

./build/bin/main -m chatglm3-ggml.bin -p 你好

webdemo模型推理

python3 ./examples/web_demo.py -m chatglm3-ggml.bin

这里会提示chatglm_cpp不存在,pip install .即可解决

再次运行提示gradio不存在,pip install gradio即可,这个包可以更新到最前面的pip install命令中

APIServer

首先说下这块比较有坑

MODEL=./chatglm3-ggml.bin uvicorn chatglm_cpp.openai_api:app --host 127.0.0.1 --port 8000

这个时候会报错,不存在chatglm_cpp._C

可以发现如上命令是在chatglm.cpp路径下执行的,然后openai_api.py在chatglm_cpp路径下。看了下代码,在chatglm_cpp下有__init__.py,里边引用了chatglm_cpp._C。另一方面,我们在前面pip install的时候也是chatglm_cpp,可能两个一起有冲突,这样就出问题了

有2个办法吧,一个是改掉这个文件夹名称,比如改为chatglm-cpp

再一个,cd 到chatglm_cpp下执行,这个时候需要改下命令,主要是相对路径变了

MODEL=../chatglm3-ggml.bin uvicorn openai_api:app --host 127.0.0.1 --port 8000

两种方式都可以的,然后通过apipost或代码方式,都可以调用类openai的webapi了

性能表现

我这本身的Windows环境,然后是通过wsl新建了一个Linux环境。

硬件方面,没有GPU,在q4_0量化后,速度也还凑合用。

不过个人觉得,要准生产可用,还是需要GPU的,推理速度还是会差很多的。

gpu推理设置

如果电脑有GPU,那么cmake和pip install .的时候,都需要增加参数

cmake -B build -DGGML_CUBLAS=ON

CMAKE_ARGS="-DGGML_CUBLAS=ON" pip install .

相关参数其实在chatglm.cpp代码下的readme文档都有说明。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MES系统中的业务过程管理流程

MES即制造执行系统,也可称为生产执行系统,是一套面向制造企业车间执行层的生产信息化管理系统。 mes系统的业务流程包括哪些方面呢: 一、生产计划与调度 mes系统中的生产计划与调度模块,能够根据企业生产实际情况,制…

淘宝批量采集商品详情数据(属性丨详情图丨sku丨价格等)

淘宝批量采集商品详情数据(包括属性、详情图、SKU、价格等)可以通过以下几种方式实现: 使用淘宝数据抓取工具:这类工具,如某鱼等,能够自动化采集淘宝商品数据,并将其转换成CSV、Excel等格式&am…

从0到1实现RPC | 12 限流

在服务提供者provider端添加限流逻辑 限流:指定时间内请求数超过指定阈值时就抛出异常。 在ProviderInvoker的调用过程中,添加限流逻辑: 使用滑动窗口SlidingTimeWindow统计30s的请求数;每个服务service对应一个滑动窗口&#…

pom.xml显示灰色并被划线

在使用 IDEA 进行开发的过程中,有时候会遇到 pom.xml 显示灰色并被划线的情况,如下图: 这一般是因为该文件被 Maven 忽略导致的,可以进行如下操作恢复: 设置保存后,可以看到 pom.xml 恢复了正常&#xff1a…

Go语言中如何正确使用 errgroup

不管是哪种编程语言,重新发明轮子都不是一个好主意。代码库重新实现如何启动多个goroutine并汇总错误也很常见。但是Go生态系统中的一个包旨在支持这种常见的用例。让我们来看看这个包并了解为什么它应该成为Go开发人员工具集的一部分。 golang.org/x是一个为标准库提供扩展的…

网络变压器(网络隔离变压器)是如何影响网通设备的传输速率的呢?

Hqst华轩盛(石门盈盛)电子导读:今天介绍网络变压器(网络隔离变压器/网络滤波器)是如何影响网通设备的传输速率的 一、网络变压器(网络隔离变压器/网络滤波器)的工作原理 网络变压器(网络隔离变压器/网络滤…

04异常Lambda算法正则

异常 异常是什么? 异常是代码在编译或者执行的过程中可能出现的错误。避免异常的出现,同时处理可能出现的异常,让代码更稳健。 异常分为几类? 编译时异常、运行时异常。编译时异常:没有继承RuntimeExcpetion的异常…

python爬虫--------Beautiful Soup 案列(二十一天)

🎈🎈作者主页: 喔的嘛呀🎈🎈 🎈🎈所属专栏:python爬虫学习🎈🎈 ✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天…

JRT多平台初始化程序

这么多年客户端一直只做Windows,所以初始化程序用C#写个Exe,按网站生成的下载清单文件一个个下载和部署客户端环境是可以的。新的由于设计目标就是支持多平台的,所以需要重新考虑初始化设计。 JRT-Linux初始化演示 JRT-Windows初始化演示 …

【STL详解 —— list的介绍及使用】

STL详解 —— list的介绍及使用 list的介绍list的介绍使用list的构造list iterator的使用list capacitylist element accesslist modifiers 示例list的迭代器失效 list的介绍 list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭…

Linux内核中KASLR功能是什么?有什么作用?怎么破除?以及如何实操?(地址空间、layout random、kallsyms)

1. 背景 KASLR是一个什么技术点其实不重要,但重要的是有了KASLR这个功能后,造成内核中某个符号(函数 or 变量)在System.map中的地址和实际不一样了(实际: cat /proc/kallsyms),进一…

vector及cv::Mat删除指定元素并不改变位置

1、vector删除指定元素且不改变原有的顺序 使用erase方法&#xff0c;测试例子如下所示&#xff1a; //测试用例 struct MyStruct {int a;int b; }; std::vector<MyStruct> spotInfo; spotInfo.push_back({ 1,2 }); spotInfo.push_back({ 3,4 }); spotInfo.push_back({…

SSM整合时的配置文件

文章目录 SSM整合时的配置文件pom.xmlweb.xmlmybatis-config.xmlspring-mvc.xmlspring-mapper.xmldatabase.propertiesapplication.xml项目结构图 SSM整合时的配置文件 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"ht…

蓝桥杯第2152题——红绿灯

问题描述 爱丽丝要开车去上班, 上班的路上有许多红绿灯, 这让爱丽丝很难过。为 了上班不迟到, 她给自己的车安装了氮气喷射装置。现在她想知道自己上班最 短需要多少时间。 爱丽丝的车最高速度是 米每秒, 并且经过改装后, 可以瞬间加速到小于 等于最高速的任意速度, 也可以瞵…

【从浅学到熟知Linux】环境变量详谈(含使用程序获取环境变量的3种方法、如何查看环境变量)

&#x1f3e0;关于专栏&#xff1a;Linux的浅学到熟知专栏用于记录Linux系统编程、网络编程及数据库等内容。 &#x1f3af;每天努力一点点&#xff0c;技术变化看得见 文章目录 环境变量基本概念查看环境变量的方法环境变量相关命令环境变量组织方式及获取环境变量的3种方法验…

链表中常见的使用方法逻辑整理

文章目录 1. 二叉树特点1.1 完全二叉树1.2 满二叉树 2. 二叉树创建2.1 通过先序序列带有叶子结点标识符创建二叉树2.2 通过层次遍历顺序创建二叉树2.3 通过 先序中序 创建二叉树2.4 通过 先序中序 创建二叉树2.5 通过 中序后序 创建二叉树 3. 二叉树遍历通用方法3.1 先序遍历(深…

【软考中级】软件设计师考点分布

文章目录 软考官网资格设置软考报考流程 【软件设计师】考点分布选择题考点分布案例题考点分布 软考官网 中国计算机技术职业资格网&#xff1a;https://www.ruankao.org.cn/ 官网报名平台&#xff1a;https://bm.ruankao.org.cn/sign/welcome 资格设置 计算机软件计算机网…

SSM整合配置案例

一、什么是SSM整合 SSM整合用到两个容器&#xff0c;web容器是root容器的子容器&#xff0c;父子容器关系。 为了方便编写&#xff0c;我们可以三层架构每层对应一个配置类&#xff0c;分别指定两个容器加载 Ioc如何初始化&#xff1f; 二、简单实现整合SSM &#xff08;一…

是的,本科毕业八年,我考研了

今天&#xff0c;是一篇纯分享文。 是的&#xff0c;本科毕业八年&#xff0c;我考研了。 停更10个月&#xff0c;历时296天&#xff0c;我考研上岸了。 小伙伴们&#xff0c;好久不见。 一 发今年第一篇文章的时候刚处理完后续事宜&#xff0c;就简单说了句&#xff0c;后台…

QThread的学习

锁住该线程直到下面的情况之一出现&#xff1a; (1)和该线程连接的对象已经执行完成&#xff08;例如&#xff1a;当它从run()中返回时&#xff09; 如果该线程已经结束&#xff0c;该函数将返回true。 如果该线程还没有开始&#xff0c;它也返回true。 (2)time毫秒已经过去。如…