0x0. 前言
這篇文章主要是填一下 MLC-LLM 部署RWKV World系列模型實戰(zhàn)(3B模型Mac M2解碼可達26tokens/s) 這里留下來的坑,這篇文章里面介紹了如何使用 MLC-LLM 在A100/Mac M2上部署 RWKV 模型。但是探索在Android端部署一個RWKV對話模型的app時卻碰到了諸多問題,解決的周期也很長,之前留了issue在MLC-LLM的repo,這周@chentianqi大佬回復(fù)說之前編譯出的app會在模型初始化階段卡住的問題已經(jīng)解決了,所以我又重新開始踩了一些坑最終完成了在手機上運行RWKV World4 3B模型的目的。這里把踩的坑和Android編譯方法都描述一下。
我這里編譯了一個RWKV4 World 3B模型的權(quán)重int4量化版本的apk,地址為:https://github.com/BBuf/run-rwkv-world-4-in-mlc-llm/releases/download/v1.0.0/app-debug.apk 。感興趣的小伙伴可以下載這個apk到android手機上來運行,需要注意的是由于要在線拉取HuggingFace的權(quán)重,所以手機上需要可以訪問HuggingFace需要代理。
在我的Redmik50手機上進行測試,效果和速度如下:
每一秒大概可以解碼8個token,我感覺速度勉強夠用了。由于RWKV5迭代到了第5個版本,后續(xù)希望能支持RWKV5的模型,當(dāng)然也可以尋求新的優(yōu)化機會提升解碼速度。
0x1. 踩坑
之前寫這篇文章 MLC-LLM 部署RWKV World系列模型實戰(zhàn)(3B模型Mac M2解碼可達26tokens/s) 的時候發(fā)現(xiàn)android app在初始化的時候一直會卡住,即使換成官方編譯的app也是如此,所以提了issue之后就放棄了?,F(xiàn)在這個bug被修復(fù)了,不過我沒有找到具體的改動pr是什么,但我在mlc-llm的android部分沒有發(fā)現(xiàn)相關(guān)改動,所以大概率是relax本身的bug,就不深究了。
這次仍然是按照之前的方法進行編譯,但是也踩了幾個坑,具體體現(xiàn)在下方的改動:
這個改動只是為了在本地可以編譯出RWKV的android app,有坑的地方體現(xiàn)在下面的2個改動:
第一個坑是在dump_mlc_chat_config的時候,對于RWKV World模型應(yīng)該使用工程下面的tokenzier_model文件作為tokenzie的文件,但是之前沒考慮這個問題(dump出的config中tokenizer_files字段為空)就會導(dǎo)致編譯出的app在初始化階段報錯:
經(jīng)過上面的修改之后重新在mlc-llm下面pip install .
,然后編譯模型就可以得到可以正常初始化的config了。這個問題是通過在Android Studio里面通過Device Explore查看下載的文件夾發(fā)現(xiàn)的,我發(fā)現(xiàn)少了一個tokenizer_model文件才注意的。
第二個坑是初始化完成之后聊天的時候不出字,我在mac上去復(fù)現(xiàn)了這個錯誤,然后發(fā)現(xiàn)是因為在RWKV里面把max_window_size這個屬性設(shè)置成了1。
然后在mlc_chat.cc里面通過max_window_size判斷結(jié)束符時沒有考慮-1,所以第一個token生成之后程序就終止了。所以在這里加一個特判進行了修復(fù)。
解決了上面2個問題,編譯出新的apk之后就可以正常運行了。
0x2. 詳細(xì)教程
下面是編譯出apk的詳細(xì)教程。在這之前請閱讀:MLC-LLM 部署RWKV World系列模型實戰(zhàn)(3B模型Mac M2解碼可達26tokens/s) ,這是前置內(nèi)容。
對于Android,你可以按照https://mlc.ai/mlc-llm/docs/deploy/android.html的教程在你的手機上編譯apk。
根據(jù)官方教程,這里有一些需要修改的地方:
- 修改這個文件。更新的內(nèi)容應(yīng)該是:
{
"model_libs":[
"RWKV-4-World-3B-q4f16_1"
],
"model_list":[
{
"model_url":"https://huggingface.co/BBuf/RWKV-4-World-3B-q4f16_1/",
"local_id":"RWKV-4-World-3B-q4f16_1"
}
],
"add_model_samples":[]
}
- 將代碼的這個部分修改為:
compileOptions{
sourceCompatibilityJavaVersion.VERSION_17
targetCompatibilityJavaVersion.VERSION_17
}
kotlinOptions{
jvmTarget='17'
}
- 如果你遇到錯誤:“Android Gradle插件要求運行Java 17。你目前使用的是Java 11”,請按照https://stackoverflow.com/questions/76362800/android-gradle-plugin-requires-java-17-to-run-you-are-currently-using-java-11 的方法清除緩存并重新編譯。
一旦你完成了APK的編譯,你可以在你的手機上啟用開發(fā)者模式并安裝APK以供使用。
以小米手機為例,你可以按照下面的教程啟用開發(fā)者模式并將APK傳輸?shù)侥愕氖謾C上。
-
第一步:在手機上啟用USB調(diào)試
- 首先,前往你的手機的"設(shè)置 -> 我的設(shè)備 -> 所有規(guī)格 -> MIUI版本",連續(xù)點擊"MIUI版本"七次以進入開發(fā)者模式。
- 接下來,導(dǎo)航至"設(shè)置 -> 額外設(shè)置 -> 開發(fā)者選項",打開"USB調(diào)試"和"USB安裝"。
-
第二步:配置Android Studio
- 打開你的Android Studio項目,前往"運行 -> 編輯配置",如下圖所示,選擇"打開選擇部署目標(biāo)對話框"。這將在每次你調(diào)試時提示設(shè)備選擇對話框。注意:如果你直接選擇"USB設(shè)備",你可能無法在調(diào)試過程中檢測到你的手機。
-
第三步:在線調(diào)試
- 通過USB將你的手機連接到電腦。通常會自動安裝必要的驅(qū)動程序。當(dāng)你運行程序時,將出現(xiàn)設(shè)備選擇對話框。選擇你的手機,APK將自動安裝并運行。
一個編譯好的apk: https://github.com/BBuf/run-rwkv-world-4-in-mlc-llm/releases/download/v1.0.0/app-debug.apk
0x3. 總結(jié)
這篇文章分享了一下使用MLC-LLM將RWKV模型跑在Android手機上遭遇的坑以及編譯的詳細(xì)教程,接下來也會嘗試一下RWKV5。想在andorid手機上本地運行開源大模型的伙伴們可以考慮一下MLC-LLM,他們的社區(qū)還是比較活躍的,如果你提出一些問題一般都會有快速的回復(fù)或者解決方法。
0x4. 相關(guān)link
- https://github.com/mlc-ai/tokenizers-cpp/pull/14
- https://github.com/mlc-ai/mlc-llm/pull/1136
- https://github.com/mlc-ai/mlc-llm/pull/848
- https://mlc.ai/mlc-llm/docs/
- StarRing2022/RWKV-4-World-1.5B
- StarRing2022/RWKV-4-World-3B
- StarRing2022/RWKV-4-World-7B
- https://github.com/mlc-ai/mlc-llm/issues/862
- https://github.com/mlc-ai/mlc-llm/issues/859
-
模型
+關(guān)注
關(guān)注
1文章
3277瀏覽量
48957 -
編譯
+關(guān)注
關(guān)注
0文章
660瀏覽量
32924 -
MLC
+關(guān)注
關(guān)注
0文章
41瀏覽量
17314
原文標(biāo)題:0x4. 相關(guān)link
文章出處:【微信號:GiantPandaCV,微信公眾號:GiantPandaCV】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論