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
相关推荐
knqiufan18 小时前
MiniMax Code 接入 PowerContext:构建跨会话与跨 Agent 的项目上下文底座
ai·oceanbase·minimax·powercontext
还卿一钵无情泪1 天前
Docker 部署Unsloth 绕开环境配置难题
运维·人工智能·docker·ai·容器·nlp·干货
码士集团小青1 天前
同样的RAG系统,分块策略不同,命中率能差20%
ai
打工仔折腾 AI1 天前
Docker镜像分层与卷挂载到底怎么工作:一次文件系统层面的实测分析
运维·人工智能·后端·python·docker·容器·性能优化
Hello_Pyhx1 天前
VoiceStudio v0.5.6:从桌面生成到本地语音 API
ai·语音识别·克隆·声音
极客先躯1 天前
高级java每日一道面试题-2026年01月20日-实战篇[Docker]-如何实现镜像的跨区域复制?
java·运维·docker·容器·架构图
最强小杰1 天前
Claude Opus 4.8 调用一直报 529 怎么办?同样请求换旧模型却正常——附 429/529 双桶退避代码
ai·github
goehou1 天前
LLM 结构化输出全解:从 Prompt 约束到 Schema 硬保证,三层实现怎么选
ai·llm·json·agent·教程·结构化输出
?? Daisy1 天前
ZCode 添加自定义模型:自定义供应商的字段与易错点(2026-09)
人工智能·ai·ai编程
奇牙coding1 天前
GPT-5.5 API 报 401 但 GPT-5.4 正常怎么办?不是 Key 失效,是 Organization 头的强制校验变了
java·网络·gpt·ai