跳到主要内容

交叉编译 llama.cpp

本教程将指导你如何为 Synaptics Astra™ Machina™ 交叉编译 llama.cpp 二进制文件(在主机上构建二进制文件以用于自定义)。

备注

本教程兼容所有 SL16xx 系列板卡。虽然推理性能可能不同,但操作步骤在所有处理器上是一致的。

此外,llama.cpp 并不限于 LLaMA 模型,它还支持 Phi3、Mistral、TinyLlama 等多种其他模型,是一款适用于多种机器学习应用的通用工具。

更多有关 llama.cpp 的详细信息,请访问 官方 GitHub 仓库

前置条件

如果你更倾向于直接在 Machina 开发板上原生编译二进制文件,请参考之前的教程:使用 llama.cpp 在 Astra 上运行 LLMs

对于交叉编译,请将你的宿主开发机设为 Ubuntu。在 Ubuntu 系统中,你首先需要搭建一个适用于 Astra Machina 开发板 的 Yocto 环境。为此,请从 Astra SDK 发布页面 获取预编译的工具链。

独立工具链 页面下载与你处理器对应的版本。在本教程中,我们使用的是 SL1680

下载完成后,在 Ubuntu 中打开终端并执行以下命令:

bash sl1680-poky-glibc-x86_64-astra-media-cortexa73-sl1680-toolchain-4.0.17.sh

现在运行以下命令激活环境:

. /opt/poky/4.0.17/environment-setup-cortexa73-poky-linux
提示

要检查环境是否已激活,可在 Ubuntu 终端运行以下命令:

echo $CC

步骤 1:为 llama.cpp 生成二进制文件

在 Ubuntu(宿主机)打开终端,并从 GitHub 克隆 llama.cpp 仓库:

git clone https://github.com/ggml-org/llama.cpp.git
cd llama.cpp

以下步骤将从源代码构建 llama-cli 二进制文件,并使用自定义链接器标志以确保兼容性,通过将已弃用的 -lstdc++fs 替换为 -lstdc++

生成的 llama-cli 二进制文件会位于 ~/build/bin/ 目录中。该二进制文件用于运行支持的模型,因此你需要将其复制到 Machina 开发板上。

步骤 2:设置 Astra Machina 开发板

使用 ADB 从宿主机(例如 Ubuntu)访问 Astra Machina 开发板。

按照访问 Machina 开发板教程中的步骤,设置 ADB

进入 ADB shell 后,在 Machina 开发板的 home 目录下创建一个新目录:

mkdir llama

现在,在你的开发系统中打开一个新的 Ubuntu 终端,并使用 push 命令将你在步骤 1 中生成的二进制文件复制到 Machina 开发板:

adb push ~/llama.cpp/build/bin/llama-cli /home/llama

将二进制文件复制到 Machina 开发板后,你需要通过以下命令为文件赋予执行权限:

chmod 777 main

步骤 3:下载 llama.cpp 支持的模型

你可以运行 llama.cpp GitHub 仓库中 Supported Models 部分所列的任何支持模型。

你可以从 Hugging Face 获取 TinyLlama 模型。在本教程中,我们将使用 TinyLlama 量化模型 tinyllama-1.1b-chat-v1.0.Q4_0.gguf,请将其下载到开发板上。

wget https://huggingface.co/TheBloke/TinyLlama-1.1B-Chat-v1.0-GGUF/resolve/main/tinyllama-1.1b-chat-v1.0.Q4_0.gguf

步骤 4:在 Machina 开发板上运行 llama.cpp

在模型下载完成且二进制文件构建完成后,现在你可以在 llama 文件夹中运行 TinyLlama 模型:

./llama-cli -m tinyllama-1.1b-chat-v1.0.Q4_0.gguf -p "Tell me about Synaptics Incorporated" -n 128

你的 Synaptics Astra 开发板输出应类似于:

.. ..

Synaptics Inc. Is a leading provider of touch controller solutions for the consumer, industrial, and enterprise markets. They specialize in touch controllers, sensors, and other technologies for advanced display and robotics applications.

Synaptics has a global presence, with operations in 30 countries and a workforce of 1,000 employees. They have a strong focus on innovation, with a portfolio of over 2,000 patents and patents pending.

Synaptics offers a wide range of touch controller solutions, including surface touch controllers

llama_perf_sampler_print: sampling time = 12.89 ms / 156 runs ( 0.08 ms per token, 12101.47 tokens per second) llama_perf_context_print: load time = 469.69 ms llama_perf_context_print: prompt eval time = 2417.15 ms / 28 tokens ( 86.33 ms per token, 11.58 tokens per second) llama_perf_context_print: eval time = 14311.09 ms / 127 runs ( 112.69 ms per token, 8.87 tokens per second) llama_perf_context_print: total time = 27692.10 ms / 155 tokens

恭喜

你已成功在你的 Astra Machina 开发板 上使用 llama.cpp 运行了 TinyLlama 模型。现在你可以尝试更多不同的模型,或将 llama.cpp 集成到你的项目中进行进一步探索。关于更多高级用法和选项,请参考 llama.cpp GitHub 仓库

在下一个教程中,进一步了解如何运行视觉语言模型。