第二部分? 測試本地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_MainWindowif __name__ == "__main__":###這里是我調用pyqt界面的代碼try:ssh = paramiko.SSHClient()ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())# 替換為你的遠程服務器連接信息sshssh.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
?執行時的工作目錄就和云端直接執行時一致了,已經成功連接服務器進行檢測。