Yolo 비전 선전
선전
지금 참여하기

Ultralytics 어떻게 YOLO 여러분이 선호하는 칩에서 더 빠르게 Ultralytics

Ultralytics CPU, GPU, 에지 디바이스 전반에서 YOLO 속도를 Ultralytics 방법. 칩, 메모리, 그리고 양자화, 융합, 프루닝과 같은 스마트 기법에 대해 설명하겠습니다.

Ultralytics 컴퓨터 비전 모델을 만듭니다. 간단히 말해, 컴퓨터에게 보는 법을 가르치는 거죠! 이 모델들을 거대한 수학적 레시피라고 생각해보세요. 이들은 연산(우리는 이를 레이어라고 부릅니다)과 우리가 가중치라고 부르는 방대한 숫자들로 구성됩니다.

Ultralytics YOLO 이미지를 본질 그대로 처리합니다: 숫자의 배열로 말이죠! 각 픽셀은 사실 색상 값, 즉 이미지를 구성하는 모든 점에 대한 적색(Red), 녹색(Green), 청색(Blue)의 양(따라서 RGB)에 불과합니다. 우리는 이 숫자 배열을 "텐서(tensor)"라고 부릅니다. "다차원 행렬(multidimensional matrices)"보다 훨씬 멋져 보이고, "숫자 위에 숫자 위에 숫자를 쌓은 것"보다 훨씬 멋져 보이니까요.

이미지를 우리 모델에 입력하면, 네트워크를 통해 장대한 여정을 시작합니다. tensor 층을 거듭하며 tensor , 변환되고, 컨볼루션 처리되고, 가능한 가장 아름다운 방식으로 수학적으로 뒤틀리는 모습을 상상해 보세요. 숫자들이 섞이고 어울리며 고양이의 고양이다움이나 자동차의 자동차다움을 추출해내는 춤파티처럼 생각해보세요. 우리는 이 과정을 특징 추출이라고 부릅니다.

반대쪽 끝에서 나오는 건? 더 많은 숫자들! 의미 있는 숫자들. 탐지 작업에서는 이미지 내 물체의 정확한 위치와 그 물체가 무엇일 가능성이 높은지 알려줍니다. "야, (x, y) 좌표에 개일 확률이 95%야!" 우리는 이 마법 같은 과정을 추론(inference)이라고 부릅니다.

이제 우리 모델들이 마법을 발휘하기 전에, 학교에 다녀야 합니다; 훈련을 받아야 합니다. 훈련 과정이 바로 일이 본격적으로 시작되는 부분입니다.

훈련 과정에서 네트워크에 이미지를 제시할 때마다 단순히 답을 얻는 것이 아닙니다. 두 가지 매우 중요한 작업을 수행합니다. 첫째, 네트워크의 오차(손실이라고 부르며, 정확히 말하면 목표치와의 거리)를 계산합니다. 둘째, 가장 중요한 부분인데, 이 손실을 바탕으로 네트워크 내 모든 숫자(가중치)를 업데이트합니다. 수천 개의 작은 손잡이를 동시에 조정하는 것처럼 생각해보세요. 각 조정은 네트워크의 정확도를 높이기 위해 계산됩니다. 우리는 본질적으로 교정을 통해 네트워크를 훈련시키고 있습니다: 모든 실수가 네트워크에 '하지 말아야 할 것'을 가르치며, 우리는 그 모든 가중치를 조정하여 유사한 이미지를 다시 볼 때 정답에 더 가까워지도록 합니다. 네트워크는 예측을 정확히 맞출 때까지 실수마다 올바른 방향으로 조금씩 이끌려가며 학습하는 것입니다.

얼마나 많은 숫자를 말하는 걸까요? 우리의 귀여운 YOLO11n은 수백만 개의 매개변수를 가집니다. 하지만 YOLO11x는요? 그 녀석은 무려 5천만 개가 넘는 매개변수를 자랑합니다! 더 많은 매개변수는 더 많은 세부사항을 인코딩할 수 있음을 의미합니다. 마치 크레용으로 그림을 그리는 것과 화가의 팔레트를 모두 사용하는 것의 차이처럼 말이죠.

추론 과정에서 이 매개변수 수는 매우 중요해집니다. 300만 매개변수 네트워크를 실행하는 것은 동네 한 바퀴 조깅하는 것과 같습니다. 5천만 매개변수 네트워크를 실행하는 것은? 마치 불타는 횃불을 저글링하면서 마라톤을 뛰는 것과 같습니다.

 그렇다면 정확히 계산이란 무엇인가? 이 모든 숫자 연산은 실제로 어떻게 이루어지는가? 어떻게 하면 더 빠르게 할 수 있는가? 그리고 '계산 최적화'란 대체 무슨 뜻인가?

칩이 실제로 어떻게 계산을 하는가

계산은 칩으로 이루어집니다. 이 작은 실리콘 사각형들은 기본적으로 우주에서 가장 체계적인 모래성입니다. 컴퓨터가 수행하는 모든 연산, 모든 덧셈, 모든 비교, 모든 '이 경우라면 저 경우'는 물리적으로 실리콘에 새겨져 있습니다. 칩의 특정 영역에는 숫자 덧셈 전용 실제 물리적 회로가 있고, 논리 연산 전용 회로도 있습니다. 마치 서로 다른 수학 유형을 전문으로 하는 동네들이 있는 작은 도시를 가진 것과 같습니다.

컴퓨터 과학자라도 이 말은 아마도 기이하게 들릴 겁니다. 지난 40년간 우리는 추상화의 층을 계속 쌓아왔기 때문이죠. 마치 너무 높이 쌓아 올려 바닥 판조차 보이지 않는 기술적 라자냐처럼 말입니다. 우리는 너무나 단순화해버려서 오늘날 대부분의 프로그래머들은 실리콘에서 계산이 실제로 어떻게 이루어지는지 전혀 모릅니다. 그들 자신의 잘못이 아니라, 설계상 그렇게 된 것입니다!

이 층들을 하나씩 벗겨 보자. 이 아주 간단한 Python 보자:

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

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

하지만 여기서부터 흥미로워집니다. 이 순진한 세 줄과 실리콘을 통과하는 실제 전자 사이에는 최소한 네 가지의 거대한 번역 과정이 존재합니다(사실 더 많지만, 저희 디지털 콘텐츠 매니저가 제 글자 수만으로도 이미 불안해하더군요). 이 정신을 혼미하게 하는 여정을 함께 살펴보시죠:

레이어 1: Python 바이트코드 먼저 Python 여러분의 코드를 Python 이를 바이트코드라는 것으로 컴파일합니다. 바이트코드는 컴퓨터가 소화하기 쉬운 중간 언어이지만, 여러분이 읽으려고 한다면 눈이 피로해질 정도로 복잡합니다.

레이어 2: 바이트코드 → 기계어 Python (CPython 등)는 이 바이트코드를 프로세서가 이해하는 실제 명령어인 기계어로 변환합니다. 여기서 우아한 "if x == 1"은 "레지스터 로드, 레지스터 비교, 제로 플래그 설정 시 점프"와 같은 형태로 변환됩니다.

레이어 3: 기계어 → 마이크로코드 반전! 현대 프로세서는 기계어를 직접 실행하지도 않습니다. 이를 더 세분화하여 마이크로코드로 분해하는데, 이는 칩 내부 구성 요소가 처리할 수 있는 훨씬 더 작은 작업 단위입니다. 단일 "ADD" 명령어 하나가 여러 개의 마이크로 작업으로 변환될 수 있습니다.

레이어 4: 마이크로코드 → 물리적 전자회로 마침내 실리콘에 도달합니다. 이 미세 작업들은 트랜지스터를 통해 흐르는 실제 전기 신호를 유발합니다. 수십억 개의 미세한 스위치가 켜지고 꺼지며, 전자는 정교하게 설계된 경로를 따라 춤을 추듯 이동합니다. 그리고 어떻게든, 마법처럼, 1 + 1이 2가 됩니다.

각 층은 그 아래 층의 미친 듯한 복잡성을 숨기기 위해 존재한다. 마치 러시아 인형처럼 겹겹이 들어 있지만, 각 인형은 완전히 다른 언어를 말하고 있으며, 가장 작은 인형은 말 그대로 모래에 갇힌 번개로 만들어져 있다.

아이러니한 점은? 그 Python 세 줄이 Python 수백만 개의 트랜지스터 스위치를 작동시킬 겁니다. 하지만 이런 추상화 덕분에 여러분은 그런 것들을 전혀 생각할 필요가 없습니다. 단순히 "y = x + 1"이라고 작성하고, 어딘가 깊은 실리콘 속에서는 마법이 일어난다고 믿기만 하면 됩니다.

건축

모든 연산은 실리콘에 물리적으로 구현되며, 칩 상에서 어디에서 수행되는지는 전적으로 칩의 토폴로지에 달려 있습니다. 마치 도시 계획과 같지만, 전자를 위한 것입니다. 가산기는 여기에 위치하고, 곱셈기는 저기에 위치하며, 이들은 모두 서로 효율적으로 통신해야 합니다.

시장에는 수백 가지의 서로 다른 칩이 존재하며, 각각 다른 용도로 설계되었습니다. 이들 사이의 차이점은 무엇일까요? 바로 토폴로지, 즉 물리적 영역에서 연산이 배치되고 구현되는 방식입니다. 이를 아키텍처라고 부르는데, 정말 다양한 종류가 존재합니다:

  • x86 (Intel AMD) - 데스크톱 컴퓨팅의 시초, 복잡하지만 강력하다
  • ARM - 효율성을 위해 설계된, 휴대폰과 점차적으로 노트북을 구동하는 기술
  • RISC-V - 오픈소스 반란군, 전 세계적으로 주목받다
  • 파워PC - IBM의 괴물, 여전히 게임 콘솔과 서버에서 작동 중
  • MIPS - 학계에서 선호하는, 단순하고 우아한
  • SPARC - 고성능 컴퓨팅 분야에 선 마이크로시스템즈(현 오라클)가 기여한 기술
  • GPU (NVIDIA CUDA , AMD의 RDNA) - 병렬 처리의 괴물들

각 아키텍처는 트랜지스터 배열 방식이 다를 뿐만 아니라 서로 다른 언어를 사용합니다. 이 기계들에 명령을 보내는 데 사용하는 추상화 방식은 완전히 다릅니다. 마치 누군가에게 운전 경로를 설명해야 하는데, 상대방의 차종에 따라 프랑스어, 중국어, 아니면 몸짓으로 표현해야 할 수도 있는 것과 같습니다.

실리콘의 심장박동

우리 칩의 연료는 전자인데, 이는 칩으로 유입되는 전기로서 계산에 필요한 에너지를 공급합니다. 그러나 에너지만으로는 충분하지 않습니다. 칩이 실제로 작동하고 복잡한 토폴로지를 통해 데이터를 이동시키려면 모든 것이 하나의 핵심 구성 요소에 달려 있습니다: 바로 클럭입니다. 클럭은 전자가 특정 시간에 특정 경로를 따라 흐르도록 합니다. 클럭이 없다면 전원이 공급된 실리콘 덩어리가 아무것도 하지 않은 채 있을 뿐입니다.

수십억 개의 부품이 완벽한 동기화 상태로 움직여야 하는 대규모 공연을 조율한다고 상상해 보세요. 박자 없이는 혼란 그 자체일 것입니다. 바로 이것이 프로세서에서 클록이 수행하는 역할입니다. 클록은 놀라울 정도로 일정한 속도로 진동하는 수정으로, 초당 수십억 번의 전기 펄스를 발신합니다.

"3.5GHz 프로세서"라는 말을 들을 때, 그 GHz(기가헤르츠)는 클럭 속도를 의미합니다. 초당 35억 번의 박동입니다. 각 박동을 클럭 사이클이라고 부르며, 이는 컴퓨팅에서 시간의 기본 단위입니다.

클록 사이클 사이에는 아무 일도 일어나지 않는다. 컴퓨터 전체가 멈춰 서서 다음 박자를 기다린다. 마치 우주에서 벌어지는 가장 극단적인 빨간불, 초록불 게임 같다. 각 "초록불"(클록 펄스)마다:

  • 데이터가 구성 요소 간에 이동합니다
  • 계산이 실행됩니다
  • 논리적 결정이 내려진다
  • 메모리가 읽히거나 쓰여진다

일부 연산은 한 사이클(단순한 덧셈)이 소요되는 반면, 다른 연산은 여러 사이클(나눗셈이나 RAM에서 데이터 가져오기)이 필요합니다. 이는 정교하게 조율되어 수십억 개의 부품이 각자의 특정 작업을 수행하며, 이 끊임없는 박자에 맞춰 완벽히 동기화됩니다. 

프로세서를 오버클럭하려면 크리스털을 더 빠르게 진동시키면 됩니다. 모든 작업이 빨라지지만 동시에 더 많은 열이 발생하여 안정성이 떨어집니다. 너무 과도하게 오버클럭하면 컴퓨터가 다운됩니다. 전자가 문자 그대로 진동 속도를 따라잡지 못하기 때문입니다.

예전에는 이런 작업들을 방만한 기계들로 수행했습니다. 하지만 이 모든 계산을 담당하는 부품들은 놀라울 정도로 단순합니다: 그저 스위치일 뿐이죠. 켜짐-꺼짐 스위치입니다.

이러한 스위치들을 적절한 패턴으로 충분히 연결하면 계산이 이루어진다. 디지털 혁명의 전모는 정교한 스위치 배열로 귀결된다.

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

원리는 1940년대 이후로 변하지 않았습니다. 단지 스위치를 극도로 작게 만드는 기술이 놀라울 정도로 발전했을 뿐이죠. 여러분의 휴대폰은 달에 인간을 보낸 모든 컴퓨터보다 더 강력한 연산 능력을 지녔으며, 주머니에 쏙 들어갑니다. 바로 우리가 원자 수준에서 스위치를 만드는 방법을 알아냈기 때문입니다.

수백만 개의 매개변수를 가진 신경망을 실행할 때, 우리는 이 미세한 스위치들을 초당 수십억 번씩 완벽하게 동기화된 크리스탈 심장 박동에 맞춰 전환합니다. 모든 가중치 업데이트, 모든 행렬 곱셈, 모든 활성화 함수, 이 모든 것이 시계의 박자에 맞춰 움직입니다.

모델 훈련을 하면 컴퓨터가 마치 이륙을 시도하는 것처럼 소리가 나는 게 당연하겠네!

신경망을 BRRRRR 소리 내게 하기

좋아, 그래서 우리는 수십억 개의 스위치가 크리스털의 박자에 맞춰 춤추는 칩을 가지고 있고, 여기에 수백만 개의 매개변수를 가진 신경망을 실행하고 싶어. 쉬울 거야, 그렇지? 숫자들을 칩에 던져 넣고 마음껏 해보게 하자!

신경망을 빠르게 실행하는 것은 냉장고가 세 블록 떨어진 곳에 있고, 팬은 하나뿐이며, 모든 재료가 500파운드나 되는 주방에서 5코스 요리를 해내려는 것과 같다. 수학 자체는 가장 큰 문제가 아니다. 그 외 모든 것이 문제다.

아키텍처 불일치

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

하지만 신경망은 완전히 다릅니다. 신경망은 모든 것을 동시에 처리하려 합니다. 학습 단계에서는 예측 오차에 따라 수백만 개의 가중치를 업데이트합니다. 추론 단계(실제로 학습된 모델을 사용하는 과정)에서는 데이터를 수백만 개의 계산에 동시에 투입합니다. 백만 개의 숫자를 또 다른 백만 개의 숫자와 곱해야 한다고 상상해 보세요. CPU, 그 고마운 녀석은, 마치 매우 빠르지만 매우 체계적인 회계사처럼 한 번에 하나씩 처리하려 합니다.

이것이 바로 GPU가 AI 컴퓨팅의 중추로 자리 잡은 이유입니다. GPU는 수백만 픽셀의 색상을 동시에 계산해야 하는 비디오 게임을 위해 설계되었습니다. 알고 보니 픽셀 색상 계산과 신경망 연산은 놀랍도록 유사합니다: 둘 다 방대한 양의 데이터에 대해 동일한 연산을 병렬로 수행하는 작업이기 때문입니다.

하지만 GPU조차 신경망에 완벽하지는 않습니다. 그래서 기업들은 이제 전용 AI 칩(TPU, NPU 등 PU로 끝나는 모든 약어)을 개발하고 있습니다. 이 칩들은 신경망을 빠르게 실행하는 단 하나의 임무를 위해 처음부터 설계되었습니다. 이는 마치 한 가지 요리만 할 줄 아는 요리사를 고용하는 것과 같습니다. 하지만 그 요리사는 초인적인 속도로 요리를 해냅니다. CPU 행렬 연산을 순차적으로 처리하는 데 CPU , GPU 이를 병렬로 꽤 잘 GPU 동안, 이 특수 칩들은 아침, 점심, 저녁으로 행렬을 처리합니다.

메모리 월 (또는: 왜 비트 이동이 수학보다 어려운가)

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

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

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

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

  • 레지스터 (컴퓨트 유닛에 직접 내장됨): 수학자의 책상입니다. 즉시 접근 가능! 하지만 아주 작아서 약 32개 숫자만 저장할 수 있습니다. 마치 눈앞에 포스트잇을 붙여놓은 것과 같습니다.
  • L1 캐시 (수 마이크로미터 거리): 사무실 책장. 무언가를 꺼내는 데 3~4 사이클이 소요됩니다. 여기에는 수천 개의 숫자를 저장할 수 있습니다.
  • L2 캐시 (몇 밀리미터 거리): 복도 끝의 서류 캐비닛. 10~15 사이클이 소요되며 수백만 개의 숫자를 저장할 수 있습니다.
  • L3 캐시 (칩 전체): 지하 저장실. 30~50 사이클 소요, 수천만 개의 숫자를 보관.
  • RAM (완전히 다른 칩에 있음): 마을 건너편 창고. 100~300 사이클이 소요됩니다. 수십억 개의 숫자들이 저장되는 곳입니다.
  • SSD/하드 드라이브 (케이블로 연결): 완전히 다른 차원의 이야기. 수백만 사이클이 소요됩니다. 대용량 저장, 빙하처럼 느린 속도.

정확한 구조는 다양합니다. 휴대폰 칩은 L3 캐시를 생략할 수 있는 반면, 서버 CPU 이를 대량으로 보유할 CPU . 그러나 원리는 동일합니다: 더 가까운 메모리는 더 빠르지만 용량은 더 작습니다.

이제 신경망에 고통스러운 부분이 시작됩니다. Ultralytics YOLO 5천만 개의 매개변수가 있다고 상상해 보세요(참고로ChatGPT 수십억ChatGPT ). 이는 메모리에서 연산 장치로, 다시 메모리로 이동해야 하는 5천만 개의 숫자를 의미합니다. 각 숫자가 4바이트에 불과하다 해도, 시스템 내에서 이동해야 하는 데이터는 200메가바이트에 달합니다.

칩은 각 숫자를 단일 사이클로 처리할 수 있지만, RAM에서 해당 숫자를 가져오는 데 100사이클이 소요된다면, 당신은 전달을 기다리는 데 시간의 99%를 소비하는 셈이다. 마치 교통 체증 속에 포뮬러 1 레이싱카를 두고 있는 것과 같다. 그 모든 계산 능력이 그저 거기 앉아 데이터가 도착하기를 기다리고 있는 것이다.

핵심 통찰은 이렇습니다: 이것이 현대 컴퓨팅의 가장 큰 병목 현상입니다. 이를 폰 노이만 병목 현상이라 부릅니다. 칩의 연산 속도를 높이는 건 비교적 쉽습니다. 메모리 속도를 높이는 건 물리적 한계에 부딪히고 있습니다. 그래서 AI 성능 최적화의 거의 전부가 메모리 수준에서 이루어집니다. 엔지니어들이 신경망 속도를 높일 때, 연산 자체를 빠르게 하는 경우는 거의 없습니다. 데이터를 덜 이동시키고, 캐싱을 더 효율적으로 하며, 더 스마트하게 접근하는 기발한 방법을 찾는 것입니다.

현대 AI 칩은 단순히 연산 속도에만 집중하지 않습니다. 메모리 대역폭과 데이터 이동 전략에 집착합니다. 데이터를 미리 가져오고, 캐시에 이미 있는 값을 재사용하며, 메모리 접근 횟수를 최소화하도록 연산을 구성합니다. AI 하드웨어 경쟁에서 승리하는 것은 가장 빠른 계산기를 가진 자가 아닙니다. 그 계산기에 지속적으로 데이터를 공급하는 방법을 찾아낸 자입니다. 이 모든 게임은 메모리 접근 패턴을 최적화하는 데 있습니다. 

데이터를 조금만 이동해도 에너지를 소모합니다. 피코줄 단위로 아주 적은 양이지만, 초당 테라바이트 단위로 데이터를 이동할 때는 그 양이 엄청나게 빠르게 쌓입니다. 사실, 칩 위에서 데이터를 1mm 이동시키는 데 드는 에너지가 실제 계산을 수행하는 데 드는 에너지보다 더 많습니다!

이것이 바로 신경망 훈련 시 노트북이 제트 엔진처럼 소음을 내는 이유입니다. 열을 발생시키는 것은 수학 연산이 아니라 데이터 이동입니다. 매번 매개변수 업데이트, 기울기 계산, 전파 과정마다 실제로 방을 뜨겁게 달구고 있습니다.

현대 AI 가속기는 기본적으로 열역학 실험과 같다. 칩이 녹기 전에 얼마나 많은 계산을 집어넣을 수 있을까? 열을 얼마나 빨리 제거할 수 있을까? 오버클럭킹과 비슷하지만, 클럭은 항상 11에 맞춰져 있고 우리는 단지 불이 나지 않도록 애쓰는 셈이다.

해결책? 아키텍처에 민감한 설계

가장 빠른 신경망이 반드시 가장 똑똑한 것은 아니다. 칩을 염두에 두고 설계된 신경망이 바로 그것이다. 이들은:

  • 데이터를 가능한 한 로컬에 보관하십시오
  • 계산을 집요하게 재사용하라
  • 하드웨어 기능과 완벽하게 일치합니다
  • 어떤 대가를 치르더라도 메모리 이동을 최소화하라

"동네 마트에서 재료를 구하세요"라고 적힌 레시피와 티베트에서 향신료를, 프랑스에서 치즈를, 남극에서 물을 수입해야 하는 레시피의 차이 같은 거죠. 둘 다 맛있을 수 있지만, 확실히 하나는 훨씬 실용적이니까요.

그래서 신경망을 빠르게 만드는 것은 예술의 경지입니다. 수학만 뛰어나다고 해서 충분하지 않습니다. 하드웨어를 이해하고, 메모리 계층 구조를 존중하며, 아키텍처와 완벽하게 조화를 이루어야 합니다.

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

YOLO 만드는 방법

YOLO 훈련시키면 훈련 환경에서는 완벽하게 작동하는 신경망이 만들어집니다. 하지만 문제는 이렇습니다: 게임용 GPU, 아이폰, 그리고 보안 카메라의 작은 칩은 완전히 다른 언어를 사용합니다. 각각의 강점과 약점이 다를 뿐만 아니라, 데이터를 처리하는 방식에 대한 개념 자체가 매우 다릅니다.

이렇게 생각해 보세요: GPU 수천 개의 코어를 동시에 작동시킬 수 GPU . 병렬 처리를 위해 설계된 거죠. 반면 모바일 칩은 AI 연산을 위해 특별히 설계된 회로를 가질 수 있지만, 특정 유형의 연산만 처리할 수 있습니다. 그리고 현관 카메라에 있는 그 에지 디바이스는요? LED 전구보다 적은 전력으로 AI를 실행하려 애쓰고 있습니다.

Ultralytics 각기 다른 하드웨어에 최적화된 다양한 내보내기 형식을 지원합니다. 단순히 선택지가 많다는 의미가 아닙니다. 바로 여러분의 특정 요구사항에 딱 맞는 옵션을 제공한다는 뜻입니다.

융합 작업: 적은 자원으로 더 많은 성과 창출

YOLO 많은 연산이 순차적으로 수행됩니다. 예를 들어, 먼저 컨볼루션 연산을 수행한 다음 결과를 정규화하고, 그다음 활성화 함수를 적용할 수 있습니다. 이는 각각 별도의 메모리 읽기 및 쓰기가 필요한 세 가지 독립적인 단계입니다.

하지만 여기서 중요한 점은: 이 작업들을 단일 단계로 통합할 수 있다는 것입니다. YOLO 내보낼 때, 우리는 이 작업들을 하나로 융합합니다. 다음과 같이 하는 대신:

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

저희는 다음과 같은 일을 합니다:

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

640×640 해상도 이미지를 처리하는 일반적인 YOLO 경우, 이 간단한 기법으로 기가바이트 단위의 불필요한 메모리 전송을 제거할 수 있습니다. 모바일 기기에서는 이 차이가 실시간 감지의 부드러움과 답답한 지연 사이를 가릅니다.

더 작은 숫자를 사용하기: 양자화의 마법

YOLO detect 정확히 detect 위해 초정밀 숫자가 반드시 필요한 것은 YOLO . 훈련 과정에서는 각 가중치를 32비트로 표현하는데, 이는 샌드위치 재료를 계량할 때 과학 계산기를 사용하는 것과 같습니다. 실제 배포 환경에서는? 8비트로도 충분합니다.

이를 양자화라고 하며, 가장 강력한 최적화 기법 중 하나입니다. 더 작은 숫자를 사용함으로써:

  • 모델 크기가 75% 축소됩니다(Ultrakytics YOLO11x의 경우 200MB에서 50MB로).
  • 대부분의 기기에서 2~4배 더 빠르게 실행됩니다
  • 전력 소모가 훨씬 적습니다 (휴대폰 배터리가 고마워할 거예요)

YOLO 모든 레이어가 이 감소에 동일하게 YOLO 아닙니다. detect 가장자리와 형태를 detect 초기 레이어들은? 이들은 견고합니다 – 8비트 숫자를 아무 문제 없이 사용할 수 있습니다. "이것이 고양이인가, 개인가?"를 결정하는 최종 감지 레이어들은 조금 더 정밀도가 필요합니다. 따라서 우리는 정확도를 유지하면서 속도를 극대화하기 위해 필요한 만큼의 비트만 사용하여 레이어별로 정밀도를 조정합니다.

신중한 양자화를 통해 Ultralytics YOLO 스마트폰에서 3배 더 빠르게 실행되면서도 원래 정확도의 99.5%를YOLO 것으로 확인되었습니다. 이는 연구용 모델과 실제 현장에서 활용 가능한 모델의 차이입니다.

최적의 알고리즘 선택

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

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

메모리: 숨겨진 병목 현상

현대 컴퓨팅에서 메모리가 진정한 병목 현상이라는 이야기를 기억하시나요? 이는 특히 YOLO 해당됩니다. 모델은 5천만 개의 매개변수를 가질 수 있으며, 추론 과정에서 기가바이트 단위의 중간 결과를 생성합니다. 이 모든 데이터를 이동하는 작업은 실제 계산보다 더 느릴 때가 많습니다.

메모리 이동을 최소화하기 위해 여러 가지 방법을 사용합니다:

스마트 스케줄링: 데이터가 고속 캐시 메모리에 있는 동안 즉시 사용되도록 작업을 조정합니다. YOLO 피처 피라미드 네트워크의 경우, 이를 통해 메모리 트래픽을 40% 감소시킵니다.

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

버퍼 재사용: 중간 결과를 위해 지속적으로 새 메모리를 생성하기보다는 동일한 메모리 버퍼를 재사용합니다. 이는 매우 효율적입니다 – YOLO 전체 백본은 재사용 가능한 버퍼 몇 개만으로 실행될 수 있습니다.

가지치기: 적게 하는 것이 더 낫다

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

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

하드웨어 가속: 각 칩의 장점을 살려 활용하기

각기 다른 프로세서들은 서로 다른 분야에서 강점을 보이며, 성능 차이는 놀라울 정도로 큽니다. 동일한 YOLO11n 모델의 처리 시간은 다음과 같습니다:

  • 현대식 Intel CPU에서 프레임당 45밀리초
  • NVIDIA GPU에서 4밀리초
  • 고성능 휴대폰 프로세서에서 22밀리초
  • Google 에지 TPU에서 15밀리초

이는 단순히 클럭 속도의 차이로 인한 속도 차이만이 아닙니다. 근본적인 아키텍처 차이를 반영합니다. GPU는 수천 개의 코어를 병렬로 작동시켜 YOLO 컨볼루션 연산에 최적화되어 있습니다. 모바일 NPU는 신경망 전용으로 설계된 특수 회로를 갖추고 있습니다. CPU는 만능형으로 유연하지만 특화되지 않았습니다.

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

컴파일 매직

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

  1. 모델을 분석하여 그 구조와 요구사항을 파악합니다
  2. 하드웨어의 성능을 고려합니다 – 잘하는 부분과 어려움을 겪는 부분을
  3. 하드웨어의 기본 언어를 사용하는 최적화된 코드를 생성합니다

컴파일러는 프로세서 캐시를 더 효율적으로 활용하기 위해 연산 순서를 재구성하거나, 칩이 지원하는 특수 명령어를 선택하거나, 심지어 최적화 전략을 찾기 위해 머신러닝을 활용할 수도 있습니다. 맞습니다, 우리는 AI로 AI를 최적화하고 있습니다 – 미래가 이미 도래했습니다!

이 컴파일 단계는 성능을 10배 차이로 만들 수 있습니다. 동일한 YOLO 일반적인 코드로는 느릿느릿 움직일 수 있지만, 제대로 최적화된 명령어로는 날아갈 수 있습니다.

실제 환경에서의 엣지 배포

YOLO 현실 세계, 특히 엣지 디바이스의 까다로운 환경과 YOLO 때 어떤 일이 벌어지는지 살펴보자. 물체 감지를 위해 YOLO 실행해야 하는 보안 카메라를 상상해보자. 이 카메라가 직면한 가혹한 제약 조건은 다음과 같다:

  • 메모리: 아마도 총 512MB에서 2GB의 RAM 정도일 것입니다.
  • 전력: 대개 2~5와트에 불과함(휴대폰 충전기보다 적음)
  • 냉각: 팬 없음, 수동 방열만
  • 신뢰성: 중단 없이 지속적으로 실행되어야 함

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

  • 원본 모델: 15와트, 85°C에서 발열 심함, 20 FPS 달성
  • 양자화 및 가지치기로 최적화: 3와트, 쾌적한 45°C, 25 FPS 달성

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

핵심은 적절한 절충점을 선택하는 것입니다. 에지 디바이스에서는 종종:

  • INT8 양자화 사용 (정밀도 감소, 전력 소모 대폭 감소)
  • 활동이 적을 때 처리하는 프레임 수를 줄입니다
  • 열 관리를 위해 작업을 여러 프로세서에 분산 처리합니다
  • 모델을 빠른 메모리에 완전히 들어갈 만큼 충분히 작게 유지하십시오

최적화 과정

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

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

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

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

  • 기준값: 프레임당 200ms, 200MB 모델
  • 양자화 후: 프레임당 80ms, 50MB 모델
  • 정리 후: 프레임당 60ms, 35MB 모델
  • 작업 융합 후: 프레임당 45ms, 35MB 모델

각 단계마다 성능을 향상시키면서도 원래 정확도의 99% 이상을 유지합니다. 그 결과? 주머니에 들어가는 기기에서 실시간 객체 감지가 가능합니다.

미래: 이종 컴퓨팅

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

  • 카메라 센서에는 전처리를 위한 ISP(이미지 신호 프로세서)가 탑재되어 있습니다.
  • NPU(신경망 처리 장치)는 YOLO 실행합니다.
  • CPU 복잡한 논리 및 조정을 CPU .
  • GPU 결과를 화면에 GPU

YOLO 미래는 이러한 프로세서들 간에 모델을 지능적으로 분할하는 데 있습니다. NPU가 주요 컨볼루션 연산을 처리하고, CPU 최종 탐지 로직을 CPU , GPU 결과를 GPU 식일 수 있습니다. 각 프로세서가 가장 잘하는 일을 담당함으로써, 단일 프로세서가 달성할 수 있는 것보다 더 효율적인 파이프라인을 구축하는 것입니다.

우리는 YOLO 가능한 YOLO 분할하는 최적의 방법을 자동으로 파악하는 스마트 분할 알고리즘을 개발 중입니다. 이 알고리즘은 프로세서들의 성능뿐만 아니라 프로세서 간 데이터 이동 비용도 고려합니다.

결론

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

놀라운 점은? 보편적인 '최고의' 최적화란 존재하지 않습니다. 무제한 전력을 가진 클라우드 서버는 배터리로 구동되는 드론과는 다른 최적화가 필요합니다. 전용 AI 칩이 탑재된 스마트폰은 라즈베리 파이와는 다른 처리가 필요합니다. 그래서 Ultralytics 다양한 내보내기 옵션을 Ultralytics . 각각의 옵션은 서로 다른 시나리오에 최적화되어 있습니다.

우리가 논의한 모든 최적화는 하나의 목표를 위해 존재합니다: 컴퓨터 비전을 어디서나 접근 가능하게 만드는 것입니다. 스마트 도어벨, 드론 애플리케이션, 대규모 클라우드 서비스를 구축하든, 우리는 여러분의 제약 조건 내에서 YOLO 하는 도구를 제공합니다.

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

Ultralytics 우리가 하는 일이 바로 이것입니다. 우리는 AI 연구와 실제 적용 사이의 간극을 메웁니다. 컴퓨터 비전이 어디서나 작동하도록 만듭니다. AI의 미래는 단순히 최고의 모델을 보유하는 것이 아니라, 그 모델들을 현실 세계에서 유용하게 만드는 데 있기 때문입니다.

함께 미래의 AI를 만들어 갑시다!

미래의 머신러닝 여정을 시작하세요

무료로 시작하기