ERNIE-4.5-0.3B-PT部署教程:WSL2环境vLLM安装+Chainlit本地调试全流程

想在自己的电脑上快速体验ERNIE-4.5-0.3B-PT这个轻量级大模型吗?今天我就带你走一遍完整的本地部署流程。不需要复杂的服务器环境,只需要一台Windows电脑,我们就能在WSL2里用vLLM把模型跑起来,再用Chainlit做个漂亮的聊天界面。

整个过程就像搭积木,一步步来,半小时内你就能拥有一个本地运行的AI助手。我会把每个步骤都讲清楚,包括可能遇到的坑和解决办法,保证你跟着做就能成功。

1. 准备工作:搭建你的WSL2开发环境

在开始部署模型之前,我们需要先准备好运行环境。WSL2(Windows Subsystem for Linux 2)让我们能在Windows上运行Linux系统,这是部署AI模型最方便的方式之一。

1.1 安装WSL2和Ubuntu

如果你还没有安装WSL2,按照下面的步骤操作:

  1. 启用WSL功能:以管理员身份打开PowerShell,运行:

    wsl --install
    

    这个命令会自动安装WSL2和默认的Ubuntu发行版。

  2. 设置默认版本:确保WSL2是默认版本:

    wsl --set-default-version 2
    
  3. 安装Ubuntu:如果你需要其他发行版,可以到Microsoft Store搜索安装,比如Ubuntu 22.04 LTS。

  4. 初始化Ubuntu:安装完成后,从开始菜单打开Ubuntu,它会提示你创建用户名和密码。

1.2 配置WSL2基础环境

进入Ubuntu终端后,我们先做一些基础配置:

# 更新系统包
sudo apt update && sudo apt upgrade -y

# 安装必要的工具
sudo apt install -y python3-pip python3-venv git curl wget

# 检查Python版本(需要Python 3.8+)
python3 --version

# 设置pip镜像源(国内用户建议设置,加速下载)
pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

1.3 准备Python虚拟环境

为项目创建独立的Python环境是个好习惯,避免包冲突:

# 创建项目目录
mkdir -p ~/projects/ernie-deploy
cd ~/projects/ernie-deploy

# 创建虚拟环境
python3 -m venv ernie_env

# 激活虚拟环境
source ernie_env/bin/activate

# 你会看到命令行前面出现(ernie_env),表示激活成功

现在你的基础环境就准备好了,接下来我们安装模型推理的核心工具。

2. 安装vLLM:高性能模型推理引擎

vLLM是一个专门为大型语言模型设计的高性能推理引擎,它能让模型跑得更快、更省内存。ERNIE-4.5-0.3B-PT虽然是个轻量级模型,但用vLLM部署也能获得更好的体验。

2.1 安装vLLM及其依赖

在激活的虚拟环境中,运行以下命令:

# 安装PyTorch(根据你的CUDA版本选择,如果没有GPU就用CPU版本)
# 有NVIDIA GPU的用户:
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

# 没有GPU或不确定的用户(CPU版本):
# pip3 install torch torchvision torchaudio

# 安装vLLM
pip3 install vllm

# 安装其他可能需要的依赖
pip3 install transformers accelerate

2.2 验证vLLM安装

安装完成后,我们可以写个简单的测试脚本验证vLLM是否能正常工作:

# test_vllm.py
from vllm import LLM, SamplingParams

# 简单的测试,不加载完整模型
print("vLLM版本:", vllm.__version__)
print("vLLM导入成功!")

# 测试CUDA是否可用(如果有GPU)
import torch
if torch.cuda.is_available():
    print(f"GPU可用: {torch.cuda.get_device_name(0)}")
else:
    print("使用CPU模式")

运行测试:

python3 test_vllm.py

如果看到"vLLM导入成功!"的输出,说明vLLM安装正确。

3. 下载和部署ERNIE-4.5-0.3B-PT模型

现在来到核心步骤:获取模型并部署。ERNIE-4.5-0.3B-PT是百度推出的轻量级文本生成模型,参数量只有3亿,适合在个人电脑上运行。

3.1 获取模型文件

模型可以从Hugging Face或百度官方的模型仓库下载。这里我们使用Hugging Face的镜像:

# 安装huggingface-hub工具
pip3 install huggingface-hub

# 创建模型保存目录
mkdir -p ~/models/ernie-4.5-0.3b-pt
cd ~/models/ernie-4.5-0.3b-pt

# 使用huggingface-cli下载模型
# 注意:可能需要先登录huggingface账号
huggingface-cli download baidu/ernie-4.5-0.3b-pt --local-dir .

# 如果上面的命令需要认证,也可以直接使用git下载
# git lfs install
# git clone https://huggingface.co/baidu/ernie-4.5-0.3b-pt

如果下载速度慢,也可以考虑从其他国内镜像源下载,或者使用已经下载好的模型文件。

3.2 编写vLLM部署脚本

创建一个Python脚本来启动模型服务:

# deploy_ernie.py
import argparse
from vllm import LLM, SamplingParams

def main():
    parser = argparse.ArgumentParser(description="部署ERNIE-4.5-0.3B-PT模型")
    parser.add_argument("--model-path", type=str, 
                       default="/home/你的用户名/models/ernie-4.5-0.3b-pt",
                       help="模型路径")
    parser.add_argument("--host", type=str, default="0.0.0.0", help="服务地址")
    parser.add_argument("--port", type=int, default=8000, help="服务端口")
    parser.add_argument("--gpu-memory-utilization", type=float, default=0.9, 
                       help="GPU内存使用率")
    
    args = parser.parse_args()
    
    print(f"正在加载模型: {args.model_path}")
    print("这可能需要几分钟时间,请耐心等待...")
    
    # 初始化模型
    llm = LLM(
        model=args.model_path,
        trust_remote_code=True,  # ERNIE模型需要这个参数
        gpu_memory_utilization=args.gpu_memory_utilization,
        max_model_len=4096,  # 最大上下文长度
        dtype="auto",  # 自动选择数据类型
    )
    
    print("模型加载成功!")
    print(f"服务地址: http://{args.host}:{args.port}")
    print("可以使用以下命令测试API:")
    print(f'curl http://{args.host}:{args.port}/v1/completions \\')
    print('  -H "Content-Type: application/json" \\')
    print('  -d \'{"model": "ernie-4.5-0.3b-pt", "prompt": "你好,", "max_tokens": 100}\'')
    
    # 启动API服务器
    from vllm.entrypoints.openai import api_server
    api_server.run_server(llm, host=args.host, port=args.port)

if __name__ == "__main__":
    main()

3.3 启动模型服务

运行部署脚本:

# 确保在项目目录下
cd ~/projects/ernie-deploy

# 激活虚拟环境(如果还没激活)
source ernie_env/bin/activate

# 启动服务
python3 deploy_ernie.py --model-path ~/models/ernie-4.5-0.3b-pt

你会看到类似这样的输出:

正在加载模型: /home/你的用户名/models/ernie-4.5-0.3b-pt
这可能需要几分钟时间,请耐心等待...
Loading model weights...
模型加载成功!
服务地址: http://0.0.0.0:8000

第一次加载模型可能需要一些时间,因为vLLM需要编译和优化模型。加载完成后,模型服务就在8000端口运行了。

3.4 测试模型API

打开另一个终端窗口,测试API是否正常工作:

# 测试completions接口
curl http://localhost:8000/v1/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "ernie-4.5-0.3b-pt",
    "prompt": "人工智能是",
    "max_tokens": 50,
    "temperature": 0.7
  }'

# 测试chat接口
curl http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "ernie-4.5-0.3b-pt",
    "messages": [
      {"role": "user", "content": "你好,请介绍一下你自己"}
    ],
    "max_tokens": 100
  }'

如果看到返回的JSON数据,说明模型服务运行正常。

4. 使用Chainlit构建聊天界面

虽然API已经可以用了,但命令行操作不够友好。Chainlit可以帮我们快速构建一个漂亮的Web聊天界面。

4.1 安装Chainlit

# 在虚拟环境中安装Chainlit
pip3 install chainlit

# 安装openai客户端(用于调用本地API)
pip3 install openai

4.2 创建Chainlit应用

创建一个新的Python文件作为Chainlit应用:

# app.py
import chainlit as cl
from openai import OpenAI
import os

# 配置OpenAI客户端连接到本地vLLM服务
client = OpenAI(
    base_url="http://localhost:8000/v1",  # vLLM的OpenAI兼容接口
    api_key="not-needed"  # 本地服务不需要真正的API key
)

@cl.on_chat_start
async def on_chat_start():
    """聊天开始时的初始化"""
    await cl.Message(
        content="你好!我是基于ERNIE-4.5-0.3B-PT模型的AI助手。有什么可以帮你的吗?"
    ).send()

@cl.on_message
async def on_message(message: cl.Message):
    """处理用户消息"""
    
    # 显示正在思考的提示
    msg = cl.Message(content="")
    await msg.send()
    
    try:
        # 调用本地模型API
        response = client.chat.completions.create(
            model="ernie-4.5-0.3b-pt",
            messages=[
                {"role": "system", "content": "你是一个有帮助的AI助手。"},
                {"role": "user", "content": message.content}
            ],
            max_tokens=500,
            temperature=0.7,
            stream=True  # 启用流式输出
        )
        
        # 流式输出响应
        for chunk in response:
            if chunk.choices[0].delta.content is not None:
                await msg.stream_token(chunk.choices[0].delta.content)
                
    except Exception as e:
        error_msg = f"调用模型时出错: {str(e)}"
        await cl.Message(content=error_msg).send()
        return
    
    # 完成消息
    await msg.update()

@cl.set_chat_profiles
async def chat_profile():
    """设置聊天配置"""
    return [
        cl.ChatProfile(
            name="ERNIE助手",
            markdown_description="基于ERNIE-4.5-0.3B-PT模型的AI助手"
        )
    ]

# Chainlit配置文件
chainlit_config = """
[features]
telemetry = false

[UI]
name = "ERNIE-4.5-0.3B-PT聊天助手"
description = "本地部署的轻量级大模型聊天界面"
"""

4.3 创建Chainlit配置文件

创建一个chainlit.md文件作为应用说明:

# ERNIE-4.5-0.3B-PT聊天助手

欢迎使用本地部署的ERNIE-4.5-0.3B-PT模型聊天界面!

## 功能特点
- 完全本地运行,保护隐私
- 基于vLLM高性能推理引擎
- 流式响应,体验流畅
- 支持连续对话

## 使用提示
1. 模型参数量为3亿,适合一般对话和文本生成任务
2. 如果响应速度慢,可能是第一次加载需要时间
3. 复杂问题建议分步骤提问

## 技术栈
- 后端:vLLM + FastAPI
- 前端:Chainlit
- 模型:ERNIE-4.5-0.3B-PT

4.4 启动Chainlit应用

现在我们可以启动Chainlit界面了:

# 启动Chainlit,指定端口(默认是8000,避免和vLLM冲突)
chainlit run app.py -p 7860

打开浏览器,访问 http://localhost:7860,你就能看到一个漂亮的聊天界面了。

5. 完整工作流程和实用技巧

现在你已经有了完整的部署环境,让我们来看看日常使用的最佳实践。

5.1 一键启动脚本

为了方便使用,我们可以创建一个启动脚本:

# start_ernie.sh
#!/bin/bash

echo "启动ERNIE-4.5-0.3B-PT本地服务..."

# 激活虚拟环境
source ~/projects/ernie-deploy/ernie_env/bin/activate

# 启动vLLM模型服务(后台运行)
echo "启动模型服务..."
cd ~/projects/ernie-deploy
nohup python3 deploy_ernie.py --model-path ~/models/ernie-4.5-0.3b-pt > vllm.log 2>&1 &

# 等待模型加载
echo "等待模型加载(约1-2分钟)..."
sleep 120

# 启动Chainlit界面
echo "启动聊天界面..."
cd ~/projects/ernie-deploy
nohup chainlit run app.py -p 7860 > chainlit.log 2>&1 &

echo "服务启动完成!"
echo "模型API: http://localhost:8000"
echo "聊天界面: http://localhost:7860"
echo "查看日志: tail -f vllm.log chainlit.log"

给脚本执行权限并运行:

chmod +x start_ernie.sh
./start_ernie.sh

5.2 性能优化建议

如果你的电脑配置不高,可以尝试这些优化:

# 优化版的部署脚本
llm = LLM(
    model=args.model_path,
    trust_remote_code=True,
    gpu_memory_utilization=0.8,  # 降低GPU内存使用
    max_model_len=2048,  # 减少最大上下文长度
    dtype="half",  # 使用半精度浮点数
    enable_prefix_caching=True,  # 启用前缀缓存
    tensor_parallel_size=1,  # 单GPU运行
    max_num_seqs=4,  # 减少并发数
)

5.3 常见问题解决

问题1:模型加载失败,提示找不到文件

Error: Model path does not exist

解决:检查模型路径是否正确,确保模型文件完整下载。

问题2:内存不足

CUDA out of memory

解决:降低gpu_memory_utilization参数,或者使用CPU模式:

llm = LLM(model=args.model_path, device="cpu")

问题3:Chainlit无法连接到vLLM服务

Connection refused

解决:确保vLLM服务已经启动,并且端口没有被占用。检查vLLM日志:

tail -f vllm.log

问题4:响应速度慢 解决

  1. 第一次推理会慢一些,后续会快很多
  2. 减少max_tokens参数
  3. 使用更简单的提示词

5.4 进阶使用:自定义API接口

如果你需要更灵活的控制,可以自定义API接口:

# custom_api.py
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from vllm import LLM, SamplingParams
import uvicorn

app = FastAPI(title="ERNIE-4.5-0.3B-PT API")

# 加载模型(全局变量)
llm = LLM(model="/path/to/your/model", trust_remote_code=True)

class ChatRequest(BaseModel):
    message: str
    max_tokens: int = 100
    temperature: float = 0.7

@app.post("/chat")
async def chat(request: ChatRequest):
    """自定义聊天接口"""
    try:
        # 设置生成参数
        sampling_params = SamplingParams(
            temperature=request.temperature,
            max_tokens=request.max_tokens
        )
        
        # 生成回复
        outputs = llm.generate([request.message], sampling_params)
        response = outputs[0].outputs[0].text
        
        return {"response": response, "status": "success"}
    
    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))

if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", port=8001)

6. 总结

通过这个教程,我们完成了ERNIE-4.5-0.3B-PT模型在WSL2环境下的完整部署。整个过程可以总结为几个关键步骤:

环境准备:安装WSL2和Ubuntu,配置Python虚拟环境,这是所有后续工作的基础。

模型推理:使用vLLM部署模型,这个工具让大模型推理变得简单高效,而且提供了标准的OpenAI兼容接口。

交互界面:用Chainlit构建Web聊天界面,让模型使用体验更加友好,支持流式输出和连续对话。

优化调试:根据硬件配置调整参数,解决常见问题,确保服务稳定运行。

这个部署方案有几个明显优势:首先是完全本地运行,数据不会离开你的电脑,隐私有保障;其次是灵活性高,你可以随时修改代码、调整参数;最后是成本低,不需要租用云服务器,个人电脑就能跑起来。

实际使用中,ERNIE-4.5-0.3B-PT这个3亿参数的模型在大多数日常对话和文本生成任务上表现不错,响应速度也很快。虽然处理复杂逻辑或专业领域问题时可能不如更大的模型,但对于个人使用和学习来说完全够用。

如果你想要进一步探索,可以考虑这些方向:尝试不同的生成参数(temperature、top_p等),实现更复杂的对话逻辑,或者将模型集成到自己的应用中。这个部署框架是通用的,你也可以用同样的方法部署其他兼容的模型。


获取更多AI镜像

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

Logo

昇腾计算产业是基于昇腾系列(HUAWEI Ascend)处理器和基础软件构建的全栈 AI计算基础设施、行业应用及服务,https://devpress.csdn.net/organization/setting/general/146749包括昇腾系列处理器、系列硬件、CANN、AI计算框架、应用使能、开发工具链、管理运维工具、行业应用及服务等全产业链

更多推荐