当前位置:AIGC资讯 > AIGC > 正文

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

前言

本文将演示如何在笔记本上运行千亿级模型,后端 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双系统
并确保常用依赖已安装

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 来获取更多

./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"

跟新 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"
fi

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

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 输出结果如下

总结

### 文章内容总结
**目标**:
本篇文章详细介绍了如何在入门级笔记本(联想拯救者R7000P2021H)上运行处理千亿级模型的Koboldcpp后端,前端通过安卓手机使用Termux和SillyTavern进行连接和交互,展示了具体的配置和步骤。
**配置信息**:
- **笔记本型号**:R7000P2021H
- **CPU**:AMD R5-5800H
- **显卡**:NVIDIA 3060 6GB 130w
- **内存**:三星64GB (双通道32Gx2) 3200Hz
- **硬盘**:原装镁光512GB+三星980 500GB
- **系统**:Ubuntu Server 22.04
**步骤概览**:
1. **Ubuntu部署及依赖安装**:
- 安装必要的软件包,包括vim、git、gcc、g++、wget、make等。
2. **Koboldcpp后端下载与安装**:
- 创建kobold文件夹。
- 通过wget下载koboldcpp的特定版本(cuda12)。
- 设置执行权限。
3. **LLM模型下载与合并**:
- 下载104B的Command R Plus和123B的Mistral Large 2的Q3KM量化模型。
- 使用命令合并模型文件(如果必要)。
4. **本地试运行与加速优化**:
- 在局域网内试运行koboldcpp后端服务。
- 配置并优化`kcpps`文件以提高性能,包括调整线程数、显存层数、上下文长度等。
- 关闭CPU的超线程以提高性能。
5. **创建脚本以便快速启动和停止服务**:
- 制作并优化start.sh和end.sh脚本,以便快速启动和停止koboldcpp服务进程。
6. **手机端设置SillyTavern**:
- 在安卓手机上通过Termux安装Node.js必要的软件包及SillyTavern。
- 创建Termux启动脚本以方便快捷运行SillyTavern。
- 配置SillyTavern以连接Koboldcpp服务器。
**实现效果**:
作者在文中展示了配置后的模型生成速度为0.7 token/s,能够在笔记本身上进行基本的交互式聊天等功能,且运行稳定。虽然速度较慢,但为在资源有限的设备上运行千亿级模型提供了可行方案。
**应用前景**:
文章为对人工智能感兴趣且资源有限的开发者提供了在入门级设备上部署和使用高级语言模型的参考方法,具有较大的实用性和指导意义。

更新时间 2024-09-07