Pytorch手动释放显存

最近遇到一个问题,用pytorch跑一个 不固定输入的模型inference,一张图片一张图片的测试。有两张图片分辨率相同,都是4032×3024,但是前一张图片可以跑,到后一张图片就报cuda out of memory的错误。原因是对于固定输入,pytorch会复用显存。而对于不固定输入的模型,pytorch存在显存释放不及时的问题,导致一直增长。解决方法是在每次inference后,手动释放显存


torch.cuda.empty_cache()

加上该语句之后就可以正常运行了

windows、ubuntu下校验文件

windows的powershell中自带了校验工具certutil,可以生成文件的MD5值、SHA1值、SHA256值。具体命令如下:

certutil -hashfile xxx MD5
certutil -hashfile xxx SHA1
certutil -hashfile xxx SHA256

xxx表示文件路径

ubuntu下可以使用md5sum/sha256sum生成某待测文件的哈希值

md5sum xxx
或者
sha256sum xxx

linux 解压、压缩

tar
-c:建立压缩档案
-x:解压
-t:查看内容
-r:向压缩归档文件末尾追加文件
-u:更新原压缩包中的文件
这五个是互斥的参数,必须用且仅能用其中一个,可以和其它参数连用。

-z: gzip相关
-j: bz2相关
-Z:compress相关
-v:显示所有过程
根据需要在压缩或者解压时选择

-f: 使用档案名字。该参数必须为最后一个参数。后面加上文件名

tar –xvf file.tar //解压 tar包
tar -xzvf file.tar.gz //解压tar.gz
tar -xjvf file.tar.bz2   //解压 tar.bz2
tar –xZvf file.tar.Z   //解压tar.Z
unrar e file.rar //解压rar
unzip file.zip //解压zip

tar -cvf xx.tar *.txt //将目录里所有txt文件打包成xx.tar
tar -czf xx.tar.gz *.txt //将目录里所有txt文件打包并用gzip压缩,得到xx.tar.gz
tar -cjf xx.tar.bz2 *.txt //将目录里所有txt文件打包并用bzip2压缩,得到xx.tar.bz2

C/C++中的mmset函数

void * memset(void *buffer, int c, int count)
将buffer所指位置后面的count个字节用c代替,并返回buffer。c实际值应该在0到255之间

在一段内存块中填充某个给定的值,是对较大的结构体或者数组进行 清零操作的最快方法。

对一个数组清零示意

char buf[20];
mmset(buf, 0, sizeof(char)*20);