博客 / 詳情

返回

利用docker本地部署LLM+通過oneapi鏈接LLM和自建知識庫

1、前言

1.1、要求

本演示採用的windows進行部署,後續會介紹linux的演示,如果在linux系統下熟練了docker和docker-compose的使用,那麼自行舉一反三也很不難
要求1:如果使用的是雲端服務器,那麼至少CPU為4核8g才能勉強帶動,否則輕則問答時間長,重則docker崩潰,乃至遠程連接崩潰,一般個人計算機都能達到要求
要求2:對docker和docker-compose有一定熟悉,儘量本文章會提示一些新手出錯點

1.2、介紹

使用本地模型與自建知識庫,信息安全不易泄露,可自行微調達到目的,語料也可以私有不泄露。後續可能跟進微調操作等,先一步步進行
本次演示目的僅僅是將項目核心搭建,可拓展的方向如:LLM的更換、LLM的微調、知識庫的更新、向量模型的更新。
本次演示採用的模型、知識庫內容、主機配置都是基礎配置。(qwen2、dmeta-embedding-zh、8核16GB無獨顯)
後續會更新在此基礎上的拓展玩法,可以期待一下

2、下載docker-desktop以及做好相應配置,以及配置文件的基本介紹(本操作linux有很大區別)

2.1、下載docker-desktop

進入docker官網需要梯子
選擇相應docker_desktop安裝包下載
image.png
注意大部分windows是AMD架構,所以不要選錯了,具體可以看系統設置(易錯點1)
直接運行exe文件
下面兩個選項需要勾上
image.png
如果報錯可以不勾第一個,後面再更新wsl即可
建議裝好後cmd運行wsl --update(易錯點2)(通用的,可以都使用一些,可能需要梯子,可以使用鏡像)
隨機使用wsl -v查看版本,如果為wsl2.x即更新成功
image.png
使用docker -v查看docker版本(官網下的肯定最新的,主要是看是否安裝成功)
使用docker-compose -v查看docker-compose是否安裝成功(這兩個都是docker-desktop裏面包含的)
此處docker安裝結束

2.2、config.json和docker-compose.yml配置文件

首先cd到自己的該項目工作目錄

curl -O https://harryai.cc/kbqa/docker-compose.yml
curl -O https://harryai.cc/kbqa/config.json

分別運行,將兩份配置文件下載到工作目錄下
這裏介紹一些需要知道的參數
image.png
1、image:鏡像文件,上圖用了國內鏡像,不需要梯子
image.png
這裏mysql:版本號這樣的值,就是去docker.com官網上拉取鏡像,需要梯子
2、ports: 3001:3000, 左邊是映射到宿主機的端口號,右側是docker內部虛擬網絡的運行端口號(docker虛擬網絡後面會提到)
3、volumes,是容器文件和宿主機文件的映射(對本演示無關,瞭解即可)
image.png
上面就是將./oneapi的內容與docker內oneapi容器內部/data目錄保持一致(一變另一個跟着變)
config.json配置文件
這是fastgpt鏡像的配置文件
對於本次演示,唯一要改變的參數不多,如圖
image.png
llmModels配置了模型對應接口去對接oneapi,重要的參數是model,這個參數如何用後面啓動時介紹

3、啓動docker-compose 將所需所有image下載

docker-compose up -d

注意:需要在docker-compose.yml同處目錄下的cmd執行(易錯點3)
同時,只有配置了國內源的鏡像能拉取成功,有個別是從docker.com拉取的,需要梯子再執行一次上述命令,會比較慢耐心等待拉取成功
注意:mysql配置在3306端口,如果電腦本身就裝了mysql並且在運行,會報錯3306端口占用(易錯點4)
netstat -ano | findstr 3306通過此命令找到佔用3306端口的進程,最右側是PID
找到後ctrl+Alt+delete打開任務管理器,ctrl+F搜索獲取的PID並右鍵結束進程
netstat命令不清楚是否windows內置,linux裏面是不內置的,可以在網上看相應軟件包並下載下來
成功放開3306端口後,先執行docker-compose down將所有images關閉,再重新調用docker-compose up -d進行啓動
通過docker ps查看容器的運行,當然windows有docker-desktop可以圖形化展示
用http://localhost:端口號,去訪問fastgpt和oneapi的本地化頁面即可,其他暫時用不上
image.png
當然直接點擊端口的藍字即可進入
當fastgpt和oneapi能正常進入即成功,fastgpt默認用户root密碼1234。oneapi用户root密碼123456
會彈出改密碼界面,沒有必要不用管
接下來運行docker-compose down將docker全部關閉,至此docker部分完成

4、下載ollama和模型qwen2:7b和向量模型dmeta-embedding-zh

4、下載ollama

直接在官網ollama.com下載即可,運行exe直接安裝即可
結束後,在cmd裏面運行ollama -v檢查是否安裝成功
ollama list可以查看安裝且配置在ollama的模型,現在肯定沒有
在ollama.com上方models搜索框搜索qwen2(其他LLM也可以,不過需要對config.json和oneapi機制熟悉的朋友可以換其他LLM,如果是新手朋友,建議跟我選一樣的)
image.png
下方是模型文件,右側有拉取的對應命令,複製到cmd執行即可
同樣操作找到向量模型並拉取
image.png
都結束後,使用ollama list查看已拉取的模型,有上面下載的兩個即可
ollama運行時開放在11434端口,與oneapi和fastgpt,mysql道理一樣
測試qwen2模型接口:`curl "http://localhost:11434/api/chat" ^
--data "{""model"": ""qwen2"", ""messages"": [{""role"": ""user"", ""content"": ""你是誰""}], ""temperature"": 0.1, ""stream"": false}"
`有回覆即成功
測試向量模型接口:`curl "http://localhost:11434/api/embeddings" ^
--data "{""model"": ""shaw/dmeta-embedding-zh"", ""prompt"": ""天空是灰色的""}"
`有向量數據即成功
注意如果下載的是其他模型,需要相應替換model的value,模型的名字可以在ollama list後複製

5、對接所有模塊

5.1、oneapi對接配置

docker-compose up -d啓動docker-compose
進入oneapi本地化界面http://localhost:3001/
點擊渠道->添加新的渠道
image.png
類型選擇ollama,名稱隨意,分組隨意,模型必須和ollama list裏面的名稱一致,因為就是靠這個匹配模型的,密鑰隨意
代理填這個:http://host.docker.internal:11434,通過11434端口訪問ollama程序
注意的是,docker內使用的是虛擬網絡,port 3001:3000右邊就是docker內使用的端口號,左邊是宿主機映射的端口號,docker內部無法直接訪問宿主機網絡,而oneapi運行在docker環境中,所以oneapi要想對接到宿主機的ollama程序,需要使用docker官方提供的http://host.docker.internal:端口號進行訪問。
而oneapi對接fastgpt等同為docker容器內的程序,可以直接通信,至於fastgpt和oneapi對接在docker-compose.yml文件中如圖
image.png
就是OPENAI_BASE_URL參數,如果你是在非本地部署的,需要將openapi換成服務器公網ip
CHAT_API_KEY這個參數也是用於非本地部署的,可以去找資料或者視頻研究,此時演示本地部署不用管這兩個,默認就好
渠道配置好後,點擊測試,成功即可,注意向量模型測試返回400就是正常
同理給qwen2也配置好渠道並測試,如果失敗則説明ollama沒有啓動成功,用下面命令查看是否成功
image.png
ollama裝好就是一直運行的,即使沒有運行裏面的模型。如果11434端口沒在運行,可以搜一下教程

5.2、config.json配置

image.png
將config.json這個位置第一個model和name修改成qwen2,這個會傳入到fastgpt模型選擇參數中,同時也用來對接oneapi渠道的模型名稱(易錯點5)所以一定要一致,不一致後面會報錯的
同理下面有embedding模型,不過默認已經配置好了,如果需要用到別的模型就得一樣修改
保存config.json文件,執行docker-compose down關閉,後啓動docker-compose up -d
每次修改完配置文件都需要重啓docker-compose才行

6、測試模型和自建知識庫

6.1、測試LLM

首先刷新oneapi渠道頁面,重新測試LLM和向量模型,正常後打開fastgpt頁面
image.png
新建一個簡易應用,點進去,裏面model的選項對應上的就是config.json的LLMModels的參數列表
選擇qwen2,也只能用這個,後面的模型使用相應接口去對接用不了。
進行測試對話是否成功,如果報錯,大概率還是config.json和oneapi渠道model名稱不一致,可以檢查一下,注意修改後需要重啓docker-compose

6.2、測試自建知識庫

新建知識庫
image.png
會看到索引模型和文件處理模型,缺一不可,如果沒有索引(向量)模型,那麼知識庫無法使用
image.png
手動錄入一段信息如上圖
回到應用選擇知識庫
image.png
並再次進行問答
image.png
速度會較慢,我用的輕薄本沒有獨顯,CPU跑的,這裏也是測試成功了
接下來就熟練一下fastgpt的使用即可

user avatar openresty_xray 頭像 zhangshilei 頭像 kevin_5d8582b6a85cd 頭像 ji_jason 頭像 openbayescom 頭像
5 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.