交叉编译 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
- Tera Term
使用 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
使用 Tera Term 从宿主机(例如 Ubuntu)访问 Astra Machina 开发板。
按照访问 Machina 开发板教程中的步骤设置 Tera Term(链接到教程)。
完成 Tera Term 设置后,从此处获取你的 Astra Machina 开发板的 Inet 地址:
ifconfig eth0 | grep "inet addr"
然后,在 Machina 开发板的 home 目录下创建一个新的目录:
**root@sl1680:/home#** mkdir llama
现在,在你的开发系统的 Ubuntu 终端中,使用 scp 命令将你在步骤 1 中生成的二进制文件复制到 Machina 开发板:
scp main root@10.3.10.132:/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 仓库。
在下一个教程中,进一步了解如何运行视觉语言模型。