Linux离线部署Dify+Vllm(Qwen2.5-7b)

Linux离线部署Dify+Vllm(Qwen2.5-7b&Bge-m3&bge-reranker-v2-m3)

查看显卡配置及模型是否在显卡上运行nvidia-smi

1. 下载Vllm模型(Qwen2.5-7b)和Bge-m3模型使用国内魔搭ModelScope速度快

shell 复制代码
#PowerShell管理员
pip install modelscope

python -c "from modelscope import snapshot_download; snapshot_download('Qwen/Qwen2.5-7B-Instruct', local_dir=r'C:\AI\Qwen2.5-7B-Instruct')"

python -c "from modelscope import snapshot_download; snapshot_download('BAAI/bge-m3', local_dir=r'C:\AI\bge-m3')"

#下个1.5B的测试用
python -c "from modelscope import snapshot_download; snapshot_download('deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B', local_dir=r'C:\AI\DeepSeek-R1-Distill-Qwen-1.5B')"

#reranker
python -c "from modelscope import snapshot_download; snapshot_download('BAAI/bge-reranker-v2-m3', local_dir=r'C:\AI\bge-reranker-v2-m3')"

2. 复制文件到Linux系统的/data/models目录下,需先sudo chmod 777/data/models,并校验

shell 复制代码
#PowerShell管理员:返回True=文件完整
Test-Path C:\AI\Qwen2.5-7B-Instruct\config.json

3. docker compose配置

yml 复制代码
  #vllm-gpu1
  vllm-gpu1:
    image: vllm/vllm-openai:latest
    container_name: vllm-gpu1
    runtime: nvidia
    ipc: host
    shm_size: '8gb'
    ports:
      - "9000:8000"
    volumes:
      - /data/models:/models
    environment:
      - NVIDIA_VISIBLE_DEVICES=1
      - CUDA_DEVICE_ORDER=PCI_BUS_ID
      - HF_HUB_OFFLINE=1
      - TRANSFORMERS_OFFLINE=1
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              device_ids: ['1']
              capabilities: [gpu]
    command: >
      /models/Qwen2.5-7B-Instruct
      --served-model-name Qwen2.5-7B-Instruct
      --gpu-memory-utilization 0.5
      --max-model-len 32768
      --port 8000


  vllm-embed:
    image: vllm/vllm-openai:latest
    container_name: vllm-embed1
    runtime: nvidia
    ipc: host
    shm_size: '8gb'
    ports:
      - "9002:8000"
    volumes:
      - /data/models:/models
    environment:
      - NVIDIA_VISIBLE_DEVICES=1
      - CUDA_DEVICE_ORDER=PCI_BUS_ID
      - TRANSFORMERS_OFFLINE=1
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              device_ids: ['1']
              capabilities: [gpu]
    command: >
      /models/bge-m3
      --runner pooling
      --model-impl transformers
      --enforce-eager
      --served-model-name bge-m3
      --gpu-memory-utilization 0.1
      --port 8000
      
      
  #用于测试的deepseek-r1-1.5b
  vllm-ds:
    image: vllm/vllm-openai:latest
    container_name: vllm-ds
    runtime: nvidia
    ipc: host
    shm_size: '8gb'
    ports:
      - "9003:8000"
    volumes:
      - /data/models:/models
    environment:
      - NVIDIA_VISIBLE_DEVICES=1
      - CUDA_DEVICE_ORDER=PCI_BUS_ID
      - HF_HUB_OFFLINE=1
      - TRANSFORMERS_OFFLINE=1
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              device_ids: ['1']
              capabilities: [gpu]
    command: >
      /models/deepseek-r1-1.5b
      --served-model-name deepseek-r1-1.5b
      --gpu-memory-utilization 0.18#注意这里控制使用显存大小<4G够用
      --max-model-len 16384
      --port 8000
      

  #本地的rerank模型
  infinity:
    image: michaelf34/infinity:latest
    container_name: dify-infinity
    runtime: nvidia
    environment:
      - CUDA_VISIBLE_DEVICES=1
    volumes:
      - /data/models:/models
    ports:
      - "9004:7997"
    command: >
      v2
      #可同时加载bge-m3模型但并已测试可行:--model-id /models/bge-m3 --served-model-name BAAI/bge-m3
      --model-id /models/bge-reranker-v2-m3 --served-model-name BAAI/bge-reranker-v2-m3
      --port 7997
    restart: unless-stopped

4. 运行

shell 复制代码
#Linux
docker compose up -d vllm-gpu1
docker ps -a

#查看容器日志[-f为实时查看]
docker logs vllm-gpu1 -f

#可查看Vllm大模型是否运行在显卡上
nvidia-smi

docker compose up -d vllm-embed

5. 测试

shell 复制代码
#测试 Qwen 对话大模型√
curl http://127.0.0.1:9000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
    "model": "Qwen2.5-7B-Instruct",
    "messages": [{"role": "user", "content": "你运行在第二张L20显卡上吗?"}]
}'

# 测试 Embedding 接口√
curl http://localhost:9002/v1/embeddings \
  -H "Content-Type: application/json" \
  -d '{"model": "bge-m3", "input": "测试文本"}'
  
#测试 1.5b 对话大模型√
curl http://localhost:9003/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
    "model": "deepseek-r1-1.5b",
    "messages": [{"role": "user", "content": "1+1等于几"}]
}'

#测试rerank模型是否成功运行√
docker ps | grep infinity			#确认容器运行
curl http://localhost:9004/models	#加载模型列表
#测试embed√
curl http://localhost:9004/embeddings \
  -H "Content-Type: application/json" \
  -d '{
  "model":"BAAI/bge-m3",
  "input":"测试文本"
  }'
#测试rerank√
curl -X POST http://localhost:9004/rerank \
  -H "Content-Type: application/json" \
  -d '{
    "model": "BAAI/bge-reranker-v2-m3",
    "query": "医院信息安全管理制度中,谁负责网络安全管理?",
    "documents": [
      "信息科设专门的网络安全管理员,负责网络安全管理,定期进行安全检查。",
      "门诊患者就诊时,诊室内只限一位患者及其家属。",
      "员工每年要主动接受安全意识教育与培训。",
      "医院成立以院长为组长的信息安全管理领导小组。"
    ],
    "top_n": 3
  }'

6. Dify中接入各模型

7. *Linux安装nvidia-container-toolkit

shell 复制代码
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 update
sudo apt install -y nvidia-container-toolkit

#配置docker runtime
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

Dify工作流中代码执行调用其他服务器接口不执行

如代码执行中请求目标服务接口报403

1. .env文件中新增

shell 复制代码
# 精准放行单个 IP
SSRF_PROXY_ALLOW_PRIVATE_IPS=192.168.10.*/32

# 或者放行整个 192.168.10.0/24 网段
SSRF_PROXY_ALLOW_PRIVATE_IPS=192.168.10.0/24

# 支持多个,逗号分隔
SSRF_PROXY_ALLOW_PRIVATE_IPS=192.168.10.0/24,10.0.0.0/8

2. .env文件中若无则新增一行:SSRF_PROXY_ALLOW_PRIVATE_IPS=

3. 重启ssrf服务

shell 复制代码
docker compose down ssrf_proxy
docker compose up -d ssrf_proxy

4. 进入sandbox容器中测试

shell 复制代码
#进入容器sh
docker exec -it 9c080ac70903 sh

#在容器中测试能否访问服务
python3 -c "
import requests
r = requests.get('http://192.168.10.*:*/', timeout=10)
print('Status:', r.status_code)
print('Body:', r.text[:200])
"

5. 如果还不行,修改docker/ssrf_proxy/squid.conf.template,新增两行,然后重建容器docker compose up -d --force-recreate ssrf_proxy

shell 复制代码
include /etc/squid/dify_common.conf

acl allowed_domains dstdomain .marketplace.dify.ai

http_port ${HTTP_PORT}

http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
include /etc/squid/dify_sandbox_proxy.conf
include /etc/squid/dify_allow_private.conf

###新增下面两行
acl my_his_server dst 192.168.10.*
http_access allow my_his_server

http_access deny to_private_networks
http_access allow allowed_domains
http_access allow client_localnet
http_access allow localhost
http_access deny all
相关推荐
七牛云行业应用1 小时前
最新!MiniMax Code CLI 开源:一条命令安装,支持自带模型
ai·agent·ai编程
是店小二呀2 小时前
鸿蒙PC开源移植:Docker桌面工作台与Linux运行时桥接
docker·鸿蒙pc
是店小二呀2 小时前
MySQL 监控总在重复配置?用 Shell 自动部署 mysqld_exporter,再让 Prometheus 远程抓取
docker
凤城老人3 小时前
从零手写开源私有云盘|Flask+Vue3+Electron全栈网盘,单容器一键部署
python·docker·electron·vue
Dovis(誓平步青云)3 小时前
突破 32 位瓶颈:64 位 XID 如何化解事务号回卷危机
运维·服务器·人工智能·docker·容器
云烟成雨TD3 小时前
LlamaIndex 系列【29】检索增强策略:路由(Routing)机制
ai·agent·rag·llamaindex
是店小二呀3 小时前
开源鸿蒙PC原生适配:Node版本管理器命令行移植
docker·鸿蒙pc
蒲公英eric3 小时前
从旧接口泄露到 OAuth 保护:DVWA API 模块完整漏洞分析教程
web安全·ai·ctf·dvwa·ai安全·api模块
为你学会写情书3 小时前
Docker 从入门到实战:容器化全栈项目,再顺手编排一个 Milvus 向量数据库
docker