第二部分 测试本地pycharm通过程序连接远程服务器autodl
模型的推理需要借助远程服务器autodl,但是界面的运行是在pycharm中,我的设想是按钮调用一个py文件就好了。
1. 本地运行PyQt5界面。
2. 当需要载入权重时,通过SSH连接到AutodL服务器,执行模型推理。
3. 服务器返回结果到本地,更新界面。
这样服务器只需要YOLOv11的环境,不需要PyQt5。因此,不需要在AutodL上配置PyQt5。
我首先在本地pycharm中配置了两个环境,一个有pyqt,一个通过SSH连接算力云,后来我发现我不会联合使用这两个环境,我跟着一些教程改了一些设置,也是没有成功,最后还是豆包解决的。豆包yyds!你一直问一直疑惑,他就会慢慢理解你的困惑了。
我现在的想法是先实现点击一个按钮就能执行云端相应的文件去调用权重,最终发现根本不需要创建SSH连接的环境,直接在pyqt那个环境中,写代码连接服务器。
以下是我本地pycharm连接autodl算力云的代码,给大家做一个参考:
import sys
import paramiko
from PyQt5.QtWidgets import QApplication, QMainWindow
from system_design_ui import Ui_MainWindow
if __name__ == "__main__":
###这里是我调用pyqt界面的代码
try:
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 替换为你的远程服务器连接信息ssh
ssh.connect('服务器地址', username='名称', password='密码', port=编号)#这里就是SSH连接服务器的步骤
# 先切换到你需要的目录,再执行你要执行的文件
command = f"cd /root/xxx && /root/miniconda3/bin/python(这个大家应该都是一样的) jiance.py"
print(f"即将执行命令: {command}")
stdin, stdout, stderr = ssh.exec_command(command)
result = stdout.read().decode('utf-8')
error = stderr.read().decode('utf-8')
print(f"命令执行结果:\n{result}")
if error:
print(f"执行 jiance.py 时出错: {error}")
else:
print("jiance.py 脚本执行成功,未发现错误信息。")
ssh.close()
except Exception as e:
print(f"执行过程中发生错误: {e}")
sys.exit(app.exec_())
因为这个代码是我一步一步试出来的,里面有很多输出信息来检查哪里发生了错误。
执行后观察输出信息,如果云端上找不到执行后生成的东西,比如我出现的问题就是本地通过 SSH 执行 jiance.py
时,当前工作目录是 /root
;而在云端直接执行时,当前工作目录是 /root/ultralytics-main
。工作目录的差异或许会影响到脚本里相对路径的解析,进而致使保存路径出现问题。
修改本地代码和云端执行路径一致,当然不改也行,记住存放的路径方便后面用到的时候去找,再次运行本地代码,jiance.py
执行时的工作目录就和云端直接执行时一致了,已经成功连接服务器进行检测。