mlc-llm 如何使用Lava模型构建Android演示应用程序?

hlswsv35  于 6个月前  发布在  Android
关注(0)|答案(8)|浏览(100)

❓ 一般性问题

你好,
我正在尝试使用本地定制的(非在HuggingFace上)llava模型构建Android应用。我参考了以下指南:
https://llm.mlc.ai/docs/compilation/convert_weights.html#clone-from-hf-and-convert-weight
https://llm.mlc.ai/docs/compilation/compile_models.html#compile-command-specification
https://llm.mlc.ai/docs/deploy/android.html#step-3-build-android-app
我成功地构建了Android apk并按照建议的命令推送了它。主页面没有问题,但是当我点击聊天按钮开始时,出现了错误。

2024-06-12 14:56:45.039 14318-18830 AndroidRuntime          ai.mlc.mlcchat                       E  FATAL EXCEPTION: Thread-5
                                                                                                    Process: ai.mlc.mlcchat, PID: 14318
                                                                                                    org.apache.tvm.Base$TVMError: InternalError: Check failed: (unicode_codepoint >= 0 && unicode_codepoint < static_cast<int>(unicode_to_byte_map.size())) is false: 
                                                                                                    Stack trace:
                                                                                                      File "/hostpc/dir/mlc-llm/cpp/tokenizers/tokenizers.cc", line 360
                                                                                                    
                                                                                                    	at org.apache.tvm.Base.checkCall(Base.java:173)
                                                                                                    	at org.apache.tvm.Function.invoke(Function.java:130)
                                                                                                    	at ai.mlc.mlcllm.JSONFFIEngine.runBackgroundLoop(JSONFFIEngine.java:64)
                                                                                                    	at ai.mlc.mlcllm.MLCEngine$backgroundWorker$1.invoke(MLCEngine.kt:42)
                                                                                                    	at ai.mlc.mlcllm.MLCEngine$backgroundWorker$1.invoke(MLCEngine.kt:40)
                                                                                                    	at ai.mlc.mlcllm.BackgroundWorker$start$1.invoke(MLCEngine.kt:19)
                                                                                                    	at ai.mlc.mlcllm.BackgroundWorker$start$1.invoke(MLCEngine.kt:18)
                                                                                                    	at kotlin.concurrent.ThreadsKt$thread$thread$1.run(Thread.kt:30)

有解决这个错误的解决方案吗?
谢谢。

a8jjtwal

a8jjtwal1#

你好@emphasis10
我想知道你定制的LLava与标准版本之间的区别。我已经成功地在三星S23上运行了LLava。顺便说一下,Android目前只支持文本输入,尚未支持图像输入,因此LLava目前只能用于基于文本的对话。
以下是详细信息:
LLava源代码:https://huggingface.co/llava-hf/llava-1.5-7b-hf
量化:q4f16_1
MLC配置:
{
"model": "HF://mengshyu/llava-1.5-7b-hf-q4f16_1-MLC",
"estimated_vram_bytes": 4679979417,
"model_id": "llava-1.5-7b-hf-q4f16_1-MLC",
"overrides": {
"context_window_size": 768,
"prefill_chunk_size": 256
}
}

m0rkklqb

m0rkklqb2#

你好,你能在Android演示应用中添加Llava模型吗?

osh3o9ms

osh3o9ms3#

我曾经也遇到过同样的问题。你解决了这个问题吗?
我通过编辑mlc-llm的tokenzier.cc代码大约360行,使得索引在大于或等于数组大小时强制变为{array_size} - 1,并从源代码构建和安装mlc-llm
经过这个修改,应用程序可以正常工作,并生成提示文本。但是,我认为这可能会产生一些副作用。

jk9hmnmh

jk9hmnmh4#

你好@emphasis10
我想知道你定制的LLava与标准版本之间的区别。我已经成功地在三星S23上运行了LLava。顺便说一下,Android目前只支持文本输入,尚未支持图像输入,因此LLava目前只能用于基于文本的对话。
以下是详细信息:
LLava源代码:https://huggingface.co/llava-hf/llava-1.5-7b-hf
量化:q4f16_1
MLC配置:{ "model": "HF://mengshyu/llava-1.5-7b-hf-q4f16_1-MLC", "estimated_vram_bytes": 4679979417, "model_id": "llava-1.5-7b-hf-q4f16_1-MLC", "overrides": { "context_window_size": 768, "prefill_chunk_size": 256 } }
@mengshyu如果我想要在用LLava模型运行的MLCChat应用程序中输入图像,我应该怎么做?我应该编辑哪部分代码?你能给我一些提示吗?

erhoui1w

erhoui1w5#

你好,你能在Android演示应用中添加Llava模型吗?
我们目前没有计划将Llava添加到默认模型列表中,主要是因为它目前不支持图像输入。

wd2eg0qa

wd2eg0qa6#

你好@emphasis10
我想了解一下你定制的LLava与标准版本之间的区别。我已经在三星S23上成功运行了LLava。顺便说一下,Android目前只支持文本输入,尚未支持图像输入,因此LLava目前只能用于基于文本的对话。
以下是详细信息:
LLava源代码:https://huggingface.co/llava-hf/llava-1.5-7b-hf
量化:q4f16_1
MLC配置:{ "model": "HF://mengshyu/llava-1.5-7b-hf-q4f16_1-MLC", "estimated_vram_bytes": 4679979417, "model_id": "llava-1.5-7b-hf-q4f16_1-MLC", "overrides": { "context_window_size": 768, "prefill_chunk_size": 256 } }
@mengshyu如果我想要在运行LLava模型的MLCChat应用程序中输入图像,我应该怎么做?我需要编辑哪部分代码?你能给我一些提示吗?
@dkjung我认为有两个部分需要修改以支持Android上的图像输入

  1. 在UI界面上添加一个相机按钮,允许用户拍照或从相册中选择照片。
  2. Llava的图像预处理是通过Python API完成的。我们需要重写它,使其能够在Android上执行
    https://github.com/mlc-ai/mlc-llm/blob/main/python/mlc_llm/serve/data.py#L86
    我们目前正在努力支持Android上的phi3-vision,但LLava和phi3-vision在图像预处理方法和配置上有所不同。因此,还需要进行一些进一步的调整。
o75abkj4

o75abkj47#

我没有使用mlc_llm包进行处理,而是直接将其转换为模型文件并放置在app.mlc文件夹中。虽然这需要一些手动操作,但可能会更简单。我建议你先使用简单且笨拙的方法。然后,通过命令将模型文件放入APK中

bsxbgnwa

bsxbgnwa8#

你好@emphasis10
我想了解一下你定制的LLava与标准版本之间的区别。我已经成功地在三星S23上运行了LLava。顺便说一下,Android目前只支持文本输入,尚未支持图像输入,因此LLava目前只能用于基于文本的对话。
以下是详细信息:
LLava源代码:https://huggingface.co/llava-hf/llava-1.5-7b-hf
量化:q4f16_1 MLC配置:{ "model": "HF://mengshyu/llava-1.5-7b-hf-q4f16_1-MLC", "estimated_vram_bytes": 4679979417, "model_id": "llava-1.5-7b-hf-q4f16_1-MLC", "overrides": { "context_window_size": 768, "prefill_chunk_size": 256 } }
@mengshyu如果我想要在MLCChat应用程序中使用LLava模型作为图像输入,我应该怎么做?我需要修改哪部分的代码?你能给我一些提示吗?
我也想在Android上部署LLava,现在遇到了同样的问题。你解决了图像输入的问题吗?

相关问题