如何在 AO 上打造 AI 應(yīng)用?
來源:PermaDAO
AO是為鏈上AI設(shè)計的異步通信網(wǎng)絡(luò),通過與Arweave的結(jié)合,實(shí)現(xiàn)高性能鏈下計算和永久數(shù)據(jù)存儲。文章介紹了在AO上運(yùn)行AI進(jìn)程的步驟,盡管目前僅支持小型模型,但未來將支持更復(fù)雜的計算能力,AI在鏈上的發(fā)展前景廣闊。什么是AO上的AI?
AO天生就是為鏈上AI設(shè)計的
2023年被稱為AI的元年,各種大模型以及AI的應(yīng)用層出不窮。Web3的世界中,AI的發(fā)展也是關(guān)鍵的一環(huán)。但是一直以來,“Blockchain不可能三角”讓Blockchain的計算一直處于昂貴、擁堵的狀態(tài),阻礙了AI在Web3上的發(fā)展。但是現(xiàn)在這種情況在AO上已經(jīng)得到了初步改善,并且展現(xiàn)了無限的潛力。
AO被設(shè)計為一個消息驅(qū)動的異步通信網(wǎng)絡(luò)。基于存儲共識范式(SCP),AO運(yùn)行在Arweave之上,實(shí)現(xiàn)了與Arweave的無縫集成。在這種創(chuàng)新的范式中,存儲(共識)與計算被有效地分離,使得鏈下計算和鏈上共識成為可能。
高性能計算:智能合約的計算在鏈下執(zhí)行,不再受制于鏈上的區(qū)塊共識過程,從而大大擴(kuò)展了計算性能。不同Node上的各個進(jìn)程可以獨(dú)立地執(zhí)行并行計算和本地驗證,而無需像傳統(tǒng)的EVM架構(gòu)中那樣等待所有Node完成重復(fù)計算和全局一致性驗證。Arweave為AO提供了所有指令、中間狀態(tài)和計算結(jié)果的永久存儲,作為AO的數(shù)據(jù)可用層和共識層。因此,高性能計算(包括使用GPU進(jìn)行運(yùn)算)都成為了可能。
永存的數(shù)據(jù):這是Arweave一直以來所致力于做的事情。我們知道AI的訓(xùn)練中很關(guān)鍵的一個環(huán)節(jié)就是訓(xùn)練數(shù)據(jù)的收集,而這正好是Arweave的強(qiáng)項。至少200年時間的數(shù)據(jù)永存,讓AO+Arweave的生態(tài)中擁有了豐富的數(shù)據(jù)集。
此外,AO和Arweave的創(chuàng)始人Sam在今年6月的一次發(fā)布會上演示了第一個基于aos-llama的AI進(jìn)程。為了保證性能,并沒有使用之前一直使用的Lua,而是使用了C編譯的wasm。
使用的模型是huggingface上開源的llama2。可以在Arweave上下載模型,是一個約2.2GB的模型文件。
Llamaland
LlamaLand是一款前沿的大型多人在線(MMO)游戲,它以AI技術(shù)為核心,構(gòu)建于先進(jìn)的AO平臺之上。也是在AO+Arweave生態(tài)上的首個AI應(yīng)用。其中最主要的特征就是llamacoin的發(fā)行,是100%AI控制的,也就是用戶跟Llamaking祈愿,得到Llamaking賞賜的llamacoin。另外,地圖中的LlamaJoker、Llamaoracle也都是基于AI進(jìn)程完成的NPC。

運(yùn)行AI進(jìn)程需要耗費(fèi)少量的wAR。通過arconnect轉(zhuǎn)成功以后,會在進(jìn)程中看到Action=Credit-Notice的一條消息。執(zhí)行一次AI需要消耗wAR,但是消耗的并不多,作為demo之用的話,向進(jìn)程轉(zhuǎn)0.001wAR即可。
注意:wAR可以通過AOX跨鏈橋獲取,跨鏈需要3~30分鐘。
可以通過以下命令查看當(dāng)前進(jìn)程中wAR的余額。下面是我執(zhí)行了5次左右還剩下的wAR。消耗的數(shù)量跟token的長度以及當(dāng)前運(yùn)行一次大模型的實(shí)時價格有關(guān)系。另外,如果當(dāng)前請求處于擁堵狀態(tài),那么也會需要一個額外的費(fèi)用。(在文章最后,我會根據(jù)代碼詳細(xì)解析下費(fèi)用計算,感興趣的小伙伴可以看看)
注意:這里小數(shù)點(diǎn)為12位,也就是說999999673表示的是0.000999999673個wAR。
3.安裝/更新APM
APM全稱為aopackagemanagement,構(gòu)建AI進(jìn)程的話,需要通過APM安裝對應(yīng)的包。執(zhí)行上述命令,出現(xiàn)對應(yīng)的提示,就是安裝/更新APM成功了。
4.安裝LlamaHerder
執(zhí)行完成以后,在進(jìn)程內(nèi)會有一個Llama對象,可以通過輸入Llama進(jìn)行訪問,那么 LlamaHerder就是安裝成功了。
注意:這里如果運(yùn)行的進(jìn)程中沒有足夠的wAR則Llama.run方法是無法執(zhí)行的,會出現(xiàn)TransferError。需要按照第一步充值wAR。
5.HelloLlama
接下來我們做一個簡單的交互。問一下AI進(jìn)程“生命的意義是什么?”,限定了最多生成20個token。然后把結(jié)果放到OUTPUTS中。AI進(jìn)程的執(zhí)行需要幾分鐘的時間,如果有AI任務(wù)排隊的話,則需要等待更久。
如下面代碼中的返回,AI回復(fù)“生命的意義是一個深刻而哲學(xué)的問題,一直吸引著人類。”

更多
在鏈上實(shí)現(xiàn)AI的能力,在之前是無法想象的東西。現(xiàn)在已經(jīng)可以在AO上,基于AI實(shí)現(xiàn)了完成度較高的應(yīng)用,其前景讓人期待,也給與了大家無限的想象空間。
但是就目前而言,局限也是比較明顯的。目前只能支持2GB左右的“小語言模型”,尚不能利用GPU進(jìn)行運(yùn)算等。不過值得慶幸的是,AO的架構(gòu)設(shè)計中也都對這些短板有著對應(yīng)解決方案。例如,編譯一個可以利用GPU的wasm虛擬機(jī)。
期待在不久的將來,AI可以在AO的鏈上,開放出更加絢爛的花朵。
附錄
前面留下的一個坑,一起看下LlamaAI的費(fèi)用計算。
下面是初始化好以后的Llama對象,分別對重要的對象給出一個我的理解。
M.herder:存儲了LlamaHerder服務(wù)的標(biāo)識符或地址。
M.token:用于支付AI服務(wù)的token。
M.feeBase:基礎(chǔ)費(fèi)用,用于計算總費(fèi)用的基礎(chǔ)值。
M.feeToken:每個token對應(yīng)的費(fèi)用,用于根據(jù)請求中的token數(shù)量計算額外費(fèi)用。
M.lastMultiplier:上一次交易費(fèi)用的乘數(shù)因子,可能用于調(diào)整當(dāng)前費(fèi)用。
M.queueLength:當(dāng)前請求隊列的長度,影響費(fèi)用計算。
M.feeBump:費(fèi)用增長因子,默認(rèn)設(shè)置為1.005,意味著每次增加0.5%。
M.feeBase初始值為0。
通過M.getPrices函數(shù)向LlamaHerder請求最新價格信息。
其中M.feeBase、feeToken、M.lastMultiplier、M.queueLength都是向M.herder請求,并接收到Info-Response消息后,實(shí)時變動的。確保了總是保持最新的價格相關(guān)的字段值。
計算費(fèi)用的具體步驟:
根據(jù)M.feeBase加上feeToken與token數(shù)量的乘積,得到一個初始的費(fèi)用。
在初始費(fèi)用的基礎(chǔ)上,再乘以M.lastMultiplier。
最后,如果存在請求排隊的情況,會再乘以M.feeBump,也就是1.005得到最后的費(fèi)用。
引用鏈接
1.Arweave上的模型地址:
https://arweave.net/ISrbGzQot05rs_HKC08O_SmkipYQnqgB1yC3mjZZeEo
2.aosllama源碼:
https://github.com/samcamwilliams/aos-llama
3.AOX跨鏈橋:
https://aox.arweave.dev/
