Dify 與 Xinference 最佳組合 GPU 環境部署全流程

背景介紹

在前一篇文章 RAG 項目對比 之后,確定 Dify 目前最合適的 RAG 框架。本次就嘗試在本地 GPU 設備上部署 Dify 服務。

Dify 是將模型的加載獨立出去的,因此需要選擇合適的模型加載框架。調研一番之后選擇了 Xinference,理由如下:

  • 支持多種類型的模型,包括 LLM,Embedding, Rerank, Audio 等多種業務場景的模型需求,一個框架全搞定;
  • 方便的模型管理能力,提供可視化頁面快速部署模型
  • 支持直接從 ModelScope 下載模型,避免 huggingface 被墻的問題;

本文是 Dify 與 Xinference 最佳組合的 GPU 設備部署流程。為了充分利用 nvidia GPU 的能力,需要先安裝顯卡驅動,CUDA 和 CuDNN,這部分網上的教程比較多了,大家可以自行搜索參考安裝,安裝時需要注意版本需要與自己的 GPU 顯卡版本匹配。

Dify 部署

參考 Dify 官方文檔 進行安裝。

首先需要下載 Dify 對應的代碼:

git clone https://github.com/langgenius/dify.git

之后創建環境變量文件 .env, 根據需要進行修改,之后就可以基于 docker compose 啟動:

cd dify/docker
cp .env.example .env
docker compose up -d

默認訪問 http:// 應該就可以看到 Dify 的頁面。

docker 鏡像問題

實際執行鏡像拉取時發現,Docker hub 因為監管的原因已經無法訪問了。為了解決這個問題,目前相對可行的方案:

  1. 利用一些目前可用的鏡像服務,當前(2024-7-11)可用的是 public-image-mirror,通過修改本地的鏡像下載地址進行加速;
  2. 利用 Github Action 將鏡像拉取至個人阿里云的的私有鏡像倉庫,可以參考 教程;

實際為了簡單直接采用方案 1,在本地文件 /etc/docker/daemon.json 中添加:

{"registry-mirrors": ["https://docker.m.daocloud.io"]
}

如果上面的地址不可用,可以嘗試另一個測試可用的地址:

{"registry-mirrors": ["https://docker.anyhub.us.kg"]
}

修改之后執行下面命令重啟 docker 服務:

sudo systemctl daemon-reload
sudo systemctl restart docker

接下來就可以正常拉取鏡像了。

Xinference 部署

XInference 的部署也選擇基于 docker 部署,可以參考 XInference 部署,實際使用的部署命令為:

docker run -e XINFERENCE_MODEL_SRC=modelscope -v <local model path>:/models -e XINFERENCE_HOME=/models -p 9998:9997 --gpus all registry.cn-hangzhou.aliyuncs.com/xprobe_xinference/xinference:latest xinference-local -H 0.0.0.0

各位使用時將上面命令行中的 <local model path> 替換為期望服務器上模型存儲的路徑即可

上面的命令利用 XINFERENCE_MODEL_SRC=modelscope 指定了模型最終是從 modelscope 下載的,這樣國內下載模型鏡像的速度比較快。

上面的命令會將 docker 中的 9997 端口映射至本地的 9998 端口,部署完成后訪問 http://<server ip>:9998/ui 就可以看到 XInference 可視化頁面,有需要可以調整服務器上實際占用的端口。

docker GPU 不可用

上面的命令實際執行時會報錯 docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]]., docker 目前是不能直接使用 GPU 設備的。

此時需要參考 Nvidia 文檔 安裝 nvidia-container-toolkit

首先需要先補全 apt-get 下載源:

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \&& curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

接下來更新源,安裝對應的包:

sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit

安裝完成之后修改 docker 配置文件 /etc/docker/daemon.json

{"default-runtime": "nvidia","runtimes": {"nvidia": {"path": "nvidia-container-runtime","runtimeArgs": []}}
}

之后執行 sudo systemctl restart docker 重啟 docker。

此時再執行上面的 docker run 命令去使用 GPU 設備就沒問題了。

Dify 模型配置

上述服務配置好之后,就可以在 Xinference 下載所需的模型,XInference 啟動后實際會占用服務器上的 9998。因此訪問 http://<server ip>:9998/ui 就可以進入可視化頁面下載所需的模型;

在 Xinference 上下載和運行所需的模型后可以返回 Dify 可視化頁面,在 Dify 的設置頁中配置對應的模型,對應的頁面如下所示:

請添加圖片描述

RAG 一般情況下需要配置上 LLM, Text Embedding 和 Rerank 模型。配置完成后就可以自由玩耍了。

總結

本文是實際部署 Dify + Xinference 組合的完整流程,實際上如果 docker 可用的話,整體的流程還是比較絲滑的。期望給后面折騰 Dify 部署的一些幫助,減少重復的踩坑。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/45054.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/45054.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/45054.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

易我分區大師18.8.0更新:兩大功能改進

近日&#xff0c;易我分區大師18.8.0更新上線。此次更新重點改進了系統克隆功能&#xff0c;支持從第二塊系統盤&#xff08;從盤&#xff09;克隆系統&#xff1b;同時&#xff0c;軟件支持將分區的文件系統格式從FAT轉換成exFAT。 01、系統克隆 系統克隆功能旨在幫助用戶在…

pinia學習

conuter.ts <template><div><!-- 顯示當前的計數 --><p>Count: {{ count }}</<!-- 顯示計算的雙倍計數 --><p>Double Count: {{ doubleCount }}</p><!-- 點擊按鈕以增加計數 --><button click"increment">…

基于紅黑樹對map和set的封裝

前言 前面我們已經對紅黑樹做了介紹和實現&#xff0c;本期我們來對紅黑樹進一步改造&#xff0c;然后基于改造后的紅黑樹封裝出map和set&#xff01; 本期內容介紹 ? 紅黑樹的改造 ? 紅黑樹的迭代器實現 ? map的封裝 ? set的封裝 ? 全部源碼 ● 紅黑樹的改造 我們目前…

未來互聯網的新篇章:深度解析Facebook的技術與戰略

隨著科技的飛速發展和社會的不斷變遷&#xff0c;互聯網作為全球信息交流的重要平臺&#xff0c;正經歷著前所未有的變革和演進。作為全球最大的社交媒體平臺之一&#xff0c;Facebook不僅是人們溝通、分享和互動的重要場所&#xff0c;更是科技創新和數字化進程的推動者。本文…

音視頻開發—FFmpeg 從MP4文件中抽取視頻H264數據

文章目錄 MP4文件存放H264數據方式MP4 文件結構概述H.264 數據在 MP4 中的存儲1. ftyp 盒子2. moov 盒子3. mdat 盒子 H.264 數據在 stsd 盒子中的存儲&#xff08;AVC1&#xff09;AVC1與Annex-B 格式&#xff08;裸 H.264 流&#xff09;的區別 從MP4文件中提取H264裸流步驟&…

java使用easypoi模版導出word詳細步驟

文章目錄 第一步、引入pom依賴第二步、新建導出工具類WordUtil第三步、創建模版word4.編寫接口代碼5.導出結果示例 第一步、引入pom依賴 <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-spring-boot-starter</artifactId><…

怎么壓縮視頻?推薦7款必備視頻壓縮軟件免費版(強烈建議收藏)

如今&#xff0c;視頻內容日益豐富&#xff0c;并占據了許多人的日常娛樂和工作生活。然而&#xff0c;隨著高清和超高清視頻的普及&#xff0c;視頻文件的體積也越來越大&#xff0c;給存儲和傳輸帶來了挑戰。因此&#xff0c;學會如何壓縮視頻文件成為了許多人的需求之一。本…

小米官網的數據是怎么優化的?

小米PC端官網首頁的“全部商品分類”功能是用戶瀏覽和選擇商品的重要入口。為了優化這一功能的數據展示和用戶體驗&#xff0c;可以采取以下幾個步驟&#xff1a; 數據加載優化&#xff1a; 懶加載&#xff08;Lazy Loading&#xff09;&#xff1a;當鼠標劃過“全部商品分類”…

實現前端登錄注冊功能(有源碼)

引言 用戶登錄和注冊是任何現代Web應用程序的基本功能。在前端開發中&#xff0c;實現一個安全且用戶友好的登錄注冊系統至關重要。本文將介紹如何使用HTML、CSS和JavaScript&#xff08;包括Vue.js&#xff09;來實現前端的登錄和注冊功能。 1. 項目結構 首先&#xff0c;我們…

軟設之訪問者模式

設計模式中訪問者模式的意圖是&#xff1a; 表示一個作用于某對象結構中的各元素的操作&#xff0c;使得在不改變各元素的類的前提下定義作用于這些元素的新操作。 舉個例子&#xff0c;比如說有個游客想去幾個景點&#xff0c;去每個景點都想按統一的流程。但是每個景點都有…

vue3 學習筆記04 -- axios的使用及封裝

vue3 學習筆記04 – axios的使用及封裝 安裝 Axios 和 TypeScript 類型定義 npm install axios npm install -D types/axios創建一個 Axios 實例并封裝成一個可復用的模塊&#xff0c;這樣可以在整個應用中輕松地進行 API 請求管理。 在 src 目錄下創建一個 services 文件夾&…

關于鋰電池的充電過程

鋰電池的充電階段大概可以分為四個階段&#xff1a;涓流充電、恒流充電、恒壓充電以及充電終止。 涓流充電&#xff1a;這是充電過程的第一階段&#xff0c;主要用于對完全放電的電池單元進行預充&#xff08;恢復性充電&#xff09;。當電池電壓低于大概3V時&#xff0c;采用最…

【學習css1】flex布局-頁面footer部分保持在網頁底部

中間內容高度不夠屏幕高度撐不開的頁面時候&#xff0c;頁面footer部分都能保持在網頁頁腳&#xff08;最底部&#xff09;的方法 1、首先上圖看顯示效果 2、奉上源碼 2.1、html部分 <body><header>頭部</header><main>主區域</main><foot…

PaintsUndo - 一張照片一鍵生成繪畫過程視頻 本地一鍵整合包下載

這就是ControlNet作者張呂敏大佬的新作&#xff0c;PaintsUndo。只要你有一張圖片&#xff0c;PaintsUndo 就能讓它變成完整的繪畫過程視頻。這科技&#xff0c;絕了。 你有沒有想過&#xff0c;一張靜態圖片也能變成一個繪畫教程? PaintsUndo 就是這么神奇。你只需要提供一…

通過手機供網、可修改WIFI_MAC的網絡設備

一、修改WIFI mac&#xff08;bssid&#xff09; 取一根網線&#xff0c;一頭連著設備黃色網口、一頭連著電腦按住設備reset按鍵&#xff0c;插入電源線&#xff0c;觀察到藍燈閃爍后再松開reset按鍵 打開電腦瀏覽器&#xff0c;進入192.168.1.1&#xff0c;選擇“MAC 地址修改…

【Spring Boot】Spring原理:Bean的作用域和生命周期

目錄 Spring原理一. 知識回顧1.1 回顧Spring IOC1.2 回顧Spring DI1.3 回顧如何獲取對象 二. Bean的作用域三. Bean的生命周期 Spring原理 一. 知識回顧 在之前IOC/DI的學習中我們也用到了Bean對象&#xff0c;現在先來回顧一下IOC/DI的知識吧&#xff01; 首先Spring IOC&am…

可視化學習:如何用WebGL繪制3D物體

在之前的文章中&#xff0c;我們使用WebGL繪制了很多二維的圖形和圖像&#xff0c;在學習2D繪圖的時候&#xff0c;我們提過很多次關于GPU的高效渲染&#xff0c;但是2D圖形的繪制只展示了WebGL部分的能力&#xff0c;WebGL更強大的地方在于&#xff0c;它可以繪制各種3D圖形&a…

C語言之數據在內存中的存儲(2),浮點數在內存中的存儲

目錄 前言 一、引例 二、浮點型在內存中的存儲 三、浮點數在內存中的存和取過程 1.浮點數的存儲過程 2.浮點數的取過程 四、引例解析 總結 前言 想知道浮點數在內存中是如何存儲的嗎&#xff0c;本文就告訴你答案&#xff0c;雖然一般情況題目還是面試涉及到浮點數在內…

新華三H3CNE網絡工程師認證—ACL使用場景

ACL主要用于實現流量的過濾&#xff0c;業務中網絡的需求不止局限于能夠連同。 一、過略工具 你的公司當中有研發部門&#xff0c;包括有財務部門&#xff0c;財務部門的訪問是要做到控制的&#xff0c;防止被攻擊。 這種的過濾方法為&#xff0c;在設備側可以基于訪問需求來…

解決IntelliJ IDEA連接MySQL時“Public Key Retrieval is not Allowed”問題

前言 在使用IntelliJ IDEA開發環境中連接MySQL數據庫時&#xff0c;可能會遇到“Public Key Retrieval is not allowed”這樣的錯誤提示&#xff0c;即使輸入的用戶名和密碼完全正確。本文將指導你如何解決這一問題&#xff0c;確保順利建立數據庫連接。 錯誤背景 這一問題通…