随着GPU并行计算的算力提高,在DeepLearning中使用GPU可以大大缩短训练神经网络的时间。但是个人电脑的性能有限,这时就需要搭建专用的深度学习服务器来进行计算。
统计文件个数
统计当前目录的文件个数 (不包括目录)
ls -l | grep "^-" | wc -l
统计当前目录的文件个数 (包括子目录)ls -lR | grep "^-" | wc -l
统计当前目录的文件夹个数 (包括子目录)ls -lR | grep "^d" | wc -l
查看性能
最常用的top、vmstat、iostat、free和sar
,此外仍然可以通过以下命令监控系统:
- 查看物理cpu个数:
cat /proc/cpuinfo |grep "physical id"|sort|uniq|wc -l
- 查看每个物理cpu中的core个数:
cat /proc/cpuinfo |grep "cpu cores"|wc -l
- 逻辑cpu的个数:
cat /proc/cpuinfo |grep "processor"|wc -l
- 查看内存使用情况:
free -m
- 查看硬盘及分区信息:
fdisk -l
- 查看文件系统的磁盘空间占用情况:
df -h
- 查看硬盘的I/O性能(每隔一秒显示一次,显示5次):
iostat -x 1 5
- 查看linux系统中某目录的大小:
du -sh /root
- 占用空间最多的文件或目录, 按照从大到小的顺序,找出系统中占用最多空间的前10个文件或目录:
du -cksh *|sort -rn|head -n 10
- 查看平均负载
uptime
- CPU性能评估
vmstat sar
- 内存性能评估
free vmstat
- 磁盘I/O性能评估
iostat sar
- 网络性能评估
(1)通过ping命令检测网络的连通性 (2)通过netstat –i组合检测网络接口状况 (3)通过netstat –r组合检测系统的路由表信息 (4)通过sar –n组合显示系统的网络运行状态
### 选择GPU和限制显存
Tensorflow默认是占尽全部显存的,即使你的代码网络结构不占用很大的现存的时候,tf也会默认全部申请是为了在程序运行的过程中直接取用不用再申请操作显存,所有有的时候回看到明明是一个很小的代码却占尽了GPU显存,但是GPU得计算力却还不到30%,尤其是在多个CPU的时候,每块GPU的显存都申请满了,而只有一颗GPU在跑程序。所以我们有必要手动的修改下自己的代码,只需要在关键的地方添上几句代码,就会限制显存使用,同时还能指定跑程序的GPU。如果参数选择的正确的话对程序的运行速度是没有限制的。
> CUDA_VISIBLE_DEVICES=0 python nn.py
将Tensoeflow的命令行参数写在python之前,指明你要使用的GPU,0代表第一块GPU,0,1代表使用设备号是0和1的两块GPU。
```python
#使用tf.flags 传递参数
#在session中使用限制显存的参数
tf.app.flags.DEFINE_float('mr',0.5,'allocate GPU memory rate')
FLAGS=tf.app.flags.FLAGS
gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=FLAGS.mr)
session = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options))
上面的GPUOptions就限制了你的显存的使用率。并且我们使用tf.flags可以直接运行python程序的时候通过命令行参数来指定这个分配现存的大小。
# 使用第一块GPU,并且只使用第一块GPU20%的显存做计算。
CUDA_VISIBLE_DEVICES=0 python nn.py --mr=0.2
也可以使用os
包来实现相应功能:
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "3"
后台运行
只需要在运行命令行之后添加一个&
符号便可以将当前的进程挂到后台。但是一定要记得如果不再使用当前进程的话,用Ctrl+c
是杀不掉的,一定要使用kill
命令杀线程。
sudo kill -s 9 PID (# -s 9 代表着强制杀掉进程,百杀百中)
有时候忘记了进程号,我们需要查找当前活跃的进程,然后找到这个进程号。
ps -ef | grep "python"
使用ssh-keygen 完成免密码登录
~/.ssh
Rysnc
rsync -avzP --delete root@{remoteHost}:{remoteDir} {localDir}
GPU
watch -n 0.2 nvidia-smi
Jupyter
Server: jupyter notebook --no-browser --port=8889
Client: ssh -N -f -L localhost:8888:localhost:8889 username@serverIP
其中: -N 告诉SSH没有命令要被远程执行; -f 告诉SSH在后台执行; -L 是指定port forwarding的配置,远端端口是8889,本地的端口号的8888。
最后打开浏览器,访问:http://localhost:8888/
Screen
创建:screen -S ###
查看有多少会话:screen -ls
恢复:screen -r ###
如果不能恢复:先screen -d ###
再screen -r ###
删除 screen -S ### -X quit