在训练深度学习模型时,速度瓶颈通常出现在加载数据的阶段,一种加速方法是将数据预先组织为npy文件或者tfrecord文件,但是这会将数据所耗费的磁盘空间直接加倍,另一种做法就是通过多线程将数据加载到一个队列中,而每次读取则直接取用这个队列中的元素,这样就可以减少模型等待数据加载的时间,提高模型的训练速度,本文就对多进程、多线程做一个简单介绍。
多进程和多线程的概念与联系
- 一个程序至少有一个进程,一个进程至少有一个线程。
- 线程的划分尺度小于进程,所以多线程程序并发性较高。
- 进程在执行的时候拥有独立的内存单元,而一个进程中的多个线程是共享内存的,所以可以共享一些变量,这也是多线程读取数据的主要依据。
- 在同一个程序中,多线程可以并发执行一个程序的不同部分。
- 多进程是多CPU并行调度的。
- 多线程是同一个进程下执行的,可以被抢断或者挂起。
- 计算密集型使用多进程。
- IO密集型使用多线程。
GIL锁
- 在任何进程中,一次只能有一个线程在执行,因此不能为多线程分配多个CPU,所以python中的线程只能并发,并不能真正的同时运行,也就是不能并行。在python3版本提出的GIL锁的主要作用就是当前线程遇到阻塞的情况下就会切换线程。
博主会持续更新一些深度学习相关的基础知识以及工作中遇到的问题和感悟,喜欢请关注、点赞、收藏。
|