matlab 自动处理数据,Matlab Remote IPC自动化数据处理
Matlab Remote IPC 實現數據自動化處理
轉載請注明作者夢里茶
需求
在研究中遇到這樣一種需求,
在Matlab端做GPU運算;
在Python端做數據清洗和數據分析;
兩端分屬兩個服務器;
M端需要等待P端完成數據清洗才能開始做訓練和預測
P端需要等待M端完成訓練和預測才能做數據分析
問題
數據很多,不適合將兩端合并到一個服務器上
存在增量訓練,對同一份數據,可能要結合多份額外數據進行N次傳輸
由于采用10折交叉驗證,數據劃分為10份,總共要進行10×N次傳輸
M端和P端都需要各自運行一段時間才能出結果,需要等待,說快不快,說慢不慢
上面的幾個點使得訓練的過程非常繁瑣耗時
探索
作為不耐心而且懶的程序員,超過15秒的事情就想要自動化,于是開始想能不能把上面這個過程自動化
方案一 用一種語言重寫另一方的代碼
Python端邏輯復雜,與數據關聯密切,重構為Matlab代碼工程量大(而且我還是比較熟悉Python)
Matlab端是某篇論文的代碼,使用了MatConvNet這個庫做CNN,用Python實現工程量也很大,而且因為是別人的代碼,還可能有很多未知的坑
方案二 使用第三方庫作為Lib相互調用
由于Matlab端涉及GPU運算,配置比較復雜
作為庫相互調用使得兩個模塊的耦合增加,不符合解耦原則
需要編寫接口代碼
方案三 Matlab和Python進行進程間通信
進程間通信要求兩邊各有一個可執行程序,但是Matlab打包麻煩(需要下另一個收費的打包工具)具體看這里,在GUI界面中操作相對方便,并且打包后不好調試
遠程進程間通信有許多方案可以選擇,例如socket,這個工作量比上面的方案小,但也需要額外編寫一部分功能代碼
方案四 (Final)使用Matlab進行執行shell命令進行scp,以文件的方式進行數據傳輸
改動的代碼最少
依舊是兩個模塊,依舊低耦合
通信性能沒有庫調用或者Socket那么好,但程序主要性能瓶頸不在數據傳輸,而在于訓練和預測,所以沒關系
執行ssh的時候可以同時執行另一個服務器上的命令,從而調用Python端腳本進行Python端工作
下面具體講方案四的實現
實現
Matlab執行shell命令
setenv('d_name', dataset_name);
setenv('std_idx', num2str(i));
% transport raw image predict data
!env LD_LIBRARY_PATH='' scp ${d_name}_train.log cwh@192.168.231.171:/home/cwh/coding/Project/data/${std_idx}-train/renew_pid.log
!env LD_LIBRARY_PATH='' ssh cwh@192.168.231.171 "cd /home/cwh/coding/Project; python data_analysis.py data/${std_idx}-train"
其中
通過setenv來設置環境變量,從而動態決定要執行的腳本的內容
在matlab代碼中,使用!開頭,代表這是一行shell命令
需要把LD_LIBRARY_PATH這個環境變量置為空,防止使用matlab自帶的一些lib,導致ssh等命令執行失敗
SSH
Matlab是有一個庫可以做ssh和scp的
但是,不想把密碼寫在代碼里,并且懶得去用第三方的東西
于是想直接用shell調用
shell調用有一個老大難的問題,就是需要輸密碼
受Hadoop分布式配置的啟發,發現可以做ssh免密碼配置,避開輸密碼的問題
免密碼具體參考這個教程
ssh配置免密之后,scp也是免密的,另外還有一個好處,ssh可以通過""來嵌入ssh之后要執行的代碼,從而做Python調用
Python
如果之前Python端是用IDE開發的,轉為shell調用就要注意兩個問題路徑,cd到正確的目錄,Python端的文件操作和lib import的相對路徑是相對于要執行的py文件
庫# 加載對應的庫
env LD_LIBRARY_PATH='/your/lib/path/sth.so'
命令行參數,參考這個教程
同步控制
由于matlab調用shell命令時會陷入等待,會等待命令完成再執行下一步,不像socket發完消息后不知道什么時候另一邊運行結束,所以不需要自己實現排隊等待同步互斥的東西
如果需要在等待的時候做些并發,可以考慮matlab 并行工具箱,結合Python端的并發幾乎就是一個分布式框架了,有空再深入去搞一搞
SUMMARY
matlab調shell
shell中ssh做遠程進程調用
scp做數據傳輸
效果:盡可能輕量地解決自動化的問題
總結
以上是生活随笔為你收集整理的matlab 自动处理数据,Matlab Remote IPC自动化数据处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: a1701是ipad什么型号
- 下一篇: 烧脑最囧挑战13关怎么过(有无书友看过初