笔记本本地部署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 输出结果如下
在这里插入图片描述

<think>嗯,用户想了解多GPU部署LLM的方法。首先,我需要确定他们可能的技术背景。可能是个开发者或者研究人员,想优化大语言模型的训练或推理速度。用户可能已经遇到单GPU的内存或计算限制,所以需要扩展到多GPU。 接下来,我得考虑多GPU部署的不同方法。常见的有数据行、模型行(包括流水线行和张量行),以及它们的混合使用。需要分别解释每种方法的原理、适用场景和优缺点。 数据行比较容易理解,每个GPU都有完整的模型副本,数据分片处理。但大模型参数可能无法放入单个GPU内存,这时候数据行就不够用了,需要模型行。模型行中,流水线行把模型按层划分到不同GPU,而张量行则是在层内进一步拆分参数,比如矩阵乘法分块。这两者可以结合使用。 还要提到框架支持,比如DeepSpeed、Megatron-LM和PyTorch的FSDP。这些工具简化了行化的实现,用户可能需要知道有哪些现成的解决方案。 另外,通信开销和负载均衡是关键挑战。多GPU之间的梯度同步、参数更新需要高效的通信,否则会成为瓶颈。比如NCCL库优化了GPU间通信。负载不均会导致部分GPU闲置,影响效率,尤其是在模型行时,各GPU的计算量要尽量均衡。 混合精度训练和3D行策略(数据+流水线+张量)也是高级话题,可能对用户有帮助。需要举例说明,比如训练千亿参数的模型时会用到这些技术。 用户可能还关心实际应用中的步骤,比如如何选择行策略,代码需要做哪些修改,或者性能调优的技巧。不过问题主要是介绍性的,可能需要保持概述级别,但结构要清晰,分点讲解。 要确保技术细节准确,比如张量行中如何分割矩阵乘法,使用all-reduce操作同步梯度。同时,要避免过于晦涩,用中文通俗解释概念,比如将模型拆分比喻成工厂流水线,帮助理解。 最后,总结多GPU部署的优势,比如提升训练速度、支持更大模型,以及面临的挑战,需要用户根据具体情况调整策略。可能还要提到未来趋势,如更自动化的行框架,降低用户门槛。</think>多GPU部署大型语言模型(LLM)是解决显存限制和加速训练/推理的核心技术。以下是分步解析: 一、核心行策略 1. **数据行 (Data Parallelism)** - 原理:每个GPU保存完整模型副本,将数据分片分配到不同GPU - 操作流程: ``` 1. 分发数据分片到各GPU 2. 各GPU独立前向计算 3. 同步梯度(All-Reduce操作) 4. 统一更新参数 ``` - 优势:实现简单(PyTorch `DataParallel` 一行代码) - 局限:单卡需容纳完整模型,不适合超大模型 2. **模型行 (Model Parallelism)** - **流水线行**(Pipeline Parallelism) - 将模型按层拆分到不同GPU - 需要微批次(Micro-batching)解决流水线气泡问题 - 示例:GPipe框架 - **张量行**(Tensor Parallelism) - 在矩阵乘维度拆分计算(如Megatron-LM方案) - 关键技术: $$ Y = GeLU(XA) \quad \Rightarrow \quad Y_1 = GeLU(XA_1), Y_2 = GeLU(XA_2) $$ - 需要All-Gather通信拼接结果 3. **3D混合行**(主流方案) - 组合数据+流水线+张量- 典型配置(以64 GPU为例): ``` 数据行维度=8 流水线行维度=2 张量行维度=4 ``` 二、关键技术组件 1. **通信优化** - 使用NCCL库加速All-Reduce - 通信与计算重叠(如PyTorch的`no_sync()`上下文) 2. **显存管理** - ZeRO优化(DeepSpeed): - Stage 1: 切分优化器状态 - Stage 2: 切分梯度 - Stage 3: 切分参数 3. **框架支持** | 框架 | 行能力 | 典型应用场景 | |-----------|-----------------------|---------------| | DeepSpeed | ZeRO, 3D行 | 百亿参数级模型 | | Megatron | 张量行优化 | 千亿参数级模型 | | FSDP | 原生PyTorch支持 | 中等规模模型 | 三、部署实践建议 1. **策略选择原则** - 模型参数量 < 20B:优先数据- 20B-100B:数据+张量- >100B:必须使用3D混合行 2. **性能调优技巧** - 通过公式估算理论吞吐量: $$ \text{吞吐量} = \frac{\text{有效计算时间}}{\text{计算时间+通信时间}} $$ - 使用Nsight Systems进行性能剖析 - 调整Micro-batch大小平衡显存与效率 四、典型挑战与解决方案 1. **负载不均衡** - 解决方案:动态负载调度(如FlexFlow) 2. **通信瓶颈** - 优化方法:梯度压缩(1-bit Adam)、异步通信 3. **显存碎片** - 使用统一显存分配器(如PyTorch的CUDACachingAllocator) 当前最前沿的实践已能支持万亿参数模型训练(如NVIDIA的ExaScale方案),但实际部署需要根据硬件条件和模型规模选择合适策略。建议从HuggingFace的`accelerate`库开始实验,逐步深入优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值