我正在使用知识蒸馏实现快速的DNN模型训练,如下图所示,以并行运行教师和学生模型。
我查看了一些流行的代码库,比如NervanaSystems/distiller和peterliht/knowledge-distillation-pytorch。它们逐步执行学生和教师模型的前向操作,即不在不同的设备(GPU或CPU)上并行执行。
我正在尝试加快这个训练过程,以便使用多个设备同时运行两个模型(例如,在CPU上加载一个模型,而不中断另一个模型的GPU训练)。
并行运行两个模型的正确方法是什么?是否可以使用Python multiprocessing库为2个模型启动2个进程,即加载2个模型实例和运行forward()?我使用的是MXNet,但这是所有ML框架的通用问题。
编辑:
我的计划是在CPU上放置一个轻量级的预训练的教师模型,它只在参数冻结的情况下向前运行。
学生模型是一个需要在GPU (分布式)上进行训练的大型模型。此任务不适用于模型压缩。我认为将一个轻量级的任务(教师的前传)转移到CPU上可以增加重叠,并使此流水线更快。
这个想法来自一篇研讨会论文:Infer2Train: leveraging inference for better training of deep networks。

发布于 2020-09-11 17:24:01
我正在尝试加快此培训过程,以便使用多个设备同时运行这两个模型
我怀疑这是否会带来任何速度,特别是在以下情况下:
(例如,在中央处理器上加载一个模型,而不中断另一个模型的图形处理器训练)。
因为深度学习是一个管道,它也使用CPU,可能是多个核心(例如,用于数据加载,但也用于接收指标,收集指标等)。
此外,与GPU/TPU相比,CPU对于神经网络训练是相当低效的,除非你有一些量身定制的CPU架构(比如MobileNet)。如果您对学生进行CPU培训,您可能会显著降低teacher管道元素的速度。
并行运行两个模型的正确方法是什么?
同样,根据型号的不同,最好使用2 GPU进行训练,并在它们之间拆分CPU核心来执行其他任务。在你的例子中,你必须在两个设备上同步教师和学生的预测。
我是否可以使用Python多处理库为2个模型启动2个进程,即加载2个模型实例并向前运行()?
PyTorch提供原语(例如,“他们的”multiprocessing包装器、未来等)。它可能会用来做这件事,不确定是mxnet还是类似的。
https://stackoverflow.com/questions/63843254
复制相似问题