通义千问1.5-1.8B-GPTQ-Int4部署教程:阿里云ECS+GPU实例从0到1完整上线流程

想快速体验一个能流畅对话的AI助手,但又担心大模型太吃资源,自己的电脑跑不动?今天,我们就来手把手教你,如何在阿里云ECS上,用一台带GPU的服务器,从零开始部署一个轻量又聪明的AI模型——通义千问1.5-1.8B-Chat-GPTQ-Int4。

这个模型是通义千问家族里的小巧成员,经过GPTQ量化技术压缩到了Int4精度,对显存的需求大大降低。这意味着,你不需要昂贵的A100或H100,用一块消费级的GPU(比如RTX 3090/4090,甚至更早的型号)就能流畅运行。我们将使用高效的vLLM推理框架来部署模型,并用一个简洁美观的Web界面——Chainlit,来和它对话。

整个过程就像搭积木,跟着步骤走,你就能拥有一个专属的、7x24小时在线的AI对话伙伴。无论是用来学习、测试想法,还是作为个人助手,都非常方便。

1. 准备工作:环境与资源

在开始动手之前,我们需要准备好“工地”和“工具”。核心就是一台带GPU的云服务器。

1.1 阿里云ECS GPU实例选购

登录阿里云控制台,进入ECS实例创建页面。这里的关键是选择正确的实例规格:

  • 规格族:推荐选择 ecs.gn7i-c8g1.2xlargeecs.gn6i-c4g1.xlarge。这些是搭载了NVIDIA T4或A10显卡的实例,性价比高,非常适合运行我们这类量化后的小模型。
  • 镜像:选择 Ubuntu 20.04Ubuntu 22.04 的64位公共镜像。这两个版本社区支持好,软件兼容性强。
  • 系统盘:建议至少 50GB。模型文件本身不大,但我们需要安装Python、CUDA等一堆工具,留足空间更省心。
  • 安全组:这是服务器的“防火墙”。务必在安全组规则中放行你将要使用的端口,比如我们后面Chainlit默认的7860端口。规则是:协议TCP,端口范围7860,授权对象0.0.0.0/0(如果仅自己测试,可以改成自己的IP地址更安全)。

购买完成后,记下服务器的公网IP地址,我们后面会用它来访问服务。

1.2 连接服务器与基础环境配置

拿到服务器后,我们通过SSH连接它。打开你电脑上的终端(Windows用户可以用PowerShell或Git Bash),输入:

ssh root@你的服务器公网IP

输入密码后,你就进入了服务器的命令行世界。首先,我们更新系统软件包并安装一些必备工具:

# 更新软件包列表
apt-get update
# 安装常用工具(wget用于下载,vim用于编辑文件)
apt-get install -y wget vim

接下来是最重要的一步:安装NVIDIA显卡驱动和CUDA工具包。阿里云的GPU镜像通常已经预装了驱动,但我们最好确认一下,并安装与vLLM兼容的CUDA。

# 检查GPU驱动是否已安装
nvidia-smi

如果这个命令能正常输出显卡信息(比如看到T4或A10),说明驱动没问题。接下来安装CUDA,vLLM推荐使用CUDA 11.8或12.1。我们以11.8为例:

# 添加NVIDIA包仓库
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-ubuntu2204.pin
sudo mv cuda-ubuntu2204.pin /etc/apt/preferences.d/cuda-repository-pin-600
sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/3bf863cc.pub
sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/ /"
sudo apt-get update

# 安装CUDA 11.8
sudo apt-get install -y cuda-11-8

安装完成后,将CUDA路径加入环境变量,让系统能找到它:

echo 'export PATH=/usr/local/cuda-11.8/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc

最后,安装Python环境。我们使用conda来管理,这样可以方便地创建独立的Python环境,避免包冲突。

# 下载Miniconda安装脚本
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
# 运行安装脚本(一路按回车和yes)
bash Miniconda3-latest-Linux-x86_64.sh
# 激活conda
source ~/.bashrc

2. 模型部署:使用vLLM启动服务

环境准备好了,现在开始部署模型的核心部分。我们将在一个独立的conda环境中操作。

2.1 创建并激活Python环境

# 创建一个名为‘qwen’的Python 3.9环境
conda create -n qwen python=3.9 -y
# 激活这个环境
conda activate qwen

激活后,你的命令行提示符前面应该会显示(qwen),表示已经在这个独立环境里了。

2.2 安装vLLM与模型下载

vLLM是一个高性能的LLM推理和服务引擎,特别擅长通过PagedAttention技术优化显存使用,提升吞吐量。

# 安装vLLM。指定版本以确保兼容性。
pip install vllm==0.2.6

安装完成后,我们就可以用一行命令启动模型服务了。这里我们指定使用通义千问1.5-1.8B-Chat的GPTQ-Int4版本。这个模型文件托管在Hugging Face上。

# 启动vLLM服务。这行命令会下载模型并启动一个API服务器。
python -m vllm.entrypoints.openai.api_server \
    --model Qwen/Qwen1.5-1.8B-Chat-GPTQ-Int4 \
    --served-model-name Qwen1.5-1.8B-Chat \
    --api-key token-abc123 \
    --port 8000 \
    --host 0.0.0.0

命令参数解释:

  • --model: 指定模型在Hugging Face上的路径。vLLM会自动下载。
  • --served-model-name: 给服务起的名字,调用时会用到。
  • --api-key: 设置一个简单的API密钥,增加一点基础安全性(这里示例为token-abc123,你可以改成自己的)。
  • --port: 服务监听的端口,这里是8000。
  • --host 0.0.0.0: 允许任何网络接口访问,这样你才能从自己电脑访问云服务器的服务。

注意: 第一次运行会下载模型文件(大约几个GB),需要一些时间,请耐心等待。看到输出日志中显示“Uvicorn running on...”并且没有报错时,说明模型服务已经成功启动在后台了。

为了让服务在后台稳定运行,并且方便查看日志,我们可以使用nohup命令:

# 使用nohup在后台运行,并将日志输出到llm.log文件
nohup python -m vllm.entrypoints.openai.api_server \
    --model Qwen/Qwen1.5-1.8B-Chat-GPTQ-Int4 \
    --served-model-name Qwen1.5-1.8B-Chat \
    --api-key token-abc123 \
    --port 8000 \
    --host 0.0.0.0 > /root/workspace/llm.log 2>&1 &

2.3 验证模型服务

服务启动后,如何确认它真的在正常工作呢?有两种简单的方法。

方法一:查看日志文件 我们刚才把日志输出到了/root/workspace/llm.log。用cat命令查看这个文件的末尾几行:

cat /root/workspace/llm.log

如果你看到类似下面的输出,里面有“Loading model weights...”和“Model loaded in … s”这样的信息,最后是“Uvicorn running on http://0.0.0.0:8000”,那就恭喜你,模型加载成功了!

(此处原文档有一张图片,显示日志加载成功的截图,内容为终端中显示模型加载完成的日志信息。)

方法二:直接调用API测试 打开另一个终端窗口,SSH连接到服务器,激活qwen环境,然后用curl命令模拟一个API请求:

curl http://localhost:8000/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer token-abc123" \
  -d '{
    "model": "Qwen1.5-1.8B-Chat",
    "prompt": "你好,请介绍一下你自己。",
    "max_tokens": 100
  }'

如果返回一个包含生成文本的JSON响应,那就证明API服务完全正常。

3. 前端搭建:用Chainlit打造聊天界面

模型服务在8000端口跑起来了,但通过命令行curl对话太不友好。我们给这个“大脑”配上一个漂亮的“脸蛋”——Chainlit。它是一个专门为对话式AI应用设计的Python框架,能快速生成Web界面。

3.1 安装与编写Chainlit应用

首先,在同一个qwen环境下安装Chainlit:

pip install chainlit openai

然后,创建一个Python脚本作为我们的前端应用。我们把它命名为app.py

vim app.py

i进入编辑模式,粘贴以下内容:

import chainlit as cl
from openai import OpenAI

# 配置连接到我们本地的vLLM服务
client = OpenAI(
    api_key="token-abc123", # 和启动vLLM时设置的api-key一致
    base_url="http://localhost:8000/v1" # vLLM服务的地址
)

@cl.on_message
async def main(message: cl.Message):
    """
    每当用户在前端发送消息时,这个函数就会被调用。
    """
    # 创建一个消息提示,告诉模型它的角色
    prompt = f"你是一个乐于助人的AI助手。请回答用户的问题。\n\n用户:{message.content}\n助手:"

    # 发送请求到vLLM API
    response = client.completions.create(
        model="Qwen1.5-1.8B-Chat", # 模型名称,和启动时--served-model-name一致
        prompt=prompt,
        max_tokens=512,
        temperature=0.7, # 控制创造性,0.0最确定,1.0最随机
        stream=True # 启用流式输出,实现打字机效果
    )

    # 准备一个空的回复对象
    msg = cl.Message(content="")

    # 流式接收响应并逐步发送到前端
    async for chunk in response:
        if chunk.choices[0].text:
            await msg.stream_token(chunk.choices[0].text)

    # 流式传输完成后,发送最终消息
    await msg.send()

Esc键,然后输入:wq保存并退出vim。

3.2 启动Chainlit前端

现在,启动Chainlit应用。我们同样让它监听一个端口(比如7860),并允许外部访问:

chainlit run app.py --port 7860 --host 0.0.0.0

你会在终端看到输出,告诉你应用运行在http://0.0.0.0:7860

(此处原文档有一张图片,显示Chainlit前端界面打开的截图,内容为一个简洁的网页聊天界面。)

3.3 访问与对话

打开你电脑的浏览器,在地址栏输入:http://你的服务器公网IP:7860

如果一切顺利,你将看到一个清爽的聊天界面。在底部的输入框里,尝试问它一些问题吧,比如“写一首关于春天的诗”或者“用Python写一个计算斐波那契数列的函数”。

(此处原文档有一张图片,显示在Chainlit界面中提问并得到回答的截图,内容为AI模型生成的回复文本。)

看到模型流畅地生成回复,是不是很有成就感?你的个人AI助手已经正式上线了!

4. 总结与后续建议

回顾一下,我们完成了从云服务器选购、环境配置、模型部署到前端搭建的完整流程。你现在拥有一个:

  1. 低成本运行:得益于GPTQ-Int4量化,模型在消费级GPU上也能快速响应。
  2. 高性能服务:vLLM引擎保证了高效的推理速度和吞吐量。
  3. 友好界面:Chainlit提供了开箱即用的美观聊天界面。
  4. 云端可访问:部署在阿里云上,你可以随时随地通过浏览器访问它。

一些实用的进阶建议:

  • 保持服务运行:我们教程中用nohup启动的服务,在关闭SSH窗口后可能会停止。对于生产环境,建议使用systemdsupervisor这样的进程管理工具来守护进程,确保服务在服务器重启后也能自动运行。
  • 安全加固:教程中使用了简单的API Key。在实际公开部署时,你应该设置更复杂的密钥,并考虑在Chainlit应用前增加一层反向代理(如Nginx),并配置HTTPS(SSL证书)来加密通信。
  • 探索更多功能:Chainlit支持标记消息角色、显示文件、添加侧边栏等。vLLM也支持批量推理、参数调整等高级功能。你可以根据需求进一步定制。
  • 模型切换:这套流程不仅适用于通义千问。你只需修改vLLM启动命令中的--model参数为Hugging Face上的其他GPTQ量化模型(如Llama、ChatGLM等),就可以用同样的方式部署其他模型。

希望这个教程能帮你顺利踏出AI模型部署的第一步。动手实践的过程,就是最好的学习。


获取更多AI镜像

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

更多推荐