llama.cpp + RPC 实践
[!Note]
基于 1 台 Jetson Orin Nano(8GB) 和 2 台 Jetson Orin NX(8GB) 的本地部署 + 分布式推理尝试
拓扑
Jetson 1:主节点
├── llama-server
├── 模型文件
├── 本机 CUDA GPU
└── RPC 客户端
├── Jetson 2:ggml-rpc-server → CUDA GPU
└── Jetson 3:ggml-rpc-server → CUDA GPU对三台Jetson,优先选择--split-mdoe layer流水线式层切分:
输入
↓
Jetson 1:前一部分 Transformer 层
↓ 网络传输激活值
Jetson 2:中间部分 Transformer 层
↓ 网络传输激活值
Jetson 3:后一部分 Transformer 层
↓
输出为提升网络传输可靠性和降低延迟,三台Jetson全部有线接入千兆交换机。
模型选择
选择1:
Qwen3-30B-A3B-Instruct-2507 + IQ4_XS
总参数约 30.5B,每个 token 只激活约 3.3B;IQ4_XS 权重约 16.5GB,三台机器基本能跑,但会很吃力。
选择2:
Qwen_Qwen3.5-9B + Q4_K_M
如果你受够了5t/s的生成速度,想要更少的内存占用、偶尔做图像识别和(不开mmproj时)256K的上下文,那么Qwen3.5本身就是原生视觉语言模型。
获取GGUF
选择1:
hf download bartowski/Qwen_Qwen3-30B-A3B-Instruct-2507-GGUF \
Qwen3-30B-A3B-Instruct-2507-IQ4_XS.gguf \
--local-dir /models/qwen3-30b选择2:
hf download bartowski/Qwen_Qwen3.5-9B-GGUF \
Qwen_Qwen3.5-9B-Q4_K_M.gguf \
--local-dir ~/llama.cpp/models/qwen3.5-9b
hf download bartowski/Qwen_Qwen3.5-9B-GGUF \
mmproj-Qwen_Qwen3.5-9B-f16.gguf \
--local-dir ~/llama.cpp/models/qwen3.5-9b编译llama.cpp
参考Qwen官方文档
启动
使用llama.cpp运行qwen
启动顺序:Jetson2 -> Jetson3 -> Jetson1
Jetson 2
cd ~/llama.cpp
tmux new-session -d \
-s llama-rpc \
-c /home/wheeltec/llama.cpp \
'./build/bin/ggml-rpc-server \
--host 192.168.0.101 \
--port 50052 \
--device CUDA0 \
--cache'Jetson 3
cd ~/llama.cpp
tmux new-session -d \
-s llama-rpc \
-c /home/wheeltec/llama.cpp \
'./build/bin/ggml-rpc-server \
--host 192.168.0.102 \
--port 50052 \
--device CUDA0 \
--cache'Jetson 1
选择1:Qwen3-30B
cd ~/llama.cpp
./build/bin/llama-server \
--rpc 192.168.0.101:50052,192.168.0.102:50052 \
--list-devices
tmux new-session -d \
-s llama-server \
-c /home/wheeltec/llama.cpp \
'./build/bin/llama-server \
--model /home/wheeltec/llama.cpp/models/qwen3-30/Qwen_Qwen3-30B-A3B-Instruct-2507-IQ4_XS.gguf \
--rpc 192.168.0.101:50052,192.168.0.102:50052 \
--split-mode layer \
--tensor-split 0.8,1,1 \
--n-gpu-layers all \
--fit off \
--load-mode dio \
--ctx-size 4096 \
--cache-type-k q8_0 \
--cache-type-v q8_0 \
--flash-attn on \
--parallel 1 \
--no-warmup \
--jinja \
--alias qwen3-30b-a3b-instruct-2507 \
--host 0.0.0.0 \
--port 8080'选择2:Qwen3.5-9B
cd /home/wheeltec/llama.cpp
tmux new-session -d \
-s qwen35-vision \
-c /home/wheeltec/llama.cpp \
"exec ./build/bin/llama-server \
--model /home/wheeltec/llama.cpp/models/qwen3.5-9b/Qwen_Qwen3.5-9B-Q4_K_M.gguf \
--mmproj /home/wheeltec/llama.cpp/models/qwen3.5-9b/mmproj-Qwen_Qwen3.5-9B-f16.gguf \
--mmproj-offload \
--rpc 192.168.0.101:50052,192.168.0.102:50052 \
--split-mode layer \
--fit on \
--fit-target 1536 \
--load-mode dio \
--ctx-size 131072 \
--cache-type-k q8_0 \
--cache-type-v q8_0 \
--flash-attn on \
--parallel 1 \
--batch-size 512 \
--ubatch-size 256 \
--image-max-tokens 2048 \
--mtmd-batch-max-tokens 512 \
--no-context-shift \
--jinja \
--reasoning off \
--alias qwen3.5-9b-vision-128k \
--host 0.0.0.0 \
--port 8080"启动验证
健康检查
curl http://192.168.0.100:8080/health
image-20260809221025671
进入tmux话题
tmux attach -t llama-server使用WebUI
为了减轻三台Jetson的负载,选择在另一台电脑上使用Docker安装Open WebUI
docker run -d \
--name open-webui \
--restart unless-stopped \
-p 3000:8080 \
-v open-webui:/app/backend/data \
ghcr.io/open-webui/open-webui:main在Open WebUI管理员设置中连接Jetson模型:
URL:
http//{your_jetson1_ip_addr}:8080/v1
API Key:
留空Support/typora-user-images/image-20260809213254655.png
此时你将在模型列表里看见你的模型:

image-20260809213316965
在工作空间中创建模型包装:
Support/typora-user-images/image-20260809213450513.png
对话高级设置中,设置合理的推理参数:

image-20260809213558973
相关工具
除了htop,free -h等这些众所周知的,
jtop
glances
试错后的一些建议
Open Web UI会在聊天请求中自动附加约5k tokens的“内置工具”定义。如果你设置的上下文很短,强烈建议:
全局关闭
builtin_tools关闭标题、标签、追问、搜索查询等后台生成任务
关闭记忆系统提示词注入
Enjoy it!
Support/typora-user-images/image-20260809220629636.png