본문 바로가기
A.I./TensorFlow

Keras 3 문서) Keras 3 benchmarks

by 채소장사 2024. 9. 21.

케라스 3의 벤치마크 테스트

  • 원문 : Keras 3 benchmarks
  • 사용 가능한 3가지 백엔드 프레임워크(TensorFlow, JAX, PyTorch) 위에서의 Keras 3의 성능을 텐서플로 백엔드에서의 Keras 2와 비교한다.
  • 사용된 코드와 설정은 keras-benchmarks 깃허브 레포에 있으며, 문서의 결과를 재현하기 위해 사용해볼 수 있다.

사용된 모델

  • 컴퓨터 비전(CV, computer vision)과 자연어 처리(NLP, Natural Language Processing) 분야의 생성형 태스크와 (생성형) 이외의 태스크에서 유명한 모델들이 선택되었다.
  비-생성형(non-Generative) 태스크 생성형(Generative) 태스크
컴퓨터 비전 SegmentAnything StableDiffusion
자연어 처리 BERT Gemma, Mistral
  • 참고) 간단하게만 각각의 태스크에 대한 개요를 덧붙인다.
    • SegmentAnything(=SAM) : 이미지 분할(Segmentation task)의 파운데이션 모델
    • Stable Diffusion : Latent Diffusion 방식의 text-to-image 생성 모델
    • BERT : 트랜스포머의 인코더 기반의 사전훈련 언어모델(PLM)
    • Gemma : 구글의 대규모언어모델(LLM) Gemini의 경량 모델군, SLM 또는 SLLM
    • Mistral : 프랑스의 Mistal AI에서 공개한 LLM

벤치마크 테스트에 사용된 실험 장비

  • 모든 벤치마크 테스트는 GCP(구글 클라우드 플랫폼)의 IaaS인 Compute Engine에서 제공되는 GPU 머신인 a2-highgpu-1g에서 이뤄졌다.
    • a2-highgpu-1g는 40GB의 vram을 가진 NVIDIA A100 GPU가 연결된 A2 스탠다드 유형으로서, 12개의 vCPU와 85GB의 VM메모리를 가지고 있다.
    • 자세한 사항은 Computer Engine의 A2 머신 유형 문서를 참고한다.

결과

  • 위의 표는 단계별 소요시간을 ms 단위로 나타낸 결과다.
    • 각 단계는 하나의 데이터 배치에 대한 훈련 또는 예측(추론) 과정을 포함한다.
    • 모든 결과는 100번 수행의 평균결과이다. 단, 첫번째 수행은 모델 생성과 컴파일 과정의 오버헤드가 포함되어 있기 때문에 제외되었다.
  • 배치의 크기는 동일한 태스크 내에서는 모든 프레임워크에서 동일하게 설정하였다.
  • 단, 태스크가 달라지면 데이터의 크기와 모델 아키텍쳐를 고려하여 배치 크기를 다르게 정하였다.
    • 이를 통해 메모리 부족(out-of-memory)이나 GPU 사용률 저하(GPU under-utilization)을 피하도록 하였다.
  • Gemma와 Mistral의 대규모 언어모델(LLM) 실험에서는 두 모델을 파라미터 수가 비슷한(7B) 같은 모델타입을 사용하였기 때문에 동일한 배치크기를 사용하였다.
    • 또, 텍스트 생성(text generation) 작업에서는 보통의 사용자들 요청에 맞게 배치 크기를 1로 사용하였다.
    • 훈련과 추론에서 BF16(bfloat16) 정밀도를 사용하였고, LoRA(Low-Rank Adaptation)로 fine-tuning하였다.
  • 추가 설정없이 바로 테스트할 수 있도록, 모든 실험은 기본 설정을 사용하였다.
    • 예를 들어, 가능한 한 추가 설정 없이 model.fit()과 같은 케라스의 고수준 API를 사용하였다.
  • 위의 실험 결과는 각 하드웨어, 프레임워크에서의 모델의 최적화된 성능 측정과는 거리가 멀었음을 유념한다.
    • 각 프레임워크에서의 최적화된 성능은 MLPerf 등을 참고할 수 있다.

결과 토의

핵심 1. "최고"의 백엔드 프레임워크는 없다.

  • 케라스가 제공하는 각 프레임워크는 저마다의 강점을 갖는다.
  • 그러나 성능의 관점에서는 다른 프레임워크를 일관성있게 압도하는 프레임워크는 없다.
    • 가장 빠른 프레임워크는 종종 사용자가 실험중인 모델 아키텍쳐에 달려있다.
  • 결국, 최고의 성능을 추구할 때라면 백엔드 프레임워크의 선택이 중요함을 알 수 있다.
  • 케라스 3을 사용할 때, 동일한 코드로 백엔드를 바꿀 수 있기 때문에, 사용하는 모델의 이상적인 백엔드 프레임워크를 탐색할 수 있게 된다.

핵심 2. Keras 3는 Keras 2보다 빠르다.

  • 케라스 3가 (텐서플로 백엔드의 케라스2)에 비해 갖는 처리량(throughput) 향상을 단위시간 당 단계 수(steps/ms)로 측정하였다.
    • 케라스 3는 각 테스크에서 최고 성능을 갖는 백엔드에서의 결과다.
  • 케라스 3는 케라스 2의 성능을 일관성있게 뛰어 넘었고, 많은 경우에서 상당한 속도 향상을 보였다.
    • SAM(SegmentAnything) 추론은 380%가 향상되었고
    • Stable Diffusion 훈련은 150%, BERT 훈련은 100%의 처리량 향상을 얻을 수 있었다.
  • 중요한 것은 텐서플로를 이용한 케라스2의 코드를 (텐서플로 백엔드를 그대로 이용하면서) 케라스 3로 단순히 업그레이드 하는 것만으로도 성능 향상을 보인다는 점이다.
    • 이는 케라스2에서 텐서플로와 결합된 연산을 직접 사용한 경우가 많은데, 특정 유스케이스에서의 XLA 컴파일 시 최적의 성능이 아니기(sub-optimal) 때문으로 보인다.

결론

  • 프레임워크의 성능은 어떤 모델을 사용하느냐에 더 관련성이 높다.
  • 케라스 3는 사용자의 태스크에 맞는 가장 빠른 백엔드 프레임워크를 선택할 수 있게 해준다. 
    • 이는 언제나 기존의 케라스2보다 더 나은 성능을 보인다.

댓글