参考文章

https://www.cnblogs.com/xiaoandi/p/18321501

由于该文章目标机器是x86架构,针对树莓派本人进行了内容修改。如有问题,请麻烦在评论区指出

安装环境及下载位置

上位机: amd64(x86_64)架构

上位机操作系统版本:LinuxMint 22.1(Xia)

上位机操作系统对应Ubuntu版本:Ubuntu 20.04 LTS

板子:树莓派4B(如果没有TF卡请自配)(处理器是BCM2711,aarch64(arm64)架构)

烧写操作系统: ImmortalWrt 24.10.3

操作系统镜像及工具链、软件开发工具包的下载位置:https://downloads.immortalwrt.org/releases/24.10.3/targets/bcm27xx/bcm2711/

操作流程

烧写系统

安装Balena Etcher 镜像烧录程序

参考 https://github.com/balena-io/etcher#debian-and-ubuntu-based-package-repository-gnulinux-x86x64

https://github.com/balena-io/etcher/releases/tag/v2.1.4 下载Balena Etcher的deb包

执行

   sudo apt install ./balena-etcher_2.1.4_amd64.deb

在操作系统菜单搜索balenaEtcher打开烧录镜像程序

当然也可以使用其它镜像烧录程序

烧录镜像

先从操作系统镜像下载位置下载 rpi-4-ext4-factory.img.gz

下载位置:https://downloads.immortalwrt.org/releases/24.10.3/targets/bcm27xx/bcm2711/

取出树莓派4B上的TF卡

插入读卡器,将读卡器插入上位机通用串行总线口

在烧录镜像程序上选择 Flash from File 打开刚下载好的镜像文件

Select Target选择类似于/dev/sdb的设备

进行烧录

扩展分区

考虑到烧写之后分区并没有扩展到最大,(我的TF卡是128G的,但是烧写系统之后主分区大小只有几百MB)。为了存储模型,需要扩展TF卡的分区大小。

经过试验,gparted和parted均无法完成扩展分区的要求。因此使用fdisk进行扩展分区

fdisk扩展分区

确认分区是/dev/sdb2

卸载分区

sudo umount /dev/sdb2

使用fdisk重新创建分区

sudo fdisk /dev/sdb
  • 输入p,打印当前分区信息,记录分区2的起始点

  • 输入d,然后输入2,删除分区2。(这个操作仅删除分区表记录,不会立即删除数据)

  • 输入n,重新新建分区

  • 输入p,选择主分区

  • 输入2,表示第二个分区

  • 输入前面记录的起始点位置

  • 对于输入结束点位置,可以写187432959或者如果不想留出交换分区的话可以直接回车(使用建议值,对照你的TF卡大小)

  • 如果有遇到

    分区 #2 包含一个 ext4 签名。您想移除该签名吗? 是[Y]/否[N]:  
    

    请选择N

  • 输入p,验证分区大小是否扩展

如果需要新建交换分区的话

  • 输入n 新建交换分区

  • 输入p,选择主分区

  • 输入3,表示第三个分区

  • 输入187432960作为起始点

  • 对于输入结束点位置,可以直接回车

  • 如果有遇到

    Partition #3 contains a swap signature.
    
    Do you want to remove the signature? [Y]es/[N]o: 
    

    请选择N

  • 输入w,确认进行修改

通知操作系统分区表已经修改。

sudo partprobe /dev/sdb
扩展文件系统

检查文件系统的完整性

sudo e2fsck -f /dev/sdb2

如果有遇到

Inode 位图末尾的填充值未设置。 修复<y>?  

选择y或者直接回车

扩展文件系统至分区末尾

sudo resize2fs /dev/sdb2

设置文件系统的卷标为rootfs

sudo e2label /dev/sdb2 rootfs

验证结果

sudo lsblk -f

弹出读卡器,将sd卡插入树莓派并上电,访问 192.168.1.1 到系统->挂载点下,将交换分区勾选已启用,点击右下角的保存并应用。

上板验证

弹出TF卡或者在文件系统中卸载分区

拔出读卡器,取出读卡器上的TF卡(一些读卡器取卡不需要指甲剪钳出来,只需要再次按压即可取出)

将TF卡插入到树莓派后,将树莓派进行上电,观察到红色PWR灯亮即表示供电成功

观察绿色ACT灯,到闪烁停止。

找一根网线,连接树莓派和上位机。

ping 192.168.1.1

ping通即表示成功连接。需要注意的是上位机无线子网的网段是否和有线网段重合。如果重合可以先断无线网再进行ping测试,另外在浏览器访问 192.168.1.1 的ImmortalWrt配置界面修改网段。

进行ssh连接

ssh root@192.168.1.1

不需要输入密码。

如果有遇到

Are you sure you want to continue connecting (yes/no/[fingerprint])? 

输入yes

如果有遇到

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
...

运行

ssh-keygen -f '~/.ssh/known_hosts' -R '192.168.1.1'

清除之前的ssh key

之后再运行

ssh root@192.168.1.1

运行

mount

检查挂载是否均是可读写的(rw),尤其是这一行

/dev/root on / type ext4 (rw,noatime)

确保是rw不是ro

注意突然断电可能导致分区变成只读,这时只能重新烧录系统就非常麻烦了

因此需要尽可能保证不要突然断电,以及不要热插拔TF卡。

运行

df -h

检查分区大小是否接近预期的TF卡的标定大小

编译cmake

参考 https://www.cnblogs.com/xiaoandi/p/18321501 。 使用工具链进行编译。

下载工具链 并解压

下载软件开发工具包 并解压

下载OpenSSL源码:去 https://github.com/openssl/openssl/releases 下载OpenSSL 3 的源码。

编译openssl

考虑到ImmortalWrt上的openssl没有头文件,可以先编译openssl。
参考前文提到的博客园文章,称之为openssl-dev

先在板子上确定OpenSSL的版本:

opkg list-installed | grep -i 'ssl\|crypto'

输出类似于:

……
kmod-crypto-user - 6.6.104-r1
libopenssl-conf - 3.0.17-r3
libopenssl-legacy - 3.0.17-r3
libopenssl3 - 3.0.17-r3
libustream-openssl20201210 - 2024.07.28~99bd3d2b-r1
wpad-openssl - 2024.09.15~5ace39b0-r2

那就去下载OpenSSL 3.0.17
下载地址:
https://github.com/openssl/openssl/releases

cd ~/immortal_build/openssl-openssl-3.0.17
mkdir build
./config no-asm shared no-async  --prefix=./build --cross-compile-prefix=~/immortal_build/immortalwrt-toolchain-24.10.3-bcm27xx-bcm2711_gcc-13.3.0_musl.Linux-x86_64/toolchain-aarch64_cortex-a72_gcc-13.3.0_musl/bin/aarch64-openwrt-linux-musl- linux-aarch64

注意最后的linux-aarch64目标,一定要写上,否则会默认指定x86_64

如果想要重新生成Makefile,可以在openssl文件下运行

make clean
rm -rf Makefile

生成了Makefile之后,设置环境变量指向sdk中的staging_dir:

export STAGING_DIR=/home/linucong/immortal_build/immortalwrt-sdk-24.10.3-bcm27xx-bcm2711_gcc-13.3.0_musl.Linux-x86_64/staging_dir

执行

make && make install

创建.cmake文件

cd ~/immortal_build/immortalwrt-toolchain-24.10.3-bcm27xx-bcm2711_gcc-13.3.0_musl.Linux-x86_64/toolchain-aarch64_cortex-a72_gcc-13.3.0_musl
mkdir projects
cd projects

下载CMake源码

git clone https://github.com/Kitware/CMake.git

创建.make文件

cd ~/immortal_build/immortalwrt-toolchain-24.10.3-bcm27xx-bcm2711_gcc-13.3.0_musl.Linux-x86_64/toolchain-aarch64_cortex-a72_gcc-13.3.0_musl/projects
mkdir build
cd build
touch openwrt_toolchain.cmake
vim openwrt_toolchain.cmake

写入内容:

# openwrt_toolchain
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR openwrt)

set(toolchain /home/linucong/immortal_build/immortalwrt-toolchain-24.10.3-bcm27xx-bcm2711_gcc-13.3.0_musl.Linux-x86_64/toolchain-aarch64_cortex-a72_gcc-13.3.0_musl)
set(openssl-dev /home/linucong/immortal_build/openssl-openssl-3.0.17/build)
set(ENV{STAGING_DIR} /home/linucong/immortal_build/immortalwrt-sdk-24.10.3-bcm27xx-bcm2711_gcc-13.3.0_musl.Linux-x86_64/staging_dir) 
# 指定交叉编译器的路径
set(CMAKE_C_COMPILER ${toolchain}/bin/aarch64-openwrt-linux-musl-gcc)
set(CMAKE_CXX_COMPILER ${toolchain}/bin/aarch64-openwrt-linux-musl-g++)
set(CMAKE_AR ${toolchain}/bin/aarch64-openwrt-linux-musl-ar)
set(CMAKE_LINKER ${toolchain}/bin/aarch64-openwrt-linux-musl-ld)
set(CMAKE_RANLIB ${toolchain}/bin/aarch64-openwrt-linux-musl-ranlib)
set(CMAKE_NM ${toolchain}/bin/aarch64-openwrt-linux-musl-nm)
set(CMAKE_OBJDUMP ${toolchain}/bin/aarch64-openwrt-linux-musl-objdump)
set(CMAKE_OBJCOPY ${toolchain}/bin/aarch64-openwrt-linux-musl-objcopy)
set(CMAKE_STRIP ${toolchain}/bin/aarch64-openwrt-linux-musl-strip)

# set(CMAKE_FIND_ROOT_PATH ${toolchain}/lib ${toolchain}/usr/lib ${toolchain}/include ${toolchain}/usr/include)
set(CMAKE_FIND_ROOT_PATH ${openssl-dev}/lib ${openssl-dev}/include)
set(CMAKE_INSTALL_RPATH "/usr/local/openssl-dev/lib64")
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)

# 使find_program, find_library, find_path, find_file等命令
# 先在CMAKE_FIND_ROOT_PATH中搜索
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

编译CMake

清除CMake缓存(若有)

rm CMakeCache.txt
mkdir output

最后加了 -DCMAKE_INSTALL_PREFIX=./output,用于编译完成后make install到指定路径下

cmake .. -DCMAKE_TOOLCHAIN_FILE=./openwrt_toolchain.cmake -DOPENSSL_CRYPTO_LIBRARY=/home/linucong/immortal_build/openssl-openssl-3.0.17/build/lib/libcrypto.so.3 -DOPENSSL_SSL_LIBRARY=/home/linucong/immortal_build/openssl-openssl-3.0.17/build/lib/libssl.so.3 -DOPENSSL_INCLUDE_DIR=/home/linucong/immortal_build/openssl-openssl-3.0.17/build/include -DCMAKE_INSTALL_PREFIX=./output

编译,开8线程

make -j8 && make install

在完成以上操作之后,建议备份编译好的cmake和openssl,以防后续需要重新烧录导致编译结果丢失

传输文件

给ImmortalWrt联网

这里只介绍无线联网方式。
当前状况:上位机使用网线成功连接树莓派4B,并且ping通192.168.1.1
步骤:
打开 192.168.1.1
选择上方“网络”->“无线”
图片
对“无线概况”中的radio0项,点击扫描按钮
图片
选择你要连接的无线网,输入密码,点击提交。保持默认,保存。
图片
禁用模式为Master的SSID为ImmortalWrt的无线网
图片
点击右下方的保存并应用
图片
有已连接站点即成功
图片
到接口界面,编辑wwan接口,设备选择无线网络 client wwan
图片

使用ssh连接

ssh root@192.168.1.1

使用ifconfig来检查网络是否获取到ip地址。例如

phy0-sta0 Link encap:Ethernet  HWaddr E6:5F:01:8C:55:AD  
          inet addr:192.168.31.7  Bcast:192.168.31.255  Mask:255.255.255.0
          inet6 addr: fe80::e45f:1ff:fe8c:55ad/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:576 errors:0 dropped:0 overruns:0 frame:0
          TX packets:619 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:73329 (71.6 KiB)  TX bytes:82673 (80.7 KiB)

说明已经获取到了地址192.168.31.7

测试是否ping通网关

ping 192.168.31.1

测试是否连通外网:

ping www.baidu.com

安装v3raya

具体教程见 https://v3raya.org/docs/prologue/installation/openwrt/

opkg update
opkg install luci-i18n-v3raya-zh-cn v3ray-geoip v3ray-geosite

设置开机自启动

vim /etc/rc.local

exit 0之前输入

v3raya &

:wq保存并退出

后台运行v3raya

v3raya &

访问 (192.168.1.1:2017)[192.168.1.1:2017],即可创建账户和导入订阅

为ImmortalWrt安装sftp server

opkg update
opkg install openssh-sftp-server

测试

scp

显示

usage: scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
           [-l limit] [-P port] [-S program]
           [[user@]host1:]file1 [...] [[user@]host2:]file2

即成功

scp

~/immortal_build/immortalwrt-toolchain-24.10.3-bcm27xx-bcm2711_gcc-13.3.0_musl.Linux-x86_64/toolchain-aarch64_cortex-a72_gcc-13.3.0_musl/projects/CMake/build/output文件夹下执行

scp -r ./* root@192.168.1.1:/usr/

测试

安装cpp依赖

opkg update
opkg install libstdcpp

否则会出现

Error loading shared library libstdc++.so.6: No such file or directory (needed by /usr/bin/cmake)

可以尝试执行

ldd /usr/bin/cmake

一般会输出:

root@ImmortalWrt:/usr/bin# ldd ./cmake
	/lib/ld-musl-aarch64.so.1 (0x7f9ecd0000)
	libssl.so.3 => /usr/lib/libssl.so.3 (0x7f9ec0c000)
	libcrypto.so.3 => /usr/lib/libcrypto.so.3 (0x7f9e797000)
	libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x7f9e592000)
	libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x7f9e561000)
	libc.so => /lib/ld-musl-aarch64.so.1 (0x7f9ecd0000)

还可以使用

cmake --version

来确定是cmake是可用的

如果有出现 Error relocating ./cmake: SSL_get0_group_name: symbol not found ,说明编译使用的OpenSSL版本比板子上的ImmortalWrt上的版本不一致。可以将编译好的openssl复制到树莓派上:(~/immortal_build/openssl-openssl-3.0.17/build文件夹下执行)

scp -r ./* root@192.168.1.1:/usr/local/openssl-dev/

在树莓派上使用export LD_LIBRARY_PATH=/usr/local/openssl-dev/lib:$LD_LIBRARY_PATH"来修改动态链接路径,这样可以解决报错。

root@ImmortalWrt:/usr/local# ldd /usr/bin/cmake
	/lib/ld-musl-aarch64.so.1 (0x7f93f40000)
	libssl.so.3 => /usr/local/openssl-dev/lib/libssl.so.3 (0x7f93e3b000)
	libcrypto.so.3 => /usr/local/openssl-dev/lib/libcrypto.so.3 (0x7f93955000)
	libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x7f93750000)
	libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x7f9371f000)
	libc.so => /lib/ld-musl-aarch64.so.1 (0x7f93f40000)

但是建议还是在编译OpenSSL的时候使用正确的版本。可以在/etc/profile里面写入export ...保持环境变量的修改。

安装python 和pip

opkg update
opkg install python3
opkg install python3-pip

验证

python --version
pip --version

安装uv(按需)

使用官网的安装方式会发生段错误

root@ImmortalWrt:/usr/bin# wget -qO- https://astral.sh/uv/install.sh | sh
Segmentation fault

可以从github下载包,再解压

wget https://github.com/astral-sh/uv/releases/download/0.9.5/uv-aarch64-unknown-linux-musl.tar.gz
# 替换成真正下载的文件的名称
tar -xzf 505bab34-920b-4502-beb1-6b96cbf60d8f\?sp=r 
cd uv-aarch64-unknown-linux-musl/
mv ./* /usr/bin
chmod +x /usr/bin/uv /usr/bin/uvx
cd /
rm -rf uv-aarch64-unknown-linux-musl 505bab34-920b-4502-b
eb1-6b96cbf60d8f\?sp=r 

对uv进行永久换源

vim /etc/profile

添加环境变量

export UV_INDEX_URL="https://pypi.tuna.tsinghua.edu.cn/simple"     
export PIP_INDEX_URL="https://pypi.tuna.tsinghua.edu.cn/simple" 

更新

source /etc/profile

下载模型

如果你想要使用safetensor格式的模型可以按照以下操作。如果只是想使用llama.cpp使用gguf格式的模型可以跳过这一步,去huggingface上面找gguf格式的模型。这里用的是魔搭上推荐的方式,当然也可以手动下载。

新建环境

cd ~
uv venv Qwen3
source Qwen3/bin/activate
cd Qwen3
uv init

安装魔搭

uv pip install modelscope

下载模型

cd Qwen3
modelscope download --model Qwen/Qwen3-1.7B  --local_dir ./dir

安装VScode Server

在板子上安装

opkg install coreutils procps-ng bash gzip ca-certificates ca-bundle coreutils coreutils-sleep tar

等其它包(因为装过的包太多导致无法一一记录,应该安装了这些包就可以满足要求,关健应该在于coreutils coreutils-sleep。可以先安装这两个包之后就进行连接尝试,如果不行的话再执行以下操作)
修改默认命令行

vim /etc/passwd

修改默认的命令行为bash(原先是ash)

root:x:0:0:root:/root:/bin/bash

在上位机vscode中设置

"remote.SSH.useExecServer": true
"remote.SSH.showLoginTerminal": true, #用来检查报错
"remote.SSH.useLocalServer": false,

如果遇到了类似于缺失getconf的报错或者一直出现类似于无法将xx修改为03的错误,请将remote.SSH.useExecServer修改为true。如果仍然遇到报错,注意安装coreutilscoreutils-sleep

同时也有遇到网络不好的可能性。可以设置"remote.SSH.showLoginTerminaltrue来检查下载情况

如果想要重新安装vscode-server,可以在树莓派上执行

rm -rf ~/.vscode-server

另外,参考 https://jishuzhan.net/article/1970795202161459202

如果需要在vscode 界面中使用claude等模型,可以在操作机的vscode中,点击

1763980525390

之后在~/.ssh/config中

Host 192.168.1.1
  HostName 192.168.1.1
  User root

(如果上位机使用***的话)加入一行,变成

Host 192.168.1.1
  HostName 192.168.1.1
  User root
  RemoteForward 7890 127.0.0.1:7890

如果以上措施不可行的话,可以尝试在设置中加上

    "http.proxy": "http://127.0.0.1:7890",
    "http.proxyStrictSSL": false,

也可以使用网上其它方法,加入值为ui的字段。例如 https://zhuanlan.zhihu.com/p/1966613372184294831https://blog.csdn.net/qq_32057921/article/details/145764603

或者使用v3ray来避开ip所在地的检测

配置llama.cpp

opkg install git make  gcc libstdcpp file

设置环境变量

export CC=/usr/bin/gcc
export CXX=/usr/bin/g++
export C_INCLUDE_PATH=/usr/local/musl/include
export LIBRARY_PATH=/usr/local/musl/lib
export LD_LIBRARY_PATH=/usr/local/musl/lib:/usr/lib64

测试gcc

$CC --version
mkdir ~/test
cd ~/test
touch test.c
vim test.c

输入

#include <stdio.h>

int main() {
    printf("Hello, musl!\n");
    return 0;
}

测试

$CC test.c -o test
./test

如果输出 Hello, musl!,说明工具链工作正常。

编译llama.cpp

如果出现ABI冲突,可以参考日志,使用以下命令

mv /usr/lib64 /usr/lib64.bak

注意到编译可能会出现dl库缺失的情况,例如在编译过程中可能出现这样的情况:

/usr/bin/ld: cannot find -ldl: No such file or directory
collect2: error: ld returned 1 exit status
make[2]: *** [examples/gguf-hash/CMakeFiles/llama-gguf-hash.dir/build.make:110: bin/llama-gguf-hash] Error 1
make[1]: *** [CMakeFiles/Makefile2:1474: examples/gguf-hash/CMakeFiles/llama-gguf-hash.dir/all] Error 2

由于在musl libc中,libdl的功能已经内置在libc中,所以对ggml的CMakelists.txt进行修改
将242行附近的

if (CMAKE_SYSTEM_NAME MATCHES "Linux")
    target_link_libraries(ggml PRIVATE dl)
endif()

将其进行注释

由于OpenWrt/ImmortalWrt对于OpenMP不支持我们先不加

禁用动态库(使用静态库) 禁用构建测试程序(绕开ABI冲突) 禁用cURL库支持(build的时候会报错,如果说用不了的话就禁用) 进行cmake

cmake -B build -DBUILD_SHARED_LIBS=OFF -DLLAMA_BUILD_TESTS=OFF -DLLAMA_CURL=OFF -DGGML_OPENMP=OFF -DCMAKE_BUILD_TYPE=Release -DGGML_PTHREAD=ON
cmake --build build -j4

如果想要编译出更快的llama.cpp可以加上--config Realease

cmake --build build -j4 --config Release

如果遇到报错或者想要重新编译可以执行

rm -rf build

如果遇到疑似炸内存的情况,可以使用单线程编译

cmake  --build build -j1

编译好了之后可以去下载模型

https://huggingface.co/unsloth/Qwen3-1.7B-GGUF

注意要是GGUF格式的

运行模型

以下为一些案例:

使用llama-cli

MODEL_NAME="Qwen3-1.7B-UD-Q8_K_XL.gguf"
MODEL_NAME="Qwen3-1.7B-UD-Q6_K_XL.gguf"
MODEL_NAME="Qwen3-1.7B-UD-Q5_K_XL.gguf"
MODEL_PATH="/root/models/${MODEL_NAME}"

cd ~/llama.cpp.copy/build/bin
./llama-run \
  --context-size 4096 \
  --threads 4 \
  --temp 0.7 \
  "$MODEL_PATH" \
  "1+1的结果是多少?"

图片

使用llama-server

如果想要不想要使用思考模式,请去 文档中去下载qwen3_nonthinking.jinja

注意需要使用--jinja来应用模板

~/llama.cpp/build/bin/llama-server \
  -m /root/models/Qwen3-0.6B-Q8_0.gguf \
  -t 4 \
  --mlock \
  -c 4096 \
  --host 0.0.0.0 \
  --no_warmup

~/llama.cpp/build/bin/llama-server \
  -m /root/models/Qwen3-0.6B-Q8_0.gguf \
  --jinja \
  -t 4 \
  --mlock \
  -c 4096 \
  --host 0.0.0.0 \
  --chat-template-file /root/llama.cpp/models/templates/qwen3_nonthinking.jinja \
  --no_warmup \
~/llama.cpp/build/bin/llama-server \
  --model ~/models/Qwen3-VL-2B-Instruct-UD-Q6_K_XL.gguf \
  --mmproj ~/models/mmproj-F16.gguf \
  --host 0.0.0.0 \
  --port 8080 \
  --ctx-size 4096 \
  --temp 0.8

测试性能

部分参数说明:

  • -p 指定 prompt 处理测试 中使用的 token 数量
  • -n 指定 文本生成测试 中生成的 token 数量
  • -t 指定使用的 CPU 线程数
  • -ngl 卸载多少层到GPU上
  • -r 每个测试配置重复运行的次数
cd /root/llama.cpp && ./build/bin/llama-bench \
  -m /root/models/Qwen3-0.6B-Q8_0.gguf \
  -m /root/models/Qwen3-1.7B-UD-Q5_K_XL.gguf \
  -m /root/models/Qwen3-VL-2B-Instruct-UD-Q6_K_XL.gguf \
  -p 512,1024,2048 \
  -n 128,256 \
  -t 1,2,4 \
  -ngl 0 \
  -r 5 \
  -o json > benchmark_results.json\
  --progress
 posted on 2025-12-01 11:57  大川小朋友  阅读(318)  评论(0)    收藏  举报