YOLO26 소개: 차세대 비전 AI입니다.
Ultralytics
Ultralytics YOLO

Ultralytics에서 우리가 사용하는 칩에 맞춰 YOLO 모델을 더 빠르게 만드는 방법

Ultralytics가 CPU, GPU 및 에지 기기 전반에서 속도를 위해 YOLO 모델을 최적화하는 방법을 설명합니다. 칩, 메모리 및 양자화, 퓨전, 프루닝과 같은 스마트 기술을 다룹니다.

FRFrancesco Mattioli
8 min read
CPU, GPU 및 에지 칩 전반에서 YOLO 모델 최적화

Ultralytics에서는 컴퓨터 비전 모델을 제작합니다. 기본적으로 컴퓨터가 사물을 볼 수 있도록 가르치는 것이죠! 이 모델들을 거대한 수학적 레시피라고 생각해 보세요. 모델은 연산(레이어라고 부릅니다)과 가중치(weights)라고 부르는 엄청난 양의 숫자로 구성되어 있습니다.

Ultralytics YOLO 모델은 이미지를 본질 그대로인 숫자 배열로 처리합니다! 각 픽셀은 단순히 이미지를 구성하는 모든 지점의 Red, Green, Blue(RGB) 색상 값일 뿐입니다. 우리는 이러한 숫자 배열을 "다차원 행렬(multidimensional matrices)"보다 훨씬 멋진 표현인 "텐서(tensors)"라고 부르며, 이는 "숫자 위에 숫자가 쌓여 있는 구조"보다 훨씬 더 세련된 표현입니다.

모델에 이미지를 입력하면 네트워크를 통과하는 장대한 여정이 시작됩니다. 텐서가 레이어를 하나씩 지나가며 가장 아름다운 방식으로 변형되고, 합성되며, 수학적으로 복잡하게 얽히는 모습을 상상해 보세요. 마치 숫자들이 뒤섞이고 어우러져 고양이를 고양이로, 차를 차로 만드는 본질을 추출하는 댄스 파티와 같습니다. 우리는 이 과정을 특징 추출(feature extraction)이라고 부릅니다.

그 결과로 무엇이 나올까요? 더 많은 숫자가 나옵니다! 의미 있는 숫자들 말이죠. 객체 탐지 작업에서 이 숫자들은 이미지 내에 무엇이 어디에 있는지, 그리고 그것이 무엇일 확률이 높은지를 정확히 알려줍니다. "이봐요, 좌표 (x, y)에 있는 물체가 개일 확률이 95%예요!" 우리는 이 마법 같은 과정을 추론(inference)이라고 부릅니다.

이제 모델이 마법을 부리기 전에, 모델은 학교에 가서 학습(training)이라는 과정을 거쳐야 합니다. 학습 단계는 매우 강도 높은 작업이 이루어지는 곳입니다.

학습 과정에서 네트워크에 이미지를 입력할 때마다 단순히 결과값만 얻는 것이 아닙니다. 우리는 두 가지 매우 무거운 작업을 수행합니다. 첫째, 네트워크가 얼마나 틀렸는지를 계산합니다(이를 손실(loss)이라고 부르며, 기본적으로 정답과의 거리입니다). 둘째, 그리고 이 부분이 중요한데, 그 손실을 기반으로 네트워크 내의 모든 숫자(또는 가중치)를 업데이트합니다. 수천 개의 작은 노브를 한꺼번에 조정하는 것과 같으며, 각 조정은 매번 네트워크의 정확도를 높이기 위해 계산됩니다.

우리는 기본적으로 교정을 통해 네트워크를 학습시킵니다. 네트워크는 실수를 통해 무엇을 하지 말아야 할지를 배우고, 우리는 유사한 이미지를 다시 보았을 때 올바른 정답에 더 가까워지도록 모든 가중치를 조정합니다. 본질적으로 네트워크는 올바른 방향으로 조금씩 나아가는 과정을 실수마다 반복하며, 결과적으로 예측을 정확하게 수행하기 시작합니다.

과연 얼마나 많은 숫자를 다루는 것일까요? 귀여운 YOLO11n 모델은 수백만 개의 파라미터를 가지고 있습니다. 하지만 YOLO11x는 어떤가요? 이 강력한 모델은 5천만 개 이상의 파라미터를 사용합니다! 파라미터가 많을수록 크레용으로 그림을 그리는 것과 전문 화가의 팔레트를 모두 사용하는 것의 차이처럼 더 많은 세부 정보를 인코딩할 수 있습니다.

추론 중에 이 매개변수 개수는 매우 중요해집니다. 300만 개의 매개변수 네트워크를 실행하는 것은 동네를 가볍게 조깅하는 것과 같습니다. 5000만 개의 매개변수 네트워크를 실행하는 것은 불타는 횃불을 저글링하며 마라톤을 뛰는 것과 비슷하죠.

그렇다면 '연산'이란 정확히 무엇일까요? 이 모든 숫자 계산은 실제로 어떻게 이루어질까요? 어떻게 하면 더 빠르게 만들 수 있을까요? 그리고 '연산 최적화'는 도대체 무슨 의미일까요?

Link to this section칩이 실제로 수학을 계산하는 방법#

연산은 칩에서 일어납니다. 이 작은 실리콘 조각들은 기본적으로 우주에서 가장 체계적으로 정리된 모래성입니다. 컴퓨터가 수행하는 모든 연산, 즉 모든 덧셈, 모든 비교, 모든 "이것이면 저것을 하라(if this then that)"와 같은 논리는 물리적으로 실리콘에 새겨져 있습니다. 칩 내부에는 숫자를 더하는 데 전념하는 특정 영역과 논리 연산을 처리하는 다른 영역에 물리적 회로가 존재합니다. 서로 다른 동네가 각기 다른 수학 유형을 전문으로 하는 작은 도시를 가진 것과 같습니다.

컴퓨터 과학자라 하더라도 이 말이 이상하게 들릴 수 있습니다. 그 이유는 우리가 지난 40년 동안 추상화 레이어를 겹겹이 쌓아왔기 때문입니다. 기술적 라자냐가 너무 높게 쌓여서 이제는 맨 아래쪽 판이 무엇인지조차 볼 수 없게 된 셈이죠. 우리는 너무 많은 것을 단순화했기 때문에 오늘날 대부분의 프로그래머는 실리콘에서 연산이 실제로 어떻게 일어나는지 전혀 알지 못합니다. 그것은 그들의 잘못이 아니라 설계상의 특징입니다!

이 레이어들을 하나씩 벗겨보겠습니다. 아주 간단한 이 Python 코드를 보세요:

x = 1
if x == 1:
    y = x + 1

우리는 변수 x를 만들고 값을 1로 설정합니다. 그리고 만약 x가 1과 같다면(스포일러: 같습니다), x에 1을 더한 값으로 y를 생성합니다. 세 줄이죠. 쉽습니다.

하지만 여기서부터 흥미로워집니다. 이 세 줄의 순수한 코드와 실리콘을 통과하는 실제 전자 사이에는 최소 네 개의 거대한 변환 레이어가 존재합니다(사실 더 많지만, 우리 디지털 콘텐츠 매니저는 벌써 제 원고 분량 때문에 불안해하고 있습니다). 이 흥미진진한 여정을 안내해 드리겠습니다:

레이어 1: Python → Bytecode 먼저 Python은 코드를 읽고 바이트코드(bytecode)라는 것으로 컴파일합니다. 이는 컴퓨터가 이해하기 더 쉬운 중간 언어이지만, 직접 읽으려고 하면 눈이 아플 것입니다.

레이어 2: Bytecode → Machine Code Python 인터프리터(CPython과 같은)는 그 바이트코드를 프로세서가 이해하는 실제 명령어인 기계어(machine code)로 변환합니다. 여기서 여러분의 우아한 "if x == 1" 코드는 "레지스터 로드, 레지스터 비교, 제로 플래그가 설정되면 점프"와 같은 명령어로 변합니다.

레이어 3: Machine Code → Microcode 반전이 있습니다! 현대 프로세서는 기계어를 직접 실행하지 않습니다. 기계어를 더 작게 나누어 칩의 내부 구성 요소가 처리할 수 있는 마이크로코드(microcode) 단위의 아주 미세한 연산으로 바꿉니다. 여러분의 단일 "ADD" 명령어는 여러 개의 마이크로 연산으로 바뀔 수 있습니다.

레이어 4: Microcode → Physical Electronics 드디어 실리콘에 도달합니다. 그 마이크로 연산들은 트랜지스터를 통과하는 실제 전기 신호를 트리거합니다. 수십억 개의 작은 스위치가 켜지고 꺼지며, 전자들이 정교하게 설계된 경로를 따라 춤을 추고, 마법처럼 1 + 1은 2가 됩니다.

각 레이어는 아래 레이어의 엄청난 복잡성을 숨기기 위해 존재합니다. 마치 러시아의 마트료시카 인형과 같지만, 각 인형은 완전히 다른 언어를 사용하고 있으며 가장 작은 인형은 모래 속에 갇힌 번개로 만들어져 있습니다.

아이러니하게도, 그 세 줄의 Python 코드는 아마도 수백만 번의 트랜지스터 스위칭을 유발할 것입니다. 하지만 이런 추상화 덕분에 여러분은 그런 것들을 고민할 필요가 없습니다. 단순히 "y = x + 1"이라고 쓰면 실리콘 깊은 곳 어딘가에서 마법이 일어날 것이라 믿으면 됩니다.

Link to this section아키텍처#

모든 단일 연산은 실리콘에 물리적으로 구현되어 있으며, 칩의 어느 위치에서 연산이 일어나는지는 전적으로 칩의 토폴로지에 달려 있습니다. 전자들을 위한 도시 계획과 같습니다. 더하기 장치는 여기에 있고, 곱하기 장치는 저기에 있으며, 이들은 모두 효율적으로 서로 소통해야 합니다.

시중에는 수백 가지의 다른 칩이 있으며, 각각 다른 목적을 위해 설계되었습니다. 그들 사이에서 변하는 것은 무엇일까요? 토폴로지, 즉 연산이 물리적 영역에 배치되고 구현되는 방식입니다. 우리는 이것을 아키텍처라고 부르며, 정말 많은 아키텍처가 존재합니다:

  • x86 (Intel 및 AMD) - 데스크톱 컴퓨팅의 원조, 복잡하지만 강력합니다.
  • ARM - 스마트폰과 점점 노트북까지 장악하고 있으며, 효율성을 위해 설계되었습니다.
  • RISC-V - 오픈 소스 반란군으로, 어디에서나 영향력을 넓히고 있습니다.
  • PowerPC - IBM의 괴물 같은 아키텍처로, 여전히 게임 콘솔과 서버에서 사용됩니다.
  • MIPS - 학계에서 선호하는 단순하고 우아한 아키텍처입니다.
  • SPARC - Sun Microsystems(현재 Oracle)가 고성능 컴퓨팅에 기여한 아키텍처입니다.
  • GPU 아키텍처 (NVIDIA의 CUDA 코어, AMD의 RDNA) - 병렬 처리 괴물입니다.

각 아키텍처는 트랜지스터를 다르게 배열할 뿐만 아니라 서로 다른 언어를 사용합니다. 이 기계들에 명령을 보내기 위해 사용하는 추상화 수준은 완전히 다릅니다. 마치 누군가에게 여행 지침을 적어줘야 하는데, 그 사람이 타는 차에 따라 프랑스어, 중국어 또는 수화로 적어야 하는 상황과 같습니다.

Link to this section실리콘의 심장 박동#

칩의 연료는 칩으로 흐르는 전기, 즉 전자입니다. 전기는 연산을 위한 에너지를 제공합니다. 하지만 에너지 그 자체만으로는 충분하지 않습니다. 칩이 실제로 작동하고 복잡한 토폴로지를 통해 데이터를 이동시키려면 모든 것은 한 가지 중요한 구성 요소에 달려 있습니다. 바로 클록(clock)입니다. 클록은 전자들이 특정 시간에 특정 경로를 따라 흐르게 만드는 역할을 합니다. 이것이 없다면 전원만 들어오고 아무 일도 하지 않는 실리콘 덩어리에 불과할 것입니다.

수십억 개의 구성 요소가 완벽한 동기화 속에서 움직여야 하는 거대한 공연을 조율한다고 상상해 보세요. 박자가 없다면 엉망진창이 될 것입니다. 클록은 프로세서에게 바로 그 역할을 합니다. 그것은 초당 수십억 번씩 전기 펄스를 내보내는, 매우 일정한 속도로 진동하는 수정(crystal)입니다.

"3.5 GHz 프로세서"라고 들을 때, GHz(기가헤르츠)는 클록 속도이며 초당 35억 번의 박자를 의미합니다. 모든 박자를 클록 사이클(clock cycle)이라고 하며, 이것이 컴퓨팅에서 시간의 기본 단위입니다.

클록 사이클 사이에는 아무 일도 일어나지 않습니다. 컴퓨터 전체가 다음 박자를 기다리며 멈춰 있습니다. 마치 우주에서 가장 극단적인 '무궁화 꽃이 피었습니다' 게임과 같습니다. 각 '초록 불(클록 펄스)'이 들어올 때:

  • 데이터가 구성 요소 사이를 이동합니다.
  • 계산이 실행됩니다.
  • 논리적 결정이 내려집니다.
  • 메모리를 읽거나 씁니다.

어떤 연산은 한 사이클(간단한 덧셈)이 걸리고, 어떤 연산은 여러 사이클(나눗셈이나 RAM에서 데이터 가져오기)이 걸립니다. 수십억 개의 구성 요소가 이 끈질긴 박자에 맞춰 각자의 연산을 수행하며 완벽하게 안무된 듯 움직입니다.

수정을 더 빨리 진동하게 만들어 프로세서를 오버클러킹할 수 있습니다. 그러면 모든 것이 더 빨리 일어나지만, 더 많은 열이 발생하여 안정성이 떨어집니다. 너무 무리하면 전자들이 박자를 따라가지 못해 컴퓨터가 멈춰버립니다.

과거에는 이러한 연산이 방만한 크기의 기계로 구현되었습니다. 하지만 이 모든 연산을 수행하는 구성 요소들은 매우 단순합니다. 그저 스위치일 뿐입니다. 켜짐 또는 꺼짐 스위치 말이죠.

이 스위치들을 올바른 패턴으로 충분히 연결하면 연산이 가능해집니다. 전체 디지털 혁명은 정교한 스위치 배열로 귀결됩니다.

이 단순함은 스위치가 있다면, 어떤 스위치든 상관없이 컴퓨터를 만들 수 있다는 것을 의미합니다. 사람들은 수도관과 밸브, 도미노, 레고 블록, 구슬, 심지어 마인크래프트의 레드스톤으로도 작동하는 컴퓨터를 만들어 왔습니다.

원리는 1940년대 이후로 변하지 않았습니다. 우리는 단지 스위치를 극도로 작게 만드는 기술을 놀라울 정도로 발전시켰을 뿐입니다. 여러분의 스마트폰은 인류를 달에 보냈던 모든 컴퓨터보다 더 뛰어난 연산 능력을 갖추고 있으며, 우리가 원자 규모에서 스위치를 만드는 방법을 알아냈기 때문에 주머니에 쏙 들어가는 크기가 된 것입니다.

수백만 개의 매개변수를 가진 신경망을 실행할 때, 우리는 이 작은 스위치들을 초당 수십억 번씩 켰다 껐다 하며 수정 심장 박동에 완벽하게 동기화합니다. 모든 가중치 업데이트, 모든 행렬 곱셈, 모든 활성화 함수는 클록의 박자에 맞춰 행진합니다.

모델을 학습시킬 때 컴퓨터가 마치 이륙하려는 비행기처럼 소리를 내는 것도 놀라운 일이 아닙니다!

Link to this section신경망을 BRRRRR하며 빠르게 만드는 방법#

좋습니다, 우리는 수십억 개의 스위치가 수정 박자에 맞춰 춤을 추는 칩을 가지고 있고, 그 위에서 수백만 개의 매개변수를 가진 신경망을 실행하고 싶어 합니다. 쉬울 것 같죠? 숫자를 칩에 던져 넣고 마음껏 달리게 하면 될까요?

신경망을 빠르게 실행하는 것은 냉장고가 세 블록이나 떨어져 있고, 프라이팬은 딱 하나뿐이며, 모든 재료가 500파운드나 나가는 주방에서 5코스 요리를 만들려는 것과 같습니다. 수학 자체가 가장 큰 문제가 아니라, 나머지 모든 것이 문제인 것입니다.

Link to this section아키텍처 불일치#

대부분의 칩은 신경망이 아니라 Microsoft Word를 실행하도록 설계되었습니다. 여러분의 CPU는 평생 if문, 루프를 실행하고 가끔 세금을 계산(슈퍼컴퓨터조차 감정적으로 지치게 만드는 유일한 연산)하며 보낼 생각으로 만들어졌습니다. CPU는 순차적인 연산, 즉 '이것을 하고, 그다음 저것을 하고, 그 다음 또 다른 것을 하는' 작업에 최적화되어 있습니다.

하지만 신경망은 완전히 다릅니다. 신경망은 '모든 것을 한꺼번에' 처리하고 싶어 합니다. 학습 중에는 예측이 얼마나 틀렸는지를 바탕으로 수백만 개의 가중치를 업데이트합니다. 추론(학습된 모델을 실제로 사용하는 것) 중에는 수백만 개의 계산을 동시에 처리하며 데이터를 밀어 넣습니다. 100만 개의 숫자에 다른 100만 개의 숫자를 곱해야 한다고 상상해 보세요. 여러분의 CPU는 매우 빠르지만 매우 체계적인 회계사처럼 그 일을 하나씩 처리하고 싶어 합니다.

이것이 GPU가 AI 컴퓨팅의 중추가 된 이유입니다. GPU는 수백만 개의 픽셀 색상을 동시에 계산해야 하는 비디오 게임을 위해 설계되었습니다. 결과적으로 픽셀 색상을 계산하는 것과 신경망 수학을 수행하는 것은 놀라울 정도로 비슷합니다. 둘 다 막대한 양의 데이터에 대해 동일한 연산을 병렬로 수행하는 것을 포함하기 때문입니다.

하지만 GPU조차도 신경망에 완벽하지는 않습니다. 그렇기 때문에 기업들이 이제는 특수 AI 칩(TPU, NPU 및 PU로 끝나는 온갖 약어들)을 만들고 있는 것입니다. 이 칩들은 신경망을 빠르게 만들겠다는 단 하나의 목표를 위해 처음부터 설계되었습니다. 마치 한 가지 요리만 할 줄 알지만 초인적인 속도로 요리하는 요리사를 고용하는 것과 같습니다. CPU가 행렬 연산을 순차적으로 처리하느라 쩔쩔매고 GPU가 병렬로 꽤 잘 처리하는 동안, 이러한 특수 칩들은 아침, 점심, 저녁으로 행렬을 씹어 먹습니다.

Link to this section메모리 장벽 (또는: 왜 비트를 옮기는 것이 수학보다 어려운가)#

현대 신경망 연산에서 우리는 실제로 계산하는 것보다 데이터를 이동시키는 데 훨씬 더 많은 시간과 에너지를 소비합니다.

여러분의 컴퓨터 칩을 번개 같은 속도로 일하는 천재 수학자라고 생각해 보세요. 하지만 그들의 모든 참고 서적은 시내 곳곳의 다른 건물에 저장되어 있습니다. 어떤 방정식이든 즉시 풀 수 있지만, 먼저 숫자를 가져와야 하며 그 여정은 영원히 걸립니다.

여러분의 칩은 한 클록 사이클에 두 개의 숫자를 곱할 수 있습니다(초당 수십억 번의 박자 중 하나라는 점을 기억하세요). 번개처럼 빠르죠! 하지만 메모리에서 칩으로 그 숫자들을 가져오는 데는 수백 사이클이 걸릴 수 있습니다. 수학자가 1초 만에 문제를 풀 수 있지만 도서관을 왕복하는 데 5분이 걸리는 것과 같습니다.

그 이유는 거리(그리고 공간) 때문입니다. 전기는 빠르게 움직이지만 무한히 빠른 것은 아닙니다. 데이터가 칩 위에서 이동해야 하는 거리가 멀수록 더 오래 걸립니다. 컴퓨터 설계자들은 여러 거리에 있는 저장 위치를 갖는 것처럼 메모리 계층 구조를 만들어 이 문제를 해결했습니다:

  • 레지스터 (연산 장치에 직접 내장): 수학자의 책상입니다. 즉시 액세스할 수 있습니다! 하지만 매우 작아서 약 32개의 숫자만 보관할 수 있습니다. 바로 앞에 포스트잇을 붙여두는 것과 같습니다.
  • L1 캐시 (마이크로미터 거리): 사무실의 책꽂이입니다. 무언가를 가져오는 데 3~4 사이클이 걸립니다. 여기에는 수천 개의 숫자를 넣을 수 있습니다.
  • L2 캐시 (밀리미터 거리): 복도 끝의 서류 캐비닛입니다. 10~15 사이클이 걸리고 수백만 개의 숫자를 보관할 수 있습니다.
  • L3 캐시 (칩 전체에 걸쳐): 아래층의 창고입니다. 30~50 사이클이 걸리며 수천만 개의 숫자를 보유합니다.
  • RAM (완전히 다른 칩): 시내 건너편의 대형 창고입니다. 100~300 사이클이 걸립니다. 수십억 개의 숫자가 사는 곳입니다.
  • SSD/하드 드라이브 (케이블로 연결): 완전히 다른 도시입니다. 수백만 사이클이 걸립니다. 방대한 저장 공간이지만 속도는 빙하와 같습니다.

정확한 구조는 다를 수 있습니다. 스마트폰 칩은 L3 캐시가 없을 수도 있고, 서버 CPU는 엄청난 양의 L3 캐시를 가질 수도 있습니다. 그러나 원리는 동일합니다. 메모리가 가까울수록 빠르지만 작습니다.

이제 신경망에 고통스러운 부분이 나옵니다. 여러분의 Ultralytics YOLO 모델이 5000만 개의 매개변수를 가지고 있다고 상상해 보세요(참고로 ChatGPT는 수십억 개입니다). 메모리에서 연산 장치로 이동하고 다시 돌아와야 하는 5000만 개의 숫자들입니다. 각 숫자가 4바이트만 되어도 시스템을 통해 이동해야 하는 데이터는 200MB입니다.

칩이 각 숫자를 단일 사이클에 처리할 수도 있지만, RAM에서 그 숫자를 가져오는 데 100 사이클이 걸린다면 여러분은 시간의 99%를 배달을 기다리는 데 소비하는 것입니다. 교통 체증 속에 갇힌 포뮬러 1 경주용 차와 같습니다. 엄청난 연산 능력을 갖추고도 데이터가 도착하기만을 기다리며 앉아 있는 것이죠.

중요한 통찰은 바로 이것입니다. 이것이 현대 컴퓨팅의 병목 현상입니다. 이를 폰 노이만 병목 현상(von Neumann bottleneck)이라고 합니다. 칩의 수학 연산 속도를 높이는 것은 비교적 쉽습니다. 메모리 속도를 높이는 것은 물리적 한계에 부딪힙니다. 이것이 거의 모든 AI 성능 최적화가 메모리 수준에서 이루어지는 이유입니다. 엔지니어들이 신경망 속도를 높일 때 수학 연산 자체를 빠르게 만드는 경우는 드뭅니다. 대신 데이터를 덜 움직이거나, 더 잘 캐싱하거나, 더 똑똑하게 액세스하는 기발한 방법을 찾습니다.

현대 AI 칩은 연산 속도뿐만 아니라 메모리 대역폭과 데이터 이동 전략에 집착합니다. 그들은 데이터를 미리 가져오고(pre-fetch), 캐시에 이미 있는 값을 재사용하며, 메모리 이동을 최소화하도록 연산을 조직합니다. AI 하드웨어 경쟁의 승자는 가장 빠른 계산기를 가진 사람이 아니라, 계산기에 데이터를 계속 공급하는 방법을 알아낸 사람들입니다. 게임의 모든 것은 메모리 액세스 패턴을 최적화하는 데 있습니다.

데이터 비트를 이동할 때마다 에너지를 소비합니다. 아주 적은 양이지만 피코줄(picojoules) 단위로 계산되며, 초당 테라바이트를 이동할 때는 빠르게 누적됩니다. 사실, 칩 위에서 1mm 거리로 데이터를 이동하는 것이 실제 연산을 수행하는 것보다 더 많은 에너지를 사용합니다!

신경망을 학습시킬 때 노트북이 제트 엔진처럼 소리를 내는 이유가 바로 이것입니다. 열을 발생시키는 것은 수학 연산이 아니라 데이터 이동입니다. 모든 매개변수 업데이트, 모든 그래디언트 계산, 모든 순전파(forward pass)가 말 그대로 방을 뜨겁게 달구고 있는 것입니다.

현대 AI 가속기는 기본적으로 열역학 연습과 같습니다. 칩이 녹기 전에 얼마나 많은 연산을 담을 수 있을까? 얼마나 빨리 열을 밖으로 이동시킬 수 있을까? 오버클러킹과 비슷하지만 클록은 항상 최대치(11)로 설정되어 있고, 우리는 불이 나지 않게 하려고 애쓰고 있을 뿐입니다.

Link to this section해결책은 무엇일까요? 아키텍처를 고려한 설계입니다.#

가장 빠른 신경망은 반드시 가장 똑똑한 신경망이 아니라 칩을 고려하여 설계된 신경망입니다. 그들은 다음을 수행합니다:

  • 데이터를 가능한 한 로컬에 유지합니다.
  • 연산을 집요하게 재사용합니다.
  • 하드웨어 성능과 완벽하게 정렬합니다.
  • 어떤 대가를 치르더라도 메모리 이동을 최소화합니다.

이는 "지역 식료품점에서 재료를 사용하라"고 말하는 레시피와 티베트에서 향신료를, 프랑스에서 치즈를, 남극에서 물을 수입해야 하는 레시피의 차이와 같습니다. 둘 다 맛은 좋을지 모르지만, 하나는 확실히 더 실용적입니다.

이것이 바로 신경망을 빠르게 만드는 것이 예술의 영역인 이유입니다. 좋은 수학만으로는 충분하지 않습니다. 하드웨어를 이해하고, 메모리 계층 구조를 존중하며, 아키텍처와 완벽하게 춤을 춰야 합니다.

컴퓨터 과학과 물리학, 공학, 그리고 순수한 마법이 만나는 세계에 오신 것을 환영합니다. 숫자를 옮기는 비용이 계산하는 비용보다 더 비싼 곳, 병렬 처리는 빠르지만 동기화는 죽음인 곳, 가장 큰 적은 복잡성이 아니라 거리인 곳으로 말이죠.

Link to this sectionYOLO를 더 빠르게 만드는 방법#

YOLO 모델을 학습시키면 학습 환경에서 완벽하게 작동하는 신경망을 얻게 됩니다. 하지만 문제가 있습니다. 여러분의 게임용 GPU, iPhone, 보안 카메라 속 작은 칩은 모두 완전히 다른 언어로 말합니다. 그들은 서로 다른 장점과 약점을 가지고 있으며 데이터를 처리하는 방식에 대해서도 매우 다른 생각을 가지고 있습니다.

이렇게 생각해 보세요. GPU는 동시에 작동할 수 있는 수천 개의 코어를 가지고 있으며 병렬 처리를 위해 설계되었습니다. 반면, 모바일 칩은 AI 연산을 위해 특별히 설계된 회로를 가지고 있을지 모르지만 특정 유형의 수학만 처리할 수 있습니다. 그리고 도어벨 카메라에 있는 그 엣지 장치는 LED 전구보다 작은 전력 예산으로 AI를 실행하려고 합니다.

Ultralytics는 12개 이상의 다양한 내보내기 형식을 지원합니다. 각 형식이 서로 다른 하드웨어에 최적화되어 있기 때문입니다. 선택지가 너무 많아서가 아니라, 여러분의 구체적인 요구 사항에 맞는 올바른 옵션을 제공하기 위해서입니다.

Link to this section연산 융합(Fusing operations): 더 적게 하고 더 많은 것을 얻기#

기존 YOLO 모델에서는 많은 연산이 순차적으로 발생합니다. 예를 들어 컨볼루션을 수행한 다음 결과를 정규화하고, 그 다음 활성화 함수를 적용할 수 있습니다. 이는 각각 고유한 메모리 읽기와 쓰기를 필요로 하는 세 단계의 개별적인 작업입니다.

하지만 기발한 방법이 있습니다. 우리는 이 연산들을 하나의 단계로 결합할 수 있습니다. 배포를 위해 YOLO를 내보낼 때 우리는 이러한 연산들을 융합(fuse)합니다. 다음과 같이 하는 대신:

  1. 컨볼루션 계산 → 메모리에 저장
  2. 메모리에서 로드 → 정규화 → 메모리에 저장
  3. 메모리에서 로드 → 활성화 적용 → 메모리에 저장

우리는 이렇게 합니다:

  1. 컨볼루션 + 정규화 + 활성화 계산 → 메모리에 저장

640×640 이미지를 처리하는 일반적인 YOLO 모델의 경우, 이 간단한 트릭은 기가바이트 단위의 불필요한 메모리 전송을 제거합니다. 모바일 폰에서는 이 차이가 매끄러운 실시간 탐지와 답답한 지연 시간의 차이가 됩니다.

Link to this section더 작은 숫자 사용: 양자화(quantization)의 마법#

YOLO는 사실 정확하게 객체를 탐지하기 위해 초정밀 숫자가 필요하지 않습니다. 학습 중에는 각 가중치를 표현하기 위해 32비트를 사용합니다. 이는 샌드위치 재료를 측정하기 위해 공학용 계산기를 사용하는 것과 같습니다. 실제 배포용으로는 8비트만으로도 충분합니다.

이를 양자화(quantization)라고 하며, 이는 가장 강력한 최적화 기술 중 하나입니다. 더 작은 숫자를 사용하면 다음과 같은 효과가 있습니다:

  • 모델 크기가 75% 감소합니다 (Ultralytics YOLO11x 기준 200MB에서 50MB로 감소)
  • 대부분의 기기에서 2~4배 더 빠르게 실행됩니다
  • 전력 소모가 훨씬 줄어듭니다 (스마트폰 배터리 수명에 도움이 됩니다)

YOLO의 모든 계층이 이러한 감소에 동일하게 민감한 것은 아닙니다. 기본적인 가장자리와 모양을 감지하는 초기 계층은 견고하여 문제없이 8비트 숫자를 사용할 수 있습니다. "고양이인가 강아지인가?"를 판단하는 최종 감지 계층은 조금 더 정밀도가 필요합니다. 따라서 저희는 속도를 극대화하면서 정확도를 유지할 수 있도록 필요한 만큼의 비트만 사용하여 계층별로 정밀도를 조정합니다.

세심한 양자화를 통해 Ultralytics YOLO는 원래 정확도의 99.5%를 유지하면서 휴대폰에서 3배 더 빠르게 실행된다는 것을 확인했습니다. 이것이 바로 연구용 모델과 실제 환경에서 실제로 사용할 수 있는 모델의 차이입니다.

Link to this section최고의 알고리즘 선택#

동일한 수학적 연산을 수행하는 데는 수십 가지의 다른 방법이 있습니다. 간단한 컨볼루션(YOLO의 핵심 연산)도 완전히 다른 알고리즘을 사용하여 계산할 수 있으며, 최선의 선택은 사용 중인 하드웨어와 입력 크기에 따라 달라집니다.

YOLO를 내보낼 때, 저희의 최적화 프레임워크는 실제로 다양한 알고리즘을 테스트하여 귀하의 특정 사례에 가장 빠른 알고리즘을 선택합니다. 이는 목적지까지 가는 여러 경로 중 현재 교통 상황에 따라 가장 빠른 경로를 선택하는 것과 같습니다. GPU에서는 많은 픽셀을 동시에 처리하는 알고리즘을 사용할 수 있고, CPU에서는 순차적 처리에 최적화된 알고리즘을 사용할 수 있습니다. 수학적으로는 동일하지만 실행 전략은 완전히 다릅니다.

Link to this section메모리: 숨겨진 병목 현상#

현대 컴퓨팅에서 메모리가 실질적인 병목 현상이라고 언급했던 것을 기억하시나요? 이는 YOLO의 경우 특히 더 그렇습니다. 모델은 5,000만 개의 파라미터를 가질 수 있으며, 추론 중에 기가바이트 단위의 중간 결과물을 생성합니다. 이 모든 데이터를 이동시키는 것은 종종 실제 계산보다 더 느립니다.

저희는 메모리 이동을 최소화하기 위해 몇 가지 기법을 사용합니다:

스마트 스케줄링: 데이터가 빠른 캐시 메모리에 있는 동안 즉시 사용될 수 있도록 연산을 배치합니다. YOLO의 특징 피라미드 네트워크의 경우, 이 방법으로 메모리 트래픽을 40% 줄입니다.

타일링(Tiling): 전체 이미지를 한 번에 처리하는 대신, 캐시에 들어갈 수 있는 작은 타일로 나눕니다. 이는 프로세서가 느린 주 메모리에서 지속적으로 데이터를 가져오는 대신 빠르고 로컬인 메모리로 작업할 수 있음을 의미합니다.

버퍼 재사용: 중간 결과물을 위해 지속적으로 새로운 메모리를 생성하는 대신 동일한 메모리 버퍼를 재사용합니다. 이는 매우 효율적이어서 YOLO의 전체 백본은 여러 개의 재사용 가능한 버퍼만으로 실행될 수 있습니다.

Link to this section가지치기(Pruning): 적을수록 좋다#

놀라운 사실 하나를 알려드리자면, YOLO 모델은 종종 과하게 설계되어 있습니다. 많은 계층에서 채널의 30%를 제거해도 정확도에 거의 영향을 미치지 않습니다. 이는 단순히 모델을 작게 만드는 것이 아니라, 실제로 수행해야 할 계산량이 줄어들기 때문에 모델을 더 빠르게 만드는 것입니다.

이 과정은 매우 우아합니다. 네트워크 중 최종 감지 결과에 가장 적게 기여하는 부분을 분석하여 제거한 다음, 모델을 미세 조정하여 이를 보완합니다. 가지치기된 YOLO11m 모델은 30% 더 빠르면서도 원래 정확도의 99%를 유지할 수 있습니다. 배터리로 작동하는 기기에서 이러한 효율성 향상은 수 시간의 추가 작동 시간을 의미할 수 있습니다.

Link to this section하드웨어 가속: 각 칩의 강점 활용#

프로세서마다 잘하는 일이 다르며, 성능 차이는 매우 큽니다. 동일한 YOLO11n 모델을 기준으로 할 때:

  • 최신 Intel CPU에서 프레임당 45밀리초
  • NVIDIA RTX GPU에서 4밀리초
  • 고성능 휴대폰 프로세서에서 22밀리초
  • Google Coral Edge TPU에서 15밀리초

이것은 단순히 클록 속도로 인한 속도 차이가 아니라 근본적인 아키텍처의 차이를 반영합니다. GPU는 YOLO의 컨볼루션에 적합한 병렬 처리를 수행하는 수천 개의 코어를 가지고 있습니다. 모바일 NPU는 신경망을 위해 특별히 설계된 전문 회로를 가지고 있습니다. CPU는 다재다능하고 유연하지만 특정 작업에 특화되어 있지는 않습니다.

최적화의 핵심은 YOLO의 연산을 각 칩이 가장 잘하는 작업에 맞추는 것입니다. GPU는 많은 데이터를 동시에 동일한 연산으로 처리하는 것을 좋아합니다. 모바일 NPU는 특정 연산만 지원할 수 있지만 이를 매우 효율적으로 실행합니다. Edge TPU는 8비트 정수만으로 작동하지만 그 제약 내에서 놀라운 속도를 달성합니다.

Link to this section컴파일의 마법#

YOLO 모델을 내보낼 때, 배경에서 놀라운 일이 일어납니다. 저희는 단순히 파일 형식을 변환하는 것이 아니라, 귀하의 대상 하드웨어에 맞게 모델을 실제로 컴파일합니다. 이는 Google 번역과 원어민의 차이와 같습니다. 컴파일 과정은 다음과 같습니다:

  1. 모델을 분석하여 구조와 요구 사항을 파악합니다.
  2. 하드웨어의 역량을 고려합니다. 무엇을 잘하고 무엇에 어려움을 겪는지 확인합니다.
  3. 하드웨어의 네이티브 언어로 말하는 최적화된 코드를 생성합니다.

컴파일러는 프로세서의 캐시를 더 잘 활용하도록 연산을 재구성하거나, 칩이 지원하는 특수 명령어를 선택하거나, 심지어 머신 러닝을 사용하여 최상의 최적화 전략을 찾을 수 있습니다. 그렇습니다. 저희는 AI를 사용하여 AI를 최적화하고 있습니다. 미래는 이미 와 있습니다!

이 컴파일 단계는 성능을 10배 차이 나게 만들 수 있습니다. 동일한 YOLO 모델이라도 일반적인 코드에서는 느리게 작동하지만 제대로 최적화된 명령어로는 빠르게 비행할 수 있습니다.

Link to this section실제 환경의 에지(edge) 배포#

YOLO가 실제 환경, 특히 까다로운 에지 디바이스의 세계와 만날 때 어떤 일이 일어나는지 이야기해 봅시다. 물체 감지를 위해 24시간 내내 YOLO를 실행해야 하는 보안 카메라를 상상해 보세요. 이 카메라는 가혹한 제약에 직면합니다:

  • 메모리: 총 512MB에서 2GB 정도의 RAM
  • 전력: 보통 2~5와트 (휴대폰 충전기보다 적은 전력)
  • 냉각: 팬이 없고 수동 방열만 가능
  • 신뢰성: 충돌 없이 지속적으로 실행되어야 함

실제로 최적화가 달성하는 성과는 다음과 같습니다. YOLO11s를 실행하는 보안 카메라의 경우:

  • 원본 모델: 15와트, 85°C의 높은 발열, 20 FPS 달성
  • 양자화 및 가지치기로 최적화 후: 3와트, 45°C의 쾌적한 온도, 25 FPS 달성

성능을 향상시키면서 전력 소비를 80% 줄였습니다! 이것이 바로 과열되고 배터리를 소모하는 기기와 수년간 안정적으로 작동하는 기기의 차이입니다.

핵심은 올바른 절충안을 선택하는 것입니다. 에지 디바이스에서는 보통 다음을 수행합니다:

  • INT8 양자화 사용 (정밀도는 낮아지지만 전력 소모가 훨씬 줄어듦)
  • 활동이 적을 때 처리하는 프레임 수 줄이기
  • 열을 관리하기 위해 서로 다른 프로세서에 작업을 분산
  • 모델 크기를 작게 유지하여 전체가 빠른 메모리에 적합하도록 함

Link to this section최적화 과정#

Ultralytics에서는 체계적인 최적화 접근 방식을 따릅니다. 먼저 모델을 프로파일링하여 시간이 실제로 어디에 소요되는지 파악합니다. 종종 병목 현상은 예상치 못한 곳에 있습니다. 전체 시간의 80%가 몇 개의 계층에서 소요되거나, 메모리 전송이 전체 계산 시간을 지배하고 있을 수 있습니다.

다음으로, 반복적으로 최적화를 적용합니다:

  1. 가장 큰 병목 현상부터 시작
  2. 한 번에 하나씩 최적화 적용
  3. 속도 향상과 정확도 영향 모두 측정
  4. 좋은 절충안을 제공하는 최적화 유지
  5. 목표에 도달할 때까지 반복

예를 들어, 휴대폰에서 YOLO11m을 배포할 경우:

  • 기준치: 프레임당 200ms, 200MB 모델
  • 양자화 후: 프레임당 80ms, 50MB 모델
  • 가지치기 후: 프레임당 60ms, 35MB 모델
  • 연산 융합 후: 프레임당 45ms, 35MB 모델

각 단계는 원래 정확도의 99% 이상을 유지하면서 성능을 향상시킵니다. 그 결과는 무엇일까요? 주머니에 들어가는 기기에서의 실시간 물체 감지입니다.

Link to this section미래: 이기종 컴퓨팅(Heterogeneous computing)#

현대 기기들은 여러 프로세서를 함께 사용하는 방식이 점점 스마트해지고 있습니다. 귀하의 휴대폰에는 하나의 프로세서만 있는 것이 아니라 여러 프로세서가 있으며, 각각 다른 작업에 특화되어 있습니다:

  • 카메라 센서에는 전처리를 위한 ISP(이미지 신호 프로세서)가 있습니다
  • NPU(신경 처리 장치)가 YOLO 추론을 실행합니다
  • CPU는 복잡한 로직과 조정 업무를 처리합니다
  • GPU는 화면에 결과를 렌더링합니다

YOLO 최적화의 미래는 이러한 프로세서들에 모델을 지능적으로 나누는 것에 있습니다. NPU가 주요 컨볼루션을 처리하고, CPU가 최종 감지 로직을 수행하며, GPU가 결과를 시각화할 수 있습니다. 각 프로세서가 가장 잘하는 작업을 수행함으로써 단일 프로세서가 달성할 수 있는 것보다 더 효율적인 파이프라인을 구축합니다.

저희는 프로세서 간의 데이터 이동 비용뿐만 아니라 각 프로세서의 역량을 고려하여 YOLO를 사용 가능한 프로세서들에 분할하는 최선의 방법을 자동으로 파악하는 스마트 분할 알고리즘을 개발 중입니다.

Link to this section결론#

YOLO 모델 최적화는 단순히 파일 형식을 변환하는 것이 아니라, 최첨단 AI를 실제 환경에서 실제로 작동하는 것으로 변환하는 과정입니다. 양자화(더 작은 숫자 사용), 가지치기(불필요한 부분 제거), 연산 융합(단계 결합), 스마트 메모리 관리와 같은 기술을 통해 정확도를 유지하면서 10~100배의 성능 향상을 달성합니다.

놀라운 점은 보편적인 '최상의' 최적화는 없다는 것입니다. 전력이 제한 없는 클라우드 서버는 배터리로 작동하는 드론과는 다른 최적화가 필요합니다. 전용 AI 칩이 있는 휴대폰은 Raspberry Pi와는 다른 처리가 필요합니다. 그렇기 때문에 Ultralytics는 다양한 내보내기 옵션을 제공하며, 각 옵션은 서로 다른 시나리오에 맞게 최적화되어 있습니다.

저희가 논의한 모든 최적화는 하나의 목표를 향합니다. 바로 컴퓨터 비전을 어디서나 접근 가능하게 만드는 것입니다. 스마트 초인종, 드론 애플리케이션, 혹은 대규모 클라우드 서비스를 구축하든, 저희는 귀하의 제약 내에서 YOLO가 작동하도록 만드는 도구를 제공합니다.

Ultralytics를 사용하여 YOLO 모델을 내보낼 때, 단순히 파일을 저장하는 것이 아닙니다. 신경망을 실용적으로 만들기 위한 수년간의 연구를 활용하는 것입니다. 최첨단 AI 모델을 실제 하드웨어에서, 실제 제약 조건 속에서, 실제 문제를 해결할 수 있는 것으로 변환하는 것입니다.

그것이 바로 Ultralytics가 하는 일입니다. 저희는 AI 연구와 실질적인 배포 사이의 격차를 줄입니다. 저희는 컴퓨터 비전을 어디서나 작동하게 만듭니다. AI의 미래는 최고의 모델을 갖는 것에 그치지 않고 그 모델을 현실 세계에서 유용하게 만드는 것에 있기 때문입니다.

Explore solutions

Real-time AI that works with your team

로봇 공학에서의 AI

Ultralytics YOLO 모델로 더 스마트한 기기를 구동하십시오. 로봇 공학의 비전 AI는 자율 주행, 인식, 객체 추적 및 실시간 제어를 촉진합니다.
더 알아보기
Real-time AI that works with your team

물류 분야의 AI

Ultralytics YOLO 모델로 물류 프로세스를 간소화하십시오. 비전 AI를 통해 패키지 검사, 분류, 차량 추적 및 실시간 창고 안전 모니터링이 가능합니다.
더 알아보기
Real-time AI that works with your team

소매업에서의 AI

Ultralytics YOLO 모델로 소매업을 재구상하십시오. 비전 AI는 재고 추적, 선반 모니터링, 대기열 관리 및 더 스마트한 고객 인사이트를 지원합니다.
더 알아보기
Real-time AI that works with your team

의료 분야의 AI

Ultralytics YOLO 모델로 의료 솔루션을 구축하십시오. 의료 분야의 비전 AI는 더 빠른 의료 영상 분석, 더 스마트한 진단 및 환자 모니터링을 지원합니다.
더 알아보기
Real-time AI that works with your team

제조 분야의 AI

Ultralytics YOLO 모델로 제조 공정을 최적화하십시오. 비전 AI는 품질 관리, 결함 탐지, PPE 규정 준수 및 조립 라인 자동화를 주도합니다.
더 알아보기
Real-time AI that works with your operation

자동차 분야의 AI

Ultralytics YOLO 모델을 통해 자동차 분야에 컴퓨터 비전을 적용하십시오. 비전 AI는 도로 안전, 운전자 보조 및 차량 자동화를 향상하여 더 스마트한 도로를 만듭니다.
더 알아보기
Real-time AI tailored to your operation

농업 분야의 AI

Ultralytics YOLO 모델을 통해 스마트 농업에 비전 AI를 도입하십시오. 작물 모니터링, 가축 추적 및 정밀 농업을 강화하여 더 높고 스마트한 생산량을 달성하십시오.
더 알아보기
Real-time AI that works with your team

로봇 공학에서의 AI

Ultralytics YOLO 모델로 더 스마트한 기기를 구동하십시오. 로봇 공학의 비전 AI는 자율 주행, 인식, 객체 추적 및 실시간 제어를 촉진합니다.
더 알아보기
Real-time AI that works with your team

물류 분야의 AI

Ultralytics YOLO 모델로 물류 프로세스를 간소화하십시오. 비전 AI를 통해 패키지 검사, 분류, 차량 추적 및 실시간 창고 안전 모니터링이 가능합니다.
더 알아보기
Real-time AI that works with your team

소매업에서의 AI

Ultralytics YOLO 모델로 소매업을 재구상하십시오. 비전 AI는 재고 추적, 선반 모니터링, 대기열 관리 및 더 스마트한 고객 인사이트를 지원합니다.
더 알아보기
Real-time AI that works with your team

의료 분야의 AI

Ultralytics YOLO 모델로 의료 솔루션을 구축하십시오. 의료 분야의 비전 AI는 더 빠른 의료 영상 분석, 더 스마트한 진단 및 환자 모니터링을 지원합니다.
더 알아보기
Real-time AI that works with your team

제조 분야의 AI

Ultralytics YOLO 모델로 제조 공정을 최적화하십시오. 비전 AI는 품질 관리, 결함 탐지, PPE 규정 준수 및 조립 라인 자동화를 주도합니다.
더 알아보기
Real-time AI that works with your operation

자동차 분야의 AI

Ultralytics YOLO 모델을 통해 자동차 분야에 컴퓨터 비전을 적용하십시오. 비전 AI는 도로 안전, 운전자 보조 및 차량 자동화를 향상하여 더 스마트한 도로를 만듭니다.
더 알아보기
Real-time AI tailored to your operation

농업 분야의 AI

Ultralytics YOLO 모델을 통해 스마트 농업에 비전 AI를 도입하십시오. 작물 모니터링, 가축 추적 및 정밀 농업을 강화하여 더 높고 스마트한 생산량을 달성하십시오.
더 알아보기
Real-time AI that works with your team

로봇 공학에서의 AI

Ultralytics YOLO 모델로 더 스마트한 기기를 구동하십시오. 로봇 공학의 비전 AI는 자율 주행, 인식, 객체 추적 및 실시간 제어를 촉진합니다.
더 알아보기
Real-time AI that works with your team

물류 분야의 AI

Ultralytics YOLO 모델로 물류 프로세스를 간소화하십시오. 비전 AI를 통해 패키지 검사, 분류, 차량 추적 및 실시간 창고 안전 모니터링이 가능합니다.
더 알아보기
Real-time AI that works with your team

소매업에서의 AI

Ultralytics YOLO 모델로 소매업을 재구상하십시오. 비전 AI는 재고 추적, 선반 모니터링, 대기열 관리 및 더 스마트한 고객 인사이트를 지원합니다.
더 알아보기
Real-time AI that works with your team

의료 분야의 AI

Ultralytics YOLO 모델로 의료 솔루션을 구축하십시오. 의료 분야의 비전 AI는 더 빠른 의료 영상 분석, 더 스마트한 진단 및 환자 모니터링을 지원합니다.
더 알아보기
Real-time AI that works with your team

제조 분야의 AI

Ultralytics YOLO 모델로 제조 공정을 최적화하십시오. 비전 AI는 품질 관리, 결함 탐지, PPE 규정 준수 및 조립 라인 자동화를 주도합니다.
더 알아보기
Real-time AI that works with your operation

자동차 분야의 AI

Ultralytics YOLO 모델을 통해 자동차 분야에 컴퓨터 비전을 적용하십시오. 비전 AI는 도로 안전, 운전자 보조 및 차량 자동화를 향상하여 더 스마트한 도로를 만듭니다.
더 알아보기
Real-time AI tailored to your operation

농업 분야의 AI

Ultralytics YOLO 모델을 통해 스마트 농업에 비전 AI를 도입하십시오. 작물 모니터링, 가축 추적 및 정밀 농업을 강화하여 더 높고 스마트한 생산량을 달성하십시오.
더 알아보기

미래의 AI를 함께 구축합시다!

머신 러닝의 미래와 함께 여정을 시작하십시오.