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

如果你喜欢本文
长按二维码关注
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值