Qwen2.5-1.5B从零部署:CentOS7服务器环境搭建与systemd服务封装

📅 发布时间:2026/7/10 9:33:08 👁️ 浏览次数:
Qwen2.5-1.5B从零部署:CentOS7服务器环境搭建与systemd服务封装
Qwen2.5-1.5B从零部署CentOS7服务器环境搭建与systemd服务封装1. 环境准备与系统配置在开始部署Qwen2.5-1.5B模型之前我们需要确保CentOS7服务器具备合适的运行环境。以下是详细的环境准备步骤系统更新与基础依赖安装首先更新系统并安装必要的开发工具# 更新系统软件包 yum update -y # 安装基础开发工具和依赖 yum groupinstall Development Tools -y yum install epel-release -y yum install python3 python3-devel python3-pip openssl-devel libffi-devel -yPython环境配置创建独立的Python虚拟环境以避免依赖冲突# 创建项目目录 mkdir -p /opt/qwen-chat cd /opt/qwen-chat # 创建虚拟环境 python3 -m venv venv source venv/bin/activate # 升级pip pip install --upgrade pip2. 模型文件准备与验证下载与放置模型文件确保模型文件正确放置在指定位置# 创建模型存储目录 mkdir -p /root/qwen1.5b # 验证模型文件完整性示例检查 ls -la /root/qwen1.5b/ # 应该包含以下关键文件 # - config.json # - tokenizer.json 或相关分词器文件 # - model.safetensors 或 pytorch_model.bin # - generation_config.json模型文件验证脚本创建一个简单的验证脚本来检查模型完整性#!/usr/bin/env python3 import os MODEL_PATH /root/qwen1.5b required_files [config.json, model.safetensors, tokenizer.json] print( 检查模型文件完整性...) for file in required_files: file_path os.path.join(MODEL_PATH, file) if os.path.exists(file_path): print(f✅ {file} 存在) else: print(f❌ {file} 缺失) print(验证完成)3. 项目依赖安装与配置安装必要的Python包创建requirements.txt文件并安装依赖# 创建requirements.txt cat requirements.txt EOF torch2.0.0 transformers4.30.0 streamlit1.28.0 sentencepiece0.1.99 accelerate0.20.0 EOF # 安装依赖包 pip install -r requirements.txt验证GPU支持如果可用检查CUDA是否可用并配置相应的PyTorch版本# 检查CUDA可用性 python3 -c import torch; print(fCUDA可用: {torch.cuda.is_available()}); print(fCUDA版本: {torch.version.cuda}) if torch.cuda.is_available() else 如果系统有NVIDIA GPU但未安装CUDA需要先安装对应的驱动和CUDA工具包。4. 创建Streamlit聊天应用编写主应用程序创建完整的聊天应用脚本# app.py import streamlit as st from transformers import AutoModelForCausalLM, AutoTokenizer import torch import os # 配置模型路径 MODEL_PATH /root/qwen1.5b st.cache_resource def load_model(): 加载模型和分词器 print(f 正在加载模型: {MODEL_PATH}) # 自动选择设备GPU优先 device cuda if torch.cuda.is_available() else cpu # 加载分词器 tokenizer AutoTokenizer.from_pretrained( MODEL_PATH, trust_remote_codeTrue ) # 加载模型 model AutoModelForCausalLM.from_pretrained( MODEL_PATH, device_mapauto, torch_dtypeauto if device cuda else torch.float32, trust_remote_codeTrue ) return model, tokenizer, device def main(): st.title( Qwen2.5-1.5B 本地智能对话助手) st.write(基于阿里通义千问模型的完全本地化对话服务) # 侧边栏配置 with st.sidebar: st.header(设置) if st.button( 清空对话): st.session_state.messages [] if torch.cuda.is_available(): torch.cuda.empty_cache() st.rerun() # 初始化对话历史 if messages not in st.session_state: st.session_state.messages [] # 显示历史消息 for message in st.session_state.messages: with st.chat_message(message[role]): st.markdown(message[content]) # 用户输入 if prompt : st.chat_input(你好我是Qwen2.5-1.5B有什么可以帮你的): # 添加用户消息到历史 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 try: # 加载模型首次使用时 if model not in st.session_state: with st.spinner(正在加载模型请稍候...): st.session_state.model, st.session_state.tokenizer, st.session_state.device load_model() # 准备对话历史 messages st.session_state.messages.copy() # 应用聊天模板 text st.session_state.tokenizer.apply_chat_template( messages, tokenizeFalse, add_generation_promptTrue ) # 生成回复 with torch.no_grad(): inputs st.session_state.tokenizer(text, return_tensorspt).to(st.session_state.device) outputs st.session_state.model.generate( **inputs, max_new_tokens1024, temperature0.7, top_p0.9, do_sampleTrue, pad_token_idst.session_state.tokenizer.eos_token_id ) # 解码回复 response st.session_state.tokenizer.decode( outputs[0][inputs.input_ids.shape[1]:], skip_special_tokensTrue ) full_response response except Exception as e: full_response f抱歉生成回复时出现错误: {str(e)} # 显示回复 message_placeholder.markdown(full_response) # 添加AI回复到历史 st.session_state.messages.append({role: assistant, content: full_response}) if __name__ __main__: main()5. 创建systemd服务封装编写systemd服务文件创建系统服务以便管理应用# 创建服务文件 cat /etc/systemd/system/qwen-chat.service EOF [Unit] DescriptionQwen2.5-1.5B Chat Service Afternetwork.target [Service] Typesimple Userroot WorkingDirectory/opt/qwen-chat EnvironmentPATH/opt/qwen-chat/venv/bin:/usr/local/bin:/usr/bin:/bin ExecStart/opt/qwen-chat/venv/bin/streamlit run app.py --server.port 8501 --server.address 0.0.0.0 Restartalways RestartSec5 [Install] WantedBymulti-user.target EOF配置防火墙和权限设置必要的防火墙规则和文件权限# 开放8501端口 firewall-cmd --permanent --add-port8501/tcp firewall-cmd --reload # 设置文件权限 chmod 644 /etc/systemd/system/qwen-chat.service启动和管理服务启用并启动服务# 重新加载systemd配置 systemctl daemon-reload # 启用服务开机自启 systemctl enable qwen-chat.service # 启动服务 systemctl start qwen-chat.service # 检查服务状态 systemctl status qwen-chat.service # 查看日志 journalctl -u qwen-chat.service -f6. 服务验证与故障排除服务健康检查创建健康检查脚本# health_check.sh #!/bin/bash SERVICEqwen-chat PORT8501 # 检查服务状态 if systemctl is-active --quiet $SERVICE; then echo ✅ 服务运行中 else echo ❌ 服务未运行 exit 1 fi # 检查端口监听 if netstat -tlnp | grep :$PORT; then echo ✅ 端口 $PORT 监听正常 else echo ❌ 端口 $PORT 未监听 exit 1 fi # 简单HTTP检查 if curl -s http://localhost:$PORT /dev/null; then echo ✅ HTTP服务响应正常 else echo ❌ HTTP服务无响应 exit 1 fi echo 所有检查通过服务运行正常常见问题解决模型加载失败检查模型文件路径和权限GPU内存不足减少max_new_tokens参数或使用CPU模式端口冲突修改服务文件中的端口号依赖问题重新创建虚拟环境并安装依赖7. 总结通过本教程我们成功在CentOS7服务器上完成了Qwen2.5-1.5B模型的完整部署并实现了systemd服务封装。这套方案具有以下优势部署成果完整的本地化模型部署无需外部网络依赖系统服务化管理支持开机自启和自动恢复优化的资源使用适配低配置服务器环境简洁的Web界面提供友好的交互体验维护建议定期检查服务日志journalctl -u qwen-chat.service监控资源使用情况特别是GPU内存占用保持系统更新定期检查依赖包更新备份模型文件和配置文件扩展可能性添加API接口支持其他应用集成实现多模型切换功能添加用户认证和访问控制集成监控和告警系统现在你的Qwen2.5-1.5B智能对话助手已经准备就绪可以通过浏览器访问服务器IP的8501端口开始使用了获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。