이 메모는 음악 분석 툴을 작은 VPS(메모리 512MB)에서 구동하려던 과정에서 나온 AI 관련 용어와 구조를 기초부터 정리한 것입니다. 책상 위 학습이 아니라 '왜 실제 환경에서 작동하지 않는가'라는 실무적인 문제로부터 역산하여 이해를 구성하고 있습니다.
'만드는 것(학습)'과 '사용하는 것(추론)'은 별개의 공정이며, 사용하는 쪽에 만드는 도구를 가져올 필요는 없습니다. 이 분리가 전체의 핵심입니다.
뇌의 신경 세포(뉴런) 구조를 모방한 계산 방식입니다.
| 뇌의 뉴런 | 뉴럴 네트워크 | |
| :--- | :--- |
| 입력 | 다른 뉴런으로부터 오는 신호 | 수치 배열 |
| ... |
하나하나의 계산은 곱셈과 덧셈만으로 이루어진 단순한 것입니다. 이것을 대량으로 나열하고 여러 층을 쌓음으로써 '이 소리는 몇 Hz인가', '이 이미지에 고양이가 있는가'와 같은 복잡한 판단이 가능해집니다.
출력 = 함수( 입력1 × 가중치1 + 입력2 × 가중치2 + 입력3 × 가중치3 + 바이어스 )
활성화 함수: 위 식의 '함수'에 해당합니다. 덧셈 결과를 그대로 다음 단계로 넘기면, 아무리 많은 층을 쌓아도 1개 층 분량의 표현력밖에 가지지 못합니다. ReLU(음수 값을 0으로 만드는) 같은 함수를 사이에 넣음으로써, 층을 쌓는 의미가 생겨납니다.
뉴런과 신경 세포는 같은 것을 지칭합니다. 뉴럴 네트워크는 뉴런과 시냅스의 관계를 모방하고 있습니다.
| 뇌 | 뉴럴 네트워크 |
|---|
| 뉴런(신경 세포) | 노드(계산하는 점) |
| ... | |
| 판단의 내용은 노드가 아니라, 시냅스에 해당하는 가중치에 존재합니다. 노드 자체는 받은 값을 더해서 함수를 통과시키는 역할만 합니다. 학습된 모델의 배포물이 가중치의 덩어리가 되는 이유가 여기에 있습니다. | |
뇌에서는 자주 사용되는 회로의 시냅스가 강화되고, 사용되지 않는 회로는 약해집니다. 뉴럴 네트워크의 학습도 정답에 가까워지는 방향으로 가중치를 강하게 하거나 약하게 하는 점에서 같은 발상입니다.
| 공정 | 내용 | 필요한 것 |
| :--- | :--- |
| 학습 | 모범 사례를 보여주면서, 출력이 정답에 가까워지도록 손잡이를 자동으로 조금씩 돌림 | 대량의 정답 데이터, GPU, 시간 |
| 추론 | 돌아간 믹서에 새로운 입력을 통과시켜 결과를 얻음 | 학습된 가중치, 실행 환경 |
학습으로 결정된 손잡이의 위치가 '학습된 가중치'이며, 모델 배포물의 실체는 이 수치의 덩어리입니다.
학습의 현실적인 벽
- 데이터: '이 소리는 이 음정'과 같은 레이블링된 데이터가 대량으로 필요합니다. 수집하는 것이 가장 어렵습니다.
- GPU: 학습은 CPU로는 너무 느리기 때문에, 실질적으로 NVIDIA GPU가 필수입니다.
- 시간: 처음부터 학습할 경우 며칠에서 몇 주가 걸리기도 합니다.
개인 수준에서는 처음부터 만드는 것보다, 기존 모델을 자신의 데이터로 추가 학습시키는 '파인튜닝(Fine-tuning)'이 현실적입니다.
과적합(Overfitting): 모범 사례를 통째로 암기하여, 본 적 없는 입력에 약해지는 상태입니다. 학습용과는 별도의 검증용 데이터로 성능을 확인하는 것이 정석입니다.
뉴럴 네트워크를 만들기 위한 전용 도구입니다.
- 배선을 연결함(층의 구조 정의)
- 학습시킴(가중치를 자동 조정)
- 추론함(완성된 모델에 입력을 통과시킴)
이 모든 것을 수행할 수 있습니다.
| 프레임워크 | 개발사 | 특징 |
| :--- | :--- |
| PyTorch | Meta | 연구 분야에서 주류. 공개 모델의 상당수가 이것으로 만들어짐 |
| TensorFlow | 실무 및 모바일 배포에 강함 |
PyTorch는 모든 것이 갖춰진 개발 환경(development environment)이며, 단순한 런타임이 아닙니다. 그 대가로 도입하는 것만으로 1GB 이상, 구동하는 것만으로 메모리를 200~300MB 소비합니다.
| 기능 | PyTorch | onnxruntime |
| :--- | :--- |
| 추론 | 가능 | 가능 |
| ... |
프로그래밍에 비유하자면, PyTorch는 '컴파일러도 디버거도 실행 환경도 모두 갖춰진 IDE'에 해당하며, onnxruntime은 '완성품을 구동만 하는 런타임'에 해당합니다.
텐서(Tensor): PyTorch의 'Torch'나 TensorFlow의 'Tensor'가 지칭하는 것입니다. 다차원 수치 배열이며, 뉴럴 네트워크의 입출력이나 가중치는 모두 텐서로 취급됩니다. 음성이라면 '시간 × 주파수', 이미지라면 '높이 × 너비 × 색상'의 배열이 됩니다.
Open Neural Network Exchange의 약자입니다. 2017년에 Facebook(현 Meta)와 Microsoft가 제정한, 뉴럴 네트워크의 공통 파일 형식입니다.
앱이 아니라 규격과 파일이라는 점에 주의가 필요하다. 음악으로 비유하자면 MIDI 파일의 위치와 가깝다.
| 역할 | 음악 | AI |
|---|
| 만드는 도구 | DAW (Digital Audio Workstation) | PyTorch / TensorFlow |
| ... | | |
| MIDI 파일 자체가 소리를 내지 않는 것과 마찬가지로, ONNX 파일 자체도 아무것도 실행하지 않는다. 읽어들이는 쪽(onnxruntime)에서 계산한다. | | |
- 계산 순서 (배선도, 계산 그래프)
- 학습된 가중치 (다이얼의 위치)
ONNX로 내보낸다는 것은 프레임워크 의존성을 분리하여, 단독으로 호출 가능한 함수 형태로 고정하는 것을 의미한다.
# 이미지
def model(audio):
# 학습을 통해 결정된 수치가 상수(constant)로 삽입되어 있다
...
인수(입력)는 매번 달라져도 좋다. 내부의 상수(가중치)와 처리 순서는 고정된다.
| 프리징 (Freezing) | ONNX | |
|---|
| 내보내는 것 | 결과물 (소리) | 계산 방법 |
| ... | | |
| 프리징은 '요리를 만들어서 냉동한 것'에 해당하고, ONNX는 '레시피를 고정하여 누구나 만들 수 있게 만든 것'에 비유할 수 있다. | | |
ONNX는 음악 분야에만 국한되지 않고, 이미지 인식, 음성 인식, 번역, 스마트폰 카메라 보정 등 신경망 전반에서 사용된다.
| 조건 | 종류 | 내용 |
|---|
| ① AI 모델일 것 | 가능 여부 | 학습된 가중치를 가지고 있어야 한다. 이것이 없으면 내보낼 대상 자체가 없다 |
| ... | | |
| ①과 ②가 갖춰지면 ONNX화할 수 있다. ③까지 갖춰지면 ONNX화할 가치가 있다. | | |
ONNX화를 통해 가벼워지는 것은 'PyTorch라는 도구 자체의 분량'일 뿐이며, 모델 자체의 계산량이나 가중치의 크기는 변하지 않는다. 내용물 자체가 무거운 모델은 내보내도 여전히 무겁다.
opset: ONNX가 지원하는 연산의 버전이다. 버전이 올라갈수록 지원되는 연산이 늘어난다. 내보내기에 실패했을 경우, opset을 높이면 통과할 수 있는 경우가 있다.
전처리 과정은 포함되지 않는 경우가 많다: 음성을 스펙트로그램(주파수 분포)으로 변환하는 STFT 같은 전처리 과정은 ONNX 외부에서 Python 측에 작성되는 경우가 많다. ONNX화 할 때는 이 전처리 과정을 numpy 등으로 다시 작성하여, 원래 PyTorch 버전과 출력이 일치하는지 검증해야 한다.
| 분류 | 모델 | ONNX | 상황 |
|---|---|---|
| 드럼 감지 | ADTOF | 완료 | VPS에서 구동 |
| ... |
FCPE는 '내용물은 작지만, PyTorch를 실행하지 않으면 작동하지 않는' 상태였다. ONNX화의 이점이 가장 큰 전형적인 예이다.
가중치 수치의 정밀도를 낮춰 크기를 줄이는 기법이다.
| 정밀도 | 하나의 수치 크기 | 비고 |
|---|
| 32비트 부동소수점 | 4바이트 | 학습 시 표준 |
| ... | | |
| 양자화(Quantization)로 줄어드는 것은 가중치의 메모리이며, 계산 횟수 자체가 줄어드는 것은 아니다. 계산량이 큰 모델(Demucs 등)의 처리 시간은 양자화를 해도 크게 줄지 않는다. | | |
용도별로 특화된 형식이 나뉘어져 있다.
| 형식 | 주요 용도 |
|---|---|---|
| ONNX | 범용적. 서버, PC, 각종 언어에서 이용 |
| ... |
ChatGPT나 Claude 같은 대규모 언어 모델은 규모 자체가 엄청나게 크기 때문에, ONNX보다는 전용 형식(GGUF 등)으로 배포되는 경우가 많다.
| CPU | GPU | |
|---|
| 강점 | 복잡한 처리를 조금씩 처리 | 단순한 계산을 대량으로 동시에 처리 |
| ... | | |
| 신경망의 계산은 '단순한 곱셈과 덧셈의 대규모 반복'이기 때문에, GPU와 궁합이 좋다. 반면, 소형 모델의 추론이라면 VPS의 CPU로도 실용적이다. | | |
| 논점 | 결론 |
|---|---|---|
| 신경망 (Neural Network) | 뉴런을 모방하여 곱셈과 덧셈을 대량으로 쌓아 올린 계산 방식 |
| ... |
신경망, 프레임워크, ONNX, 런타임이라는 용어들은 개별적으로 들으면 추상적이지만, '메모리 512MB의 서버에서 왜 작동하지 않는가'라는 구체적인 문제에 대입하면 하나의 선으로 연결된다. 만드는 도구와 사용하는 도구를 분리하는 발상은 DAW와 MIDI, IDE와 런타임 같은 기존 지식에 비유할 수 있다. 다음 단계는 소형 모델을 실제로 하나 ONNX로 내보내어, 원래의 출력과 일치하는지 검증하는 것이 될 것이다.