머신러닝에서 FLOPs를 이해하세요! 모델 복잡성을 측정하고, 효율성에 영향을 미치며, 하드웨어 선택을 지원하는 방법을 알아보세요.
FLOPs(부동소수점 연산)은 머신러닝 모델의 계산 복잡성을 측정하는 표준 지표입니다. 이는 특히 신경망이 이미지나 문장과 같은 단일 입력을 처리하기 위해 수행해야 하는 수학적 계산(주로 소수점 숫자를 포함한 덧셈과 곱셈)의 횟수를 측정합니다. 딥 러닝 분야에서 FLOPs는 모델의 '무게' 또는 계산적 비용을 추정하는 이론적 척도 역할을 합니다. 일반적으로 FLOPs 값이 높을수록 모델이 더 복잡하며 실행에 더 많은 처리 능력과 에너지가 필요함을 시사합니다. 반대로 낮은 값은 효율성을 위해 설계된 경량 아키텍처를 나타냅니다.
인공지능 애플리케이션을 개발할 때 엔지니어들은 종종 정확도와 속도 사이의 상충 관계에 직면합니다. FLOPs는 추론 지연 시간을 하드웨어 독립적인 대리 지표로 작용하여 개발자가 모든 가능한 장치에서 벤치마킹할 필요 없이 서로 다른 아키텍처를 비교할 수 있게 합니다. 이 지표는 특정 배포 시나리오에 적합한 모델을 선택하는 데 필수적입니다. 예를 들어, 강력한 클라우드 컴퓨팅 서버에서 실험을 수행하는 연구원은 효율성보다 정확성을 우선시하여 높은 FLOPs를 가진 모델을 활용할 수 있습니다. 반대로, 에지 AI 기기를 위한 애플리케이션을 구축하는 엔지니어는 엄격한 전력 및 열 제한 내에서 애플리케이션이 원활하게 실행되도록 낮은 FLOPs를 우선시해야 합니다.
FLOPs의 실질적 영향은 계산 자원이 핵심 요소인 다양한 산업 전반에 걸쳐 명백히 드러난다.
"FLOPs"(FLOP의 복수형)와 "FLOPS"(대문자)를 구분하는 것이 중요합니다. 비슷해 보이지만 서로 다른 것을 측정합니다. FLOPs (소문자 's')는 모델에 필요한 전체 연산량을 의미하며, 복잡성의 정적 측정값입니다. FLOPS (대문자 'S') 는 초당 부동소수점 연산 횟수(Floating Point Operations Per Second )를 의미하며, 하드웨어의 속도나 성능 능력을 측정합니다. 예를 들어 GPUFLOPs는 자동차가 이동해야 할 거리(수행해야 할 작업)로, FLOPS는 자동차의 최고 속도(하드웨어의 작업 수행 능력)로 생각할 수 있습니다.
Python 사용하여 Ultralytics 계산 비용을 쉽게 계산할 수 있습니다. 이는 특히 모델 최적화 단계에서 신경망이 하드웨어 예산 범위 내에 맞는지 확인하는 데 유용합니다. 다음 예제는 YOLO26 모델을 로드하고 FLOPs를 확인하는 방법을 보여줍니다.
from ultralytics import YOLO
from ultralytics.utils.torch_utils import get_flops
# Load a lightweight YOLO26 model
model = YOLO("yolo26n.pt")
# Calculate and print the model's FLOPs (Billions of operations)
# This gives you a hardware-independent complexity metric
flops = get_flops(model)
print(f"Model FLOPs: {flops:.2f} Billion")
모델의 배포성을 높이기 위해 연구자들은 정확도를 크게 저하시키지 않으면서 FLOPs를 줄이는 여러 기법을 사용합니다. 모델 프루닝은 신경망에서 덜 중요한 연결을 제거하여 효과적으로 간소화하는 과정입니다. 또 다른 기법은 계산에 사용되는 숫자의 정밀도를 낮추는 양자화입니다(예: 32비트 부동소수점에서 8비트 정수로). Ultralytics 제공하는 도구는 이러한 최적화 프로세스를 간소화하여 효율적인 모델을 다음과 같은 대상에 더 쉽게 배포할 수 있도록 합니다. TensorRT 또는 OpenVINO과 같은 대상에 효율적인 모델을 배포하는 것을 용이하게 합니다. FLOPs를 이해하고 최적화함으로써 개발자는 강력하면서도 지속 가능한 AI 시스템을 구축할 수 있습니다.