AutoGen、AutoGen Studio、Ollama、LiteLLM、AnythingLLM、TaskingAI、QAnything、CrewAI、Phidata、DeepSpeed、intel-extension-for-transformers



開始之前,先瞭解一下很常聽到的 XX B 的這個 B,以及要怎樣計算需要多少 GPU VRAM
這裡的「B」表示10億 (Billion),即10^9。因此,7B表示70億個可訓練參數
現在多數模型參數大多數都是 float32,佔4個位元組 (bytes, 1 bytes = 8 bits)。
最好記的算法是每10億個參數,佔用 4GB GPU VRAM,精度每減半如fp16,VRAM也會減半
(實際上是 10^9*4/1024/1024/1024=3.725G,方便就先記為4GB)。
但這只是模型權重,你可能還需要考慮包含反向傳播的梯度、最佳化器所使用、正向傳播的啟動狀態記憶體。

以 fp32 推理 (單位為 GB):因為1 GB ≈ 1B字節,模型記憶體= 4 * 參數量 (位元組),總量約需≈ 1.2×模型記憶體

以 fp32 訓練 (單位為 GB) 至少:模型權重 4 * 參數量 + 優化器 12 * 參數量  + 梯度 4 * 參數量 + 啟動 

結論:假設是 Llama 2 70B 以 FP 32 做推論,那至少要 280 GB,低於這數字應該就是用了 int8 或者傳說中的 deep speed 的 ZeRO-Infinity 之類的,而這種做法,準確度會降,速度也會降的 (多張卡的數據、模型傳輸),因為你還得考慮 GPU到所謂SSD的傳輸速度。 (希望不要再有廠商四處亂唬弄人了)

Hugging Face 有篇不錯的說明文:Optimizing your LLM in production
這篇內容主要是要記錄一下(踩坑過程)怎樣使用 AutoGen 跟 AutoGen Studio 來建個多代理人 (多大語言模型) 的分工合作交互模式,另外也測了AnythingLLM;發現這其實要拆分為兩種不同的應用需求,然後因為 OpenAI 跟 AOAI 的 API 畢竟也是要費用,所以又弄了 Ollama 然後再加上用 LiteLLM 做 OpenAI API 格式的 API 來當做本地端的 LLM 供整個 AutoGen Studio 使用;不多說,先上截圖吧 !

雖然有好朋友贊助機器給我做些開發和測試,但還是希望可以早日再得到老闆贊助



上下兩個截圖,別是用來做一些基本技能的示範,找到的幾篇文章也都在上面 (官網其實非常齊全,認真看,好好看啊),都可以點去參考學習一下 !

sudo apt update
sudo apt install nodejs npm

https://github.com/microsoft/autogen/tree/main/samples/apps/autogen-studio

後來又重裝了一次,倒是只卡在 node 跟 nodejs 還有跑 yarn 時的 node 版本不一樣的問題就裝好了
npm install -g gatsby-cli
npm install --global yarn
cd frontend
yarn install
yarn build

安裝,也有過 npm install -g gatsby-cli 第一行就遇到奇怪問題,對 nodejs、npm 這些實在不太熟 !!!

npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! lmdb@2.5.3 install: `node-gyp-build-optional-packages`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the lmdb@2.5.3 install script.
npm ERR! This is probably not a problem with npm.
There is likely additional logging output above.

而這一切都是為了想要手工改動一下 AutoGen 和 AutoGen Studio (至少ui版面想改動一下)
There are two ways to install AutoGen Studio - from PyPi or from source. We recommend installing from PyPi unless you plan to modify the source code.

最後只好乾脆 build 一個它的 docker 來用了

sudo docker build -f .devcontainer/full/Dockerfile -t autogen_full_img https://github.com/microsoft/autogen.git

sudo docker run -it --name autogen -v /opt/data:/opt/data -p 9999:9999 -p 8889:8889 --shm-size=32g autogen_full_img:latest /bin/bash

sudo docker exec -i -t autogen /bin/bash

./Anaconda3-2023.09-0-Linux-x86_64.sh
conda create -n autogen python=3.10

進來第一件事當然就是裝 conda 了,接著就 create 一個專用的 conda

git clone https://github.com/microsoft/autogen.git
cd autogen
pip install -e .

cd samples/apps/autogen-studio/
pip install -e .

另外這邊也要同步讓 jupyter 可以跑起來,不然一直開著 team viewer 也是很麻煩

jupyter notebook --generate-config
(首先就是先生成 config 檔)
vi ~/.jupyter/jupyter_notebook_config.py
(接著去編輯相關設定參數)

#  Default: False
c.NotebookApp.allow_remote_access = True
(這是遠端連線用)

jupyter notebook password
(這就是遠端連線的登入密碼/token)
Enter password:  ****
Verify password: ****
[NotebookPasswordApp] Wrote hashed password to ~/.jupyter/jupyter_notebook_config.json

#  password.
#  Default: ''
c.NotebookApp.password = '你生成的遠端連線密碼貼到這'
c.NotebookApp.port = xxxx
(這個就是 port 號)

ipython kernel install --name "deepspeed" --user
(我有個 conda env 叫 deepspeed,這樣就能加到 jupyter)

接著就是直接啟動啦
jupyter notebook

至於 autogen 嘛,啟動指令是這樣
autogenstudio ui --port 9872

最後,如果是要 ngrok 那就看一下這篇吧 XD

接著說明一下,AutoGen Studio 就是有個 ui 讓你很好的去設計你想要做到的,不用在 cmd 模式下設計,當然最後要怎樣去整合,就看個人造化了;github 上也有找到有人特地開發 UI

回到 AutoGen Studio,它總共有 Skills (技能:給你寫你想要的工作)
Model (模型:就是你要使用的大語言模型)
Agents (代理人:就是你要設計的不同的專家;一個代理人可以同時有4個技能);我個人比較不會去特別建 Agent,因為貌似你每次改動設定,都得來重調整,我都直接在 workflow 裡設定 Agent
Workflow (流程,這就是讓你除了把技能整合到代理人以外,你還可以設計不同流程跑不同代理人來解決你想要的問題)
最後就是 Playground了,也就是馬上實驗你剛剛做的相關設計啦
操作至今,真的感覺微軟實在是很佛心的開源了這個神器,雖然中間還是會有點小bug,但對於大家一直喊的無法把 LLM 給落地商業化開發,還是個很棒的開源工具 !
curl https://ollama.ai/install.sh | sh

這個工具的安裝操作就整個非常簡單,雖然你可能會找到 LM Studio,但可惜它只能在桌面環境操作,一般想開發產品,我想你很少會開個桌面,然後執行吧?
如上面截圖,嗯 ! 就這樣很容易的跑起了 Yi-34B啦 !
當然,就馬上下載了這幾個大語言模型 LLM (Large Language Model) 來加減跑看看啦
最後,這個就還算很容易上手,我想我就不用廢話了 !
ngrok http --scheme=http 8000 --host-header=localhost:8000
litellm --model ollama/yi:34b


AnythingLLM是Mintplex Labs Inc. 開發的開源ChatGPT 等效工具,用於在安全的環境中與文件等進行聊天,專為想要使用現有文件進行智慧聊天或建立知識庫的任何人而建立。 
AnythingLLM 能夠把各種文件、資料或內容轉換成一種格式,讓LLM(如ChatGPT)在聊天時可以引用這些內容。然後你就可以用它來和各種文件、內容、資料聊天,支援多個使用者同時使用,還可以設定誰能看或改哪些內容。 支援多種LLM、嵌入器和向量資料庫。

2024/04/12 更新

AnythingLLM 找到了更方便的安裝啟動方法了啊 ! 超快又好用 ! 就是只差下面幾個動作

https://github.com/Mintplex-Labs/anything-llm/blob/master/docker/HOW_TO_USE_DOCKER.md

這裡直接照著做,馬上就啟動了 ! 
docker pull mintplexlabs/anythingllm

export STORAGE_LOCATION=$HOME/anythingllm && \
mkdir -p $STORAGE_LOCATION && \
touch "$STORAGE_LOCATION/.env" && \
docker run -d -p 3001:3001 \
--cap-add SYS_ADMIN \
-v ${STORAGE_LOCATION}:/app/server/storage \
-v ${STORAGE_LOCATION}/.env:/app/server/.env \
-e STORAGE_DIR="/app/server/storage" \
mintplexlabs/anythingllm

不過可能會啟動失敗,記得要 chmod -R 777 anythingllm/ 這是因為權限問題

接著用 root 進入 anythingllm 的 docker 的 root 帳號,因為你會很多東西不能裝不能用,連 vi 都沒
docker exec -u 0 -it <容器ID或名称> bash

接著就是把 anythingllm 加到 sudoers 裡,這邊要記得要先用 passwd 幫 anythingllm 這帳號補密碼

vi /etc/sudoers
找到下面這行,接著直街新增下面那一行,這樣你就可以進去裝好 conda 跟 ngrok 等等的東西

# User privilege specification
root    ALL=(ALL:ALL) ALL
anythingllm ALL=(ALL) All
不過,本來想要就直接用這個 docker 開始做點自己想做的事,但是它的硬碟看來設得很滿 XD
剩下的用法就都差不多啦 !

安裝過程略有點小問題要解決,但查到的都是至少要開到5個容器,但目前我用不太到向量資料庫還有LoaclAI等,所以只開了 FastAPI 共兩個

這邊可以看到它本身就具備了 API 可以做整合
至於這裡就可以看到它支援了不少 LLM,Gemini 都能直接用有意外到
接著是 Embedding,我就直接用 AOAI,但其實有注意到幾個新的開源 Embedding,可以來研究一下就是;但有查到其實用第一個 " Use the built-in embedding engine for AnythingLLM. Zero setup! " 也是很勘用就是
向量資料庫,目前也沒用到
最後截一下對話範例圖
當然,最想要的快速把 RAG 佈署好的功能也是有的 !
值得玩一下呢 !
其實現在有好多LLM Application Development類似的開源,頓時在想,這樣的 LLM、RAG 還有什麼商業模式嗎 ?
git clone https://github.com/taskingai/taskingai.git
cd taskingai
cd docker
docker-compose -p taskingai up -d
安裝過程現在都做得快速又方便啊 ! docker 直接就可以跑起來 !
簡單的試了一下,整個的操作貌似很簡單
最後,再來個 QAnything、CrewAI、Phidata 一鍵三連,我覺得也是個不錯的開源的


看了一下官網的範例,直覺上跟AnythingLLM功能很像,但是手邊 GPU 都已經在跑,所以就先跳過這個 XD,是說這裡有篇寫得也蠻清楚的啦

QAnything支援任意格式檔案或資料庫的本地知識庫問答系統


官網給了說明跟 AutoGen 和 ChatDev 有什麼差異,另外也在網路上找到一段說明,相信認真找找,你應該可以得到你想要的答案 ?
  • Autogen: While Autogen excels in creating conversational agents capable of working together, it lacks an inherent concept of process. In Autogen, orchestrating agents' interactions requires additional programming, which can become complex and cumbersome as the scale of tasks grows. 

  • Autogen 代理只能按照它們被編程的方式進行互動。如果需要代理以不同的方式交互,則需要進行額外的編程。 程式設計複雜:程式設計Autogen 代理程式的互動可能非常複雜,尤其是對於複雜的任務及邏輯。 可擴展性差:Autogen 代理的程式設計方式不利於可擴展性。隨著任務規模的成長,程式設計代理的互動變得更加困難。 

    總的來說,相對於Autogen 和ChatDev 創建會話代理的工具,CrewAI 的構建以生產為中心,既提供了Autogen 對話代理的靈活性,又採用了ChatDev 的結構化流程方法,但又不失靈活性。 CrewAI 基於動態的流程設計理念,具有很強的適應性,可以無縫地融入開發和生產工作流程,以使得工作流程可以根據需求進行調整和優化,以適應不同的工作場景和業務需求。

  • ChatDev: ChatDev introduced the idea of processes into the realm of AI agents, but its implementation is quite rigid. Customizations in ChatDev are limited and not geared towards production environments, which can hinder scalability and flexibility in real-world applications.

  • ChatDev 中的自訂是有限的。這意味著ChatDev 可能難以滿足複雜應用程式的需求。 不適合生產環境:ChatDev 不適合生產環境。這意味著ChatDev 可能難以滿足實際應用程式的要求。 可擴展性差:ChatDev 的實作不利於可擴展性。隨著任務規模的成長,ChatDev 可能難以滿足應用程式的需求。 




至於要不要再先幫各位去踩坑呢 ? 就看看這篇文章的效果,再來決定要不要再補上最後三個踩坑啦;最後再補個關於用 CPU 做推理加速的踩坑好了