上一篇文章 【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:
4.总结
S1的CPU具备4个A76最大频率2.4G,CPU中暂无法流畅的运行2B模型,CPU上暂不具备大模型实际商用的条件,而使用NPU是更优的选项。