Skip to main content
您可以使用 llama.cpp 在 Dragonwing 开发板上运行多种大语言模型(LLM)和视觉语言模型(VLM)。llama.cpp 在 Dragonwing 设备上支持三种后端:CPU、GPU(通过 OpenCL)和 NPU(通过 Hexagon HTP 后端)。您也可以通过 GENIE 在 NPU 上运行部分模型。

选择后端

  • CPU:无需特殊驱动或额外的构建标志。可作为与 GPU 或 NPU 性能对比的基准。
  • GPU(OpenCL):使用 OpenCL 后端构建 llama.cpp,将模型层卸载到 Adreno GPU。同一构建也可以通过跳过 GPU 卸载在 CPU 上运行。
  • NPU(Hexagon HTP):使用 Snapdragon 工具链容器构建 llama.cpp,将模型层卸载到 Hexagon HTP 设备(HTP0),在受支持的模型上获得最佳性能。

概述

使用 Hexagon HTP 后端为 Dragonwing 设备构建 llama.cpp,然后在 HTP0 上运行 GGUF 大语言模型。
这些说明侧重于将 Hexagon HTP 设备公开为 HTP0 的 Snapdragon 和 Dragonwing llama.cpp 构建。这与 GPU 选项卡中的 OpenCL GPU 工作流不同。

前提条件

在开始之前,请确保您已:
  • 完成 Dragonwing 设备的首次设置:
  • 可以通过 SSH 或直接连接的显示器、键盘和鼠标访问设备。
    • 上面链接的设置指南包含网络、串行控制台访问、显示设置和 SSH 访问的说明。
  • 在设备上安装了所需的 Dragonwing 软件包:
  • 在构建主机上安装了 Docker。
  • 有足够的可用空间用于构建输出和模型。每个模型请预留数 GB 空间。
所需软件包的安装过程会安装 QNN 运行时和工具,包括 llama.cpp 加速推理所需的 libqnn-devqnn-tools

准备构建主机

在构建主机上,克隆 llama.cpp 或更新现有的检出。
如果您需要可复现的构建,请记录所构建的提交:

使用 Snapdragon 工具链容器构建 llama.cpp

为 Dragonwing 构建 llama.cpp 最简单的方法是使用 Snapdragon ARM64 Linux 工具链容器。该容器包含 Snapdragon 预设所需的 ARM64 交叉编译器、CMake、OpenCL SDK 和 Hexagon SDK 组件。下面的 Docker 命令显式请求 linux/amd64 镜像。从 llama.cpp 检出目录的根目录启动容器:
在容器内,配置并构建 llama.cpp:
创建可安装的软件包:
软件包完成后退出容器:
软件包归档文件现在位于主机上的以下位置:

当上游 llama.cpp 变更时重新构建

llama.cpp 变更频繁。要使用最新的上游代码重新构建,请从主机检出目录重复以下更新和构建流程:
然后,在容器内:
如果您要测试某个分支、标签或本地 llama.cpp 改动,请在运行 Docker 构建命令之前先检出该源码。

将软件包复制到 Dragonwing 设备

请将 ubuntu@DEVICE_IP 替换为您的 SSH 用户和目标 IP 地址。
登录目标设备:
解压软件包:
为当前 shell 设置运行时库路径:
验证软件包可以运行:
列出可用的 llama.cpp 设备:
预期输出包括:

将其设为设备上的默认 llama.cpp 安装

打包的二进制文件需要 LD_LIBRARY_PATHADSP_LIBRARY_PATH 才能找到打包的 llama.cpp 和 Hexagon 后端库。将其设为默认安装的最安全方法是把软件包移动到 /opt 并在 /usr/local/bin 中创建包装命令。在 Dragonwing 设备上运行以下命令:
创建共享环境文件:
llama-clillama-server 创建包装命令:
确认默认命令现在解析到这些包装脚本:
预期路径:
PATH 中,/usr/local/bin 通常排在 /usr/bin 之前,因此这些包装脚本会成为默认命令,而无需替换系统软件包。

下载模型

llama.cpp 使用 GGUF 格式的模型。一个小型的 instruct 模型很适合作为首次测试。在 Dragonwing 设备上创建模型目录:
下载 Llama 3.2 3B instruct GGUF 模型:
模型的支持情况和性能因架构、量化方式、上下文长度和 llama.cpp 提交而异。如果您发现某个模型或量化方式在 Dragonwing 设备上运行得特别好,请与社区分享。

在 HTP0 上运行您的第一个提示词

运行 llama-cli 并将模型层卸载到 Hexagon HTP 设备:
常用选项:
  • --device HTP0 选择 Hexagon HTP 后端。
  • -ngl 99 要求 llama.cpp 将模型层卸载到所选设备。
  • -m 指向您的 GGUF 模型文件。
  • -p 传入用于单次提示词测试的提示词。

启动 llama-server

llama-server 提供一个本地 Web UI 和一个兼容 OpenAI 的 API。在 Dragonwing 设备上启动服务器:
查找设备 IP 地址:
在同一网络中的另一台机器上,打开:
您也可以使用 curl 测试 API:

重新构建后更新默认安装

在重新构建并将新的 pkg-snapdragon.zip 复制到设备后,更新 /opt/llama.cpp-snapdragon:
除非您更改安装路径,否则无需重新创建 /usr/local/bin 中的包装命令。

故障排除

error while loading shared libraries如果直接从软件包目录运行二进制文件,请先设置库路径:
如果您使用的是默认安装的包装脚本,请确认正在使用包装脚本:
它应输出 /usr/local/bin/llama-cliHTP0 未出现确认已安装所需的 Dragonwing 软件包,尤其是 libqnn-devqnn-tools。然后再次检查设备:
还需确认软件包中包含 Hexagon 后端库:
命令使用了错误的 llama.cpp 二进制文件检查命令解析:
如果有其他路径排在 /usr/local/bin 之前,请更新您的 PATH,或显式调用 /usr/local/bin/llama-cli