入门指南 / Keras 3 基准测试

Keras 3 基准测试

我们对 Keras 3 的三个后端 (TensorFlowJAXPyTorch) 以及使用 TensorFlow 的 Keras 2 进行了基准测试。您可以在 此处 找到用于复制我们结果的代码和设置详细信息。

模型

我们为生成式和非生成式 AI 任务选择了一组流行的计算机视觉和自然语言处理模型。请参阅下表了解我们的选择。

表 1:基准测试中使用的模型。

非生成式 生成式
CV SegmentAnything1 StableDiffusion2
NLP BERT3 Gemma4、Mistral5

我们衡量的不是每个框架所能达到的最佳性能,而是常见用户工作流程的开箱即用性能。考虑到这一点,我们利用了 KerasCV 和 KerasHub 中预先存在的实现来构建 Keras 版本的模型。

硬件

所有基准测试均使用单个 NVIDIA A100 GPU(配备 40GB GPU 内存),运行在 Google Cloud Compute Engine 上,机器类型为 a2-highgpu-1g,具有 12 个 vCPU 和 85GB 主机内存。

结果

表 2 显示了基准测试结果(以毫秒/步为单位)。每个步骤都涉及对单个数据批次进行训练或预测。结果是根据 100 个步骤的平均值计算得出的,不包括第一个步骤(其中包括模型创建和编译开销)。

为了进行公平比较,如果模型和任务(拟合或预测)相同,我们会在所有框架中使用相同的批次大小。但是,对于不同的模型和任务,由于它们的大小和架构不同,我们使用不同的批次大小,以避免出现内存不足(过大)或 GPU 利用率不足(过小)的情况。

对于大型语言模型(Gemma 和 Mistral),我们也使用了相同的批次大小,因为它们是具有相似参数数量(7B)的相同模型类型。我们还对批次大小等于 1 的文本生成进行了基准测试,因为用户对此有广泛的需求。我们使用 bfloat16 精度进行训练和推理,并使用 LoRA6 进行训练(微调)。

为了衡量开箱即用性能,我们尝试使用所有默认设置。例如,使用高级 API(例如使用 Keras model.fit())并尽可能减少配置。

请注意,这与针对特定硬件/框架/模型组合的优化实现的测量有很大不同。有关不同框架的最佳优化结果,请参阅 MLPerf

表 2:基准测试结果。速度以毫秒/步为单位测量。数值越低越好。

批次
大小
Keras 2
(TensorFlow)
Keras 3
(TensorFlow)
Keras 3
(JAX)
Keras 3
(PyTorch)
(急切)
Keras 3
(最佳)
SegmentAnything
(拟合)
1 386.93 355.25 361.69 1,388.87 355.25
SegmentAnything
(预测)
4 1,859.27 438.50 376.34 1,720.96 376.34
Stable Diffusion
(拟合)
8 1,023.21 392.24 391.21 823.44 391.21
Stable Diffusion
(预测)
13 649.71 616.04 627.27 1,337.17 616.04
BERT
(拟合)
32 486.00 214.49 222.37 808.68 214.49
BERT
(预测)
256 470.12 466.01 418.72 1,865.98 418.72
Gemma
(拟合)
8 NA 232.52 273.67 525.15 232.52
Gemma
(生成)
32 NA 1,134.91 1,128.21 7,952.67* 1,128.21
Gemma
(生成)
1 NA 758.57 703.46 7,649.40* 703.46
Mistral
(拟合)
8 NA 185.92 213.22 452.12 185.92
Mistral
(生成)
32 NA 966.06 957.25 10,932.59* 957.25
Mistral
(生成)
1 NA 743.28 679.30 11,054.67* 679.30

* 目前,由于 KerasHub 使用静态序列填充,而不是 HuggingFace,因此 PyTorch 后端的 LLM 推理速度异常缓慢。这个问题很快就会得到解决。

讨论

主要发现 1:没有“最佳”后端

Keras 的三个后端都提供了独特的优势。至关重要的是,从性能的角度来看,没有一个后端始终优于其他后端。最快的后端通常取决于您的特定模型架构。

这突显了在追求最佳性能时框架可选项的价值。Keras 3 使您能够无缝切换后端,确保您找到与模型理想匹配的后端。

主要发现 2:Keras 3 比 Keras 2 快

我们还根据表 1 中的数据计算了 Keras 3(使用其性能最佳的后端)相对于使用 TensorFlow 的 Keras 2 的吞吐量(步/毫秒)提升。结果如下所示。

Figrue 2

图 1:Keras 3 相对于 Keras 2 的速度提升(以吞吐量(步/毫秒)为单位测量)

Keras 3 在所有基准测试模型中始终优于 Keras 2,并且在许多情况下实现了大幅的速度提升。SegmentAnything 推理速度提高了惊人的 380%,StableDiffusion 训练吞吐量提高了 150% 以上,BERT 训练吞吐量提高了 100% 以上。

重要的是,即使您只是升级到 Keras 3 并继续使用 TensorFlow 后端,您仍然会看到性能提升。这主要是因为 Keras 2 直接使用了更多 TensorFlow 融合操作,这在某些用例中可能不利于 XLA 编译。

结论

框架性能在很大程度上取决于特定模型。Keras 3 使您能够为您的任务选择最快的框架——几乎总是优于 Keras 2 的选项。

参考文献

1 Kirillov, Alexander 等。“Segment anything。”ICCV (2023)。

2 Rombach, Robin 等。“使用潜在扩散模型进行高分辨率图像合成。”CVPR (2022)。

3 Kenton, Jacob 等。“BERT:用于语言理解的深度双向 Transformer 预训练。”NAACL (2019)。

4 Banks, Jeanine 等。“Gemma:推出新的最先进的开放模型。”The Keyword,Google (2024)。

5 Jiang, Albert Q. 等。“Mistral 7B。”arXiv 预印本 arXiv:2310.06825 (2023)。

6 Hu, Edward J. 等。“LoRA:大型语言模型的低秩自适应。”ICLR (2022)。