MIO와 Any-to-Any 스트리밍 멀티모달 모델(MIO and Any-to-Any Streaming Multimodal Models)

GPT-4o는 대부분의 오픈 모델(open model)이 재현하지 못하는 제품을 시장에 내놓았습니다. 음성을 듣고 영상을 보며 실시간으로 다시 말하는 에이전트(agent)입니다. 2024년 말 오픈 생태계(open ecosystem)가 내놓은 답이 바로 MIO(Wang et al., 2024년 9월)였습니다. MIO는 텍스트(text), 이미지(image), 음성(speech), 음악(music)을 토크나이징(tokenize)하고, 이들이 섞여 있는 인터리브 시퀀스(interleaved sequence) 위에서 하나의 인과적 트랜스포머(causal transformer)를 학습하여, 어떤 모달리티(modality)에서 어떤 모달리티로든 생성할 수 있게 합니다. AnyGPT(Zhan et al., 2024년 2월)는 개념 증명(proof of concept)에 해당했고, MIO는 그 규모를 키운 확장판(scale-up)이며, Unified-IO 2(Allen AI, 2023년 12월)는 시각(vision)과 행동 기반(action grounding) 능력을 더한 사촌 격 모델입니다. 이 강의에서는 any-to-any 패턴(pattern), 즉 네 개의 토크나이저(tokenizer), 하나의 트랜스포머, 스트리밍 친화적(streaming-friendly) 디코딩(decode)이라는 구조를 함께 읽어 봅니다.

유형: Learn 언어: Python (표준 라이브러리, 4-모달리티 토큰 할당기(four-modality token allocator)와 스트리밍 디코드 루프(streaming decode loop)) 선수 지식: Phase 12 · 11 (Chameleon), Phase 6 (Speech and Audio) 예상 시간: 약 120분

학습 목표

  • 텍스트, 이미지, 음성, 음악 토큰이 서로 충돌하지 않도록 공유 어휘(shared vocabulary)를 설계합니다.
  • SEED-Tokenizer(이미지용)와 SpeechTokenizer residual-VQ(음성용)를 압축(compression)과 복원(reconstruction)의 균형 관점에서 비교합니다.
  • any-to-any 생성(generation)을 단계적으로 쌓아 올리는 4단계 커리큘럼(four-stage curriculum)을 설명합니다.
  • 세 가지 오픈 any-to-any 레시피(recipe)와 각자의 주요 장단점을 말합니다. MIO, AnyGPT, Unified-IO 2입니다.

문제

통합 멀티모달 모델(unified multimodal model)은 말로 풀어내기는 쉽지만, 대규모로 실제 구현하기는 매우 어렵습니다. 2024년까지 대부분의 "any-to-any" 시스템(system)은 단계가 직렬로 이어진 파이프라인(pipeline) 구조였습니다. 즉, 시각 모델(vision model) → 텍스트 표현(text representation) → 음성 모델(speech model) → 오디오(audio) 같은 흐름입니다. 각 단계(hop)를 거칠 때마다 정보가 손실되고, 지연(latency)이 누적되며, 학습(training)을 복잡하게 만듭니다. GPT-4o의 시연 영상(demo video)은 1초 미만(subsecond) 응답이 가능한 단일 모델(single-model) 대안을 보여 주었고, 오픈 시스템은 그보다 몇 달 뒤처져 있었습니다.

엔지니어링 측면에서의 과제는 다음과 같습니다.

  • 모든 모달리티마다 토크나이저가 존재해야 합니다. 토크나이저는 복원이 충분히 가능할 만큼 손실을 줄여 압축해야 하며, 트랜스포머가 소화할 수 있는 속도로 토큰을 만들어 내야 합니다.
  • 하나의 어휘 사전(vocabulary)에 텍스트(32k+), 이미지(16k+), 음성(4k+), 음악(8k+)을 위한 공간을 함께 배분해야 합니다. 최소 40,000개가 넘는 항목(entry)이 필요합니다.
  • 학습 데이터(training data)는 모든 입력-출력 쌍(input-output pair), 즉 텍스트→이미지, 이미지→음성, 음성→이미지 등을 포괄해야 합니다. 그렇지 않다면 모델 스스로 이를 조합(compose)할 수 있어야 합니다.
  • 추론(inference)은 대화에 어울리는 지연 수준을 맞출 만큼 출력 토큰을 빠르게 스트리밍(stream)해야 합니다. 첫 오디오 바이트까지 걸리는 시간(time-to-first-audio-byte)이 500ms 미만이어야 자연스러운 대화 느낌이 납니다.

사전 테스트

2문제 · 이 강의를 시작하기 전에 얼마나 알고 있는지 확인해보세요

1.임의 모달리티 간 변환(any-to-any) 멀티모달 모델이 공유 어휘(shared vocabulary) 안에서 각 모달리티의 토큰에 겹치지 않는 ID 범위를 할당해야 하는 이유는 무엇인가요?

2.MIO의 4단계 학습 커리큘럼(alignment, interleaved, speech-enhanced, SFT)의 목적은 무엇인가요?

0/2 답변 완료

개념

네 개의 모달리티를 위한 네 개의 토크나이저

MIO의 토크나이저 스택(tokenizer stack)은 다음과 같이 구성됩니다.

  • 텍스트(Text): 표준 BPE이며 어휘 크기(vocab)는 약 32000입니다.
  • 이미지(Image): SEED-Tokenizer(2023)입니다. 이산 코드북(discrete codebook)을 갖춘 양자화 VAE(quantized VAE)이며, 4096개의 항목과 이미지당 32x32 토큰을 사용합니다.
  • 음성(Speech): SpeechTokenizer residual-VQ(2023)입니다. 16kHz 파형(waveform)을 8개의 계층적(hierarchical) 코드북으로 인코딩(encode)합니다. 첫 번째 계층(level)은 거친 내용(coarse content)을 담고, 이후 계층은 운율(prosody)과 화자 정체성(speaker identity)을 더합니다.
  • 음악(Music): 메타(Meta)의 MusicGen / Encodec 계열과 비슷한 residual-VQ입니다. 4~8개의 코드북을 사용합니다.

각 모달리티는 정수 토큰(integer token)을 만들어 냅니다. 토큰들은 공유 어휘 안에서 서로 겹치지 않는 ID 범위(disjoint ID range)를 할당받습니다.

text:   0..31999
image:  32000..36095  (4096 image tokens)
speech: 36096..40191  (4096 speech base tokens, plus residual layers)
music:  40192..48383  (8192 music tokens)
sep:    48384..48390  (<image>, <speech>, <music>, </...>, etc.)

전체 어휘 크기는 약 48k 정도입니다. 입력 임베딩(input embedding)과 출력 투영(output projection)은 이 범위 전체를 책임집니다.

스트리밍 디코드(Streaming decode)

음성 생성은 residual-VQ를 사용합니다. 트랜스포머는 기본 계층(base, layer 0)에 해당하는 음성 토큰을 예측하고, 병렬 디코딩 방식의 잔차 양자화기(parallel-decoded residual quantizer)가 이후 계층들을 예측합니다. layer 0 토큰 하나는 16kHz 오디오 기준 대략 50ms 분량에 해당합니다.

스트리밍 패턴은 다음과 같이 흘러갑니다.

  1. 사용자가 마이크(mic)에 말하면, 실시간 오디오 토크나이저(real-time audio tokenizer)가 50ms마다 음성 토큰을 내보냅니다.
  2. MIO는 도착하는 토큰을 그때그때 소비합니다. 프롬프트 프리필(prompt prefill)과 증분 순방향 계산(incremental forward)을 함께 수행합니다.
  3. 생성된 출력 토큰이 스트리밍되어 나오고, 병렬 음성 디코더(parallel speech decoder)가 약 50~150ms 지연으로 이를 오디오 샘플(audio sample)로 변환합니다.
  4. 첫 오디오 바이트까지 걸리는 시간(time-to-first-audio-byte)은 MIO 논문 기준 약 300~500ms로, GPT-4o의 약 250ms에 근접합니다.

Mini-Omni(arXiv:2408.16725), GLM-4-Voice(arXiv:2412.02612), Moshi(arXiv:2410.00037)는 서로 보완적인 관계의 스트리밍 음성-LLM(streaming speech-LLM) 설계들입니다. 특히 Moshi는 단일 GPU에서 160ms 왕복(round-trip) 응답을 달성합니다.

4단계 커리큘럼(Four-stage curriculum)

MIO의 학습 커리큘럼은 다음 네 단계로 구성됩니다.

  1. Stage 1 — alignment(정렬). 텍스트-이미지, 텍스트-음성, 텍스트-음악 같은 대규모 모달리티 쌍 코퍼스(modality-pair corpus)를 사용합니다. 각 쌍은 자기 토큰 어휘 구간(token vocabulary segment)을 사용합니다. 공유 어휘를 학습합니다.
  2. Stage 2 — interleaved(인터리브). 이미지가 섞인 블로그(blog with images + video), 대본(transcript)이 있는 팟캐스트(podcast with transcripts) 같은 멀티모달 인터리브 문서(multi-modality interleaved document)를 사용합니다. 모달리티 간 문맥(cross-modality context)을 학습합니다.
  3. Stage 3 — speech-enhanced(음성 보강). 텍스트 능력(text capability)을 잃지 않으면서 음성 품질(speech quality)을 끌어올리기 위해 추가 오디오 데이터를 사용합니다.
  4. Stage 4 — SFT(지도 미세조정). 모달리티 전반에 걸친 지시 튜닝(instruction tuning)입니다. VQA, 캡셔닝(captioning), 내레이션(narration), 음성-대-음성 대화(speech-to-speech dialogue)가 포함됩니다.

단계를 건너뛰면 특정 능력이 약해집니다. Stage 2를 건너뛰면 모달리티 간 문맥 능력을 잃고, Stage 3를 건너뛰면 음성 품질이 떨어집니다.

시각적 사고 사슬(Chain-of-visual-thought)

MIO는 시각적 사고 사슬(chain-of-visual-thought)을 도입합니다. 모델이 추론 단계(reasoning step)로 중간 이미지 토큰(intermediate image token)을 출력하는 방식입니다. 예를 들어 "이 사진에서 고양이가 나무를 오르고 있나요?"라는 질문에 모델은 다음 순서를 따릅니다.

  1. 입력 이미지나 스케치(sketch)에서 장면(scene)을 그려 내는 <image> 토큰을 출력합니다.
  2. 그 스케치를 분석하는 텍스트를 출력합니다.
  3. 최종 답변을 출력합니다.

생성된 중간 이미지는 스크래치패드(scratchpad) 역할을 합니다. 공간 추론(spatial-reasoning) 과제에서 벤치마크(benchmark) 성능이 좋아집니다. 이 아이디어는 텍스트 추론(text reasoning)에서의 사고 사슬(chain-of-thought)과 짝을 이루는 개념입니다.

Any-to-any 분야의 경쟁자들

  • AnyGPT(arXiv:2402.12226): 텍스트, 이미지, 음성, 음악의 네 가지 모달리티를 다루며 설계가 MIO와 유사합니다.
  • Unified-IO 2(arXiv:2312.17172): 시각 행동(vision action) 출력, 깊이(depth), 표면 법선(normal)을 추가합니다. 다루는 과제(task)의 다양성은 더 크지만 규모(scale)는 더 작습니다.
  • NExT-GPT(arXiv:2309.05519): LLM과 모달리티별 디퓨전 디코더(modality-specific diffusion decoder)를 결합한 구조입니다. 순수한 단일 모델 접근(single-model approach)은 아닙니다.
  • CoDi(arXiv:2305.11846): 조합 가능한 디퓨전(composable diffusion)입니다. 공유 잠재 공간(shared latent)을 통해 any-to-any를 수행합니다.

MIO는 순수 토큰 기반의 any-to-any(pure-token any-to-any)에 가장 가깝습니다. AnyGPT는 그 개념적 조상(conceptual ancestor)에 해당합니다.

지연 예산(Latency budget)

대화형 제품(conversational product)에서는 모든 구성 요소(component)의 지연이 중요합니다.

  • 마이크에서 오디오 토큰까지(mic to audio tokens): 약 50ms.
  • 프리필(prefill, 오디오 토큰 + 대화 이력): 8B 모델에서 약 100ms.
  • 첫 출력 토큰: 약 50ms.
  • 병렬 residual-VQ와 음성 디코더(speech decoder): 약 100~150ms.

전체 첫 오디오 바이트까지의 시간(total time-to-first-audio-byte)은 최소 약 300ms입니다. GPT-4o는 약 250ms를 주장합니다. Moshi는 160ms를 주장합니다. MIO와 AnyGPT는 공개된 벤치마크(public benchmark) 기준 400~600ms 범위에 있습니다.

Any-to-any가 여전히 어려운 이유

2026년인 지금도 오픈 any-to-any 모델은 두 축에서 폐쇄형(closed) 모델을 따라잡지 못하고 있습니다.

  • 음성 품질(speech quality). residual-VQ 토크나이저는 손실(lossy)이 있는 방식입니다. 대화 음성(conversational speech)이 ElevenLabs급 음성과 비교하면 기계적인(robotic) 느낌을 줍니다.
  • 모달리티 간 추론(cross-modality reasoning). 모델에게 "보이는 것을 노래로 불러 보라"라고 시키면, 순수 시각 과제(pure-vision task)보다 훨씬 자주 실패합니다.

이는 아직 열려 있는 연구 과제(open research problem)입니다. Qwen3-Omni(Lesson 12.20)는 2025년 기준 가장 진전된 오픈 시도(open attempt)에 해당합니다.

사용해보기

code/main.py는 다음 동작을 수행합니다.

  • 4-모달리티 어휘 할당(four-modality vocabulary allocation)을 정의하고 출력합니다.
  • 멀티모달 입력 목록(텍스트, 이미지, 오디오 클립(audio-clip), 음악)을 토크나이저 라우터(tokenizer router)에 통과시킵니다.
  • 텍스트-음성(text-to-speech) 응답에 대한 스트리밍 디코드를 지연 누적(latency counting)과 함께 모의 실행(simulate)합니다.
  • 인코더(encoder), 프리필(prefill), 디코더(decoder) 지연이 주어졌을 때 예상되는 첫 오디오 바이트까지의 시간(expected time-to-first-audio-byte)을 계산합니다.

산출물 만들기

이 강의는 outputs/skill-any-to-any-pipeline-auditor.md를 만들어 냅니다. 대화형 제품 사양(conversational product spec; 입력 모달리티, 출력 모달리티, 지연 목표)이 주어지면, MIO 계열(MIO-family)의 설계 선택을 감사(audit)하고 지연 예산을 계산합니다.

연습문제

  1. 쉬움: 제품이 음성 입력을 받고 음성 출력을 반환합니다. 종단 간(end-to-end) 지연 예산 목표는 얼마로 잡아야 할까요? 시간을 소비하는 구성 요소들을 나열해 보세요.

  2. 중간: SpeechTokenizer residual-VQ는 8개의 코드북을 사용합니다. 잔차 계층(residual level)을 순차(sequential)가 아니라 병렬(parallel)로 디코딩해야 하는 이유와, 그렇게 얻는 지연 절감(latency saving)을 설명해 보세요.

  3. 중간: 어휘에 텍스트 32k와 이미지 4k, 음성 4k가 있습니다. 여기에 음악 8k와 구분자(separator) 약 10개를 더합니다. 은닉 차원(hidden dim)이 4096일 때 임베딩 행렬(embedding matrix)의 매개변수(parameter) 비용은 얼마인가요?

  4. 어려움: 시각적 사고 사슬(chain-of-visual-thought)은 중간 이미지를 출력합니다. 어떤 질문에 도움이 되고, 어떤 질문에서는 추가 토큰 때문에 오히려 손해를 보나요?

  5. 어려움: Moshi(arXiv:2410.00037)를 읽어 보세요. "내면 독백(inner monologue)" 기법을 설명하고, MIO의 시각적 사고 사슬과 비교해 보세요.

핵심 용어

용어흔한 설명실제 의미
Any-to-any"멀티모달 입출력(Multimodal in/out)"텍스트, 이미지, 음성, 음악을 어느 방향으로든 입력받고 출력하는 단일 모델이다.
Residual-VQ"음성 토크나이저 스택(Speech tokenizer stack)"여러 코드북 계층(codebook layer)이 정보를 단계적으로 더하는 토크나이징 방식이다. 기본 계층은 내용, 이후 계층은 운율을 담는다.
SEED-Tokenizer"이미지 코드(Image codes)"MIO가 사용하는 4096개 항목의 코드북을 가진 이산 이미지 토크나이저(discrete image tokenizer)다.
Chain-of-visual-thought"시각 스크래치패드(Visual scratchpad)"최종 답변에 앞서 추론 단계로서 중간 이미지를 생성하는 방식이다.
Time-to-first-audio-byte"TTFAB"사용자 음성부터 첫 오디오 출력까지 걸리는 지연이다. 대화 느낌을 살리려면 500ms 미만이 필요하다.
Four-stage curriculum"학습 레시피(Training recipe)"Alignment → interleaved → speech-enhanced → SFT 순서로 진행되는 학습 레시피이다.

더 읽을거리

실습 코드

이 강의의 실습 코드 1개

main
Code

산출물

이 강의에서 생성된 프롬프트, 스킬, 코드 산출물 1개

any-to-any-pipeline-auditor

Audit a conversational any-to-any design and compute the latency budget for a MIO / AnyGPT / Moshi-family stack.

Skill

확인 문제

3문제 · 모두 맞추면 완료 표시가 가능합니다

1.대화형 제품이 첫 오디오 바이트까지 걸리는 시간(TTFAB) 500ms를 목표로 합니다. 마이크에서 토큰까지 약 50ms, 프리필 약 100ms, 첫 출력 토큰 약 50ms, 병렬 residual-VQ 약 100ms, 음성 디코더 약 100ms일 때, 목표 달성이 가능한가요?

2.MIO는 모델이 추론 단계로 중간 이미지 토큰을 출력하는 시각적 사고 사슬(chain-of-visual-thought)을 도입했습니다. 어떤 유형의 질문에 가장 도움이 되나요?

3.SpeechTokenizer는 8개 코드북 계층(codebook layers)의 residual-VQ를 사용합니다. 스트리밍 중 잔차 계층을 순차가 아니라 병렬로 디코딩해야 하는 이유는 무엇인가요?

0/3 답변 완료

추가 문제 풀기

AI가 강의 내용을 바탕으로 새로운 문제를 생성합니다