llama.cpp + RPC 实践

2 小时前
1

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

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:
留空
image-20260809213254655

Support/typora-user-images/image-20260809213254655.png

此时你将在模型列表里看见你的模型:

image-20260809213316965

image-20260809213316965

在工作空间中创建模型包装:

image-20260809213450513

Support/typora-user-images/image-20260809213450513.png

对话高级设置中,设置合理的推理参数:

image-20260809213558973

image-20260809213558973

相关工具

除了htop,free -h等这些众所周知的,

jtop

glances

试错后的一些建议

Open Web UI会在聊天请求中自动附加约5k tokens的“内置工具”定义。如果你设置的上下文很短,强烈建议:

  • 全局关闭 builtin_tools

  • 关闭标题、标签、追问、搜索查询等后台生成任务

  • 关闭记忆系统提示词注入

Enjoy it!

image-20260809220629636

Support/typora-user-images/image-20260809220629636.png

使用社交账号登录

  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...