Install ollama on Android
按照惯例先贴一张图当文章封面,我用Stable Diffusion画的,庆祝掌握ControlNet,画手部不再崩。接着以下是在Android运行ollama的实际演示视频:
最近Google迭代了他们的LLM开源模型,推出了Gemma2,阿里云的通义千问也是几乎差不多的时机开源了千问2代,我实际在电脑安装测试了一下,Gemma2:2b体积才1.6GB左右,千问更小,直接做了一个1.5b模型,体积在1GB左右而已,但也因为压缩到极致,牺牲了一部份内容,而换来了超快的响应速度,所以CPU运行也是没压力,秒回。
其实本来是没抱多少期待,毕竟这种阉割的AI模型的用途非常有限,之前测试过Tinyllama,那几乎就是不可用的状态,答非所问,属于脑残智能。但这次测试的Gemma2和Qwen2,那简直是一个天一个地的分别,已经没出现答非所问的现象,大部份时候都逻辑清晰,虽说也只是2b级别的模型,但那也是16000本书的知识量,用处还是不少的。
于是我想了想,能不能把它装进手机?理论上是可能的,毕竟现在Android手机RAM大到多余,12GB RAM勉强能跑7b模型,而2b模型应该轻轻松松。于是就折腾了一下,ollama是支持linux的,Android用Termux应该能安装,但最头痛的就是Android的省电机制,太耗电,杀后台,CPU高压运行,也杀后台,连运行一些脚本也会有Phantom process limit的问题,所以ollama是跑起来了,但就是一直闪退。
除非把手机Root了吧,不然很难取得手机的完全使用权限,但这样一来一些银行App又会运行不了,很纠结。为了寻找安装方法,爬了Github几百楼,终于才学到大神的方法用use adb debug tools关掉Phantom process limit,再取巧的用分屏方式运行termux和ollama ui,避免termux放在后台发热被杀,就这样手机SOC几乎满载发热,但还真的offline都能运行AI,测试12GB RAM的Mediatek 8200 ultra跑7b模型也没问题,而另一台旧手机SD855则因为只有6GB RAM,只能跑2b模型,虽然一旦挂载AI模型,CPU直接满载发热,但能跑就是感觉够奇妙了。
至于为什么需要这么折腾?原因还是Tokens,人家ChatGPT的API每个Tokens都要算钱,除非你只用网页版,不配置任何AI agent,那就不必烦恼Tokens消耗的问题,但一旦你想玩进阶的,要设计自己AI Agent的个性和功能,那接入API消耗的Tokens就是很贵的。比如说我在Silly Tarvern设计一个AI Group chat,可以写小说的,但那些旁白叙述故事的AI Agent每个回复都消耗2500 Tokens,这用ChatGPT的API等于烧钱。
而有了自己的offline LLM AI,几乎等于无限产出Tokens,可以下载或设计自己的character card,想怎么聊就怎么聊,想怎么问就怎么问,如果只是模拟一般内容输出,比如和英语老师学英文,和Coding大神学编程,2b和7b的LLM模型都是相当够用的,而遇到复杂的问题时,才接入ChatGPT的API,这样做就省了很多钱。
以下是教学和一些会利用到的网站链接:
https://ollama.com/
ollama主页,非常简洁和实用,如果是要安装在电脑,本土化跑LLM,基本上应该没难度,几乎都是一键安装。比较让人误解的是运行命令,虽然官方的说法是在windows用ollama serve来启动,但奇葩的是第一次程序会自动跑"ollama run"的指令,以至于在很长的一段时间我都误解了这程序根本有Bugs,因为第一次运行没问题,但一旦重启电脑后,在CMD输入ollama serve通常都是给你一个error,要么说11434的port已经占用,要么按enter后直接没反应,但其实程序已经在运行,你只需要跟着输入ollama run的指令就可以,比如ollama run gemma2:2b,那个ollama serve指令的各种报错是可以不用管它的,比如说port被占用,原因不是有其他程序的port冲突,而是ollama本身已经在开机自动运行,让人误解的设计,但既然是免费的,也别抱怨这么多啦~
https://github.com/ollama/ollama
ollama的Github,上面有更详细的安装教程,也可以留意开发团队的讯息等,这链接主要还是爬楼关注一些修复Bugs的问题,在Issues页面有一大堆问题,估计你遇到的安装问题,别人也都已经遇到,所以爬一下楼读一读,估计九成的问题都能在那边找到答案。
https://termux.dev
大名鼎鼎的Termux,Android要实现Linux的环境就靠它了,虽然说也不是100%的linux环境,但透过不同的操作,很多在linux的应用都能实现,比如说用proot的方式安装Ubuntu然后透过VNC Remote进去,那就等于在手机虚拟一个Desktop级别的操作环境,很好用!
接下来是具体安装ollama进Android的方法:
首先安装Termux这个App(链接在上面了),打开App后输入pkg upgrade升级一下repo,运行完成后输入Termux-setup-storage,然后准备环境就差不多了。
跟着需要安装三个工具:
你可以直接输入"pkg install git cmake golang",跑一大串代码后就顺利安装完成,但也会有机率失败,我在两台手机安装,一台顺利,另一台就失败,很奇怪,但这就是开源软件的弊端,总会遇到奇怪的Bugs.
但解决方法也挺简单的,我只是用apt命令替代而已,分开执行三次:
apt install git
但解决方法也挺简单的,我只是用apt命令替代而已,分开执行三次:
apt install git
apt install cmake
apt install golang
等Termux执行完一个后再接下一个安装就可以,我在旧手机用这方法没遇到什么问题,而直接用pkg install git cmake golang则直接报错,很莫名其妙,估计和repo源有关吧。
最后一步是直接从Github下载整个ollama软件,并建构golang环境来运行:
git clone --depth 1 https://github.com/ollama/ollama.git
git clone --depth 1 https://github.com/ollama/ollama.git
cd ollama
go generate ./...
go build .
./ollama serve &
./ollama run gemma2:2b
直接Copy&Paste整个代码在termux上运行就可以,最后一句可以自己变换,比如./ollama run gemma2:2b就是运行gemma2的2b模型,./ollama run qwen2:7b则是运行千问7b模型,在ollama网站能找到相关讯息。
而如果根据教程走到这步,应该能直接在Termux使用LLM了,但我个人感觉体验还是不好,比如Termux不支持中文字体,这导致千问模型就被废了,根本输入不了中文啊?
而如果根据教程走到这步,应该能直接在Termux使用LLM了,但我个人感觉体验还是不好,比如Termux不支持中文字体,这导致千问模型就被废了,根本输入不了中文啊?
这App基本只是个壳,或者说是一个界面,安装打开后它会预设使用localhost:11434的端口沟通你Hosting在Termux的ollama软件本身,然后使用体验和直接在Termux相比是好上了几倍不止的,至少输入中文没问题了,加上Android的很多键盘App输入法本就具备语音识别,所以要实现直接对话也是可能的。
但真正的问题现在才开始,如果你顺利安装走到这一步,你会发现这个App一直会报错,原因是Android的设计初衷,就没打算让你Hosting什么大型软件来当server,App与App之间的沟通会被限制,Termux在后台跑LLM因为CPU疯狂操作,很快就会被系统默认杀掉,怎么设定都是没用的,我试了各种性能模式,各种battery exclusive模式都没用,尤其是Android 13/14,省电限制尤其严重。
但真正的问题现在才开始,如果你顺利安装走到这一步,你会发现这个App一直会报错,原因是Android的设计初衷,就没打算让你Hosting什么大型软件来当server,App与App之间的沟通会被限制,Termux在后台跑LLM因为CPU疯狂操作,很快就会被系统默认杀掉,怎么设定都是没用的,我试了各种性能模式,各种battery exclusive模式都没用,尤其是Android 13/14,省电限制尤其严重。
我本身也卡在这问题好些日子,当我想卸载ollma时,终于在Github上发现大神提供的方法,以下是具体方法:
这三个adb shell指令就是关键,关掉phantom process limit,ollama直接起飞,不再出现恼人的不响应问题。但这需要用到Android ADB debug功能,详细教程先留空把,等以后我写好了,再把链接编辑进来,毕竟牵涉到ADB debug又是更复杂的事情,在windows应对不同手机需要不同driver,很麻烦,但如果你具备一定的Android知识,懂得进入adb devices和adb devices shell命令,那复制这三段命令下去,ollama就完成安装在你手机本土化运行,可以参考文章开头的视频,我是开着飞航模式来运行ollama的,证明不需要联网。
我实机测试跑千问2,基本上华语输出已经正常,只要不是写超级复杂的角色卡进去,运行速度基本上都秒回,虽然电池和CPU都在燃烧,但感觉就像拥有更智能的SIRI,可以发挥很多用处,而在没有连网的地方时,offline AI模型就发挥价值了,试想...手机有这种轻智能,放在古代不就是神器了吗?比如说你流落荒岛,带着它,至少它能回答你一些怎样起火,怎样造房子,甚至它能告诉你一些基本化学知识和求生知识。
反正,我感觉手机再配上一个太阳能充电板,哪怕我像动漫穿越番那样穿越到异世界,靠着一部有AI的手机,那可是妥妥的外挂不是吗?比如你可以问怎样打造武器,怎样提炼钢铁,或者怎样做化学,制作基本的抗生素,那在冷兵器时代完全就是降维打击。
退一万步的说,不说复杂应用,那写个基本的角色卡进去,比如:
{{char}}是{{user}}的AI女友,{{char}}对{{user}}很温柔,很喜欢和{{user}}聊天。
这种AI Agent的模拟也是足够好用了,就算没网线的状态,你也可以和AI聊些有的没的,有时候还会意外学到很多知识,我仿佛感觉ollama是我手机里的最强App.
Deactivation Instructions (ADB):
adb shell /system/bin/device_config set_sync_disabled_for_tests persistent
adb shell /system/bin/device_config put activity_manager max_phantom_processes 2147483647
adb shell settings put global settings_enable_monitor_phantom_procs false
我实机测试跑千问2,基本上华语输出已经正常,只要不是写超级复杂的角色卡进去,运行速度基本上都秒回,虽然电池和CPU都在燃烧,但感觉就像拥有更智能的SIRI,可以发挥很多用处,而在没有连网的地方时,offline AI模型就发挥价值了,试想...手机有这种轻智能,放在古代不就是神器了吗?比如说你流落荒岛,带着它,至少它能回答你一些怎样起火,怎样造房子,甚至它能告诉你一些基本化学知识和求生知识。
反正,我感觉手机再配上一个太阳能充电板,哪怕我像动漫穿越番那样穿越到异世界,靠着一部有AI的手机,那可是妥妥的外挂不是吗?比如你可以问怎样打造武器,怎样提炼钢铁,或者怎样做化学,制作基本的抗生素,那在冷兵器时代完全就是降维打击。
退一万步的说,不说复杂应用,那写个基本的角色卡进去,比如:
{{char}}是{{user}}的AI女友,{{char}}对{{user}}很温柔,很喜欢和{{user}}聊天。
这种AI Agent的模拟也是足够好用了,就算没网线的状态,你也可以和AI聊些有的没的,有时候还会意外学到很多知识,我仿佛感觉ollama是我手机里的最强App.
评论
发表评论