飞凌嵌入式
直播中

aquamanfeng

4年用户 42经验值
擅长:嵌入式技术
私信 关注
[技术]

[技术] 【飞凌嵌入式OK3576-C开发板体验】llama2.c部署

llama2.c 是一个用纯 C 语言实现的轻量级推理引擎,无需依赖任何第三方库即可高效地进行推理任务。与 llama.cpp 相比,其代码更加直观易懂,并且可以在 PC、嵌入式 Linux 乃至 MCU 上部署。以下是 llama2.c 在 OK3576 开发板上的部署步骤。

工程克隆

首先我们将源码克隆下来:https://github.com/karpathy/llama2.c.git

PC端测试

在克隆完源码后,下载 TinyStories 数据集上训练的 15M 参数模型(大小约为 60MB):

wget https://huggingface.co/karpathy/tinyllamas/resolve/main/stories15M.bin

然后编译并运行程序:

make run
./run stories15M.bin

运行结果如下:

可以看到,大概每秒能够生成64个token,速度非常快。

交叉编译

为了使程序能够在 OK3576 开发板上运行,需要对 Makefile 进行适当修改,以指定正确的交叉编译工具链路径。在 Makefile 中找到以下行:

我们需要将Makefile文件中的CC修改为我们之前设置过的交叉编译工具链。

GCC_COMPILER_PATH=${CROSS_COMPILE}
CC = ${GCC_COMPILER_PATH}gcc

确保 CC变量正确设置了交叉编译器。接着,执行交叉编译:

make clean
make run

传输测试

完成交叉编译后,在当前目录下会产生一个可执行文件 run。将 run 文件、stories15M.bin 模型文件及 tokenizer.bin 文件复制到开发板上。

执行结果如下:

在开发板上执行 run 命令后,可以观察到大约每秒生成 40 个 token 的速度,这也显示出较高的性能。

此外,在运行程序时,可以通过命令行参数来对模型的行为进行精细控制。以下是几个常用的参数及其作用:

  • -t <temperature>:温度值。温度是用来控制模型输出的随机程度的一个参数。较高的温度值(如 1)会导致输出更加随机和不可预测,而较低的温度值(如 0.5)会使输出更加确定性和集中于高概率的选项。
  • -s <seed>:随机种子。这是一个用于初始化随机数生成器的整数值。设置相同的种子值可以使模型每次生成相同的序列,这对于调试和重现结果很有帮助。
  • -i "<prompt>":输入提示。这是用来引导模型生成文本的初始字符串或句子。模型将基于提供的提示开始生成后续文本。确保提供的提示清晰明确,以便模型能够更好地理解和扩展。

通过这些参数,用户可以根据自己的需求调整模型的行为,从而获得更加符合预期的输出结果。

更多回帖

发帖
×
20
完善资料,
赚取积分