SentencePiece android ndk编译

2023-11-10 14:59

本文主要是介绍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

这篇关于SentencePiece android ndk编译的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/383435

相关文章

Android实现图片浏览功能的示例详解(附带源码)

《Android实现图片浏览功能的示例详解(附带源码)》在许多应用中,都需要展示图片并支持用户进行浏览,本文主要为大家介绍了如何通过Android实现图片浏览功能,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

在Android中使用WebView在线查看PDF文件的方法示例

《在Android中使用WebView在线查看PDF文件的方法示例》在Android应用开发中,有时我们需要在客户端展示PDF文件,以便用户可以阅读或交互,:本文主要介绍在Android中使用We... 目录简介:1. WebView组件介绍2. 在androidManifest.XML中添加Interne

Android协程高级用法大全

《Android协程高级用法大全》这篇文章给大家介绍Android协程高级用法大全,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友跟随小编一起学习吧... 目录1️⃣ 协程作用域(CoroutineScope)与生命周期绑定Activity/Fragment 中手

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

java使用protobuf-maven-plugin的插件编译proto文件详解

《java使用protobuf-maven-plugin的插件编译proto文件详解》:本文主要介绍java使用protobuf-maven-plugin的插件编译proto文件,具有很好的参考价... 目录protobuf文件作为数据传输和存储的协议主要介绍在Java使用maven编译proto文件的插件

Android ClassLoader加载机制详解

《AndroidClassLoader加载机制详解》Android的ClassLoader负责加载.dex文件,基于双亲委派模型,支持热修复和插件化,需注意类冲突、内存泄漏和兼容性问题,本文给大家介... 目录一、ClassLoader概述1.1 类加载的基本概念1.2 android与Java Class

Visual Studio 2022 编译C++20代码的图文步骤

《VisualStudio2022编译C++20代码的图文步骤》在VisualStudio中启用C++20import功能,需设置语言标准为ISOC++20,开启扫描源查找模块依赖及实验性标... 默认创建Visual Studio桌面控制台项目代码包含C++20的import方法。右键项目的属性: