cfx · 9月5日 · 陕西

【SiRiderS1芯擎工业开发板测评】CPU中运行大模型:gemma-2B

上一篇文章 【SiRiderS1芯擎工业开发板测评】开箱体验:S1配套NPU工具链测评 ,我们已经安装好了交叉编译工具链,gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu
本文尝试通过CPU方式运行gemma-2B。

预置条件:
按照上篇文章(https://aijishu.com/a/1060000...),正确配置ubuntu开发环境

1.推理框架下载和编译
推理框架我们选择gemma.cpp,当然你也可以选择llama.cpp

git clone https://github.com/google/gem... -b v0.1.2 gemma.cpp-v0.1.2

执行编译
cd
mkdir build_arm && cd build_arm
export Linux_Tool_ROOT="/opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin"
cmake -DCMAKE_C_COMPILER="${Linux_Tool_ROOT}/aarch64-linux-gnu-gcc" \

  -DCMAKE_CXX_COMPILER="${Linux_Tool_ROOT}/aarch64-linux-gnu-g++" \
  ..

很不幸,编译失败,失败原因可知gcc-linaro-7.5.0对c++17支持还不完整,无法正确的支持std::filesystem
我们可以修改gemma.cpp文件后,再进行一次编译,修改后内容为:
// #include <experimental/filesystem>
// if (!std::experimental::filesystem::exists(model.path) &&
// !std::experimental::filesystem::exists(cache.path))

make -j8 gemma

2.模型下载
https://www.kaggle.com/models...

Gemma C++页签下载,需要登录谷歌账户解释许可协议,例如下载:2b-it-sfp
解压后获得:2b-it-sfp.sbs tokenizer.spm

3.上板运行
将gemma、libsentencepiece.so、tokenizer.spm和2b-it-sfp.sbs通过scp拷贝到单板上,并创建软链接:
ln -s libsentencepiece.so libsentencepiece.so.0

export LD_LIBRARY_PATH=./
./gemma --tokenizer tokenizer.spm --model 2b-it --compressed_weights 2b-it-sfp.sbs

可以看到运行效果如下,4线程生成token速度约为3 tokens/s:
gemma-2b.png

4.总结
S1的CPU具备4个A76最大频率2.4G,CPU中暂无法流畅的运行2B模型,CPU上暂不具备大模型实际商用的条件,而使用NPU是更优的选项。

推荐阅读
npu
关注数
1
内容数
1
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息