Google 提供的 Android 端上大模型组件:MediaPipe LLM 介绍

概述

大家好,最近被 Gemini 2.0 "狙击 OpenAI" 的消息刷屏,让我对 Google 的大模型技术有了新的认识,同时也好奇,作为 Google 的亲儿子,Android 上有没有什么比较好用的端上大模型库呢?经过一番学习,最后发现了适用范围最广的 MediaPipe LLM!

很多人可能听说过 MediaPipe,但不清楚这个 MediaPipe LLM 和 MediaPipe 什么关系。

简单的讲,MediaPipe 是 Google 开发的一个开源框架,用于构建跨平台的计算机视觉和机器学习解决方案。它支持完整的机器学习管道,并允许在设备端运行大型模型,从而减少对网络的依赖并提高响应速度。

而 MediaPipe LLM 是 MediaPipe 中专门用于集成和使用大语言模型 (LLM) 的一个模块或组件。它旨在将 LLM 的强大能力引入到多媒体处理流水线中。它特别优化了在设备端运行大型模型的能力,使得在 Android 设备上运行大型语言模型(LLMs)成为可能(与传统的小型设备模型相比,大语言模型通常拥有超过百倍的参数量,对内存和计算能力有更高的要求)。

重点来了!MediaPipe LLM 可以 使用 Google 的 Gemini 模型!包括最新的 Gemini 2.0!

在 Android 上使用 MediaPipe LLM

在 Android 上使用 MediaPipe LLM,主要包括这么几步:

环境和依赖设置

在你的 Android 项目的 build.gradle 文件中添加以下依赖:

gradle 复制代码
dependencies {
    // 使用最新版本的 MediaPipe LLM Inference API 库
    implementation 'com.google.mediapipe:tasks-genai:0.10.14'
}

对于 Android 12 (API 31) 或更高版本的设备,添加原生 OpenCL 库依赖,并在 AndroidManifest.xml 中添加以下标签:

xml 复制代码
<uses-native-library android:name="libOpenCL.so" android:required="false"/>
<uses-native-library android:name="libOpenCL-car.so" android:required="false"/>
<uses-native-library android:name="libOpenCL-pixel.so" android:required="false"/>

模型准备

模型下载

MediaPipe LLM Inference API 支持多种预训练的文本到文本语言模型。以下是如何下载和使用这些模型的步骤:

  1. 选择模型:确定你需要的模型类型,比如 Gemma、Phi 2、Falcon 或 Stable LM。

  2. 下载模型:从官方或第三方资源下载模型。对于 Gemma 模型,你可以在 Kaggle Models 上找到最新的版本。

  3. 模型转换:如果你使用的是非 Gemma 模型,可能需要将模型转换为 MediaPipe 兼容的格式。使用 MediaPipe 提供的 Python 包进行转换。

    ini 复制代码
    python
    from mediapipe.tasks.python.genai import converter
    
    config = converter.ConversionConfig(
        # 基础模型参数
        ...
        # LoRA 相关参数
        lora_ckpt=LORA_CKPT,
        lora_rank=LORA_RANK,
        lora_output_tflite_file=LORA_OUTPUT_TFLITE_FILE,
    )
    
    converter.convert_checkpoint(config)
  4. 推送模型到设备 :使用 adb 将模型文件推送到 Android 设备上。

    bash 复制代码
    bash
    adb shell rm -r /data/local/tmp/llm/
    adb shell mkdir -p /data/local/tmp/llm/
    adb push /path/to/model_version.bin /data/local/tmp/llm/

模型特点

  • Gemma 系列

    • Gemma-2 2B:Gemma 系列的最新版本,适用于多种文本生成任务,如问答、摘要和推理。
    • Gemma 2B:适用于各种文本生成任务,包括问答、摘要和推理。
    • Gemma 7B:具有更大的参数量,能够处理更复杂的语言任务,但需要更多的计算资源。
  • Phi-2

    • Phi-2:一个具有 2.7 亿参数的 Transformer 模型,最适合问答、聊天和代码格式任务。
  • Falcon-RW-1B

    • Falcon-RW-1B:一个 10 亿参数的因果解码器模型,训练于 3500 亿个 RefinedWeb 令牌。
  • StableLM-3B

    • StableLM-3B:一个 30 亿参数的解码器模型,预训练于 1 万亿个多样化的英文和代码数据集。

通过这些步骤和模型特点的介绍,你应该能够更好地理解如何为你的 Android 应用选择合适的模型,并有效地集成 MediaPipe LLM Inference API。这些模型的选择将取决于你的具体需求,包括应用场景、性能要求和资源限制。

创建任务

使用 createFromOptions() 函数初始化 MediaPipe LLM Inference 任务:

kotlin 复制代码
// 设置 LLM Inference 任务的配置选项
val options = LlmInferenceOptions.builder()
        .setModelPath('/data/local/tmp/llm/model_version.bin') // 模型路径
        .setMaxTokens(1000) // 最大令牌数
        .setTopK(40) // 令牌生成时考虑的候选数量
        .setTemperature(0.8) // 生成时引入的随机性程度
        .setRandomSeed(101) // 文本生成时使用的随机种子
        .build()

// 创建 LLM Inference 任务实例
val llmInference = LlmInference.createFromOptions(context, options)

运行任务

准备输入数据(prompt),并使用 generateResponse() 方法生成响应:

kotlin 复制代码
val inputPrompt = "Compose an email to remind Brett of lunch plans at noon on Saturday."
val result = llmInference.generateResponse(inputPrompt)
logger.atInfo().log("result: $result")

如果想要异步流式生成,可以使用 generateResponseAsync()

scss 复制代码
val options = LlmInference.LlmInferenceOptions.builder()
  ...
  .setResultListener { partialResult, done ->
    logger.atInfo().log("partial result: $partialResult")  //这里返回结果
  }
  .build()

llmInference.generateResponseAsync(inputPrompt)

处理和显示结果

LLM Inference API 返回 LlmInferenceResult,其中包含生成的响应文本。你可以如下处理和显示结果:

kotlin 复制代码
// 假设 result 是 LlmInferenceResult 对象
val responseText = result.responseText
// 将响应文本显示在 UI 上
textView.text = responseText

总结

OK,这就是 MediaPipe LLM 的基本介绍,使用起来还是非常方便的!

希望通过这篇文章可以让你对如何在端上使用 Google 大模型有更多的认识。

如果想直接参考代码,可以下载官方提供的案例:

bash 复制代码
git clone https://github.com/google-ai-edge/mediapipe-samples

如果想了解更多 Gemini on Android 的信息,推荐叶老师的这个视频,讲解的很清晰:Gemini on Android:打开移动设备的AI新世界

时代的车轮滚滚向前,我们必须向前(AI)看!

相关推荐
牧子川7 小时前
009-Transformer-Architecture
人工智能·深度学习·transformer
covco7 小时前
矩阵管理系统指南:拆解星链引擎的架构设计与全链路落地实践
大数据·人工智能·矩阵
沪漂阿龙7 小时前
AI大模型面试题:支持向量机是什么?间隔最大化、软间隔、核函数、LinearSVC 全面拆解
人工智能·算法·支持向量机
lifewange7 小时前
AI编写测试用例工具介绍
人工智能·测试用例
陕西字符7 小时前
2026 西安 豆包获客优化技术深度解析:企来客科技 AI 全域获客系统测评
大数据·人工智能
掘金安东尼7 小时前
GGUF、GPTQ、AWQ、EXL2、MLX、VMLX...运行大模型,为什么会有这么多格式?
人工智能
新知图书7 小时前
市场分析报告自动化生成(使用千问)
人工智能·ai助手·千问·高效办公
无心水7 小时前
【Hermes:安全、权限与生产环境】38、Hermes Agent 安全四层纵深:最小权限原则从理论到落地的完全指南
人工智能·安全·mcp协议·openclaw·养龙虾·hermes·honcho
赏金术士7 小时前
Kotlin 习题集 · 高级篇
android·开发语言·kotlin
旦莫7 小时前
AI驱动的纯视觉自动化测试:知识库里应该积累什么知识内容
人工智能·python·测试开发·pytest·ai测试