基于A(yíng)WS使用深度學(xué)習的10個(gè)Linux命令
在AWS上執行大規模的深度學(xué)習處理是一個(gè)廉價(jià)而且有效的學(xué)習和開(kāi)發(fā)方式?;ㄉ倭康腻X(qián)就可以使用數十GB的內存,數十個(gè)CPU,多個(gè)GPU,這是值得推薦的。
本文引用地址:http://dyxdggzs.com/article/201709/364415.htm如果你是使用EC2或者Linux 命令的新人,在云端執行深度學(xué)習腳本的時(shí)候, 這些命令是非常有效的。
本文的主要內容包括:
1)在本機和EC2實(shí)例間復制數據
2)使腳本按天,周,月安全地運行
3)監測進(jìn)程,系統和GPU 的性能
注意:所有命令在類(lèi)linux環(huán)境中執行(Linux,OS x 或者 cygwin)
0、環(huán)境約定
假設AWS EC2 已經(jīng)正常運行,方便起見(jiàn),對環(huán)境做如下的設定:
1)EC2 服務(wù)器的IP地址為 54.218.86.47
2)用戶(hù)名為ec2-user
3)SSH 密鑰位于 ~/.ssh/ 中,文件名為aws-keypair.pem;
4)使用python 腳本工作
關(guān)于如何搭建一個(gè) 基于GPU的EC2實(shí)例來(lái) 執行深度學(xué)習,可以參見(jiàn):
https://machinelearningmastery.com/develop-evaluate-large-deep-learning-...
1、 登陸到服務(wù)器
在做任何操作之前,首先要登陸到目標服務(wù)器。簡(jiǎn)單地,使用SSH命令。將SSH 密鑰存儲在 ~/.ssh/ 中,使用有意義的文件名,例如aws-keypair.pem。使用如下命令登陸EC2主機,注意地址和用戶(hù)名:
ssh -i ~/.ssh/aws-keypair.pem ec2-user@54.218.86.47
2、 拷貝文件到服務(wù)器
使用SCP命令拷貝本地文件到服務(wù)器,例如將script.py 文件拷貝到EC2 服務(wù)器的命令如下:
scp -i ~/.ssh/aws-keypair.pem script.py ec2-user@54.218.86.47:~/
3、使腳本在服務(wù)器的后臺運行
在服務(wù)的后臺執行腳本,可以忽略其他進(jìn)行的信號量,忽略標準的輸入輸出,將所有的輸出和錯誤信息重定向到一個(gè)日志文件中。對于需要長(cháng)時(shí)間運行的深度學(xué)習模型而言, 這是非常必要的。
> nohup python /home/ec2-user/script.py >/home/ec2-user/script.py.log &1 &
該命令中script.py 和 script.py.log 都位于 /home/ec2-user/ 目錄下。關(guān)于 nohup 和重定向 參考其他的詳細介紹(例如wikipedia中的介紹)。
4、在服務(wù)器的指定 GPU 上執行腳本
如果EC2 支持的話(huà),推薦在同時(shí)運行多個(gè)腳本。例如,EC2有4個(gè)GPU的話(huà), 可以在每個(gè)GPU上單獨運行一個(gè)腳本,示例代碼如下:
CUDA_VISIBLE_DEVICES=0 nohup python /home/ec2-user/script.py >/home/ec2-user/script.py.log &1 &
如果有4個(gè)GPU的話(huà),可以指定CUDA_VISIBLE_DEVICES從0到3。這在TF做后臺的Keras上是可行的,在Theano 沒(méi)有測試過(guò)。
關(guān)于CUDA_VISIBLE_DEVICES 的更多信息可以參見(jiàn) https://devblogs.nvidia.com/parallelforall/cuda-pro-tip-control-gpu-visi...
5、監測腳本的輸出
如果輸出結果中有項目評分或者一個(gè)算法的運行結果,實(shí)時(shí)監控腳本的輸出是很有意義的。示例如下:
tail -f script.py.log
遺憾的是,當屏幕上在一段時(shí)間沒(méi)有輸出的時(shí)候,AWS 會(huì )關(guān)閉這個(gè)終端,所以最好使用:
watch "tail script.py.log"
有的時(shí)候看不到python的標準輸出,不知道是python的問(wèn)題還是EC2的問(wèn)題。
6、監測系統和進(jìn)程的性能
監測EC2系統的性能是有意義的,尤其是已經(jīng)使用了或還剩下多少內存。例如:
top -M
或者指定進(jìn)程標識PID:
top -p PID -M
7、監測GPU 性能
如果在GPU上同時(shí)執行多個(gè)腳本,并行執行的話(huà),查看每個(gè)GPU 的性能和使用率是不錯的主意。例如:
watch "nvidia-smi"
8、檢查腳本是否還在服務(wù)器上運行
一般地,會(huì )保持終端一直是開(kāi)著(zhù)的。
watch "ps -ef | grep python"
9、在服務(wù)器上編輯文件
一般不建議在服務(wù)器直接修改,當然你熟知vi除外:
vi ~/script.py
vi 的用法就不在這里贅述了。
10、從服務(wù)器上下載文件
與上傳文件相對,這是一個(gè)下個(gè)png文件的例子:
scp -i ~/.ssh/aws-keypair.pem ec2-user@54.218.86.47:~/*.png .
需要注意的幾點(diǎn)
如果希望同時(shí)運行多個(gè)腳本,最好選用擁有多個(gè)GPU 的EC2
最好在本地編寫(xiě)腳本
將執行結果輸出到文件,下載到本地進(jìn)行分析
使用watch 命令保持終端處于運行中
在本地執行遠程命令
評論