基于 Dify + vLLM插件 + Qwen3 构建问答机器人Docker版

前提条件

  1. 硬件要求:

    • 推荐 NVIDIA GPU (至少 16GB 显存,Qwen3 可能需要更多)

    • 至少 32GB 内存

    • 足够的存储空间 (Qwen3 模型文件较大)

  2. 软件要求:

    • Docker 和 Docker Compose

    • Python 3.8+

    • CUDA 和 cuDNN (与你的 GPU 兼容的版本)

安装步骤

1. 安装 Dify

根据官方文档,你可以通过以下方式安装 Dify

https://blog.csdn.net/qq_60245590/article/details/147661284?sharetype=blogdetail&sharerId=147661284&sharerefer=PC&sharesource=qq_60245590&spm=1011.2480.3001.8118

2. 安装 vLLM

vLLM 是一个高效的大语言模型推理引擎,我们需要安装支持 Qwen 的版本:

python 复制代码
pip install vllm
# 或者使用特定版本
pip install vllm==0.3.3

查看vllm安装路径:

3. 下载 Qwen3 模型

下载 Qwen3 模型 👈

python 复制代码
# huggingface方式下载
pip install huggingface_hub
python -c "from huggingface_hub import snapshot_download; snapshot_download(repo_id='Qwen/Qwen3-8B', local_dir='./Qwen3-8B')"



python -c "from huggingface_hub import snapshot_download; snapshot_download(repo_id='Qwen/Qwen3-0.6B', local_dir='./Qwen3-4B')"

#ModelScope(阿里云镜像)下载
pip install modelscope
python -c "from modelscope import snapshot_download; snapshot_download('Qwen/Qwen3-0.6B', cache_dir='./qwen3-4b')"

4. 配置 Dify 使用 vLLM 和 Qwen3

4.1 创建模型目录

dify/docker 目录下执行:

复制代码
# 创建 qwen3-7b 目录
mkdir -p qwen3-7b

目录结构示例:

复制代码
dify/
  └── docker/
      ├── qwen3-7b/    # 你新建的目录
      ├── docker-compose.yml
      └── .env
4.2 通过环境变量配置(推荐)

修改 dify/docker/.env 文件,添加以下内容:

复制代码
# vLLM 配置
VLLM_ENABLED=true
VLLM_SERVER_URL=http://vllm-server:8000  # 如果vLLM单独容器部署

# Qwen3 模型配置
MODEL_PROVIDER=vllm
MODEL_NAME=qwen3-4b

修改 dify/docker/docker-compose.yml,在 api 服务部分添加 vLLM 相关环境变量:

python 复制代码
services:
  # API service
  api:
    image: langgenius/dify-api:0.15.3
    restart: always
    environment:
      <<: *shared-api-worker-env  # 保留锚点合并
      GOOGLE_STORAGE_BUCKET_NAME: ""  # 可以覆盖为空
      VLLM_ENABLED: "true"        # 改为冒号键值对
      VLLM_SERVER_URL: "http://vllm-server:8000"
      MODEL_PROVIDER: "vllm"
      MODEL_NAME: "qwen3-4b"
      MODE: "api"
      SENTRY_DSN: "${API_SENTRY_DSN:-}"
      SENTRY_TRACES_SAMPLE_RATE: "${API_SENTRY_TRACES_SAMPLE_RATE:-1.0}"
      SENTRY_PROFILES_SAMPLE_RATE: "${API_SENTRY_PROFILES_SAMPLE_RATE:-1.0}"
    depends_on:
      - db
      - redis
    volumes:
      - ./volumes/app/storage:/app/api/storage
    networks:
      - ssrf_proxy_network
      - default
4.3 启动 vLLM 服务

建议使用单独的 Docker 容器运行 vLLM,修改 docker-compose.yml

python 复制代码
services:
 vllm-server:
    image: vllm/vllm-openai:latest  # 从Docker Hub拉取
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]
    command:
      - --model=/data/qwen3-4b
      - --trust-remote-code
      - --host=0.0.0.0
      - --port=8000
    volumes:
      - ./qwen3-4b:/data/qwen3-4b
    ports:
      - "8000:8000"
    networks:
      - default  # 必须和 api 在同一网络
这个镜像是什么?
  • 镜像名称 : ghcr.io/vllm/vllm-openai:latest

  • 用途 : 这是 vLLM 官方提供的镜像,用于部署高性能的 OpenAI 兼容 API 服务(支持类似 ChatGPT 的接口)。

  • 典型场景 : 在 dify 等 LLM 应用框架中,用于连接本地模型(如你配置的 qwen3-4b)。

4.4 启动服务:
复制代码
cd dify/docker
docker compose down 
docker compose up -d

服务启动过程中如遇

Error response from daemon: could not select device driver "nvidia" with capabilities: [[gpu]]

  • 表示 Docker 无法找到 NVIDIA 驱动接口

  • Connection refused

    因为 vLLM 需要 GPU 才能启动,没有 GPU 支持时服务会直接失败

解决方案步骤
验证 NVIDIA 驱动
复制代码
nvidia-smi  # 确认驱动已安装且正常工作

如果无输出,需先安装驱动:

复制代码
# Ubuntu 示例(根据你的系统调整)
sudo apt-get install -y nvidia-driver-535
sudo reboot
安装 NVIDIA Container Toolkit
复制代码
# 添加仓库
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -

curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list

# 安装工具包
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit

# 重启 Docker
sudo systemctl restart docker

拉取 CUDA 镜像并验证 GPU

手动拉取镜像并运行 nvidia-smi

镜像加速(推荐)

复制代码
tee /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
EOF

修改后重启 Docker:

复制代码
systemctl restart docker

# 运行测试(验证 GPU 是否可见)
docker run --rm --gpus all nvidia/cuda:12.2.0-base nvidia-smi
验证 Docker GPU 支持
复制代码
docker run --rm --gpus all nvidia/cuda:12.2.0-base nvidia-smi

应该会显示与主机 nvidia-smi 相同的输出。

重建 vLLM 服务
复制代码
cd /dify/docker
docker compose down
docker compose up -d vllm-server
检查服务状态
复制代码
docker compose logs -f vllm-server | grep -i error
curl http://localhost:8000/v1/models
4.5 验证配置

检查 vLLM 服务是否正常运行:

复制代码
curl http://localhost:8000/v1/models

curl http://localhost:8001/v1/models

检查 Dify API 是否识别到模型:

复制代码
curl http://localhost/v1/models -H "Authorization: Bearer your-api-key"

5. 在 Dify 中创建应用

  1. 访问 Dify 控制台 (通常是 http://localhost:80)

  2. 创建新应用,选择"对话型应用"

  3. 在模型设置中,选择 vLLM 作为提供商,然后选择 Qwen3-7B 模型

  4. 配置提示词和对话流程

6. 测试和优化

  1. 在 Dify 的 playground 中测试问答功能

  2. 根据性能调整 vLLM 参数:

    • --tensor-parallel-size: 张量并行度

    • --gpu-memory-utilization: GPU 内存利用率

    • --max-num-seqs: 最大序列数

常见问问题解决

GPU 内存不足
  1. 你的 RTX 3090 只有 24GB 显存

  2. QWen-4B 模型需要约 20GB+ 显存(加载后)

  3. 剩余内存不足以处理请求(需要额外空间用于计算)

查看显存状态

python 复制代码
nvidia-smi
watch -n 1 nvidia-smi  # 动态监控
启用量化(显存减半)
python 复制代码
pip install auto-gptq  # 先安装量化支持

python3 -m vllm.entrypoints.openai.api_server \
  --model=/data/qwen3-4b \
  --quantization=gptq \                # 启用4bit量化
  --gpu-memory-utilization=0.9
相关推荐
带鱼吃猫3 分钟前
Linux系统:进程程序替换以及相关exec接口
linux·运维·服务器
贰元112 分钟前
微信聊天机器人搭建 教程/开发
运维·服务器·前端
mpr0xy39 分钟前
用Playwright自动化网页测试,不只是“点点点”
运维·javascript·自动化·html5
荒--3 小时前
Linux中安装mysql8,转载及注意事项
linux·运维·adb
wanhengidc4 小时前
企业为什么选择浙江电信服务器租用?
运维·服务器
請叫我菜鳥4 小时前
Nginx反向代理的负载均衡配置
运维·nginx·负载均衡
yangshuo12814 小时前
家用服务器 Ubuntu 服务器配置与 Cloudflare Tunnel 部署指南
运维·服务器·ubuntu
Lilith的AI学习日记5 小时前
n8n 中文系列教程_17. 为什么我的n8n数据库越来越大?解决方案全解析
网络·docker·容器·aigc·n8n
whoarethenext5 小时前
linux的时间轮
linux·运维·linq·时间轮