DeepLearning-Python 用到的技巧

1. sys.setrecursionlimit(10000)

设置递归深度。Python里面默认的递归深度是很有限的,大概是900多的样子,当递归深度超过这个值的时候,就会引发这样的一个异常。解决的方式是手工设置递归调用深度 添加上这一句就可以

2. Keras backend

from keras import backend as K
使用抽象 Keras 后端编写新代码,如果你希望你编写的 Keras 模块与 Theano (th) 和 TensorFlow (tf) 兼容,则必须通过抽象 Keras 后端 API 来编写它们。
通过 from keras import backend as K 来导入后端模块。导入后下面的代码实例化一个输入占位符。它等价于 tf.placeholder() 或 th.tensor.matrix(), th.tensor.tensor3(), 等等。
keras.backend.cast_to_floatx(x) : 将numpy数组转换成为默认的Keras浮点类型
keras.backend.clear_session():销毁当前的 TF 图并创建一个新图,有用于避免旧模型/网络层混乱。
keras.backend.is_keras_tensor(x):判断 x 是否是 Keras 张量,「Keras张量」是由 Keras 层(Layer类)或 Input 返回的张量。 返回:Bool 类型,异常:ValueError: 如果 x 不是一个符号张量。
keras.backend.in_train_phase(x, alt, training=None): 在训练阶段选择 x,其他阶段选择 alt。请注意 alt 应该与 x 尺寸相同。

3. horovod

参考:horovod实现分析
Horovod 是一个兼容主流计算框架的分布式机器学习训练框架,主要基于的算法是 AllReduce。

4. TensorFlow config

参考tf2
tf.config: GPU的使用与分配, 指定当前程序使用的 GPU.默认情况下 TensorFlow 会使用其所能够使用的所有 GPU,以避免内存碎片化所带来的性能损失。不过,TensorFlow 提供两种显存使用策略,让我们能够更灵活地控制程序的显存使用方式:
1)仅在需要时申请显存空间(程序初始运行时消耗很少的显存,随着程序的运行而动态申请显存);2)限制消耗固定大小的显存(程序不会超出限定的显存大小,若超出的报错)。

TensorFlow 1.X 的 图执行模式 下,可以在实例化新的 session 时传入 tf.compat.v1.ConfigPhoto 类来设置 TensorFlow 使用显存的策略。具体方式是实例化一个 tf.ConfigProto 类,设置参数,并在创建 tf.compat.v1.Session 时指定 Config 参数。以下代码通过 allow_growth 选项设置 TensorFlow 仅在需要时申请显存空间:

config = tf.compat.v1.ConfigProto()
config.gpu_options.allow_growth = True
sess = tf.compat.v1.Session(config=config)

以下代码通过 per_process_gpu_memory_fraction 选项设置 TensorFlow 固定消耗 40% 的 GPU 显存:

config = tf.compat.v1.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.4
tf.compat.v1.Session(config=config)

5. 提高GPU利用率

参考:tf.data+estimator
参考:pytorch
显卡分为 显存和GPU, 提高显存利用率,增大batch_size, 提高GPU利用率,pytorch中在 DataParallel DataLoader中增大work_number.

GPU 太小,只能训练小batch的数据怎么办?—梯度累积。

6. Linux显存占用无进程清理方法

在跑TensorFlow,pytorch之类的CUDA程序时,强行Kill掉进程后发现显存仍然占用,但是nvidia-smi时 显示无进程。此时可以通过下面命令 来kill 掉占用显卡的进程。
fuser -v /dev/nvidia*
kill -9 xxx

安装 fuser : apt-get install psmisc

7. 查看进程

查看占用CPU最多的10个进程:

ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head

解析:
上面的命令其实是2个命令组合:

  • ps aux|head -1
    –> 为了获取标题(USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND)
  • ps aux|grep -v PID|sort -rn -k +3|head
    –>grep -v PID 是将ps aux命令得到的标题去掉(即grep不包含PID这3个字母组合的行)
    –>sort -rn -k +3 将上面的结果用sort排序,命令中的-rn的r表示结果倒序排序,n是以数值大小排序,而-k +3则是针对第3列的内容进行排序(第3列是CPU占用率),再使用head 获取默认前10行数据。(|表示管道操作)

查看占用内存资源最多的10个进程:

ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head

命令与占用CPU的类似,只是+3改成+4因为MEM在第4列

ps aux的标题解释:
PID:进程的ID
USER:进程所有者
PR:进程的优先级别,越小越优先被执行
NInice:值
VIRT:进程占用的虚拟内存
RES:进程占用的物理内存
SHR:进程使用的共享内存
S:进程的状态。S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值为负数
%CPU:进程占用CPU的使用率
%MEM:进程使用的物理内存和总内存的百分比
TIME+:该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值。
COMMAND:进程启动命令名称

8. Linux 常用命令

参考:cat_tail_head_wc_stat_cut_diff
参考:dd_file_tar_grep_find

cut 命令

用于按“列”提取文本字符,格式为“cut [参数] 文本”。
在Linux系统中,如何准确地提取出最想要的数据,是我们应该重点学习的内容。
按列搜索,不仅要使用 -f 参数来设置需要看的列数,还需要使用 -d 参数来设置间隔符号:
使用以下命令提取出passwd文件中的用户名信息,即提取以冒号(:)为间隔符号的第一列内容

[root@centos110 ~]# head -n 2 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

[root@centos110 ~]# cut -d : -f 1 /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
grep
#grep 命令参数:
-b:将可执行文件(binary)当做文本文件(text)来搜索
-c:仅显示找到的行数
-i:忽略大小写
# 最常用的两个参数,几乎能完成日后80%的工作需要
-n:显示行号  
-v:反向选择—仅列出没有“关键词”的行

grep -n  /sbin/nologin  /etc/passwd

9. sshpass 解决scp密码交互式输入

sshpass可以解决scp时的密码交互式输入。主要用于脚本当中,缺点是容易暴露密码,泄露安全信息。

1、安装 apt-get install sshpass
2、使用命令 sshpass -p (passwd) scp(绝对路径文件)root@(IP):/data
#如果拷贝文件夹需要添加scp -r 参数
3、脚本方式 #!/bin/bash
password=qwer
user=root
ip=192.168.1.100
file=/home/file.txt
sshpass -p $password scp file u s e r @ user@ user@ip:/data/
脚本优化方式:
1、password、user、ip可以设置为变量进行输入式读取
2、多个不同IP可以设置为ip_list.txt,然后用for循环
3、文件也可以采取for循环的方式
4、可以加入判断式,比如向不同ip节点拷贝不同文件

10. jupyter 远程控制服务器

在远程服务器上开启jupyter notebook,在本地连接jupyter

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值