ubuntu系統+N卡 | docker compose+ollama+dify(dify和ollama在同一容器)

1、安裝NVIDIA驅動

2、安裝docker,docker compose

3、安裝NVIDIA Container Toolkit

?Installing the NVIDIA Container Toolkit — NVIDIA Container Toolkit(僅 GPU 場景需要)

# Configure the production repository:
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# Update the packages list from the repository:
sudo apt-get update# Install the NVIDIA Container Toolkit packages:
sudo apt-get install -y nvidia-container-toolkit# 配置
# Configure the container runtime by using the nvidia-ctk command:
sudo nvidia-ctk runtime configure --runtime=docker# Restart the Docker daemon:
sudo systemctl restart docker# 檢查 NVIDIA Container Toolkit 版本
(llm) wangqiang@wangqiang:~$ nvidia-container-cli --version
cli-version: 1.17.8
lib-version: 1.17.8
build date: 2025-05-30T13:47+00:00
build revision: 6eda4d76c8c5f8fc174e4abca83e513fb4dd63b0
build compiler: x86_64-linux-gnu-gcc-7 7.5.0
build platform: x86_64
build flags: -D_GNU_SOURCE -D_FORTIFY_SOURCE=2 -DNDEBUG -std=gnu11 -O2 -g -fdata-sections -ffunction-sections -fplan9-extensions -fstack-protector -fno-strict-aliasing -fvisibility=hidden -Wall -Wextra -Wcast-align -Wpointer-arith -Wmissing-prototypes -Wnonnull -Wwrite-strings -Wlogical-op -Wformat=2 -Wmissing-format-attribute -Winit-self -Wshadow -Wstrict-prototypes -Wunreachable-code -Wconversion -Wsign-conversion -Wno-unknown-warning-option -Wno-format-extra-args -Wno-gnu-alignof-expression -Wl,-zrelro -Wl,-znow -Wl,-zdefs -Wl,--gc-sections# 確認 Docker 是否已正確配置為使用 NVIDIA 運行時:
(llm) wangqiang@wangqiang:~$ docker info | grep -i runtimeRuntimes: io.containerd.runc.v2 nvidia runcDefault Runtime: runc

4、docker compose部署ollama

# 創建自定義網絡,實現dify和ollama容器通信
docker network create ollama_dify_network
mkdir ollama && cd ollamanano docker-compose.yml
# 寫入如下內容:
“”“services:ollama:image: ollama/ollama:latestcontainer_name: ollamavolumes:- ./data:/root/.ollama  # 持久化存儲模型數據ports:- "11434:11434"          # 映射 API 端口runtime: nvidia            # 啟用 NVIDIA GPU 支持environment:- NVIDIA_VISIBLE_DEVICES=all  # 可選:暴露所有 GPU- NVIDIA_DRIVER_CAPABILITIES=compute,utility  # 可選:啟用計算和工具能力networks:- ollama_dify_network           # 加入自定義網絡restart: unless-stopped    # 容器異常退出時自動重啟networks:ollama_dify_network:external: true  # 使用已創建的自定義網絡
”“”# 啟動容器
docker compose up -d# 驗證容器狀態
(llm) wangqiang@wangqiang:~/ollama$ docker ps
CONTAINER ID   IMAGE                                       COMMAND                   CREATED          STATUS                    PORTS                                                                      NAMES
72cdf8be3899   ollama/ollama:latest                        "/bin/ollama serve"       13 minutes ago   Up 13 minutes             0.0.0.0:11434->11434/tcp, :::11434->11434/tcp                              ollama

5、ollama部署模型

(llm) wangqiang@wangqiang:~$ docker exec -it ollama ollama run llama3(llm) wangqiang@wangqiang:~$  docker exec -it ollama ollama run deepseek-r1:32b

6、dify

4.1、dify介紹

dify官網:Dify:企業級 Agentic AI 解決方案開發平臺

中文官方幫助文檔:Agent - Dify Docs

4.2、安裝 Dify(AI 應用平臺)

?克隆 Dify 倉庫

mkdir dify && cd dify
git clone https://github.com/langgenius/dify.git

(2)直接下載壓縮包解壓

訪問倉庫:https://github.com/langgenius/dify/#

直接下載壓縮包:

進入 Docker 配置目錄

cd dify/docker
# 在頂級 networks 部分添加外部網絡聲明
networks:# create a network between sandbox, api and ssrf_proxy, and can not access outside.ssrf_proxy_network:driver: bridgeinternal: truemilvus:driver: bridgeopensearch-net:driver: bridgeinternal: trueollama_dify_network:  # 新增聲明external: true       # 關鍵:使用外部網絡# 修改 api 和 worker 服務的網絡配置
services:api:# ... (其他配置不變)networks:- ssrf_proxy_network- default- ollama_dify_network  # 新增連接worker:# ... (其他配置不變)networks:- ssrf_proxy_network- default- ollama_dify_network  # 新增連接

在?.env?文件中添加以下內容:

# Ollama 配置
OPENAI_API_BASE=http://ollama:11434
OPENAI_API_KEY=sk-no-key-required# 可選:設置默認使用 Ollama 模型
OPENAI_MODEL_NAME=llama3

復制環境變量文件

cp .env.example .env

修改環境配置(可選但推薦)

編輯?.env?文件配置關鍵參數:

nano .env  # 或使用其他文本編輯器

重點關注以下參數:

# 必填項
POSTGRES_PASSWORD=your_strong_db_password  # 替換為強密碼
REDIS_PASSWORD=your_redis_password        # 替換為強密碼
SECRET_KEY=your_random_secret_string      # 隨機字符串(建議 32 位)# 可選配置
OPENAI_API_KEY=sk-xxx              # 若使用 OpenAI
SERVICE_API_URL=http://api:5001    # 保持默認
APP_API_URL=http://localhost/api    # 后端 API 地址
CONSOLE_WEB_URL=http://localhost   # 前端訪問地址

關鍵配置項:

POSTGRES_PASSWORD=your_password  # 數據庫密碼
REDIS_PASSWORD=your_password     # Redis 密碼
OLLAMA_BASE_URL=http://host.docker.internal:11434  # Ollama 地址
# 重新生成docker compose配置文件
generate_docker_compose

啟動 Dify 服務

docker compose up -d

檢查容器是否加入同一網絡

docker network inspect ollama_dify_network

預期輸出ollama?和?dify?容器的 IP 地址應出現在?Containers?列表中

使用curl測試模型服務

(llm) wangqiang@wangqiang:~/dify/dify/docker$ curl -X POST http://localhost:11434/api/generate \-H "Content-Type: application/json" \-d '{"model": "deepseek-r1:32b","prompt": "為什么天空是藍色的?","stream": false}'
{"model":"deepseek-r1:32b","created_at":"2025-06-15T11:36:27.900708677Z","response":"\u003cthink\u003e\n嗯,今天我突然想到一個問題:為什么天空是藍色的呢?以前好像學過一些關于這個的知識,但具體細節記不太清楚了。所以決定仔細想一想。\n\n首先,我想起來太陽發出的光看起來是白色的,對吧?那如果太陽光是白色的,為什么我們看到的天空卻是藍色的呢?這一定和大氣層有關系,因為地球周圍有大氣,而太空中沒有大氣,所以太空中的天空應該是黑色的。那么大氣到底做了什么讓我們的天空變成藍色?\n\n接下來,我想到可能與光的顏色有關。我記得不同顏色的光波長不一樣,比如紅色光波長較長,藍色光波長較短。也許在大氣層中,藍色光被散射得更多。那為什么會這樣呢?是不是因為分子或者微粒更容易散射較短波長的光線?\n\n然后,我聯想到瑞利散射這個名字,可能是相關的。瑞利散射是指光在傳播過程中與比光波波長小很多的顆粒發生相互作用時產生的散射現象。在這種情況下,散射的強度和波長的四次方成反比,所以藍色光(較短波長)會被更強烈地散射到各個方向。\n\n再想想,如果太陽光進入大氣層后,藍色光被大量散射,而紅色光則較少被散射,繼續直射下來。這樣當我們在地面抬頭看天時,看到的是被散射的藍色光,所以天空呈現出藍色。而在日出或日落的時候,陽光需要穿過更厚的大氣層,大部分藍色光已經被散射掉了,剩下的主要是紅色和橙色光,所以太陽看起來是紅色的。\n\n不過,我是不是漏掉了一些因素?比如大氣中的水蒸氣、灰塵等是否也起作用?雖然瑞利散射主要由分子引起,但較大的顆粒可能也會有米氏散射。不過在白天,藍色主導了天空的顏色,而當接近地面時,可能會有一些黃色調出現。\n\n總的來說,天空是藍色的主要原因是因為太陽光中的藍色光被大氣層中的氣體分子強烈散射到各個方向,使得我們無論看向哪里都能看到這些藍色的光線。這解釋了為什么晴朗的天空看起來是藍色的。\n\u003c/think\u003e\n\n天空之所以呈現藍色,主要是因為太陽光在經過地球大氣層時發生了瑞利散射。以下是詳細的解釋:\n\n1. **太陽光的顏色**:太陽發出的光實際上是白色的,包含了各種顏色的光,每種顏色對應不同的波長。\n\n2. **大氣中的分子作用**:當這些光線進入地球的大氣層時,與空氣中的氣體分子(主要是氮氣和氧氣)發生相互作用。這種現象被稱為散射。\n\n3. **瑞利散射原理**:根據瑞利散射理論,光的散射強度與其波長的四次方成反比。因此,波長較短的藍光被強烈散射到各個方向,而波長較長的紅光則較少受到散射影響,繼續直線傳播。\n\n4. **觀察效果**:由于藍光在大氣中被廣泛散射,當我們在地面上看向天空時,無論看向哪個方向,都能接收到大量來自不同分子散射來的藍光,因此天空呈現出藍色。\n\n5. **日出和日落的特殊情況**:在日出或日落時分,陽光需要穿過更厚的大氣層。此時,大部分藍光已經被散射掉,剩下的紅光和橙光主導了光線的顏色,使得太陽呈現紅色。\n\n綜上所述,天空呈現藍色的原因是太陽光中的藍光被大氣分子強烈散射的結果。這種現象不僅在白天讓天空顯得蔚藍,也在日出和日落時分帶來了色彩斑斕的景象。
curl -X POST http://localhost:11434/api/chat \-H "Content-Type: application/json" \-d '{"model": "llama3","messages": [{"role": "user", "content": "Hello, world!"}]}'

訪問 Dify 平臺

首次訪問?http://localhost/install?初始化管理員賬戶。

登錄后進入工作臺:http://192.168.2.22/apps

http://192.168.2.22/install

4.3、4.3、將 DeepSeek 接入 Dify

配置模型供應商

  • 登錄 Dify 后,點擊右上角頭像 →?設置?→?模型供應商
  • 添加 Ollama 模型:
    • 名稱:DeepSeek-R1
    • 基礎 URL:http://host.docker.internal:11434
    • 模型名稱:deepseek-r1
    • 最大上下文長度:根據模型文檔填寫(如 32768 tokens)。

驗證連接

  • 在 Dify 的?模型供應商?頁面測試連接,確保無報錯。

4.4、創建 AI 應用

  • 新建應用

    • 進入工作臺 →?創建空白應用?→ 選擇?聊天助手?類型 → 輸入應用名稱 →?創建
  • 配置模型參數

    • 在應用后臺:
      • 選擇模型:DeepSeek-R1
      • 設置提示詞(Prompt)和參數(如溫度、最大 token 數)。
  • 測試對話

    • 在應用界面輸入問題(如 "周杰倫最新專輯"),觀察模型輸出。
  • 擴展功能(可選)

    • 本地知識庫:上傳文檔(PDF、TXT 等),Dify 會自動解析并關聯到對話中。
    • 深度思考模式:在提示詞前添加?[請啟用深度思考]

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

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

相關文章

實習手記:基于大模型的搜索引擎開發實踐

初入團隊:從理論到實踐的跨越五月份開始,我懷著忐忑又期待的心情以線上的方式加入了公司AI研發中心的搜索引擎優化小組。作為一名數據科學與大數據技術專業的學生,這是我第一次參與工業級AI項目的開發,團隊的任務是構建一個基于大…

用Python實現神經網絡(二)

#Overfitting是機器學習的主要問題。下面我們來看一下過擬合現像:import numpy as npimport matplotlib.pyplot as pltimport matplotlib as mplimport tensorflow as tffrom scipy.optimize import curve_fit# Generic matplotlib parameters for plots and figure…

數據結構入門 (二):掙脫連續空間的束縛 —— 單向鏈表詳解

TOC(目錄) 引言:整齊的代價 在上一篇文章中,我們一起探索了數據結構大家族的第一位成員——順序表。我們了解到,順序表作為一種線性結構,其最大的特點在于邏輯順序與物理順序的一致性,即元素之間不僅存在邏輯上的前后關…

AI-視頻一致性與多幀控制在AIGC中的技術挑戰與突破!

全文目錄:開篇語前言1. 視頻中人物一致性建模的難點與現有解決方案**人物一致性建模的挑戰****現有解決方案****案例代碼:基于姿態估計的多幀一致性保持**2. 光照/紋理/姿態跨幀保持方法剖析**跨幀光照與紋理一致性****跨幀姿態一致性**3. 幀間插值與關鍵…

基于Qwen2.5-3B-Instruct的LoRA微調與推理實戰指南

前言 大語言模型(LLM)的微調是當前AI領域的熱門話題,而參數高效微調方法(如LoRA)因其低成本和高效率備受關注。本文將手把手教你如何使用Qwen2.5-3B-Instruct模型進行LoRA微調,并構建完整的推理流程。 一、環境準備 1.1 硬件要求 ? GPU: 至少16GB顯存(如…

電腦插上u盤不顯示怎么回事

對于經常使用電腦的用戶來說,U盤是一種再熟悉不過的存儲工具。不管是拷貝資料、備份文件,還是制作啟動盤,U盤都發揮著重要作用。然而,有時候你可能會遇到這樣的情況:“U盤插上電腦,燈亮了,但電腦…

2025年6月GESP(C++二級): 冪和數

2025年6月GESP(C++二級): 冪和數 題目描述 對于正整數 n n n,如果 n n n 可以表為兩個

Windows、macOS、liunx下使用qemu搭建riscv64/linux

背景 在Windows、macOS和Linux環境下使用QEMU搭建RISC-V 64位Linux系統,網絡上存在大量過時、不完整或錯誤的教程。且部分AI生成的內容“幻覺”現象嚴重,導致關鍵步驟錯誤且難以進行。為確保可靠性,本教程基于最新實測驗證,涵蓋三…

簡單使用MCP

1、說明# 測試環境服務器 CPU數量:2核 內存:4GB 磁盤:50GB# 補充 如果不想使用Docker進行操作,只需要跳過Docker相關命令操作 即:使用Ollama運行模型,使用Python來創建MCP2、安裝Docker# 安裝Docker https:…

電腦裝機軟件一鍵安裝管理器

軟件使用 現在的裝機軟件很多,主要幾種類型就是辦公、看圖、影音、下載等,如果每次裝機之后,手動一個一個去安裝,費時費力還容易安裝到全家桶。 就有人整理了網絡上常用的一系列裝機軟件純凈和諧版本,并打包到一起&a…

深度學習入門-深度學習簡介

深度學習是加深了層的深度神經網絡。只需通過疊加層,就可以創建深度網絡。1、 加深網絡將深度學習中的重要技術(構成神經網絡的各種層、學習時的有效技巧、對圖像特別有效的CNN、參數的最優化方法等)匯總起來,創建一個深度網絡&am…

Linux 下安裝DM8數據庫詳細教程

Linux 下安裝DM8數據庫詳細教程 一、環境準備 1.操作系統要求 DM 數據庫支持多種操作系統,如 Windows、Linux 等。對于 Linux 系統,確保內核版本符合要求,例如 CentOS 7 或更高版本。同時,要保證系統有足夠的磁盤空間(建議至少 10GB 以上)和內存(至少 1GB 以上)。 對…

搭建基于Gitee文檔筆記自動發布

搭建基于Gitee文檔筆記自動發布由于現在gitee不支持代理靜態頁面,并且github.io需要VPN,實際使用的話gitee更為方便。一、為服務器和個人PC添加免密push和pull 參考鏈接:https://help.gitee.com/base/account/SSH%E5%85%AC%E9%92%A5%E8%AE%BE…

【Lua】閉包可能會導致的變量問題

先思考下面這個問題:local function counter()local count 0return function()count count 1return countend endlocal a counter() local b counter()print(a()) --> ? print(a()) --> ? print(b()) --> ? print(a()) --> ?輸出結果&#xff…

可觀測性、OpenTracing、OpenCensus、OpenTelemetry、Jaeger

監控與觀測 隨著軟件應用從單片架構向分布式微服務體系轉變,應用監控(Monitoring)和觀測(Observability)的需求也隨之提升。兩者存在相同的定義,目的都是為了發現應用程序中的問題。但還是有差別: 監控:目的是為了捕獲已知的問題…

Linux下使用原始socket收發數據包

在Linux系統中,使用非原始的socket,可以收發TCP或者UDP等網絡層數據包。如果要處理網絡層以下的數據包,比如ICMP、ARP等,或者更底層,比如鏈路層數據包,就得使用原始socket了。 創建socket 創建socket要使用…

暑期自學嵌入式——Day05補充(C語言階段)

接續上文:暑期自學嵌入式——Day05(C語言階段)-CSDN博客 主頁點關注不迷路喲。你的點贊、收藏,一鍵三連,是我持續更新的動力喲!!! 主頁: 一位搞嵌入式的 genius-CSDN博…

.NET Core EFCore零基礎快速入門簡單使用

一、什么是 Entity Framework (EF) Core Entity Framework (EF) Core 是輕量化、可擴展和跨平臺版的對象關系映射程序 (O/RM)數據訪問技術,。 它將開發人員從編寫大量 SQL 語句中解放出來。 二、EF的相關程序包 Microsoft.EntityFrameworkCore 核心程序包&#x…

AAC音頻格式

目錄 AAC音頻格式介紹 主要特點 技術優勢 常見文件擴展名 應用領域 AAC與PCM的區別與優勢對比 基本概念差異 主要技術區別 各自優勢 PCM的優勢 AAC的優勢 應用場景選擇 AAC音頻數據格式解析 1. AAC 文件格式 (1) ADIF (Audio Data Interchange Format) (2) ADT…

pom.xml文件中的${}變量從哪里傳值

在 Maven 的 pom.xml 文件中,${} 格式的變量(稱為屬性占位符)的值來源主要有以下幾種途徑: 1. ?內置屬性(Maven 預定義)?? ${project.basedir}:項目根目錄${project.version}:項…