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

打印 上一主题 下一主题

主题 671|帖子 671|积分 2013

前言

本文将演示如何在笔记本上运行千亿级模型,后端 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双体系
并确保常用依赖已安装
  1. sudo apt install vim
  2. sudo apt install git
  3. sudo apt install gcc
  4. sudo apt install g++
  5. sudo apt install wget
  6. sudo apt install make
复制代码
Kobold 后端下载

首先需要获取 koboldcpp 项目,在常用目录下创建 kobold 文件夹便于后续管理
  1. sudo mkdir kobold
  2. cd kobold
复制代码
获取 koboldcpp ,这里下载 cuda12 的 1.67 版本
  1. wget https://github.com/LostRuins/koboldcpp/releases/download/v1.67/koboldcpp-linux-x64-cuda1210
  2. mv koboldcpp-linux-x64-cuda1210 kobold
  3. chmod +x kobold
复制代码
LLM模型下载

随后下载模型,模型链接已在前言中给出,64G 内存下载前言对应的版本刚好能跑,本人因为是双体系,因此模型本来路径是在 Win 盘符下,假如是单体系或其他情况,同样使用 wget 来获取,这里下载 Command R Plus ,因为模型很大 60G 左右,因此需要等很久,请耐心等候,为了便于管理,将其放在了 ./kobold/models 目录下
  1. mkdir models
  2. cd models
复制代码
然后下载对应的版本
  1. wget https://huggingface.co/pmysl/c4ai-command-r-plus-GGUF/resolve/main/command-r-plus-Q4_K_M-00001-of-00002.gguf?download=true
  2. 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 后缀的文件名,使用如下下令即可归并
  1. 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 ,在用户目录安装
  1. git clone https://github.com/ggerganov/llama.cpp.git
  2. mv llama.cpp llama
复制代码
随后进入并编译
  1. cd llama
  2. make
复制代码
使用 llama-gguf-split 来归并,使用如下下令
  1. ./llama-gguf-split --merge <model-first-part> <model-name>
复制代码
<model-first-part> 改为第一个模型部分的路径,即 00001-of-00002.gguf 的路径,<model-name> 改为最终的模型名,假如模型在 llama 目录下,即为
  1. ./llama-gguf-split --merge command-r-plus-Q4_K_M-00001-of-00002.gguf command-r-plus-Q4_K_M.gguf
复制代码
随后删除对应的 split 模型
  1. rm -rf command-r-plus-Q4_K_M-00001-of-00002.gguf
  2. rm -rf command-r-plus-Q4_K_M-00002-of-00002.gguf
复制代码
试运行

归并完之后即可运行,首先在局域网试运行,查看本地局域网 IP ,本机为 192.168.47.67
  1. ip addr
复制代码
本人模型路径为 Win 下的 D 盘挂载点,假如是单体系则是本文的 models 目录,在 kobold 下输入如下试运行
  1. ./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 来获取更多
  1. ./kobold --help
复制代码
编辑kcpps文件

创建一个 cmdr.kcpps 来运行 Command R Plus,写入如下信息, 格式及参数如下
  1. {
  2. "model": null,
  3. "model_param": "/mnt/windows/AI/models/command-r-plus-Q4_K_M.gguf",
  4. "port": 5001,
  5. "port_param": 5001,
  6. "host": "",
  7. "launch": false,
  8. "config": null,
  9. "threads": 7,
  10. "usecublas": ["normal", "0"],
  11. "usevulkan": null,
  12. "useclblast": null,
  13. "noblas": false,
  14. "contextsize": 10240,
  15. "gpulayers": 1,
  16. "tensor_split": null,
  17. "ropeconfig": [0.0, 10000.0],
  18. "blasbatchsize": 512,
  19. "blasthreads": null,
  20. "lora": null,
  21. "noshift": false,
  22. "nommap": false,
  23. "usemlock": true,
  24. "noavx2": false,
  25. "debugmode": 0,
  26. "skiplauncher": false,
  27. "onready": "",
  28. "benchmark": null,
  29. "multiuser": 1,
  30. "remotetunnel": false,
  31. "highpriority": false,
  32. "foreground": false,
  33. "preloadstory": null,
  34. "quiet": false,
  35. "ssl": null,
  36. "nocertify": false,
  37. "mmproj": null,
  38. "password": null,
  39. "ignoremissing": false,
  40. "chatcompletionsadapter": null,
  41. "flashattention": false,
  42. "quantkv": 0,
  43. "forceversion": 0,
  44. "smartcontext": false,
  45. "hordemodelname": "",
  46. "hordeworkername": "",
  47. "hordekey": "",
  48. "hordemaxctx": 0,
  49. "hordegenlen": 0,
  50. "sdmodel": "",
  51. "sdthreads": 7,
  52. "sdclamped": false,
  53. "sdvae": "",
  54. "sdvaeauto": false,
  55. "sdquant": false,
  56. "sdlora": "",
  57. "sdloramult": 1.0,
  58. "whispermodel": "",
  59. "hordeconfig": null,
  60. "sdconfig": null
  61. }
复制代码
一般只需调解 model_param, contextsize, gpulayers, usemlock, threads这些参数,此中 model_param 选择你模型的路径,contextsize 为上下文长度一般设置为 4096 或 8192 或更多,本人电脑极限可拉到 10K,gpulayers 为 GPU 层数,需要根据你的显卡显存来调解,对于千亿级的模型非常吃显存,因此层数这里只能拉一层,而usemlock必须设置为 true, 否则会导致模型被换入虚拟内存,严重影响生成速度,threads 即线程数,根据你的 CPU 核心数而定,一般设置为 CPU 核心数减一,8 核设置 7 ,假如你的 CPU 核非常多,建议关闭超线程,用大核来跑,也能进步生成速度。
关闭方式为输入如下指令
  1. echo off > /sys/devices/system/cpu/smt/control
复制代码
开机自动关闭超线程设置
进到 grub 中编辑
  1. sudo vim /etc/default/grub
复制代码
修改 GRUB_CMDLINE_LINUX-DEFAULT 变量,在其之后添加 nosmt=force信息,如下所示
  1. GRUB_CMDLINE_LINUX-DEFAULT="nosmt=force"
复制代码
跟新 grub 配置,并重启
  1. sudo update-grub
  2. reboot
复制代码
编辑完 cmdr.kcpps 随后即可直接执行
  1. ./kobold cmdr.kcpps
复制代码
如许速度就快许多了
创建shell脚本用于快速启动

在用户目录下创建一个 start.sh 用于启动对于的模型
  1. sudo vim start.sh
复制代码
写入如下脚本代码
  1. #!/bin/bash
  2. if [ -z "$1" ]; then
  3.         echo "Error: No filename provided!"
  4.         exit 1
  5. else
  6.         FILENAME="$1"
  7. fi
  8. FILEPATH="./kobold/$FILENAME.kcpps"
  9. if [ ! -f "$FILEPATH" ]; then
  10.         echo "Error: File $FILEPATH not found!"
  11.         exit 1
  12. fi
  13. pids=$(pgrep -f "./kobold/kobold")
  14. if [ -n "$pids" ]; then
  15.         echo "Killing existing kobold processes with PIDs: $pids"
  16.         kill -9 $pids
  17. fi
  18. echo "Starting new kobold process with $FILEPATH"
  19. nohup ./kobold/kobold "$FILEPATH" > out.log 2>&1 &
  20. echo "New kobold process started with PID $!"
  21. exit 0
复制代码
进步权限
  1. chmod +x start.sh
复制代码
之后想要启动的话,只需在用户目录下执行
  1. ./start cmdr
复制代码
即可启动 cmdr.kcpps 对于的模型
也可编译一个 end.sh 用于远程随时关闭模型,如许不用的时间就可以关掉,且不需要重启,以节流电量和时间
  1. sudo vim end.sh
复制代码
写入如下脚本代码
  1. #!/bin/bash
  2. pids=$(pgrep -f "./kobold/kobold")
  3. if [ -n "$pids" ]; then
  4.         echo "Killing kobold processes with PIDs: $pids"
  5.         kill -9 $pids
  6.         echo "Kobold processes killed"
  7. else
  8.         echo "No kobold process found"
  9. fi
  10. exit 0
复制代码
进步权限
  1. chmod +x end.sh
复制代码
后续假如在控制端每次输入如下即可制止
  1. ./end.sh
复制代码
手机端安装SillyTavern

SillyTavern 的配置方法网上教程许多,可以直接参考该文档 Installing and running SillyTavern locally on Android using Termux.
下面是简单的安装方法,首先去安装 Termux ,下拉到最后点击 download 然后安装
打开 Termux 并安装常用软件及依赖
  1. apt update
  2. apt upgrade
  3. pkg install esbuild
  4. pkg install git
  5. pkg install nodejs
  6. pkg install vim
复制代码
在 Termux 开启所在的目录下获取 SillyTavern 项目
  1. git clone https://github.com/SillyTavern/SillyTavern
  2. cd SillyTavern
复制代码
安装所需依赖
  1. npm install
复制代码
随后即可运行
  1. ./start.sh
复制代码
可在 Termux 开启所在目录下创建一个st.sh脚本便于启动酒馆, 大概创建一个链接
  1. #!/bin/bashcd SillyTavern/./start.sh
  2. exit 0
复制代码
加权限
  1. chmod +x st.sh
复制代码
后面每次开启 Termux 后直接执行如下指令,也很方便
  1. ./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 输出结果如下


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

愛在花開的季節

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表