Phi-3-mini-4k-instruct-gguf部署教程:Docker Compose编排vLLM服务+Chainlit+Redis会话存储

1. 环境准备与快速部署

在开始部署Phi-3-mini-4k-instruct-gguf模型之前,我们需要确保系统满足以下基本要求:

  • 操作系统:推荐使用Ubuntu 20.04/22.04或兼容的Linux发行版
  • Docker版本:20.10.0或更高
  • Docker Compose:v2.0.0或更高
  • 硬件要求
    • 至少16GB内存(推荐32GB)
    • 支持CUDA的NVIDIA GPU(推荐RTX 3090或更高)
    • 至少20GB可用磁盘空间

1.1 安装Docker和NVIDIA容器工具包

首先安装必要的依赖项:

# 安装Docker
sudo apt-get update
sudo apt-get install -y docker.io docker-compose

# 添加当前用户到docker组
sudo usermod -aG docker $USER
newgrp docker

# 安装NVIDIA容器工具包
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
sudo systemctl restart docker

1.2 准备部署文件

创建项目目录并准备docker-compose.yml文件:

mkdir phi3-deployment && cd phi3-deployment

创建docker-compose.yml文件:

version: '3.8'

services:
  vllm:
    image: vllm/vllm-openai:latest
    runtime: nvidia
    environment:
      - MODEL=Phi-3-mini-4k-instruct-gguf
      - HOST=0.0.0.0
      - PORT=8000
    volumes:
      - ./models:/models
    ports:
      - "8000:8000"
    command: --model /models/Phi-3-mini-4k-instruct-gguf --host 0.0.0.0 --port 8000 --tensor-parallel-size 1
    
  chainlit:
    image: chainlit/chainlit:latest
    depends_on:
      - vllm
      - redis
    environment:
      - OPENAI_API_BASE=http://vllm:8000/v1
      - OPENAI_API_KEY=EMPTY
      - REDIS_URL=redis://redis:6379
    volumes:
      - ./app:/app
    ports:
      - "8001:8000"
    command: run /app/app.py --port 8000 --host 0.0.0.0
    
  redis:
    image: redis:alpine
    ports:
      - "6379:6379"
    volumes:
      - redis_data:/data

volumes:
  redis_data:

创建Chainlit应用文件app/app.py

import chainlit as cl
from openai import AsyncOpenAI

client = AsyncOpenAI(
    base_url="http://vllm:8000/v1",
    api_key="EMPTY"
)

@cl.on_chat_start
async def on_chat_start():
    await cl.Message(content="Phi-3-mini-4k-instruct模型已准备好,请问您有什么问题?").send()

@cl.on_message
async def on_message(message: cl.Message):
    response = await client.chat.completions.create(
        model="Phi-3-mini-4k-instruct-gguf",
        messages=[
            {"role": "system", "content": "你是一个乐于助人的AI助手"},
            {"role": "user", "content": message.content}
        ],
        temperature=0.7,
    )
    
    await cl.Message(content=response.choices[0].message.content).send()

2. 模型部署与验证

2.1 下载模型并启动服务

下载Phi-3-mini-4k-instruct-gguf模型:

mkdir models
wget -O models/Phi-3-mini-4k-instruct-gguf https://huggingface.co/TheBloke/Phi-3-mini-4k-instruct-gguf/resolve/main/Phi-3-mini-4k-instruct-gguf-q4_0.gguf

启动所有服务:

docker-compose up -d

2.2 验证服务状态

检查vLLM服务日志:

docker-compose logs vllm

如果看到类似以下输出,表示模型已成功加载:

INFO 05-20 12:34:56 llm_engine.py:72] Initializing an LLM engine with config: model='/models/Phi-3-mini-4k-instruct-gguf', tokenizer='/models/Phi-3-mini-4k-instruct-gguf', tokenizer_mode=auto, trust_remote_code=False, dtype=auto, tensor_parallel_size=1)
INFO 05-20 12:35:12 llm_engine.py:143] # GPU blocks: 918, # CPU blocks: 512
INFO 05-20 12:35:12 model_runner.py:115] Loading model weights took: 16.23s
INFO 05-20 12:35:12 model_runner.py:119] Model loaded in 16.25s

2.3 访问Chainlit前端

Chainlit前端将在端口8001上可用。在浏览器中访问:

http://localhost:8001

您将看到一个简单的聊天界面,可以开始与Phi-3-mini-4k-instruct模型交互。

3. 系统架构与工作原理

3.1 组件交互流程

整个系统由三个主要组件组成:

  1. vLLM服务:负责加载和运行Phi-3-mini-4k-instruct模型,提供OpenAI兼容的API接口
  2. Redis服务:存储聊天会话历史,实现对话上下文保持
  3. Chainlit前端:提供用户友好的Web界面,处理用户输入和模型输出展示

3.2 关键技术点

  • vLLM的高效推理:vLLM采用PagedAttention技术,显著提高大语言模型的推理效率
  • Redis会话存储:所有对话历史自动存储在Redis中,确保对话连续性
  • Chainlit的便捷交互:Chainlit简化了构建聊天界面的过程,只需少量代码即可实现完整功能

4. 常见问题与解决方案

4.1 模型加载失败

问题现象:vLLM服务启动后无法加载模型

可能原因

  • 模型文件路径不正确
  • 模型文件损坏
  • GPU内存不足

解决方案

  1. 检查模型文件是否位于正确的路径(./models/目录下)
  2. 重新下载模型文件
  3. 尝试减小tensor-parallel-size参数值

4.2 Chainlit无法连接vLLM

问题现象:Chainlit前端显示"无法连接到模型服务"

解决方案

  1. 检查vLLM服务是否正常运行:
    docker-compose ps
    
  2. 确保Chainlit配置中的OPENAI_API_BASE正确指向vLLM服务
  3. 检查网络连接,确保容器间可以互相访问

4.3 响应速度慢

优化建议

  1. 增加docker-compose.yml中vLLM服务的GPU资源限制
  2. 调整Chainlit的temperature参数(值越小响应越确定但可能缺乏创意)
  3. 考虑使用更高性能的GPU

5. 总结

本教程详细介绍了如何使用Docker Compose编排Phi-3-mini-4k-instruct-gguf模型的完整部署方案,包括:

  1. 使用vLLM高效部署文本生成模型
  2. 通过Chainlit构建用户友好的Web界面
  3. 利用Redis实现对话历史存储
  4. 完整的Docker Compose编排方案

这套方案具有以下优势:

  • 一键部署:所有服务通过Docker Compose一键启动
  • 资源高效:vLLM优化了模型推理效率
  • 易于扩展:可以方便地添加更多功能或替换组件

获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐