Keras 3 벤치마크

Keras 3 벤치마크

우리는 TensorFlow를 사용하는 Keras 2와 함께, Keras 3의 세 백엔드(TensorFlow, JAX, PyTorch)를 벤치마크했습니다. 결과를 재생성하기 위한 코드와 설정 세부 정보는 여기에서 찾을 수 있습니다.

모델

우리는 생성 및 비생성 AI 작업 모두에 인기 있는 컴퓨터 비전 및 자연어 처리 모델 세트를 선택했습니다. 우리의 선택은 아래 표를 참조하세요.

Table 1: 벤치마킹에 사용되는 모델

비생성형생성형
CVSegmentAnything1StableDiffusion2
NLPBERT3Gemma4, Mistral5

우리는 각 프레임워크에서 달성할 수 있는 최상의 성능을 측정하는 것이 아니라, 일반적인 사용자 워크플로의 기본 제공 성능을 측정합니다. 이 목표를 염두에 두고, 우리는 모델의 Keras 버전에 대해 KerasCV와 KerasNLP의 기존 구현을 활용했습니다.

하드웨어

모든 벤치마크는 12개 vCPU와 85GB 호스트 메모리를 갖춘, 머신 타입이 a2-highgpu-1g인 Google Cloud Compute Engine에서, 40GB의 GPU 메모리를 갖춘 단일 NVIDIA A100 GPU로 수행되었습니다.

결과

Table 2는 스텝당 밀리초 단위로 벤치마킹 결과를 표시합니다. 각 스텝은 단일 데이터 배치에 대한 트레이닝 또는 예측을 포함합니다. 결과는 모델 생성 및 컴파일 오버헤드를 포함하는 첫 번째 단계를 제외한, 100개 스텝에 대한 평균입니다.

공정한 비교를 위해, 동일한 모델 및 작업(fit 또는 predict)인 경우, 프레임워크 전체에서 동일한 배치 크기를 사용합니다. 그러나 다른 모델 및 작업의 경우, 크기와 아키텍처가 다르기 때문에, 메모리 부족(너무 큼)이나 GPU 사용률 저하(너무 작음)를 방지하기 위해 다른 배치 크기를 사용합니다.

대규모 언어 모델(Gemma 및 Mistral)의 경우에도, 유사한 수의 매개변수(7B)를 가진 동일한 모델 타입이므로 동일한 배치 크기를 사용했습니다. 또한 사용자가 널리 요청하기 때문에, 배치 크기가 1인 텍스트 생성을 벤치마킹했습니다. 트레이닝 및 추론에는 bfloat16 정밀도를 사용했고, 트레이닝(파인 튜닝)에는 LoRA66를 사용했습니다.

기본 성능을 측정하기 위해, 모든 기본 설정을 사용하려고 합니다. 예를 들어, 가능한 한 구성이 적은 높은 레벨 API(예: Keras model.fit() 사용)를 사용합니다.

이는 특정 하드웨어/프레임워크/모델 조합에 대한 최적화된 구현을 측정하는 것과는 상당히 다릅니다. 다양한 프레임워크에 대한 최상의 최적화된 결과는 MLPerf를 참조하세요.

Table 2: 벤치마킹 결과. 속도는 ms/스텝으로 측정됩니다. 낮을수록 좋습니다.

배치 크기Keras 2 (TensorFlow)Keras 3 (TensorFlow)Keras 3 (JAX)Keras 3 (PyTorch) (eager)Keras 3 (베스트)
SegmentAnything (fit)1386.93355.25361.691,388.87355.25
SegmentAnything (predict)41,859.27438.50376.341,720.96376.34
Stable Diffusion (fit)81,023.21392.24391.21823.44391.21
Stable Diffusion (predict)13649.71616.04627.271,337.17616.04
BERT (fit)32486.00214.49222.37808.68214.49
BERT (predict)256470.12466.01418.721,865.98418.72
Gemma (fit)8NA232.52273.67525.15232.52
Gemma (generate)32NA1,134.911,128.217,952.67*1,128.21
Gemma (generate)1NA758.57703.467,649.40*703.46
Mistral (fit)8NA185.92213.22452.12185.92
Mistral (generate)32NA966.06957.2510,932.59*957.25
Mistral (generate)1NA743.28679.3011,054.67*679.30

* PyTorch 백엔드를 사용한 LLM 추론은 KerasHub가, HuggingFace와 달리, static 시퀀스 패딩을 사용하기 때문에, 현재 비정상적으로 느립니다. 이는 곧 해결될 것입니다.

토론

주요 발견 1: “최고의” 백엔드는 없습니다.

Keras의 세 가지 백엔드는 각각 고유한 강점을 제공합니다. 중요한 점은, 성능 관점에서 다른 백엔드를 지속적으로 앞지르는 단일 백엔드는 없다는 것입니다. 가장 빠른 백엔드는 종종 특정 모델 아키텍처에 따라 달라집니다.

이는 최적의 성능을 추구할 때 프레임워크 선택성의 가치를 강조합니다. Keras 3는 백엔드를 원활하게 전환하여, 모델에 이상적인 매치를 찾을 수 있도록 지원합니다.

주요 발견 2: Keras 3은 Keras 2보다 빠릅니다.

또한 Table 1에서 TensorFlow를 사용한 Keras 2에 비해 Keras 3(성능이 가장 좋은 백엔드 사용)의 처리량(스텝/ms) 증가를 계산했습니다. 결과는 다음 그림에 나와 있습니다.

Figrue 2
Figure 1: 처리량(스텝/ms) 측면에서 Keras 2보다 Keras 3의 속도 향상

Keras 3는 모든 벤치마크 모델에서 Keras 2보다 지속적으로 성능이 우수했으며, 많은 케이스에서 상당한 속도 증가를 보였습니다. SegmentAnything 추론은 380%의 놀라운 증가를 보였고, StableDiffusion 학습 처리량은 150% 이상 증가했으며, BERT 학습 처리량은 100% 이상 증가했습니다.

중요한 점은 Keras 3으로 업그레이드하고, TensorFlow 백엔드를 계속 사용하더라도 여전히 성능이 향상된다는 것입니다. 이는 주로 Keras 2가 더 많은 TensorFlow fused ops을 직접 사용하기 때문이며, 이는 특정 사용 케이스에서 XLA 컴파일에 최적이 아닐 수 있습니다.

결론

프레임워크 성능은 특정 모델에 크게 좌우됩니다. Keras 3는 작업에 가장 빠른 프레임워크를 선택할 수 있는 권한을 부여합니다. 이는 거의 항상 Keras 2보다 성능이 뛰어납니다.


  1. Kirillov, Alexander, et al. “Segment anything.” ICCV (2023). ↩︎

  2. Rombach, Robin, et al. “High-resolution image synthesis with latent diffusion models.” CVPR (2022). ↩︎

  3. Kenton, Jacob, et al. “BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding.” NAACL (2019). ↩︎

  4. Banks, Jeanine, et al. “Gemma: Introducing new state-of-the-art open models.” The Keyword, Google (2024). ↩︎

  5. Jiang, Albert Q., et al. “Mistral 7B.” arXiv preprint arXiv:2310.06825 (2023). ↩︎

  6. Hu, Edward J., et al. “Lora: Low-rank adaptation of large language models.” ICLR (2022). ↩︎