SentencePiece android ndk编译

LLaMa等LLM语言模型一般使用SentencePiece tokenizer,在端侧部署需要编译和使用其c++版本。

在安卓平台使用NDK编译

CMakeLists.txt需要进行一些修改:

src/CMakeLists.txt如下位置加上log依赖,否则提示android log相关符号不存在。

此外,入口处的CMakeLists.txt加上

set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -s")

可以使得编译后的so大小显著降低,从16.8MB降低到1.9MB。

build.sh参考

#!/bin/bash
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"# please set env SDK_ROOT, NDK_ROOT, ANDROID_ABI, MINSDKVERSION# export SDK_ROOT=/root/codes/cmdline-tools/sdk/
# export NDK_ROOT=/root/codes/cmdline-tools/sdk//ndk/24.0.8215888/mkdir -p ${SCRIPT_DIR}/build
cd ${SCRIPT_DIR}/buildif [ -z ${ANDROID_ABI} ] ; thenANDROID_ABI=arm64-v8a
fi
if [ -z ${MINSDKVERSION} ] ; thenMINSDKVERSION=21
fiecho "SDK_ROOT:" $SDK_ROOT
echo "NDK_ROOT:" $NDK_ROOT
echo "ANDROID_ABI:" $ANDROID_ABI
echo "MINSDKVERSION:" $MINSDKVERSION${SDK_ROOT}/cmake/3.18.1/bin/cmake \-DCMAKE_BUILD_TYPE=Release \-DCMAKE_TOOLCHAIN_FILE=${NDK_ROOT}/build/cmake/android.toolchain.cmake \-DANDROID_ABI=${ANDROID_ABI} \-DANDROID_NDK=${NDK_ROOT} \-DANDROID_PLATFORM=android-${MINSDKVERSION} \-DCMAKE_ANDROID_ARCH_ABI=${ANDROID_ABI} \-DCMAKE_ANDROID_NDK=${NDK_ROOT} \-DCMAKE_MAKE_PROGRAM=${SDK_ROOT}/cmake/3.18.1/bin/ninja \-DCMAKE_SYSTEM_NAME=Android \-DCMAKE_SYSTEM_VERSION=${MINSDKVERSION} \-DANDROID_STL=c++_static \-GNinja \..
if [ $? -ne 0 ]; thenecho "ERROR: cmake $TARGET_NAME failed"exit 1
fi${SDK_ROOT}/cmake/3.18.1/bin/ninja
if [ $? -ne 0 ]; thenecho "ERROR: build $TARGET_NAME failed"exit 1
fi

C++API使用方法

https://github.com/google/sentencepiece/blob/master/doc/api.md

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/14040.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RNN架构解析——LSTM模型

目录 LSTMLSTM内部结构图 Bi-LSTM实现 优点和缺点 LSTM LSTM内部结构图 Bi-LSTM 实现 优点和缺点

解决IDEA的git非常缓慢方法

解决IDEA的git非常缓慢方法 xxxx\IDEA2021.1.3\IntelliJ IDEA 2021.1.3\bin

transformer代码注解

其中代码均来自李沐老师的动手学pytorch中。 class PositionWiseFFN(nn.Module):ffn_num_inputs 4ffn_num_hiddens 4ffn_num_outputs 8def __init__(self,ffn_num_inputs,ffn_num_hiddens,ffn_num_outputs):super(PositionWiseFFN,self).__init__()self.dense1 nn.Linear(ffn…

微服务项目,maven无法加载其他服务依赖

微服务项目,导入了工具类工程,但是一直报错,没有该类, 检查maven 这里的Maven的版本与idea版本不匹配可能是导致依赖加载失败的最重要原因 检查maven配置,我这是原来的maven,home 修改之后,就不报错了

Autosar通信实战系列02-CAN报文发送周期测试脚本开发及周期不准优化

本文框架 前言1. CAN发送报文的周期测试脚本开发2. 发送报文周期不准的可能原因及优化策略2.1 发送报文的控制逻辑2.2 送报文周期不准的可能原因及优化策略前言 在本系列笔者将结合工作中对通信实战部分的应用经验进一步介绍常用,包括但不限于通信各模块的开发教程,代码逻辑…

Webpack5 DefinePlugin的作用

在Webpack 5中,DefinePlugin是一个插件,用于创建全局常量,这些常量可以在编译过程中被引用。它的作用是允许开发人员在代码中定义全局变量,这些变量在构建过程中将被替换为其对应的值。 DefinePlugin并不是必须的,但它…

【ArcGIS Pro二次开发】(53):村规制表、制图【福建省】

这篇算是村规入库的一个延续。 村庄规划中有一些图纸是需要严格按照规范制图,或形成一定规范格式的。 这些图纸的制作基本算是机械式的工作,可以用工具来代替人工。 一、要实现的功能 如上图所示,在【村庄规划】组,新增了两个工…

【雕爷学编程】MicroPython动手做(16)——掌控板之图片图像显示3

知识点:什么是掌控板? 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片,支持WiFi和蓝牙双模通信,可作为物联网节点,实现物联网应用。同时掌控板上集成了OLED…

vue3+vite——打测试包+正式包+本地预览打包后的文件——基础积累

最近在学习vue3vite的内容,发现vite和webpack类似,下面将区别及使用方法做一下记录: 1.vite添加环境配置文件 ... ├── src ... ├── .env # 通用环境变量配置 ├── .env.development …

文件操作fread()

fread 是 C 语言中用于从文件中读取数据的函数。它可以读取指定数量的数据项到内存中。c size_t fread(void *ptr, size_t size, size_t count, FILE *stream);ptr:指向接收数据的内存块的指针。size:每个数据项的字节数。count:要读取的数据…

Gitee创建分支

在使用Gitee进行代码托管时,分支是一个非常重要的概念。它可以让我们在不同的开发阶段、不同的团队成员之间协作开发,提高团队工作效率。因此,下面将介绍如何在Gitee仓库中建立分支。 一、在Gitee上创建新的分支 在讲解如何在Gitee上创建新…

快问快答JS面向对象面试题

1、说说你对闭包的理解 使用闭包主要是为了设计私有的方法和变量。闭包的优点是可以避免全局变量的污染,缺点是闭包会常驻内存,会增大内存使用量,使用不当很容易造成内存泄露。在js中,函数即闭包,只有函数才会产生作用…

机器学习:提取问题答案

模型BERT 任务:提取问题和答案 问题的起始位置和结束位置。 数据集 数据集 DRCDODSQA 先分词,然后tokenize 文章长度是不同的,bert的token的长度有限制,一般是512, self-attention的计算量是 O ( n 2 ) O(n^2) O(n…

opencv+ffmpeg环境(ubuntu)搭建全面详解

一.先讲讲opencv和ffmpeg之间的关系 1.1它们之间的联系 我们知道opencv主要是用来做图像处理的,但也包含视频解码的功能,而在视频解码部分的功能opencv是使用了ffmpeg。所以它们都是可以处理图像和视频的编解码,我个人感觉两个的侧重点不一…

无涯教程-jQuery - Selectable选择函数

选择能力功能可与JqueryUI中的交互一起使用。此功能可在任何DOM元素上启用选择能力功能。用光标绘制一个框以选择项目。按住Ctrl键可进行多个不相邻的选择。 Select able - 语法 $( "#selectable" ).selectable(); Select able - 示例 以下是一个简单的示例&…

目标检测应用场景—数据集【NO.14】行人跌倒测试

写在前面:数据集对应应用场景,不同的应用场景有不同的检测难点以及对应改进方法,本系列整理汇总领域内的数据集,方便大家下载数据集,若无法下载可关注后私信领取。关注免费领取整理好的数据集资料!今天分享…

Android10 Settings系列(三)根据需求动态添加删除一级菜单、二级菜单的设置项

一 、背景 当时遇到定制需求,需要根据实际需要隐藏Settings的菜单项,于是开始了寻找方法 二 、准备工作 在看了一下源码,经过尝试后,确认生效后,就简单说明一下Settings中布局中主要组成元素 Settings中的菜单项是由 PreferenceScreen 和Preference组成的。其中Prefer…

shardingsphere读写分离配置

注: 如果是升级之前的单库单表,要将之前的 数据库接池 druid-spring-boot-starter 注释掉,换成 druid,否则无法连接数据库。 原因: 因为数据连接池的starter(比如druid)可能会先加载并且其创…

DevOps(三)

CD(二) 1. 整体流程2. 环境准备1. jenkins安装2. 编译安装git3. docker安装4. docker-compose安装5. sonarqube安装6. harbor安装7. gitlab私服8. maven安装9. Nexus部署10. K8s部署3. 安装java及编写代码3.1 安装java3.2 安装IntelliJ IDEA3.3 安装tomcat3.4 安装maven3.5 c…

【LLM】大语言模型学习之LLAMA 2:Open Foundation and Fine-Tuned Chat Model

大语言模型学习之LLAMA 2:Open Foundation and Fine-Tuned Chat Model 快速了解预训练预训练模型评估微调有监督微调(SFT)人类反馈的强化学习(RLHF)RLHF结果局限性安全性预训练的安全性安全微调上手就干使用登记代码下载获取模型转换模型搭建Text-Generation-WebUI分发模型…