当前位置: 首页 > article >正文

Android APP 集成本地大模型 LLM

3cc1baea8c8b21fdd29aff2a4ed2c785.jpeg

这篇文章介绍如何在Android项目中集成大模型LLM,并展示大模型 text-to-text 结果。主要依赖如下2项:

  • MediaPipe

  • Gemma 2B

    6b071faf3f0cfe31b8014e3cff761081.gif

    MediaPipe

Google 在2017年发布了 TensorFlow Lite, 它是一个用于在Mobile和IoT上进行 ML 推断的轻量级框架。主要用于将 TensorFlow 模型转换为适用于移动设备(Android、IOS)的轻量级模型格式。

在2019年,Google 又发布了MediaPipe。使得Android项目集成TensorFlow Lite变得更加容易。MediaPipe主要提供了一系列开源库、工具,用来快速在上层 Android App 中集成 AI 和ML 能力。

目前 Mediapipe 能集成调用的大模型有:Gemma 2B, Phi-2, Falcon-RW-1B, 和 StableLM-3B。本篇文章将使用 Gemma 2B 做实例。

74d9d7dd1780e5cf0256638a346266d4.gif

Gemma 2B

Gemma 2B 是谷歌开发的一款轻量级AI模型,提供两种规模:2B和7B参数。Gemma 2B 提供 text-to-text 的功能,但是目前只能处理英语语言任务。可以通过如下链接下载模型:

https://www.kaggle.com/models/google/gemma/tfLite/

注意:需要下载 TFLit 版本,如下图

38ba6843aa41bb84b7e823bd96505d2a.png

 
下载完之后,需要先将解压后的模型文件保存到Android设备存储中。 可以使用如下 ADB 命令:

adb shell rm -r /data/local/tmp/llm/adb shell mkdir -p /data/local/tmp/llm/ adb push gemma-2b-it-gpu-int4.bin /data/local/tmp/llm/gemma2b.bin

ac484af70d9c32841432ee82e72d59a5.gif

Andorid 代码

添加 MediaPipe依赖

在 app module 的 build.gradle 中添加如下依赖:

implementation("com.google.mediapipe:tasks-genai:0.10.14")

实现 LocalLLMTask 类

实现Class LocalLLMTask类,用来完成本地模型的加载和推理。代码如下:

public class LocalLLMTask {    private static final String TAG = LocalLLMTask.class.getSimpleName();    private static final String MODEL_PATH = "/data/local/tmp/llm/gemma2b-gpu.bin";    private static LocalLLMTask mLLMTask;    private final LlmInference mLlmInference;
    public LocalLLMTask(Context context) {        LlmInference.LlmInferenceOptions options = LlmInference.LlmInferenceOptions.builder()			.setModelPath(MODEL_PATH)			.setMaxTokens(2048)			.setTopK(50)			.setTemperature(0.7f)			.setRandomSeed(1)			.setResultListener((partialResult, done) ->                          Log.i(TAG, "LocalLLMTask, partialResult: " +  partialResult)).build();
		mLlmInference = LlmInference.createFromOptions(context, options);	}
	public static LocalLLMTask getInstance(Context context) {		if (mLLMTask == null) {			mLLMTask = new LocalLLMTask(context);		}		return mLLMTask;	}
	public void generateResponse(String prompt) {		if (mLlmInference != null) {			Log.i(TAG, "generateResponse, prompt: " + prompt);			String result = mLlmInference.generateResponse(prompt);			Log.i(TAG, "generateResponse, result: " + result);		}	}}

调用本地模型获取结果

在 MainActivity 中直接执行 LlmInference的 generateResponse 方法,如下:

LocalLLMTask.getInstance(MainActivity.this).generateResponse("tell me 7 wonders of the world");

传入的 prompt 是 "tell me 7 wonders of the world",来看一下本地大模型是否能够给出世界7大奇迹的结果。最终打印结果如下:

c211c85da3fa7e971f69e7227c98382b.png

如果你喜欢本文
长按二维码关注

http://www.kler.cn/a/453561.html

相关文章:

  • Linux运维常见命令
  • 后端开发如何高效使用 Apifox?
  • 大模型应用技术系列(三): 深入理解大模型应用中的Cache:GPTCache
  • InnoDB引擎的内存结构
  • 操作系统导论读书笔记
  • Arduino驱动DS18B20测量环境温度
  • datax ubuntu安装
  • 华为 AI Agent:企业内部管理的智能变革引擎(11/30)
  • E-commerce .net+React(一)——项目初始化
  • Mac上Stable Diffusion的环境搭建(还算比较简单)
  • DevOps 中的 AI:测试始终是一个关键领域
  • 【ES6复习笔记】Promise对象详解(12)
  • cad学习 day7-9
  • 数据结构 C/C++(实验六:查找)
  • 35. TCP网络编程
  • 2024国赛A题第一问
  • 【ubuntu基础软件安装】
  • Weex购物车长列表横滑操作优化“编年史”
  • 成本高,周期长,家电行业如何突破重实验轻仿真的瓶颈?
  • 整合语音命令与大型语言模型 (LLM) 及传感器在人类和机器人之间进行有效的自然语言交流 以简化装配操作并提高生产车间的安全性
  • Redis可视化工具 RDM mac安装使用
  • 【C语言】判断素数
  • 电商平台能挡住恶意网络爬虫的攻击吗?
  • 一键自动创建删除磁盘的逻辑卷信息
  • 大模型日报 2024-12-20
  • 完成SSH连接与端口映射并运行hello_world.py