前言
本文将演示如何在笔记本上运行千亿级模型,后端 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双系统
并确保常用依赖已安装
sudoaptinstallvimsudoaptinstallgitsudoaptinstall gcc
sudoaptinstall g++
sudoaptinstallwgetsudoaptinstallmake
Kobold 后端下载
首先需要获取 koboldcpp 项目,在常用目录下创建 kobold 文件夹便于后续管理
sudomkdir 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 --context4096
出现如下提示即成功了
可在手机端或者其它电脑端浏览器输入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 中编辑
sudovim /etc/default/grub
修改 GRUB_CMDLINE_LINUX-DEFAULT 变量,在其之后添加 nosmt=force信息,如下所示
GRUB_CMDLINE_LINUX-DEFAULT="nosmt=force"
跟新 grub 配置,并重启
sudoupdate-grubreboot
编辑完 cmdr.kcpps 随后即可直接执行
./kobold cmdr.kcpps
这样速度就快很多了
创建shell脚本用于快速启动
在用户目录下创建一个 start.sh 用于启动对于的模型
sudovim start.sh
写入如下脚本代码
#!/bin/bashif[-z"$1"];thenecho"Error: No filename provided!"exit1elseFILENAME="$1"fiFILEPATH="./kobold/$FILENAME.kcpps"if[!-f"$FILEPATH"];thenecho"Error: File $FILEPATH not found!"exit1fipids=$(pgrep -f"./kobold/kobold")if[-n"$pids"];thenecho"Killing existing kobold processes with PIDs: $pids"kill-9$pidsfiecho"Starting new kobold process with $FILEPATH"nohup ./kobold/kobold "$FILEPATH"> out.log 2>&1&echo"New kobold process started with PID $!"exit0
提高权限
chmod +x start.sh
之后想要启动的话,只需在用户目录下执行
./start cmdr
即可启动 cmdr.kcpps 对于的模型
也可编译一个 end.sh 用于远程随时关闭模型,这样不用的时候就可以关掉,且不需要重启,以节省电量和时间
sudovim end.sh
写入如下脚本代码
#!/bin/bashpids=$(pgrep -f"./kobold/kobold")if[-n"$pids"];thenecho"Killing kobold processes with PIDs: $pids"kill-9$pidsecho"Kobold processes killed"elseecho"No kobold process found"fiexit0
提高权限
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 installgit
pkg install nodejs
pkg installvim
在 Termux 开启所在的目录下获取 SillyTavern 项目
git clone https://github.com/SillyTavern/SillyTavern
cd SillyTavern
安装所需依赖
npminstall
随后即可运行
./start.sh
可在 Termux 开启所在目录下创建一个st.sh脚本便于启动酒馆, 或者创建一个链接
#!/bin/bashcd SillyTavern/
./start.sh
exit0
加权限
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 输出结果如下
版权归原作者 HHD765 所有, 如有侵权,请联系我们删除。