如何在不增加内存的情况下减少神经网络的训练时间?

How can we decrease the training time of neural networks without increasing memory?

提问人:erfan momeni 提问时间:11/12/2023 最后编辑:erfan momeni 更新时间:11/12/2023 访问量:34

问:

我想训练 rnn 模型(gru+lstm) 我的训练模型有 500000 个英文文本,我想用这些数据训练和评估模型。当我检查批量大小为 20 的一个 epoch 的训练时间时,它真的很高(6 小时)

图层(类型)输出形状参数#

===============================================================

input_4 (InputLayer) [(无, 149, 1)] 0

gru_6 (GRU) (无, 169) 87204

dense_6(密集)(无,128) 21760

repeat_vector_3 (RepeatVector) (无, 169, 128) 0

gru_7 (GRU) (无, 169, 128) 99072

time_distributed_3 (TimeDistributed) (None, 169, 165627) 21365883

===============================================================

参数总数: 21,573,919

可训练参数:21,573,919

不可训练的参数:0


这是神经网络层的摘要。 我想知道我们是否有任何减少训练时间的方法(不增加内存或增加批处理大小)。

机器学习 深度学习 循环神经网络 训练数据

评论


答:

0赞 Simon David 11/12/2023 #1

您可以研究 的用法,它既可用于 TensorFlow/Keras 也可用于 PyTorch。通过降低模型的精度,它需要更少的内存。例如,仅使用(16 位)而不是 (32 位)的模型需要一半的内存,这就是为什么您通常可以将内存加倍,从而显着加快训练速度的原因。mixed precisionfloat16float32batch size

但是,请记住,使用错误的 dtypes 可能不会带来任何性能改进 - 例如,在没有 (Advanced Matrix Extensions) 的情况下使用 on s 不会加快您的训练速度,实际上会使您的训练变慢!因此,您应该仔细阅读该主题并使用提供的链接作为起点。bfloat16CPUAMX

评论

0赞 erfan momeni 11/13/2023
由于我的模型以 softmax 结尾,因此此解决方案对我不起作用,我必须使用质量。尽管如此,我还是感谢您的回复。如果您有任何其他建议,我将很高兴听到它们。float32
0赞 Simon David 11/13/2023
是的,softmax 应该是 ,正如我分享的 TensorFlow 文档中提到的。混合精度的要点不是降低所有模型层的精度,而是降低精度不会产生负面影响的模型层。我个人不知道有任何其他方法可以实现您正在寻找的东西。如果您发现其他东西,请告诉我!float32