譯者 | 朱先忠
審校 | 重樓
在樹莓派上使用Ollama的本地LLM和VLM(作者本人提供照片)
前言
有沒(méi)有想過(guò)在自己的設(shè)備上運(yùn)行自己的大型語(yǔ)言模型(LLM)或視覺(jué)語(yǔ)言模型(VLM)?你可能想過(guò),但一想到從頭開始設(shè)置,必須管理有關(guān)環(huán)境,還要下載正確的模型權(quán)重,以及帶有對(duì)你的設(shè)備是否能夠處理模型的揮之不去的懷疑,你可能會(huì)停了下來(lái)。
讓我們更進(jìn)一步想象一下:在一個(gè)不比信用卡大的設(shè)備上操作你自己的LLM或VLM——一個(gè)樹莓派。可能嗎?根本不可能。然而,畢竟我正在寫這篇文章,所以告訴你我的針對(duì)上述問(wèn)題的回答應(yīng)該是:絕對(duì)可能!
你為什么要這么做?
就現(xiàn)時(shí)段來(lái)看,在邊緣設(shè)備上部署與運(yùn)行LLM似乎相當(dāng)牽強(qiáng)。但隨著時(shí)間的推移,這種特定的場(chǎng)景應(yīng)用肯定會(huì)越來(lái)越成熟,我們會(huì)看到一些很酷的邊緣解決方案將被部署到各類邊緣設(shè)備上,并以全本地化方式運(yùn)行生成的人工智能解決方案。
我們這樣做的另一個(gè)理由是關(guān)于突破極限的設(shè)想,想看看什么是可能的。如果它可以在某個(gè)極端配置的計(jì)算規(guī)模下完成,那么它肯定可以在樹莓派和更強(qiáng)大的服務(wù)器GPU之間的任何級(jí)別配置的設(shè)置上完成。
從傳統(tǒng)技術(shù)上來(lái)看,邊緣人工智能與計(jì)算機(jī)視覺(jué)就存在密切的關(guān)系。因此,探索LLM和VLM在邊緣設(shè)備上的部署也為這個(gè)剛剛出現(xiàn)的領(lǐng)域增加了一個(gè)令人興奮的維度。
最重要的是,我只是想用我最近購(gòu)買的樹莓派5做一些有趣的事情。
那么,我們?nèi)绾卧跇漭缮蠈?shí)現(xiàn)這一切呢?回答是:使用Ollama!
Ollama是什么?
Ollama(https://ollama.ai/)已成為在你自己的個(gè)人計(jì)算機(jī)上運(yùn)行本地LLM的最佳解決方案之一,而無(wú)需處理從頭開始設(shè)置的麻煩。只需幾個(gè)命令,就可以毫無(wú)問(wèn)題地設(shè)置所有內(nèi)容。一切都是獨(dú)立的,根據(jù)我的經(jīng)驗(yàn),在幾種設(shè)備和模型上都能很好地工作。它甚至公開了一個(gè)用于模型推理的REST API;因此,你可以讓它在Raspberry Pi上運(yùn)行,如果你愿意,還可以從其他應(yīng)用程序和設(shè)備上調(diào)用該API。
還有Ollama Web UI這一漂亮的AI UI/UX,對(duì)于那些擔(dān)心命令行界面的人來(lái)說(shuō),它能夠與Ollama以無(wú)縫結(jié)合方式運(yùn)行。如果你愿意使用的話,它基本上就是一個(gè)本地ChatGPT接口。
這兩款開源軟件一起提供了我認(rèn)為是目前最好的本地托管LLM體驗(yàn)。
Ollama和Ollama Web UI都支持類似于LLaVA這樣的VLM,這些技術(shù)為邊緣生成AI使用場(chǎng)景打開了更多的大門。
技術(shù)要求
你只需要以下內(nèi)容:
- Raspberry Pi 5(或4,設(shè)置速度較慢)-選擇8GB RAM或以上大小以適合7B模型。
- SD卡——最小16GB,尺寸越大,可以容納的模型越多。還應(yīng)安裝合適的操作系統(tǒng),如Raspbian Bookworm或Ubuntu。
- 連接互聯(lián)網(wǎng)。
正如我之前提到的,在Raspberry Pi上運(yùn)行Ollama已經(jīng)接近硬件領(lǐng)域的極限。從本質(zhì)上講,任何比樹莓派更強(qiáng)大的設(shè)備,只要運(yùn)行Linux發(fā)行版并具有類似的內(nèi)存容量,理論上都應(yīng)該能夠運(yùn)行Ollama和本文討論的模型。
1.安裝Ollama
要在樹莓派上安裝Ollama,我們將避免使用Docker以便節(jié)省資源。
首先,在終端中,運(yùn)行如下命令:
curl https://ollama.ai/install.sh | sh
運(yùn)行上面的命令后,你應(yīng)該會(huì)看到與下圖類似的內(nèi)容。
作者本人提供照片
如輸出所示,導(dǎo)航到地址0.0.0.0:11434可以驗(yàn)證Ollama是否正在運(yùn)行。期間,看到“警告:未檢測(cè)到NVIDIA GPU(WARNING: No NVIDIA GPU detected)”是正常的。Ollama將在僅CPU模式下運(yùn)行,因?yàn)槲覀兪褂玫氖菢漭伞5牵绻阍趹?yīng)該有NVIDIA GPU的機(jī)器上遵循上圖中的這些說(shuō)明操作的話,你就會(huì)發(fā)現(xiàn)有些情況不對(duì)勁。
有關(guān)任何問(wèn)題或更新,請(qǐng)參閱Ollama GitHub存儲(chǔ)庫(kù)。
2.通過(guò)命令行運(yùn)行LLM
建議你查看一下官方Ollama模型庫(kù),以便了解可以使用Ollama運(yùn)行的模型列表。在8GB的樹莓派上,大于7B的模型不適合。讓我們使用Phi-2,這是一個(gè)來(lái)自微軟的2.7B LLM,現(xiàn)在已獲得麻省理工學(xué)院的許可。
我們將使用默認(rèn)的Phi-2模型,但可以隨意使用鏈接https://ollama.ai/library/phi/tags處提供的任何其他標(biāo)簽。請(qǐng)你看看Phi-2的模型頁(yè)面,看看如何與它交互。
現(xiàn)在,請(qǐng)在終端中,運(yùn)行如下命令:
ollama run phi
一旦你看到類似于下面的輸出,說(shuō)明你已經(jīng)在樹莓派上運(yùn)行了LLM!就這么簡(jiǎn)單。
圖片來(lái)源:作者本人
這是一個(gè)與Phi-2 2.7B的交互。顯然,你不會(huì)得到與此相同的輸出,但是你明白了其中的道理(作者本人圖片)
你還可以嘗試一下其他模型,如Mistral、Llama-2等,只需確保SD卡上有足夠的空間放置模型權(quán)值即可。
模型越大,輸出就越慢。在Phi-2 2.7B上,我每秒可以獲得大約4個(gè)標(biāo)記。但使用Mistral 7B,生成速度會(huì)降至每秒2個(gè)標(biāo)記左右。一個(gè)標(biāo)記大致相當(dāng)于一個(gè)單詞。
這是與Mistral 7B的互動(dòng)結(jié)果(作者本人圖片)
現(xiàn)在,我們已經(jīng)讓LLM在樹莓派上運(yùn)行起來(lái)了,但我們還沒(méi)有完成任務(wù)。這種終端方式并不是每個(gè)人都適合的。下面,讓我們讓Ollama Web UI也運(yùn)行起來(lái)!
3.安裝和運(yùn)行Ollama Web UI
我們將按照官方Ollama Web UI GitHub存儲(chǔ)庫(kù)上的說(shuō)明在沒(méi)有Docker的情況下進(jìn)行安裝。它建議Node.js版本的最小值為>=20.10,因此我們將遵循這一點(diǎn)。它還建議Python版本至少為3.11,但Raspbian操作系統(tǒng)已經(jīng)為我們安裝好了。
我們必須先安裝Node.js。為此,在終端中,運(yùn)行如下命令:
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - &&\
sudo apt-get install -y nodejs
如果本文以后的讀者需要,請(qǐng)將20.x更改為更合適的版本。
然后,運(yùn)行下面的代碼塊。
git clone https://github.com/ollama-webui/ollama-webui.git
cd ollama-webui/
#復(fù)制所需的.env文件
cp -RPp example.env .env
#使用Node構(gòu)建前端
npm i
npm run build
#用后端服務(wù)前端
cd ./backend
pip install -r requirements.txt --break-system-packages
sh start.sh
上述命令行代碼是對(duì)GitHub上提供的內(nèi)容的輕微修改。請(qǐng)注意,為了簡(jiǎn)潔起見(jiàn),我們沒(méi)有遵循最佳實(shí)踐,如使用虛擬環(huán)境,而是使用break-system-packages標(biāo)志。如果遇到類似未找到uvicorn包的錯(cuò)誤提示,請(qǐng)重新啟動(dòng)終端會(huì)話。
如果一切正常,你應(yīng)該能夠在Raspberry Pi上通過(guò)http://0.0.0.0:8080的端口8080訪問(wèn)Ollama Web UI,或者如果你通過(guò)同一網(wǎng)絡(luò)上的另一個(gè)設(shè)備訪問(wèn),則可以通過(guò)地址http://<Raspberrry Pi的本機(jī)地址>:8080/進(jìn)行訪問(wèn)。
如果你看到了這一點(diǎn),說(shuō)明上面運(yùn)行代碼成功(作者本人照片)
然后,在創(chuàng)建帳戶并登錄后,你應(yīng)該會(huì)看到與下圖類似的內(nèi)容。
作者本人照片
如果你之前下載了一些模型權(quán)重,你應(yīng)該會(huì)在下拉菜單中看到它們,如下圖所示。如果沒(méi)有,可以轉(zhuǎn)到設(shè)置(Settings)頁(yè)面下載模型。
可用模型將顯示在此處(作者本人照片)
如果你想下載新的模型,請(qǐng)轉(zhuǎn)到“設(shè)置(Settings)”頁(yè)面的>“模型”(Models)選項(xiàng)中,以便從列表中通過(guò)網(wǎng)絡(luò)下載新的模型(作者本人照片)
整個(gè)操作界面非常干凈直觀,所以我就不多解釋了。這確實(shí)是一個(gè)做得很好的開源項(xiàng)目。
此處是通過(guò)Ollama Web UI與Mistral 7B的互動(dòng)(作者本人照片)
4.通過(guò)Ollama Web UI運(yùn)行VLM
正如我在本文開頭提到的,我們也可以運(yùn)行VLM。讓我們運(yùn)行LLaVA模型,這是一個(gè)流行的開源VLM,它恰好也得到了Ollama系統(tǒng)的支持。要做到這一點(diǎn),請(qǐng)通過(guò)設(shè)置界面下載“l(fā)lava”模型,以便下載對(duì)應(yīng)的權(quán)重?cái)?shù)據(jù)。
遺憾的是,與LLM不同,設(shè)置頁(yè)面需要相當(dāng)長(zhǎng)的時(shí)間才能解釋樹莓派上的圖像。下面的例子花了大約6分鐘的時(shí)間進(jìn)行處理。大部分時(shí)間可能是因?yàn)槭挛锏膱D像方面還沒(méi)有得到適當(dāng)?shù)膬?yōu)化,但這在未來(lái)肯定會(huì)改變的。標(biāo)記生成速度約為2個(gè)標(biāo)記/秒。
查詢圖片來(lái)源:Pexels素材網(wǎng)站
總結(jié)
至此,我們已經(jīng)基本實(shí)現(xiàn)了本文的目標(biāo)。現(xiàn)在來(lái)概括一下,我們已經(jīng)成功地使用Ollama和Ollama Web UI在Raspberry Pi上運(yùn)行起LLM和VLM模型,如Phi-2、Mistral和LLaVA等。
我可以肯定地想象,在Raspberry Pi(或其他小型邊緣設(shè)備)上運(yùn)行的本地托管LLM還有很多使用場(chǎng)景,特別是因?yàn)槿绻覀冞x擇Phi-2大小的模型,那么對(duì)于某些場(chǎng)景來(lái)說(shuō),每秒4個(gè)標(biāo)記似乎是可以接受的流媒體速度。
總之,“小微”LLM和VLM領(lǐng)域是當(dāng)前一個(gè)活躍的研究領(lǐng)域,最近發(fā)布了相當(dāng)多的模型。希望這一新興趨勢(shì)繼續(xù)下去,更高效、更緊湊的模型繼續(xù)發(fā)布!這絕對(duì)是未來(lái)幾個(gè)月需要大家關(guān)注的事情。
免責(zé)聲明:我與Ollama或Ollama Web UI沒(méi)有任何關(guān)系。所有觀點(diǎn)和意見(jiàn)都是我自己的,不代表任何組織。
譯者介紹
朱先忠,51CTO社區(qū)編輯,51CTO專家博客、講師,濰坊一所高校計(jì)算機(jī)教師,自由編程界老兵一枚。
原文標(biāo)題:Running Local LLMs and VLMs on the Raspberry Pi,作者:Pye Sone Kyaw