笔记本本地部署100b以上千亿级别LLM,并在手机端接入

HHD765 2024-09-03 17:31:23 阅读 66

前言

本文将演示如何在笔记本上运行千亿级模型,后端 Koboldcpp 运行在 Ubuntu ,前端界面使用安卓手机通过 Termux 且使用 SillyTavern 进行连接,模型使用 104B 的 Command R Plus 的 Q4KM 量化,以及 123B 的 Mistral Large 2 的 Q3KM 量化作为演示,两者模型的性能强悍,中文表现良好,可匹敌早期的 GPT-4-0314

配置信息

笔记本型号: R7000P2021H

CPU: R5800H

显卡: 3060 6G 130w

无线网卡: AX210

内存: 三星64G(32Gx2双通道) 3200Hz

硬盘: 原装镁光512G+三星980 500G

系统: Ubuntu Server 22.04

Ubuntu 部署及常用依赖

关于 Ubuntu Server 的安装,可参考本人上篇的内容

实机演示联想拯救者R7000P安装Ubuntu Server与Win10双系统

并确保常用依赖已安装

<code>sudo apt install vim

sudo apt install git

sudo apt install gcc

sudo apt install g++

sudo apt install wget

sudo apt install make

Kobold 后端下载

首先需要获取 koboldcpp 项目,在常用目录下创建 kobold 文件夹便于后续管理

sudo mkdir kobold

cd kobold

获取 koboldcpp ,这里下载 cuda12 的 1.67 版本

wget https://github.com/LostRuins/koboldcpp/releases/download/v1.67/koboldcpp-linux-x64-cuda1210

mv koboldcpp-linux-x64-cuda1210 kobold

chmod +x kobold

LLM模型下载

随后下载模型,模型链接已在前言中给出,64G 内存下载前言对应的版本刚好能跑,本人因为是双系统,因此模型原本路径是在 Win 盘符下,如果是单系统或其他情况,同样使用 wget 来获取,这里下载 Command R Plus ,因为模型很大 60G 左右,因此需要等很久,请耐心等待,为了便于管理,将其放在了 ./kobold/models 目录下

mkdir models

cd models

然后下载对应的版本

wget https://huggingface.co/pmysl/c4ai-command-r-plus-GGUF/resolve/main/command-r-plus-Q4_K_M-00001-of-00002.gguf?download=true

wget https://huggingface.co/pmysl/c4ai-command-r-plus-GGUF/resolve/main/command-r-plus-Q4_K_M-00002-of-00002.gguf?download=true

模型合并方法

目前 hugging face 的 GGUF 模型有两种格式,合并方式也不同,一种是本文中 Command R Plus 的 00001-of-00002.gguf 格式,一种是 Mistral Large 2 的非 gguf 后缀的文件名格式,对于非 gguf 后缀的文件名,使用如下命令即可合并

cat Mistral-Large-Instruct-2407.Q4_K_M.gguf.part*of2 > Mistral-Large-Instruct-2407.Q4_K_M.gguf

对于kobold来说,00001-of-00002.gguf 格式不需要合并也能运行,但是有些后端如 ollama 则需要完整的 gguf 格式,合并方式如下

获取 llama.cpp ,在用户目录安装

git clone https://github.com/ggerganov/llama.cpp.git

mv llama.cpp llama

随后进入并编译

cd llama

make

使用 llama-gguf-split 来合并,使用如下命令

./llama-gguf-split --merge <model-first-part> <model-name>

<model-first-part> 改为第一个模型部分的路径,即 00001-of-00002.gguf 的路径,<model-name> 改为最终的模型名,如果模型在 llama 目录下,即为

./llama-gguf-split --merge command-r-plus-Q4_K_M-00001-of-00002.gguf command-r-plus-Q4_K_M.gguf

随后删除对应的 split 模型

rm -rf command-r-plus-Q4_K_M-00001-of-00002.gguf

rm -rf command-r-plus-Q4_K_M-00002-of-00002.gguf

试运行

合并完之后即可运行,首先在局域网试运行,查看本地局域网 IP ,本机为 192.168.47.67

ip addr

本人模型路径为 Win 下的 D 盘挂载点,如果是单系统则是本文的 models 目录,在 kobold 下输入如下试运行

./kobold --model /mnt/windows/AI/models/command-r-plus-Q4_K_M.gguf --context 4096

出现如下提示即成功了

在这里插入图片描述

可在手机端或者其它电脑端浏览器输入192.168.47.67:5001,即可进入聊天,这里就不演示了,生成速度很慢,接下来是可提速的方案,本机优化后运行速度为 0.7 token/s 虽然不快,但是能跑起来已经很不错了。

可用来查看常用的参数信息,或者查看 koboldcpp 来获取更多

<code>./kobold --help

编辑kcpps文件

创建一个 cmdr.kcpps 来运行 Command R Plus,写入如下信息, 格式及参数如下

{

"model": null,

"model_param": "/mnt/windows/AI/models/command-r-plus-Q4_K_M.gguf",

"port": 5001,

"port_param": 5001,

"host": "",

"launch": false,

"config": null,

"threads": 7,

"usecublas": ["normal", "0"],

"usevulkan": null,

"useclblast": null,

"noblas": false,

"contextsize": 10240,

"gpulayers": 1,

"tensor_split": null,

"ropeconfig": [0.0, 10000.0],

"blasbatchsize": 512,

"blasthreads": null,

"lora": null,

"noshift": false,

"nommap": false,

"usemlock": true,

"noavx2": false,

"debugmode": 0,

"skiplauncher": false,

"onready": "",

"benchmark": null,

"multiuser": 1,

"remotetunnel": false,

"highpriority": false,

"foreground": false,

"preloadstory": null,

"quiet": false,

"ssl": null,

"nocertify": false,

"mmproj": null,

"password": null,

"ignoremissing": false,

"chatcompletionsadapter": null,

"flashattention": false,

"quantkv": 0,

"forceversion": 0,

"smartcontext": false,

"hordemodelname": "",

"hordeworkername": "",

"hordekey": "",

"hordemaxctx": 0,

"hordegenlen": 0,

"sdmodel": "",

"sdthreads": 7,

"sdclamped": false,

"sdvae": "",

"sdvaeauto": false,

"sdquant": false,

"sdlora": "",

"sdloramult": 1.0,

"whispermodel": "",

"hordeconfig": null,

"sdconfig": null

}

一般只需调整 model_param, contextsize, gpulayers, usemlock, threads这些参数,其中 model_param 选择你模型的路径,contextsize 为上下文长度一般设置为 4096 或 8192 或更多,本人电脑极限可拉到 10K,gpulayers 为 GPU 层数,需要根据你的显卡显存来调整,对于千亿级的模型非常吃显存,因此层数这里只能拉一层,而usemlock必须设置为 true, 否则会导致模型被换入虚拟内存,严重影响生成速度,threads 即线程数,根据你的 CPU 核心数而定,一般设置为 CPU 核心数减一,8 核设置 7 ,如果你的 CPU 核非常多,建议关闭超线程,用大核来跑,也能提高生成速度。

关闭方式为输入如下指令

echo off > /sys/devices/system/cpu/smt/control

开机自动关闭超线程设置

进到 grub 中编辑

sudo vim /etc/default/grub

修改 GRUB_CMDLINE_LINUX-DEFAULT 变量,在其之后添加 nosmt=force信息,如下所示

GRUB_CMDLINE_LINUX-DEFAULT="nosmt=force"code>

跟新 grub 配置,并重启

sudo update-grub

reboot

编辑完 cmdr.kcpps 随后即可直接执行

./kobold cmdr.kcpps

这样速度就快很多了

创建shell脚本用于快速启动

在用户目录下创建一个 start.sh 用于启动对于的模型

sudo vim start.sh

写入如下脚本代码

#!/bin/bash

if [ -z "$1" ]; then

echo "Error: No filename provided!"

exit 1

else

FILENAME="$1"code>

fi

FILEPATH="./kobold/$FILENAME.kcpps"code>

if [ ! -f "$FILEPATH" ]; then

echo "Error: File $FILEPATH not found!"

exit 1

fi

pids=$(pgrep -f "./kobold/kobold")

if [ -n "$pids" ]; then

echo "Killing existing kobold processes with PIDs: $pids"

kill -9 $pids

fi

echo "Starting new kobold process with $FILEPATH"

nohup ./kobold/kobold "$FILEPATH" > out.log 2>&1 &

echo "New kobold process started with PID $!"

exit 0

提高权限

chmod +x start.sh

之后想要启动的话,只需在用户目录下执行

./start cmdr

即可启动 cmdr.kcpps 对于的模型

也可编译一个 end.sh 用于远程随时关闭模型,这样不用的时候就可以关掉,且不需要重启,以节省电量和时间

sudo vim end.sh

写入如下脚本代码

#!/bin/bash

pids=$(pgrep -f "./kobold/kobold")

if [ -n "$pids" ]; then

echo "Killing kobold processes with PIDs: $pids"

kill -9 $pids

echo "Kobold processes killed"

else

echo "No kobold process found"

fi

exit 0

提高权限

chmod +x end.sh

后续如果在控制端每次输入如下即可停止

./end.sh

手机端安装SillyTavern

SillyTavern 的配置方法网上教程很多,可以直接参考该文档 Installing and running SillyTavern locally on Android using Termux.

下面是简单的安装方法,首先去安装 Termux ,下拉到最后点击 download 然后安装

打开 Termux 并安装常用软件及依赖

apt update

apt upgrade

pkg install esbuild

pkg install git

pkg install nodejs

pkg install vim

在 Termux 开启所在的目录下获取 SillyTavern 项目

git clone https://github.com/SillyTavern/SillyTavern

cd SillyTavern

安装所需依赖

npm install

随后即可运行

./start.sh

可在 Termux 开启所在目录下创建一个st.sh脚本便于启动酒馆, 或者创建一个链接

#!/bin/bash

cd SillyTavern/

./start.sh

exit 0

加权限

chmod +x st.sh

后面每次开启 Termux 后直接执行如下指令,也很方便

./st.sh

配置 SillyTavern

随后就会跳转到浏览器,或者输入 http://127.0.0.1:8000/ ,在左上角第二个选项的插头按键,API 选择 Text Completion,API 类型选择 KoboldCpp ,服务器URL 输入 http://192.167.47.67:5001/,然后连接即可成功接入,本文主要提供后端部署的方案。配置参考下图。

在这里插入图片描述

对于 cmdr 模型参数参考如下

在这里插入图片描述

高级格式化一栏选择 Command R,勾选指示模式,预设也选择 Command R

在这里插入图片描述

创建一个角色卡进行聊天测试

在这里插入图片描述

本人手机端 ssh 工具是 Termius 输出结果如下

在这里插入图片描述



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。