云计算百科
云计算领域专业知识百科平台

Qwen2.5-1.5B Streamlit部署教程:阿里云ECS轻量服务器一键部署脚本分享

Qwen2.5-1.5B Streamlit部署教程:阿里云ECS轻量服务器一键部署脚本分享

1. 学习目标与项目价值

你是不是也想在本地搭建一个属于自己的AI对话助手,但又担心技术门槛太高、配置太复杂?今天,我就带你用10分钟时间,在阿里云ECS轻量服务器上,把阿里通义千问的轻量级大模型Qwen2.5-1.5B跑起来,并给它配上一个漂亮的网页聊天界面。

这个项目最大的特点就是简单。你不用去折腾复杂的深度学习框架,也不用担心显存不够。我们基于官方的1.5B小模型,用Streamlit这个轻量级工具做个网页,所有对话都在你的服务器本地完成,数据绝对安全。

学完这篇教程,你将能:

  • 在阿里云ECS服务器上,一键部署一个私有化的AI对话服务。
  • 通过浏览器,像使用ChatGPT一样与本地模型进行多轮对话。
  • 理解如何将大模型与Web应用结合,打造开箱即用的AI工具。

2. 环境准备与项目结构

2.1 你需要准备什么

在开始之前,请确保你拥有以下资源:

  • 一台阿里云ECS实例:建议选择配置为2核4G或以上的轻量应用服务器。操作系统推荐Ubuntu 22.04 LTS。
  • 基础的Linux操作知识:会使用SSH连接服务器,会执行基本的命令行操作。
  • 一个可以访问的公网IP或域名:用于从外部访问你的Streamlit服务。

2.2 项目核心文件一览

我们的部署脚本会把所有事情都安排好。主要包含以下几个部分:

  • 模型文件:你需要提前下载好的Qwen2.5-1.5B-Instruct模型。
  • Python脚本 (app.py):这是核心,包含了模型加载、对话逻辑和Web界面。
  • 依赖文件 (requirements.txt):列出了运行所需的所有Python库。
  • 启动脚本 (start.sh):一个方便的一键启动脚本。
  • 整个项目的逻辑很简单:脚本启动一个Web服务,你通过浏览器访问这个服务,输入问题,脚本调用本地的模型生成回答,再把结果展示在网页上。

    3. 分步部署操作指南

    3.1 第一步:登录服务器与基础环境配置

    首先,通过SSH连接到你的阿里云ECS服务器。

    ssh root@你的服务器公网IP

    连接成功后,我们先更新系统并安装一些必要的工具。

    # 更新软件包列表
    apt-get update

    # 安装Python3、pip和项目需要的系统依赖
    apt-get install -y python3-pip python3-venv git

    # 验证安装
    python3 –version
    pip3 –version

    3.2 第二步:准备模型文件

    这是最关键的一步。你需要将Qwen2.5-1.5B-Instruct的模型文件下载到服务器上。

    方法一:直接从服务器下载(推荐) 在服务器上,我们可以使用git来克隆包含模型文件的仓库(如果模型提供方使用了Git LFS)。或者,如果你有模型的下载链接,可以用wget。

    # 创建一个目录来存放模型,这个路径在后续代码中会用到
    mkdir -p /root/qwen1.5b
    cd /root/qwen1.5b

    # 假设你有模型的下载链接,使用wget下载(请替换为真实链接)
    # wget https://example.com/path/to/qwen2.5-1.5b-instruct.tar.gz
    # tar -xzf qwen2.5-1.5b-instruct.tar.gz

    # 更常见的情况是从Hugging Face下载(需要先安装git-lfs)
    # apt-get install -y git-lfs
    # git lfs install
    # git clone https://huggingface.co/Qwen/Qwen2.5-1.5B-Instruct .

    方法二:从本地上传 如果你已经在本地下好了模型文件,可以使用scp命令上传到服务器。

    # 在你的本地电脑终端执行
    scp -r /本地/模型文件夹路径 root@你的服务器公网IP:/root/qwen1.5b

    无论用哪种方法,最终请确保/root/qwen1.5b目录下包含config.json, model.safetensors (或 .bin文件), tokenizer.json等模型必需文件。

    3.3 第三步:创建项目并编写核心代码

    现在,我们来创建项目目录和核心文件。

    # 回到用户根目录,创建项目文件夹
    cd /root
    mkdir qwen_streamlit_app && cd qwen_streamlit_app

    首先,创建Python依赖文件requirements.txt。

    cat > requirements.txt << 'EOF'
    streamlit>=1.28.0
    torch>=2.0.0
    transformers>=4.35.0
    accelerate>=0.24.0
    sentencepiece
    tiktoken
    EOF

    接下来,创建核心应用脚本app.py。这段代码实现了模型加载和聊天界面。

    # app.py
    import streamlit as st
    from transformers import AutoModelForCausalLM, AutoTokenizer
    import torch

    # 设置页面标题和图标
    st.set_page_config(page_title="Qwen2.5-1.5B 本地助手", page_icon="🤖")

    # 定义模型路径,必须与你存放模型的路径一致
    MODEL_PATH = "/root/qwen1.5b"

    @st.cache_resource
    def load_model_and_tokenizer():
    """加载模型和分词器,利用Streamlit缓存只加载一次"""
    st.info(f"🚀 正在加载模型,请稍候… (路径: {MODEL_PATH})")
    tokenizer = AutoTokenizer.from_pretrained(MODEL_PATH, trust_remote_code=True)

    # 自动选择运行设备(GPU/CPU)和数据类型
    model = AutoModelForCausalLM.from_pretrained(
    MODEL_PATH,
    torch_dtype="auto",
    device_map="auto",
    trust_remote_code=True
    )
    model.eval() # 设置为评估模式,节省资源
    st.success("✅ 模型加载成功!")
    return model, tokenizer

    # 侧边栏配置
    with st.sidebar:
    st.title("⚙️ 设置与控制")
    st.markdown("—")
    if st.button("🧹 清空对话历史", use_container_width=True):
    st.session_state.messages = []
    st.rerun() # 清空后刷新界面
    torch.cuda.empty_cache() if torch.cuda.is_available() else None
    st.sidebar.success("对话历史已清空,显存已释放。")

    st.markdown("—")
    st.markdown("**关于**")
    st.caption("基于 Qwen2.5-1.5B-Instruct 构建的本地对话助手。所有数据均在本地处理。")

    # 初始化聊天历史
    if "messages" not in st.session_state:
    st.session_state.messages = []

    # 加载模型(首次运行会触发加载)
    model, tokenizer = load_model_and_tokenizer()

    # 主界面标题
    st.title("💬 Qwen2.5-1.5B 本地智能助手")
    st.caption("完全本地运行 · 隐私安全 · 开箱即用")

    # 显示历史聊天记录
    for message in st.session_state.messages:
    with st.chat_message(message["role"]):
    st.markdown(message["content"])

    # 聊天输入框
    if prompt := st.chat_input("你好,我是Qwen,有什么可以帮你的?"):
    # 将用户输入添加到历史并显示
    st.session_state.messages.append({"role": "user", "content": prompt})
    with st.chat_message("user"):
    st.markdown(prompt)

    # 生成AI回复
    with st.chat_message("assistant"):
    message_placeholder = st.empty() # 创建一个占位符用于流式输出
    full_response = ""

    # 准备模型输入
    # 使用模型的官方聊天模板来格式化对话历史
    conversation = [{"role": msg["role"], "content": msg["content"]} for msg in st.session_state.messages]
    text = tokenizer.apply_chat_template(conversation, tokenize=False, add_generation_prompt=True)
    inputs = tokenizer(text, return_tensors="pt").to(model.device)

    # 生成回复
    with torch.no_grad(): # 禁用梯度计算,大幅节省显存
    generated_ids = model.generate(
    **inputs,
    max_new_tokens=1024, # 最多生成1024个新token
    do_sample=True, # 启用采样,使回答更多样
    temperature=0.7, # 采样温度,控制随机性
    top_p=0.9, # 核采样参数,控制词汇选择范围
    repetition_penalty=1.1 # 重复惩罚,避免重复用词
    )

    # 解码并输出生成的文本(跳过输入部分)
    new_tokens = generated_ids[0, inputs['input_ids'].shape[1]:]
    response = tokenizer.decode(new_tokens, skip_special_tokens=True)

    # 模拟逐字输出效果,提升体验
    for chunk in response:
    full_response += chunk
    message_placeholder.markdown(full_response + "▌")
    message_placeholder.markdown(full_response)

    # 将AI回复添加到历史
    st.session_state.messages.append({"role": "assistant", "content": full_response})

    3.4 第四步:安装依赖并首次启动

    代码写好了,现在来安装运行它需要的Python库。

    # 在项目目录下,安装依赖
    pip3 install -r requirements.txt

    安装完成后,我们可以直接运行Streamlit应用。但为了让服务在后台运行且不受SSH会话影响,我们创建一个简单的启动脚本start.sh。

    cat > start.sh << 'EOF'
    #!/bin/bash
    echo "启动 Qwen2.5-1.5B Streamlit 服务…"
    echo "服务将在后台运行,访问地址: http://<你的服务器IP>:8501"
    # 在8501端口启动Streamlit,并允许外部网络访问
    nohup streamlit run app.py –server.port 8501 –server.address 0.0.0.0 > streamlit.log 2>&1 &
    echo "启动命令已执行。查看日志: tail -f streamlit.log"
    EOF

    # 给启动脚本添加执行权限
    chmod +x start.sh

    现在,执行启动脚本!

    ./start.sh

    第一次运行会加载模型,可能需要30秒到1分钟,具体取决于服务器性能。你会看到类似下面的日志:

    启动 Qwen2.5-1.5B Streamlit 服务…
    服务将在后台运行,访问地址: http://<你的服务器IP>:8501

    3.5 第五步:访问你的AI助手

    启动成功后,打开你的浏览器,输入以下地址:

    http://你的服务器公网IP:8501

    如果页面成功打开,你会看到一个简洁的聊天界面。在底部的输入框里,尝试问它一些问题,比如:

    • “用Python写一个冒泡排序函数”
    • “给我推荐几个北京周末值得去的地方”
    • “解释一下什么是机器学习”

    稍等几秒,它就会在本地计算出答案,并显示在界面上。

    4. 使用技巧与常见问题

    4.1 让对话更高效

    • 多轮对话:这个助手会自动记住你们之前的对话内容,你可以基于上一轮的回答继续追问,上下文是连贯的。
    • 开始新话题:如果想聊一个完全无关的新问题,点击左侧边栏的 “🧹 清空对话历史” 按钮。这不仅会清空屏幕上的记录,还会释放GPU显存(如果你用了GPU的话)。
    • 问题要具体:像“写一篇作文”这样的问题可能让模型不知如何下手。试试“写一篇关于春天郊游的300字小学生作文”,效果会好很多。

    4.2 你可能遇到的问题

    1. 页面打不开(连接被拒绝)

    • 检查防火墙:阿里云ECS默认有安全组规则。你需要登录阿里云控制台,找到你的ECS实例,在安全组设置中,添加入方向规则,允许TCP协议下的8501端口。
    • 检查服务是否运行:在服务器上执行 ps aux | grep streamlit,看看进程是否存在。如果没有,重新运行 ./start.sh。

    2. 模型加载失败

    • 报错“No such file or directory”:说明MODEL_PATH设置错了。请打开app.py,确认第10行的MODEL_PATH = "/root/qwen1.5b"是否与你实际存放模型的路径完全一致。
    • 报错关于“transformers”版本:请确保严格按照requirements.txt安装依赖。可以尝试升级:pip3 install –upgrade -r requirements.txt。

    3. 回答速度慢

    • 1.5B模型在CPU上运行确实会慢一些。这是正常的。如果服务器有GPU(比如NVIDIA T4),代码会自动使用GPU,速度会快很多。
    • 生成的长度(max_new_tokens)设置得越大,等待时间越长。如果只是简单问答,可以在代码里把这个值调小,比如512。

    4. 如何关闭服务 在服务器终端里,找到Streamlit的进程ID并结束它。

    # 找到进程ID
    ps aux | grep streamlit
    # 结束进程 (假设PID是12345)
    kill 12345

    5. 总结

    通过上面这几个步骤,你已经成功在阿里云ECS上部署了一个完全本地化的、带有Web界面的Qwen2.5-1.5B智能对话助手。我们来回顾一下关键点:

  • 核心优势:隐私安全(数据不出本地)、开箱即用(无需复杂配置)、轻量高效(1.5B模型对硬件要求低)。
  • 技术要点:利用transformers库加载官方模型,用streamlit快速构建交互界面,通过device_map=“auto”实现硬件自动适配。
  • 使用体验:你获得了一个通过浏览器即可访问的私有ChatGPT式工具,支持多轮对话,满足日常问答、文案辅助、代码咨询等需求。
  • 这个项目就像一个种子,你完全可以基于它做更多事情:

    • 更换模型:把MODEL_PATH指向更大的Qwen模型(如7B、14B),获得更强的能力(需要更多显存)。
    • 美化界面:Streamlit支持很多组件,你可以增加历史对话保存、语音输入输出、主题切换等功能。
    • 集成应用:将这个对话能力作为后端API,为你自己的网站或应用提供AI服务。

    希望这个教程能帮你轻松踏出大模型本地部署的第一步。动手试试吧,感受一下在你自己服务器上运行AI的乐趣。


    获取更多AI镜像

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

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » Qwen2.5-1.5B Streamlit部署教程:阿里云ECS轻量服务器一键部署脚本分享
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!