HuggingGPT:解決處理AI任務(wù)的秘密武器
簡介
人工通用智能(AGI)可以被認(rèn)為是一個人工智能系統(tǒng),它能夠像人類一樣理解、處理和響應(yīng)智力任務(wù)。這是一項具有挑戰(zhàn)性的任務(wù),需要深入了解人腦的工作方式,以便我們能夠復(fù)制它。然而,ChatGPT的出現(xiàn)引起了研究界對開發(fā)此類系統(tǒng)的巨大興趣。微軟已經(jīng)發(fā)布了這樣一個由AI驅(qū)動的關(guān)鍵系統(tǒng),名為HuggingGPT(Microsoft Jarvis)。
在深入了解HuggingGPT的新內(nèi)容以及它工作原理的相關(guān)細(xì)節(jié)之前,讓我們首先了解ChatGPT的問題,以及為什么它在解決復(fù)雜的AI任務(wù)方面很困難。像ChatGPT這樣的大型語言模型擅長于解釋文本數(shù)據(jù)和處理一般任務(wù)。然而,它們經(jīng)常在特定任務(wù)中掙扎,并可能產(chǎn)生荒謬的反應(yīng)。你可能在解決復(fù)雜的數(shù)學(xué)問題時遇到過來自ChatGPT的虛假答復(fù)。另一方面,我們有專家級的AI模型,如Stable Diffusion和DALL-E等,它們對各自的學(xué)科領(lǐng)域有更深入的了解,但在更廣泛的任務(wù)上卻舉步維艱。除非我們在LLM和專業(yè)AI模型之間建立起聯(lián)系,否則我們無法完全利用LLM的潛力來解決具有挑戰(zhàn)性的AI任務(wù)。這就是HuggingGPT所做的,它結(jié)合了兩者的優(yōu)勢,創(chuàng)造了更有效、更準(zhǔn)確、更多的AI系統(tǒng)。
什么是HuggingGPT?
根據(jù)微軟最近發(fā)表的一篇論文,HuggingGPT利用LLM的強(qiáng)大功能,把它作為控制器,將其與機(jī)器學(xué)習(xí)社區(qū)(HuggingFace)中的各種AI模型連接起來,使它能夠使用外部工具,以提高工作效率。HuggingFace是一個為開發(fā)人員和研究人員提供大量工具和資源的網(wǎng)站。它還擁有各種各樣的專業(yè)和高精確度的模型。HuggingGPT將這些模型用于不同領(lǐng)域和模式的復(fù)雜AI任務(wù),從而取得了令人印象深刻的結(jié)果。在涉及文本和圖像時,它具有與OPenAI GPT-4類似的多模式功能。但是,它也將你連接到互聯(lián)網(wǎng)上,你可以提供一個外部Web鏈接來詢問有關(guān)問題。
假設(shè)你想讓模型對寫在圖像上的文字進(jìn)行音頻閱讀。HuggingGPT將使用最適合的模型串行地執(zhí)行這項任務(wù)。首先,它將從圖像中導(dǎo)出文本,并將其結(jié)果用于音頻生成。可以在下面的圖片中查看響應(yīng)詳細(xì)信息。簡直太神奇了!
對視頻和音頻模式的多模式合作進(jìn)行定性分析
HuggingGPT是如何工作的?
HuggingGPT是一個協(xié)作系統(tǒng),它使用LLM作為接口,向?qū)<夷P桶l(fā)送用戶請求。從用戶提示到模型直到收到響應(yīng)的完整過程可以分解為以下不連續(xù)的步驟:
1.任務(wù)規(guī)劃
在這個階段,HuggingGPT利用ChatGPT來理解用戶的提示,然后將查詢分解為小的可操作任務(wù)。它還確定了這些任務(wù)的依賴關(guān)系,并定義了它們的執(zhí)行順序。HuggingGPT有四個插槽用于任務(wù)解析,即任務(wù)類型、任務(wù)ID、任務(wù)依賴性和任務(wù)參數(shù)。HuggingGPT和用戶之間的聊天記錄被記錄下來并顯示在顯示資源歷史的屏幕上。
2.模型選擇
基于用戶環(huán)境和可用的模型,HuggingGPT使用一個上下文中的任務(wù)-模型分配機(jī)制,為一個特定的任務(wù)選擇最合適的模型。根據(jù)這一機(jī)制,模型的選擇被認(rèn)為是一個單選題,它最初根據(jù)任務(wù)的類型篩選出模型。之后,根據(jù)下載次數(shù)對模型進(jìn)行排名,因為它被認(rèn)為是反映模型質(zhì)量的可靠措施。Top-K模型是根據(jù)這個排名選擇的。這里的K只是一個反映模型數(shù)量的常數(shù),例如,如果它被設(shè)置為3,那么它將選擇下載次數(shù)最多的3個模型。
3.任務(wù)執(zhí)行
在這里,任務(wù)被分配給一個特定的模型,它對其進(jìn)行推理并返回結(jié)果。為了提高這個過程的效率,HuggingGPT可以同時運(yùn)行不同的模型,只要它們不需要相同的資源即可。例如,如果給出一個提示,生成貓和狗的圖片,那么不同的模型可以并行運(yùn)行來執(zhí)行這個任務(wù)。然而,有時模型可能需要相同的資源,這就是為什么HuggingGPT維護(hù)一個<resource>屬性以保持對資源的跟蹤。它確保資源被有效地使用。
4.生成響應(yīng)
最后一步是生成對用戶的響應(yīng)。首先,它整合了前幾個階段的所有信息和推理結(jié)果。這些信息以一種結(jié)構(gòu)化的格式呈現(xiàn)。例如,如果提示是檢測圖像中獅子的數(shù)量,它將繪制具有檢測概率的適當(dāng)?shù)倪吔缈?。然后,LLM(ChatGPT)使用這種格式,并以人類友好的語言呈現(xiàn)它。
設(shè)置HuggingGPT
HuggingGPT建立在Hugging Face最先進(jìn)的GPT-3.5架構(gòu)之上,它是一個深度神經(jīng)網(wǎng)絡(luò)模型,可以生成自然語言文本。以下是如何在本地計算機(jī)上設(shè)置它的步驟:
系統(tǒng)要求
默認(rèn)配置需要Ubuntu 16.04 LTS,至少24GB的VRAM,至少12GB(最?。?6GB(標(biāo)準(zhǔn))或80GB(完整)的RAM,以及至少284GB的磁盤空間。此外,需要42GB的空間用于damo-vilab/text-to-video-ms-1.7b,126GB用于ControlNet,66GB用于stable-diffusion-v1-5,50GB用于其他資源。對于“l(fā)ite”配置,只需要Ubuntu 16.04 LTS。
開始使用的步驟
首先,將server/configs/config.default.yaml文件中的OpenAI Key和Hugging Face Token替換為你的密鑰?;蛘?,你可以將它們分別放在環(huán)境變量OPENAI_API_KEY和HUGGINGFACE_ACCESS_TOKEN中
運(yùn)行以下命令:
對于Server:
- 設(shè)置Python環(huán)境并安裝所需的依賴項。
# 設(shè)置環(huán)境
cd server
conda create -n jarvis pythnotallow=3.8
conda activate jarvis
conda install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia
pip install -r requirements.txt
- 下載所需的模型。
# 下載模型。確保`git-lfs`已經(jīng)安裝。
cd models
bash download.sh # required when `inference_mode` is `local` or `hybrid`.
- 運(yùn)行服務(wù)器
# 運(yùn)行服務(wù)器
cd ..
python models_server.py --config configs/config.default.yaml # required when `inference_mode` is `local` or `hybrid`
python awesome_chat.py --config configs/config.default.yaml --mode server # for text-davinci-003
現(xiàn)在你可以通過向Web API端點發(fā)送HTTP請求來訪問Jarvis的服務(wù)。發(fā)送請求到:
- /hugginggpt端點,使用POST方法訪問完整的服務(wù)。
- /tasks端點,使用POST方法訪問階段1的中間結(jié)果。
- /results端點,使用POST方法訪問階段1-3的中間結(jié)果。
這些請求應(yīng)該是JSON格式的,應(yīng)該包括代表用戶輸入的信息列表。
對于Web:
- 在服務(wù)器模式下啟動應(yīng)用程序awesome_chat.py后,在計算機(jī)上安裝node js和npm。
- 導(dǎo)航到web目錄并安裝以下依賴項:
cd web
npm install
npm run dev
- 將http://{LAN_IP_of_the_server}:{port}/設(shè)置為web/src/config/index.ts的HUGGINGGPT_BASE_URL,以防你在其他機(jī)器上運(yùn)行Web客戶端。
- 如果要使用視頻生成功能,請使用H.264手動編譯ffmpeg。
# 可選:安裝 ffmpeg
# 這個命令需要在沒有錯誤的情況下執(zhí)行。
LD_LIBRARY_PATH=/usr/local/lib /usr/local/bin/ffmpeg -i input.mp4 -vcodec libx264 output.mp4
- 雙擊設(shè)置圖標(biāo),切換回ChatGPT。
對于CLI:
使用CLI設(shè)置Jarvis是非常簡單的。只需運(yùn)行下面提到的命令:
cd server
python awesome_chat.py --config configs/config.default.yaml --mode cli
對于Gradio:
Gradio演示也在Hugging Face Space上托管。你可以在輸入OPENAI_API_KEY和HUGGINGFACE_ACCESS_TOKEN后進(jìn)行試驗。
要在本地運(yùn)行它:
- 安裝所需的依賴項,從Hugging Face Space克隆項目存儲庫,然后導(dǎo)航到項目目錄
- 使用以下命令啟動模型服務(wù)器,然后啟動Gradio演示:
python models_server.py --config configs/config.gradio.yaml
python run_gradio_demo.py --config configs/config.gradio.yaml
- 在瀏覽器中通過http://localhost:7860訪問演示,并通過輸入各種輸入進(jìn)行測試
- 作為選擇,你也可以通過運(yùn)行以下命令以Docker鏡像的形式運(yùn)行該演示:
docker run -it -p 7860:7860 --platform=linux/amd64 registry.hf.space/microsoft-hugginggpt:latest python app.py
注意:如果有任何問題,請參考官方Github Repo(https://github.com/microsoft/JARVIS)。
最后的思考
HuggingGPT也有某些需要在此強(qiáng)調(diào)一下的局限性。例如,系統(tǒng)的效率是一個主要瓶頸,在前面提到的所有階段,HuggingGPT都需要與LLM進(jìn)行多次交互。這些交互會導(dǎo)致用戶體驗的降低和延遲的增加。同樣,最大的上下文長度也受到允許的令牌數(shù)量的限制。另一個問題是系統(tǒng)的可靠性,因為LLM可能會誤解提示并產(chǎn)生一個錯誤的任務(wù)序列,這反過來又會影響整個過程。盡管如此,它在解決復(fù)雜的AI任務(wù)方面具有很大的潛力,并且是AGI的一個很好的進(jìn)步。一起期待這項研究會把AI的未來帶向哪個方向吧!