问题
最近在Ubuntu上使用Nvidia GPU训练模型的时候,如果机器锁屏一段时间再打开的时候鼠标非常卡顿,或者说显示界面非常卡顿,使用nvidia-smi
查看发现,训练模型的GPU没有问题,但是连接显示屏的GPU的风扇和电源报错:
解决方案
自动风扇控制
在nvidia论坛有人给出了解决方案,即问题的根源可能是风扇转速不足使GPU过热导致的。
“生活就是个缓慢受锤的过程”, 只是有的人像铁, 有的人像牛,有的人像铁牛...
最近在Ubuntu上使用Nvidia GPU训练模型的时候,如果机器锁屏一段时间再打开的时候鼠标非常卡顿,或者说显示界面非常卡顿,使用nvidia-smi
查看发现,训练模型的GPU没有问题,但是连接显示屏的GPU的风扇和电源报错:
在nvidia论坛有人给出了解决方案,即问题的根源可能是风扇转速不足使GPU过热导致的。
在Docker中运行PyTorch程序时,如果报错:1
RuntimeError: DataLoader worker (pid 123456) is killed by signal: Aborted.
最可能的原因是,Docker的共享内存不足,解决办法是,要么改成更小的batchsize,要么退出docker后,重新运行docker并指定更大的共享内存。这个原因可以从docker的说明文档中可以看出:
1 | --oom-kill-disable=false:Whether to disable OOM Killer for the container or not. |
这个命令表示是否要kill超出内存的程序,因此解决上面的问题需要重新调整docker的运行内存。
关于docker内存相关的命令:(docker中有很多与内存相关的命令,如kernel-memory,oom等,这里列出常用的几个)
conda 4.6.9这个版本是问题很多啊…
首先最麻烦的一个问题是,运行完conda init zsh
后,每次启动命令行的时候,会在开头报错:1
(eval):61: = not found
起因是为了使用conda activate
来切换环境,需要在命令行中对使用的shell执行conda init zsh (或者bash)
。执行后,conda会在~/.zshrc
(如果使用bash,则会是~/.bashrc
)中将原来的export "/anaconda3/bin:$PATH"
注释掉,而改成conda init相关的命令。
从说明上来看,是在conda init过程中,执行某个sh文件时执行eval命令时,出现了问题。查遍了网络,最后在GitHub issue中发现了问题的解决办法(可能是因为带有“=”的缘故,google一直搜索不到相关问题)。
问题根源在于,这个版本的conda的conda.sh
文件第61行中,[]
中判断语句使用了两个等号导致的。1
if [ "${_CE_CONDA+x}" == "condax" ]; then
解决办法: 直接再MacOS的anaconda目录下搜索conda.sh
修改其中的第61行,把两个等号改成一个即可。如果有多个conda.sh就都改掉也没有问题。
另一个简单粗暴的解决办法就是直接对conda进行降级:1
conda install conda=4.6.8
问题2是在尝试解决问题1的过程中遇到的,也是conda特定版本的问题。对conda进行降级的时候发现, 会报一个关于qt
包的错误:1
2
3
4
5
6
7ERROR conda.core.link:_execute(568): An error occurred while uninstalling package 'defaults::qt-5.9.7-h468cd18_1'.
PermissionError(1, 'Operation not permitted')
Attempting to roll back.
Rolling back transaction: done
[Errno 1] Operation not permitted: '/anaconda3/bin/Assistant.app/Contents/PkgInfo' -> '/anaconda3/bin/Assistant.app/Contents/PkgInfo.c~'
解决办法:直接去/anaconda3/pkgs
中删除qt-5.9.7-h468cd18_1
这个包即可。
参考:https://github.com/conda/conda/issues/8474
https://github.com/conda/conda/issues/8440
Ubuntu中使用双屏显示时,两屏之间的边缘默认是开启“粘滞边缘”的,即鼠标滑动慢的情况下,会卡在屏幕中间无法“穿越到”另一个屏幕。如果关闭“setting-display-sticky edge”仍然无法取消“粘滞边缘”功能的话,需要通过安装插件实现:
1 | sudo apt-get install compizconfig-settings-manager |
安装完成后,命令行中输入ccsm
启动刚刚安装的插件,在左侧边栏找到“desktop”,然后选择“Ubuntu Unity Plugin”;然后使用左侧“Filter”搜索edge stop vlocity
,将其设置成1
即可。
之前在使用Python2的时候,经常会遇到编码相关的错误,异常头疼。主要是因为Python2字符串设计上有一些固有的缺陷:
- 使用 ASCII 码作为默认编码方式,对中文处理很不友好。
- 把字符串的牵强地分为 unicode 和 str 两种类型,误导开发者
与Python2不同,Python3默认使用utf-8
编码方式,并且Python3的字符主要由两种:str
/byte
。因此正常情况下,Python3很少出现编码问题,但是最近在使用docker的时候,又发生了两次编码错误问题,分别是因为:
utf-8
)utf-8
,而是ascii
针对这两个可能的原因,首先判断系统的(或者当前命令行环境的)编码:1
2
3
4#首先进入python环境
import sys
sys.stdout.encoding
>>> 'US-ASCII'
PyTorch(tensorflow类似)的损失函数中,有一个(类)损失函数名字中带了with_logits
. 而这里的logits指的是,该损失函数已经内部自带了计算logit的操作,无需在传入给这个loss函数之前手动使用sigmoid/softmax
将之前网络的输入映射到[0,1]之间.