【问题标题】:In knowledge distillation, how to run the student and the teacher models in parallel?在知识蒸馏中,如何并行运行学生模型和教师模型?
【发布时间】:2020-12-29 18:03:23
【问题描述】:

我正在使用知识蒸馏实现快速 DNN 模型训练,如下图所示,以并行运行教师和学生模型。

我检查了一些流行的存储库,例如 NervanaSystems/distillerpeterliht/knowledge-distillation-pytorch。它们逐步执行学生模型和教师模型的前向运算,即不在不同设备(GPU 或 CPU)上并行执行。

我正在尝试加快此训练过程,以便使用多个设备同时运行 2 个模型(例如,将一个模型加载到 CPU 上并且不中断另一个模型的 GPU 训练)。

并行运行 2 个模型的正确方法是什么?我可以使用 Python multiprocessing 库为 2 个模型启动 2 个进程,即加载 2 个模型实例并运行 forward() 吗?我正在使用 MXNet,但这是所有 ML 框架的普遍问题。

编辑:
我的计划是在 CPU 上放置一个轻量级的预训练教师模型,该模型仅在冻结参数的情况下运行前向传递。
学生模型是要在 GPU(分布式)上训练的大型模型。 此任务不适用于模型压缩。 我想将轻量级任务(教师的前向传递)移动到 CPU 可以增加重叠并使这条管道更快。
这个想法来自研讨会论文:Infer2Train: leveraging inference for better training of deep networks

【问题讨论】:

    标签: tensorflow machine-learning neural-network pytorch mxnet


    【解决方案1】:

    我正在尝试加快此训练过程以在以下位置运行 2 个模型 同时使用多个设备

    我怀疑这会带来任何加速,尤其是在以下情况下:

    (例如,在 CPU 上加载一个模型并且不中断 GPU 训练 其他模型)。

    因为深度学习是一个也使用 CPU 的管道,可能是多个内核(例如用于数据加载,也用于接收指标、收集它们等)。

    此外,与 GPU/TPU 相比,CPU 对神经网络训练的效率相当低,除非你有一些定制的 CPU 架构(像 MobileNet 这样的东西)。如果您要在 CPU 上训练学生,您可能会显着减慢 teacher 的管道元素。

    并行运行 2 个模型的正确方法是什么?

    同样,取决于型号,但最好使用2 GPU 进行训练,并将 CPU 内核拆分为它们之间的其他任务。但是,在您的情况下,您必须在两台设备上同步教师和学生的预测。

    我能否使用 Python 多处理库为 2 个模型启动 2 个进程,即加载 2 个模型实例并运行 forward()?

    PyTorch 提供了可能用于此目的的原语(例如“他们的”multiprocessing 包装器、Futures 等),但不确定 mxnet 或类似的东西。

    【讨论】:

    • 感谢您的快速回复。我的计划是将一个预训练的轻量级教师模型放在 CPU 上(假设有额外的容量),并让 2 个模型重叠,以避免教师引入额外的时间。它不是为了模型压缩,而是为了探索一些新的训练技术。老师(灯,在 CPU 上)只进行前向传递,其参数被冻结。我将检查 PyTorch 多处理并尝试在其他框架上使用 Python 的多处理。
    • @Yiding 不幸的是,除了您必须自己编写代码的原语之外,我不知道有任何现成的库/工具可以做到这一点。对于 PyTorch,您可以根据需要启动 here
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-23
    • 2018-04-11
    相关资源
    最近更新 更多