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
相关推荐
数智奔流9 小时前
技术至上的kimi,遇到了全球化难题
ai·ai大模型·kimi
长空任鸟飞_阿康10 小时前
如何设计支持 Skills 的 Agent?一套可扩展的四层架构
python·ai·架构·skills
2601_9620710010 小时前
从OpenRouter到Crazyrouter:Claude Code三处改动
人工智能·ai
cmdch201711 小时前
我的ai之旅——ai短剧绯面:无衣(deepseek+comfy ui)
ai
岁寒良木11 小时前
麒麟 V10 (x86_64) 离线/联网部署 Docker 26.1.4 与 MaxKB v2.10 LTS 实战指南
python·docker·kylin
枝上棉蛮12 小时前
AI生成3D模型工具TOP5:造形家、Meshy、Tripo3D、Luma AI、混元3D怎么选
ai·ai三维建模工具·场地模型·ai生成3d模型·3d资产·建筑模型·游戏角色
Ven%12 小时前
在魔搭 Notebook 容器里跑 Qwen Code:从零配置到省魔粒的完整实践
人工智能·python·ai·ai编程·modelscope
xzlAwin13 小时前
Win10 安装 Ollama 本地AI
ai·ollama
MicrosoftReactor13 小时前
技术速递|在 GitHub Copilot App 中渲染超大型拉取请求
ai·github·copilot·虚拟化·拉取请求
涵美女程序猿14 小时前
商品图工作流怎么搭?Lingko AI 核对运动相机防水壳的版本与接口
ai