阿里云ECS部署YOLO教程
1、阿里云注册
在官网注册账号:阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台
2、ECS配置选择


3、在阿里云 Workbench里为Ubuntu 18/20/22/24安装XFCE桌面(不推荐在这个里面使用,不好用!)
stesteps1、通过VNC连接实例
step2、更新软件包列表和已安装的包
sudo apt update && sudo apt upgrade -y
step3、安装XFCE桌面环境
sudo apt install -y xfce4 xfce4-goodies lightdm lightdm-gtk-greeter
step4、重启ECS实例
sudo reboot
4、ssh连接(十分推荐)
step1:在控制ECS控制台查看自己的公网IP地址

step2:在vscode进行连接

step3:输入root@公网ip,进行连接

5、安装miniconda
在vscode按下ctrl+shift++打开终端,在终端依次输入miniconda安装指令,如果conda --version有版本号输出,则表明miniconda安装成功:
# 安装包安装
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
# 运行安装脚本
bash Miniconda3-latest-Linux-x86_64.sh
# 安装完成后,关闭当前终端重新打开,或执行:
source ~/.bashrc
# 验证 conda:
conda --version
6、pytorch环境搭建
官方教程:入门 - PyTorch 框架
打开新的终端,依次完成一下步骤:
step1:创建conda环境
conda create --name pytorch python=3.11
step2:激活环境
conda activate pytorch
step3:安装pytorch
pip3 install torch torchvision --index-url https://download.pytorch.org/whl/cpu
7、TensorFlow环境搭建
官网教程:https://tensorflow.google.cn/install/pip#linux
8、使用
8.1让单个Python 脚本在后台持久运行
方法一:使用 nohup 命令(最简单快捷)
nohup 的意思是 "no hang up"(不挂断)。它可以让程序忽略终端关闭的信号,并在后台默默运行。
1. 启动程序
在终端中输入以下命令:
nohup python3 /root/Desktop/server_andian_test/server_ai_multi_stomp.py > /root/Desktop/server_andian_test/run.log 2>&1 &
-
nohup: 让程序在后台运行。 -
> /root/Desktop/server_andian_test/run.log 2>&1: 将原本在屏幕上打印的日志(包括报错)全部保存到run.log文件中。 -
&: 将任务放到后台。
2. 检查日志
按下回车后,你可以放心地关闭终端。如果想看运行状态,随时连上服务器输入:
tail -f /root/Desktop/server_andian_test/run.log
(按 Ctrl+C 退出日志查看,程序依然会在后台运行)
3. 如何停止程序
当你需要更新代码或停止程序时,先找到它的进程 ID (PID):
ps aux | grep server_ai_multi_stomp.py
找到对应的进程号(通常是第二列的数字),然后杀掉它(假设 PID 是 12345):
kill -9 12345
方法二:使用 tmux 终端复用器(最优雅,强烈推荐)
tmux 相当于在服务器上开了一个“虚拟显示器”。你把程序开在这个虚拟显示器里,关掉你自己的电脑屏幕,虚拟显示器依然在工作。下次连上去,还能看到一模一样的实时运行画面。
1. 安装 tmux(如果尚未安装)
apt-get update && apt-get install tmux -y
2. 创建一个新会话
tmux new -s aiserver
(这时候屏幕会刷新,底部会出现一条绿色的状态栏,说明你已经进入虚拟终端了)
3. 在里面正常运行你的程序
cd /root/Desktop/server_andian_test
python3 server_ai_multi_stomp.py
4. “挂起”并离开(重点!) 让程序跑着,依次按下键盘的:
-
先按一下
Ctrl + B(松开) -
然后按一下字母
D(Detach) (此时你会回到原来的普通终端,并看到提示[detached (from session aiserver)]。现在你可以安全地关闭 SSH 软件了!)
5. 以后如何重新连接回来
无论过多久,重新连上服务器,输入以下命令就能回到那个实时打印日志的画面:
tmux attach -t aiserver
8.2让多个Python 脚本在后台持久运行
方法一:使用 tmux 的“多窗口”功能(最推荐,所见即所得)
之前已经了解了 tmux 相当于一个虚拟显示器。实际上,这台“虚拟显示器”里面是可以开多个标签页(Window)的,就像浏览器的标签页一样。
1. 新建并进入一个大的 tmux 会话(相当于打开浏览器)
tmux new -s all_my_apps
2. 在第一个标签页,运行第一个程序
cd /root/Desktop/server_andian_test
python3 server_ai_multi_stomp.py
3. 新建一个标签页,运行第二个程序
不要关掉当前程序!依次按下键盘:
-
先按
Ctrl + B(松开) -
然后按字母
C(Create 的意思) (此时屏幕底部的绿条会出现一个1:bash*,说明你来到了第二个全新的空终端。第一个程序依然在后台0号窗口跑着。)
在新窗口里运行你的第二个程序:
python3 another_script.py
4. 如何在多个程序之间切换看日志?
-
先按
Ctrl + B(松开),然后按数字0—— 回到第一个程序 -
先按
Ctrl + B(松开),然后按数字1—— 切换到第二个程序 -
依此类推...
5. 挂起并离开
按 Ctrl + B,松开后按 D (Detach)。此时你可以安全关闭你的 SSH 软件(比如 Xshell、Termius、Putty)。所有的程序都会在各自的窗口里乖乖运行。
方法二:使用 PM2 进程管理器(企业级生产环境首选)
如果是真正的生产环境,万一服务器半夜重启了,或者代码报错崩溃了,tmux 和 nohup 是不会自动重启程序的。这时候专业的程序员会使用 pm2。
虽然它是 Node.js 环境下诞生的,但管理 Python 脚本简直是神器。
1. 安装 PM2 (如果是 Ubuntu/Debian 且有 npm)
apt-get install npm -y
npm install pm2 -g
2. 一键启动所有 Python 程序
pm2 start /root/Desktop/server_andian_test/server_ai_multi_stomp.py --name "AI_Server" --interpreter python3
pm2 start /root/Desktop/server_andian_test/another_script.py --name "Data_Spider" --interpreter python3
3. PM2 的魔法指令
-
pm2 list—— 像看表格一样查看所有正在运行的程序状态(运行时长、内存占用、CPU 占用等)。 -
pm2 logs—— 像看电视分屏一样,同时看所有程序的实时日志。 -
pm2 restart AI_Server—— 重启单个程序。 -
pm2 startup然后pm2 save—— 甚至能做到服务器断电重启后,开机自动把你这些程序拉起来!
8.3程序热重启-1
Uvicorn 原生就提供了一个非常强大的“热重载 (Hot Reload)”功能。开启这个功能后,只要按下保存(Ctrl+S)修改了任何 .py 文件,服务器就会在不到 1 秒内自动重启并应用新代码,完全不需要再手动去掐断进程并重新运行。
开启 reload=True 后,Uvicorn 的监听机制是全局扫描的。它监听的不仅仅是入口文件 main.py,而是当前运行目录及所有子目录下的所有 Python 文件 (*.py)。也就是说,只要不关掉运行着 main.py 的终端,无论什么时候去修改并保存 algorithm_cusum.py(或者是 ai_core.py、configv3.py 等等),Uvicorn 都会在不到 1 秒的时间内自动侦测到文件的变动,并替在后台瞬间完成“掐断旧进程 -> 加载新算法代码 -> 重新拉起服务”的全套动作。直接修改算法参数保存,立刻就能在前端看到新算法跑出来的效果,开发体验会极其丝滑。
只有一点“物理规律”需要注意(关于状态重置):因为热重载本质上是一次真正的服务重启,所以当你按下保存键(Ctrl+S)触发热重载的那一瞬间,会发生以下现象:
-
内存清空:
mainv5.py里暂存的设备状态、滴漏缓冲池(channel_states)会被重置清空。 -
WebSocket 瞬间断开:前端大屏与后端的连接会被踢掉。
way1:通过命令行启动(最推荐、最规范)
以后在开发阶段,不要再使用 python main.py 来启动项目了。请打开终端(Terminal),在文件所在的目录下直接输入以下命令:
uvicorn mainv5:app --host 0.0.0.0 --port 9000 --reload
-
main:app:告诉系统去mainv5.py文件里寻找名字叫app的 FastAPI 实例。 -
--reload:这就是开启代码变动监听的魔法开关。
way2:直接修改 mainv5.py 底部的代码
如果习惯直接在 IDE 里点击“运行”按钮,或者习惯输入 python main.py,需要稍微修改一下文件最底部 uvicorn.run 的写法。
找到文件最底部的这段代码:
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=9000)
将其精准替换为:
if __name__ == "__main__":
import uvicorn
# 极其重要:当开启 reload=True 时,第一个参数不能直接传 app 变量,必须传字符串 "文件名:实例名"
uvicorn.run("main:app", host="0.0.0.0", port=9000, reload=True)
8.3程序热重启-2
如果厌倦了每次改一行代码都要等 PyTorch 重新加载 best_model.pth,可以使用jurigged 。
-
原理:它基于 Python 的 AST(抽象语法树)和
sys.settrace。当修改了一个函数或类,它会在不重启整个进程的情况下,直接在内存中“热替换”掉旧的代码块。 -
优势:WebSocket 连接不断,全局变量(如
channel_states)不丢,PyTorch 模型不用重新加载。 -
用法: 先安装:
pip install jurigged,然后在终端先cd进代码所在的真实目录,然后再执行jurigged,让它和你的代码处于同一层级。
9、问题
9.1内存使用率、云盘使用率以及网络流量一直处于正在采集
9.1.1问题分析
CPU 使用率属于宿主机(底层虚拟化)层面的监控,无需系统内部授权即可直接读取;而内存使用率、云盘使用率和系统内部网络流量属于操作系统内部指标,必须依赖实例内部安装并运行云监控插件(CloudMonitor Agent / argusagent)来主动上报。当插件未安装、未启动、进程异常或与云监控内网通信受阻时,控制台就会一直显示“正在采集”。
9.1.2问题排查与解决
第一步:登录服务器检查插件状态 (以 Linux 为例)
通过 SSH 或阿里云控制台的 Workbench / VNC 登录 ECS,执行以下命令查看云监控插件状态:
# 查看云监控插件进程是否存在
ps -ef | grep -E "argusagent|CmsGoAgent" | grep -v grep
# 或者查看服务运行状态 (系统服务方式)
systemctl status cloudmonitor
-
如果提示服务未找到或无进程: 说明插件未安装或已被卸载。
-
如果服务处于
inactive/dead: 尝试启动服务:
sudo systemctl restart cloudmonitor
第二步:安装或重新安装云监控插件
方法 1:通过控制台一键安装(推荐)
-
打开 阿里云 ECS 控制台。
-
在左侧导航栏找到 运维与监控 -> 云助手(或在实例详情页的“运维”标签中)。
-
搜索 云监控插件,直接点击 安装 / 升级。
方法 2:通过 Linux 终端一键安装脚本
在服务器内执行对应地域的安装命令(内网加速,免外网流量):
# 官方标准安装脚本(自动识别系统架构与内网节点)
sudo bash -c "$(curl -fsSL https://cms-agent-cn-hangzhou.oss-cn-hangzhou-internal.aliyuncs.com/cms-go-agent/cms_go_agent_install.sh)"
(注:如果实例在非杭州地域,脚本通常会自动解析,如无法下载可将链接中的 cn-hangzhou 替换为您实例所在的 Region ID,如 cn-beijing、cn-shanghai 等)
如果是 Windows 系统:
-
登录实例,打开任务管理器检查是否存在
argusagent服务。 -
若未安装,前往控制台通过云助手推送,或从阿里云官网下载 Windows 版云监控安装包手动运行。
第三步:检查网络与安全配置(若安装后仍无法采集)
如果插件已正常运行但依然显示“正在采集”,请检查以下两点:
-
DNS 配置是否正确:
-
确保
/etc/resolv.conf中包含阿里云内网 DNS(例如100.100.2.136或100.100.2.138),否则插件无法解析云监控服务上报地址。
-
-
安全防护软件 / 出方向防火墙拦截:
-
检查系统内部
iptables/firewalld或安全组的出方向规则,确保未拦截访问内网 IP 段(100.64.0.0/10,此为阿里云内部服务保留网段)。
-
验证生效
完成安装/启动后,等待 3 ~ 5 分钟(监控数据采集与汇聚有固定周期),强制刷新控制台页面,指标即可正常显示。
更多推荐


所有评论(0)