Linux服务器部署大模型_后台常驻运行脚本分享
Linux服务器部署大模型:后台常驻运行脚本全攻略
好不容易在Linux服务器上把大模型(比如Qwen2.5-7B、MiniCPM-o-4.5这些)部署起来了,结果一关SSH终端,服务也跟着断了——这事儿是不是挺让人头疼的?这通常意味着你的模型还在“前台交互式运行”模式。别担心,下面这几种后台常驻运行的脚本方案,从轻量级到生产级,总有一款适合你。
一、nohup + 重定向启动脚本
想快速验证或者临时让模型跑上一阵子?这个方案最省事。它不需要安装任何额外组件,核心思路就是忽略终端挂断信号,同时把日志输出到文件,实现最基础的后台化。
具体操作分几步走:
首先,创建启动脚本文件:touch run_model_nohup.sh
接着,赋予它执行权限:chmod +x run_model_nohup.sh
然后,把核心命令写进去。这里以Qwen2.5-7B-Instruct为例,假设服务端口是8000:
#!/bin/bash
cd /root/qwen2.5-7b-instruct
source qwen_env/bin/activate
nohup python qwen_service.py --port 8000 > /var/log/qwen_service.log 2>&1 &
保存后,执行脚本:./run_model_nohup.sh
最后,别忘了验证一下进程是否在后台稳稳地跑着:ps aux | grep qwen_service.py
二、systemd服务单元脚本
如果目标是生产环境的长期、稳定部署,那么systemd无疑是更专业的选择。作为Linux的标准服务管理器,它带来的好处是实打实的:开机自启、崩溃后自动重启、集中的日志管理,还能对资源使用进行限制。
部署起来也不复杂:
第一步,创建服务定义文件:sudo nano /etc/systemd/system/qwen-model.service
第二步,填入标准化的配置。注意,下面的路径、用户和环境变量需要根据你的实际情况调整:
[Unit]
Description=Qwen2.5-7B-Instruct API Service
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/root/qwen2.5-7b-instruct
Environment="PATH=/root/qwen_env/bin:/usr/local/bin:/usr/bin:/bin"
ExecStart=/root/qwen_env/bin/python qwen_service.py --port 8000
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
MemoryLimit=24G
[Install]
WantedBy=multi-user.target
第三步,重载配置并立即启用服务:sudo systemctl daemon-reload && sudo systemctl enable --now qwen-model.service
之后,想查看实时运行日志就简单了:sudo journalctl -u qwen-model.service -f
三、docker容器化后台脚本(适用已容器化模型)
对于那些已经封装成Docker镜像的大模型(例如Qwen-Image-2512、Hunyuan-MT-7B-vllm),利用Docker本身的能力来实现后台托管是最优雅的。这种方式几乎零依赖,还能享受镜像带来的环境一致性。
操作流程很清晰:
先编写一个可复用的启动脚本:touch start_model_docker.sh
然后在脚本里填入类似下面的内容。这个示例将容器端口映射到宿主机的8080,启用了GPU,并设置了自动重启策略:
#!/bin/bash
docker run -d \
--gpus all \
--restart unless-stopped \
--name qwen-image-prod \
--volume /data/qwen-output:/app/output \
registry.cn-hangzhou.aliyuncs.com/csdn_ai/qwen-image-2512:latest
最后,执行脚本并确认容器状态:chmod +x start_model_docker.sh && ./start_model_docker.sh && docker ps | grep qwen-image-prod
四、setsid脱离会话脚本(高隔离性场景)
最后这个方案比较特别,适用于对安全性要求高,或者运行环境复杂(比如嵌套终端)的场景。`setsid`命令能让进程彻底脱离当前终端会话,直接成为init进程(PID 1)的子进程,这样无论终端发生什么,都不会影响到模型服务。
实现步骤如下:
新建一个独立的守护脚本:touch run_with_setsid.sh
写入命令。这里换一个模型示例,比如Leather Dress Collection:
#!/bin/bash
cd /root/Leather-Dress-Collection
source leather-env/bin/activate
setsid python app.py --server-port 7861 > /var/log/leather-app.log 2>&1
执行这个脚本,它会立即进入后台且不阻塞当前终端:./run_with_setsid.sh &
如何确认成功了呢?检查一下目标进程的父进程ID是不是1:ps -o pid,ppid,comm -C python | grep app.py
