基于AWS使用深度学习的10个Linux命令

基于AWS使用深度学习的10个Linux命令

大家好,又见面了,我是全栈君。

在AWS上执行大规模的深度学习处理是一个廉价而且有效的学习和开发方式。花少量的钱就可以使用数十GB的内存,数十个CPU,多个GPU,这是值得推荐的。

如果你是使用EC2或者Linux 命令的新人,在云端执行深度学习脚本的时候, 这些命令是非常有效的。
本文的主要内容包括:
1)在本机和EC2实例间复制数据
2)使脚本按天,周,月安全地运行
3)监测进程,系统和GPU 的性能

注意:所有命令在类linux环境中执行(Linux,OS x 或者 cygwin)

0、环境约定

假设AWS EC2 已经正常运行,方便起见,对环境做如下的设定:
1)EC2 服务器的IP地址为 54.218.86.47
2)用户名为ec2-user
3)SSH 密钥位于 ~/.ssh/ 中,文件名为aws-keypair.pem;
4)使用python 脚本工作

关于如何搭建一个 基于GPU的EC2实例来 执行深度学习,可以参见:
https://machinelearningmastery.com/develop-evaluate-large-deep-learning-models-keras-amazon-web-services/

1、 登陆到服务器

在做任何操作之前,首先要登陆到目标服务器。简单地,使用SSH命令。将SSH 密钥存储在 ~/.ssh/ 中,使用有意义的文件名,例如aws-keypair.pem。使用如下命令登陆EC2主机,注意地址和用户名:

ssh -i ~/.ssh/aws-keypair.pem ec2-user@54.218.86.47

2、 拷贝文件到服务器

使用SCP命令拷贝本地文件到服务器,例如将script.py 文件拷贝到EC2 服务器的命令如下:

scp -i ~/.ssh/aws-keypair.pem script.py ec2-user@54.218.86.47:~/

3、使脚本在服务器的后台运行

在服务的后台执行脚本,可以忽略其他进行的信号量,忽略标准的输入输出,将所有的输出和错误信息重定向到一个日志文件中。对于需要长时间运行的深度学习模型而言, 这是非常必要的。

> nohup python /home/ec2-user/script.py >/home/ec2-user/script.py.log </dev/null 2>&1 &

该命令中script.py 和 script.py.log 都位于 /home/ec2-user/ 目录下。关于 nohup 和重定向 参考其他的详细介绍(例如wikipedia中的介绍)。

4、在服务器的指定 GPU 上执行脚本

如果EC2 支持的话,推荐在同时运行多个脚本。例如,EC2有4个GPU的话, 可以在每个GPU上单独运行一个脚本,示例代码如下:

CUDA_VISIBLE_DEVICES=0  nohup python /home/ec2-user/script.py >/home/ec2-user/script.py.log </dev/null 2>&1 &

如果有4个GPU的话,可以指定CUDA_VISIBLE_DEVICES从0到3。这在TF做后台的Keras上是可行的,在Theano 没有测试过。

关于CUDA_VISIBLE_DEVICES 的更多信息可以参见https://devblogs.nvidia.com/parallelforall/cuda-pro-tip-control-gpu-visibility-cuda_visible_devices/

5、监测脚本的输出

如果输出结果中有项目评分或者一个算法的运行结果,实时监控脚本的输出是很有意义的。示例如下:

tail -f script.py.log

遗憾的是,当屏幕上在一段时间没有输出的时候,AWS 会关闭这个终端,所以最好使用:

watch "tail script.py.log"

有的时候看不到python的标准输出,不知道是python的问题还是EC2的问题。

6、监测系统和进程的性能

监测EC2系统的性能是有意义的,尤其是已经使用了或还剩下多少内存。例如:

top -M

或者指定进程标识PID:

top -p PID -M

7、监测GPU 性能

如果在GPU上同时执行多个脚本,并行执行的话,查看每个GPU 的性能和使用率是不错的主意。例如:

watch "nvidia-smi"

8、检查脚本是否还在服务器上运行

一般地,会保持终端一直是开着的。

watch "ps -ef | grep python"

9、在服务器上编辑文件

一般不建议在服务器直接修改,当然你熟知vi除外:

vi ~/script.py

vi 的用法就不在这里赘述了。

10、从服务器上下载文件

与上传文件相对,这是一个下个png文件的例子:

scp -i ~/.ssh/aws-keypair.pem ec2-user@54.218.86.47:~/*.png .

需要注意的几点

  • 如果希望同时运行多个脚本,最好选用拥有多个GPU 的EC2
  • 最好在本地编写脚本
  • 将执行结果输出到文件,下载到本地进行分析
  • 使用watch 命令保持终端处于运行中
  • 在本地执行远程命令

原文参见 https://machinelearningmastery.com/command-line-recipes-deep-learning-amazon-web-services/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/108179.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 多线程锁有几种类型_线程互斥和同步的区别

    多线程锁有几种类型_线程互斥和同步的区别一、同步与互斥的概念  现代操作系统基本都是多任务操作系统,即同时有大量可调度实体在运行。在多任务操作系统中,同时运行的多个任务可能:都需要访问/使用同一种资源;多个任务之间有依赖关系,某个任务的运行依赖于另一个任务。【同步】:  是指散步在不同任务之间的若干程序片断,它们的运行必须严格按照规定的某种先后次序来运行,这种先后次序依赖于要完成的特定的任务。最基本的场景就是:两个或两个以…

    2022年10月24日
  • tomcat8.5支持jdk1.8吗_tomcat jdk版本

    tomcat8.5支持jdk1.8吗_tomcat jdk版本最近接收到任务要让公司的框架支持Http2协议,主要是RPC之间走Http2。通过查找官网以及上网找资料和咨询大神的帮助,终于找到以下两种方式,蠢人不多话,直接上代码。网上大多数都是抄来抄去的,所以希望本文能帮助到大家,共同学习吖springboot2.1.4+tomcat9+java8 这个方法是我从外网查找到的,但是缺点就是需要额外的再开一个端口来接收h2c的请求有兴趣想看原…

    2022年10月26日
  • django 装饰器_django类视图和函数视图哪个好

    django 装饰器_django类视图和函数视图哪个好类视图在写视图的时候,Django除了使用函数作为视图,也可以使用类作为视图。使用类视图可以使用类的一些特性,比如继承等。Viewdjango.views.generic.base.View是主

    2022年8月7日
  • 【时间序列预测】基于matlab CNN优化LSTM时间序列预测(单变量单输出)【含Matlab源码 1688期】「建议收藏」

    一、CNN简介二、LSTM简介1LSTM控制流程LSTM的控制流程:是在前向传播的过程中处理流经细胞的数据,不同之处在于LSTM中细胞的结构和运算有所变化。这一系列运算操作使得LSTM具有能选择保存信息或遗忘信息的功能。咋一看这些运算操作时可能有点复杂,但没关系下面将带你一步步了解这些运算操作。2核心概念LSTM的核心概念在于细胞状态以及“门”结构。细胞状态相当于信息传输的路径,让信息能在序列连中传递下去。你可以将其看作网络的“记忆”。理论上讲,细胞状态能够将序列处理过程中的相关

    2022年4月16日
  • 深入解析最短路径算法

    深入解析最短路径算法转载自:http://blog.csdn.net/fengchaokobe/article/details/7478774  第一节问题的提出及解决方法      所谓最短路径问题,可以说有两种情况来描述。      描述一:在图论中,指的是寻找图中两个节点之间的最短距离。如下图      描述二:在现实生活中,指的是找到从一个地方到另一个地方的最近距离。如下图

    2022年6月3日
  • QT5.11下载与安装教程[通俗易懂]

    QT5.11下载与安装教程[通俗易懂]一、QT软件下载Qt5.9之后的安装包与之前相比,不再区分VS版本和MinGW版本,而是全都整合到了一个安装包中。因此,与之前的安装包相比,体积也是大了不少,以前是1G多,现在是2G多。QT5.9.0安装包QT5.8.0安装包下载地址:http://download.qt.io/archive/qt/各目录说明如下: ①gdb是针对Android开发的调试器。 ②jom可以百度…

    2022年5月17日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号