Apidog

올인원 협업 API 개발 플랫폼

API 설계

API 문서

API 디버깅

API 모킹

API 자동화 테스트

Qwen2.5-Omni-7B: 작지만 강력한 모델

INEZA FELIN-MICHEL

INEZA FELIN-MICHEL

Updated on May 1, 2025

인공지능 분야는 급속도로 발전하며 기계가 인지하고, 이해하고, 생성할 수 있는 능력의 경계를 넓히고 있습니다. 이러한 발전의 중요한 도약은 Qwen 팀이 개발한 플래그십 엔드투엔드 멀티모달 모델인 **Qwen2.5-Omni-7B 모델**의 도입으로 이루어졌습니다. 이 모델은 텍스트 중심의 상호작용을 넘어 진정한 옴니모달 경험을 포용하는 패러다임 전환을 나타냅니다. 텍스트, 이미지, 오디오, 비디오 등 다양한 입력을 원활하게 처리하는 동시에 텍스트 및 자연스러운 음성 형식으로 응답을 생성하며, 종종 실시간 스트리밍 방식으로 이루어집니다. 이 글에서는 획기적인 **Qwen2.5-Omni-7B 모델**의 기술적 복잡성, 성능 벤치마크 및 실제 적용 사례를 자세히 살펴보겠습니다.

💡
아름다운 API 문서를 생성하는 훌륭한 API 테스팅 도구를 원하시나요?

최대 생산성으로 개발팀이 협업할 수 있는 통합된 올인원 플랫폼을 원하시나요?

Apidog는 여러분의 모든 요구 사항을 충족하며, Postman을 훨씬 저렴한 가격으로 대체합니다!
button

Qwen2.5-Omni-7B는 무엇이며 왜 그렇게 뛰어난가요?

**Qwen2.5-Omni-7B 모델**의 핵심은 "Thinker-Talker"라고 불리는 새로운 엔드투엔드 아키텍처를 사용한다는 것입니다. 이 설계 철학은 여러 모달리티에 걸쳐 포괄적인 인지와 표현적인 생성을 모두 수행할 수 있는 통합 시스템을 만드는 것을 목표로 합니다.

"Thinker" 구성 요소는 풍부한 멀티모달 입력을 처리하고 이해하는 역할을 합니다. 다양한 데이터 유형에 특화된 인코더를 통합합니다:

  • 텍스트: Qwen2 시리즈의 강력한 기반을 바탕으로 구축되었을 가능성이 높은 고급 트랜스포머 기반 언어 이해 모듈을 활용합니다.
  • 비전 (이미지 및 비디오 프레임): 이미지에서 공간 특징을 추출하고 비디오 프레임에서 시간 특징을 추출하기 위해 비전 트랜스포머(ViT) 또는 유사한 아키텍처를 통합합니다.
  • 오디오: 원시 파형 또는 스펙트로그램을 처리하도록 설계된 오디오 인코더를 사용하여 음향 특징, 음성 패턴, 환경 소리 및 음악 요소를 캡처합니다.

아키텍처 내의 중요한 혁신은 시간 정렬 멀티모달 RoPE(TMRoPE)입니다. Rotary Position Embedding(RoPE)과 같은 표준 위치 인코딩은 텍스트와 같은 순차 데이터에서는 뛰어나지만, 특히 시각 프레임과 오디오 스트림이 동기화되어야 하는 비디오와 같은 멀티모달 시나리오에서는 적응이 필요합니다. TMRoPE는 비디오 프레임의 타임스탬프를 해당 오디오 세그먼트와 정렬하여 이를 해결합니다. 이러한 동기화는 모델이 시청각 이벤트에 대한 일관된 시간적 이해를 구축하도록 하여 "비디오에서 물체가 떨어질 때 어떤 소리가 나나요?"와 같은 질문에 답할 수 있게 합니다.

"Talker" 구성 요소는 출력 생성을 처리합니다. 다음과 같이 구성됩니다:

  • 텍스트 디코더: Thinker의 융합된 멀티모달 이해를 기반으로 텍스트 응답을 생성하는 강력한 언어 모델 디코더입니다.
  • 음성 합성기: 자연스러운 음성을 실시간으로 생성할 수 있는 통합 텍스트 음성 변환(TTS) 모듈입니다. 이 모듈은 정교한 신경 보코더와 잠재적으로 스피커 임베딩 기술을 사용하여 다양한 음성 출력(예: 'Chelsie' 및 'Ethan')을 허용할 수 있습니다.

엔드투엔드 특성은 인지부터 생성까지 전체 프로세스가 단일의 통합된 모델 내에서 발생하여 지연 시간을 최소화하고 입력이 완전히 처리되기 전에 응답이 시작될 수 있는 원활한 스트리밍 상호작용을 가능하게 합니다.

그렇다면 Qwen2.5-Omni-7B는 왜 그렇게 특별할까요?

**Qwen2.5-Omni-7B 모델**은 몇 가지 주요 기술적 특징을 통해 차별화됩니다:

  • 옴니모달 인지 및 생성: 단일 모달리티에 특화된 모델과 달리, Qwen2.5-Omni-7B는 본질적으로 결합된 입력을 위해 설계되었습니다. 비디오를 분석하고, 오디오 트랙을 듣고, 동반되는 텍스트 지침을 읽고, 이러한 모든 소스의 정보를 종합하여 텍스트 및 음성 오디오로 모두 출력하는 응답을 생성할 수 있습니다.
  • 실시간 스트리밍 상호작용: Thinker-Talker 아키텍처는 청크 단위 입력 처리 및 즉각적인 출력 생성을 지원합니다. 이는 문장 중간에 응답할 수 있는 음성 비서나 이벤트가 진행됨에 따라 해설을 제공하는 비디오 분석 도구와 같은 진정한 대화형 애플리케이션을 가능하게 합니다.
  • 고음질 음성 합성: 통합 TTS 모듈은 자연스러움과 견고성을 목표로 하며, 다른 스트리밍 및 비스트리밍 TTS 시스템(예: SEED-TTS-eval 사용)과 비교하여 유리한 벤치마크를 기록했습니다. 복잡한 텍스트를 처리하고 해당되는 경우 스피커 일관성을 유지합니다.
  • 경쟁력 있는 크로스모달 성능: 벤치마크는 **Qwen2.5-Omni-7B 모델**이 다양한 작업에서 강력한 성능을 보여줍니다. 일부 오디오 작업에서는 특화된 Qwen2-Audio를 능가하며, 비전 언어에 중점을 둔 Qwen2.5-VL-7B와 비전 작업에서 비슷한 성능을 달성하여 균형 잡힌 옴니모달 강점을 보여줍니다. OmniBench에서 최첨단 결과는 여러 모달리티를 통합하는 능력을 강조합니다.
  • 효과적인 음성 지침 따르기: 주목할 만한 기능은 텍스트 지침과 유사한 효능으로 음성을 통해 전달된 지침을 이해하고 실행하는 능력입니다. 이는 음성 입력을 사용하여 수행된 MMLU 및 GSM8K와 같은 벤치마크를 통해 검증되었으며, 핸즈프리 작동 및 음성 기반 제어의 잠재력을 보여줍니다.

다음은 Qwen2.5-Omni의 벤치마크입니다.

정량적 평가는 **Qwen2.5-Omni-7B 모델**의 능력을 강조합니다. 광범위한 벤치마크 스펙트럼에 걸쳐 숙련도를 보여줍니다:

멀티모달리티에서 텍스트로: OmniBench에서 7B 모델은 56.13%라는 놀라운 평균 점수를 달성하며, 이미지, 오디오 및 텍스트 추론을 결합하는 작업에서 Gemini-1.5-Pro(42.91%) 및 특화된 멀티모달 모델을 크게 능가합니다.

오디오에서 텍스트로:

  • ASR: Librispeech test-clean/test-other에서 1.8/3.4의 WER을 달성하여 Whisper-large-v3(1.8/3.6) 및 Qwen2-Audio(1.6/3.6)와 경쟁력 있습니다. Common Voice 15 (en/zh)에서 7.6/5.2 WER의 최고 점수를 달성했습니다.
  • S2TT: CoVoST2 (en->de / zh->en)에서 30.2/29.4의 BLEU 점수를 달성하여 강력한 음성 번역 능력을 보여줍니다.
  • 오디오 이해: MMAU에서 평균 65.60%의 점수를 기록하며 소리, 음악 및 음성 추론 작업에서 뛰어난 성능을 보입니다. VoiceBench (Avg)에서 74.12에 도달하여 복잡한 음성 기반 대화 벤치마크에서 강력한 성능을 나타냅니다.

이미지에서 텍스트로: **Qwen2.5-Omni-7B 모델**은 MMMU(59.2 vs 58.6), MMBench-V1.1-EN(81.8 vs 82.6), MMStar(64.0 vs 63.9), TextVQA(84.4 vs 84.9)와 같은 비전 언어 벤치마크에서 전용 Qwen2.5-VL-7B 모델과 비슷한 성능을 보여줍니다. 또한 RefCOCO/+/g와 같은 그라운딩 작업에서도 뛰어납니다.

비디오(오디오 없음)에서 텍스트로: Video-MME (w/o sub) 및 MVBench와 같은 벤치마크에서 각각 64.3 및 70.3의 점수를 달성하여 이러한 특정 테스트에서 동반 오디오 신호 없이도 강력한 비디오 이해 능력을 보여줍니다.

제로샷 TTS: SEED-TTS-eval에서 평가된 RL 튜닝 버전은 낮은 WER(zh/en/hard의 경우 1.42/2.32/6.54) 및 높은 스피커 유사성(0.754/0.641/0.752)을 보여주며, 고품질의 일관된 음성 생성을 나타냅니다.

텍스트에서 텍스트로: 주로 멀티모달이지만 텍스트 전용 기능도 강력합니다. MMLU-redux에서 71.0점, GSM8K에서 88.7점, HumanEval에서 78.7점을 기록하며 일반적으로 특화된 Qwen2.5-7B 텍스트 모델보다는 뒤처지지만 Llama3.1-8B와 같은 다른 7-8B 모델과 비교하여 우수한 성능을 보입니다.


Qwen2.5-Omni-7B 모델 실행: 실제 구현

이론적 능력에서 실제 적용으로 전환하려면 **Qwen2.5-Omni-7B 모델**과 프로그래밍 방식으로 상호작용하는 방법을 이해해야 합니다. 이를 위한 주요 도구는 특정 Qwen 통합 기능이 강화된 Hugging Face transformers 라이브러리와 간소화된 멀티모달 입력 처리를 위한 유용한 qwen-omni-utils 패키지입니다.

여정은 환경 설정으로 시작됩니다. transformers, accelerate (효율적인 멀티 GPU 및 혼합 정밀도 처리를 위해), torch, soundfile (오디오 I/O용), 그리고 중요한 qwen-omni-utils를 포함한 핵심 라이브러리가 설치되어 있는지 확인하십시오. Qwen2.5-Omni 아키텍처 지원을 포함하는 transformers의 특정 프리뷰 버전을 설치하고, 더 빠른 비디오 처리를 위해 qwen-omni-utils[decord] 추가 기능을 사용하는 것이 강력히 권장됩니다:

# 권장 설치
pip install transformers accelerate torch soundfile qwen-omni-utils[decord] -U
# Qwen2.5-Omni 지원이 포함된 특정 transformers 버전 설치
pip install git+https://github.com/huggingface/transformers@v4.51.3-Qwen2.5-Omni-preview

환경이 준비되면 모델과 해당 프로세서를 로드하는 것이 다음 단계입니다. 필요한 상당한 계산 자원, 특히 VRAM을 관리하기 위해 bfloat16 정밀도(torch_dtype=torch.bfloat16 또는 "auto")를 사용하고 Flash Attention 2(attn_implementation="flash_attention_2")를 활성화하는 것이 강력히 권장됩니다. Flash Attention 2는 주의 메커니즘을 최적화하여 호환되는 하드웨어(NVIDIA Ampere 아키텍처 이상)에서 메모리 사용량을 줄이고 속도를 높입니다. device_map="auto" 인수는 사용 가능한 GPU에 모델 레이어를 지능적으로 분산시킵니다.

import torch
import soundfile as sf
from transformers import Qwen2_5OmniForConditionalGeneration, Qwen2_5OmniProcessor
from qwen_omni_utils import process_mm_info

# 모델 식별자 정의 및 구성 요소 로드
model_path = "Qwen/Qwen2.5-Omni-7B"

print("모델 및 프로세서 로드 중...")
model = Qwen2_5OmniForConditionalGeneration.from_pretrained(
    model_path,
    torch_dtype=torch.bfloat16, # 메모리 효율성을 위해 BF16 사용
    device_map="auto",         # 사용 가능한 GPU에 모델 분산
    attn_implementation="flash_attention_2" # Flash Attention 2 활성화
)
processor = Qwen2_5OmniProcessor.from_pretrained(model_path)
print("모델 및 프로세서 로드 성공.")

모델이 로드되면 제공된 쿠킹북을 모방한 예제를 통해 기능을 탐색할 수 있습니다.

Qwen2.5-Omni-7B 모델을 사용한 범용 오디오 이해

cookbooks/universal_audio_understanding.ipynb는 다양한 오디오 작업을 처리하는 모델의 능력을 보여줍니다. 먼저 자동 음성 인식(ASR)을 다뤄보겠습니다.

입력은 대화 목록으로 구성되어야 합니다. 시스템 프롬프트(ASR에 사용되지 않더라도 잠재적인 오디오 출력을 활성화하는 데 필수적)와 오디오 입력(URL 또는 로컬 경로를 통해 지정됨) 및 모델에 지시하는 텍스트 프롬프트를 포함하는 사용자 메시지를 제공합니다.

# 샘플 오디오 URL을 사용하여 ASR을 위한 대화 준비
audio_url_asr = "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen2.5-Omni/hello.wav"

conversation_asr = [
    {
        "role": "system",
        "content": [{"type": "text", "text": "당신은 가상 인간 Qwen입니다..."}] # 표준 시스템 프롬프트
    },
    {
        "role": "user",
        "content": [
            {"type": "audio", "audio": audio_url_asr},
            {"type": "text", "text": "이 오디오의 대본을 제공해주세요."}
        ]
    }
]

# 멀티모달 정보 처리. 참고: 여기서는 use_audio_in_video가 False입니다.
USE_AUDIO_IN_VIDEO_FLAG = False
print("ASR 입력 처리 중...")
text_prompt_asr = processor.apply_chat_template(conversation_asr, add_generation_prompt=True, tokenize=False)
audios_asr, images_asr, videos_asr = process_mm_info(conversation_asr, use_audio_in_video=USE_AUDIO_IN_VIDEO_FLAG)

# 프로세서를 사용하여 최종 모델 입력 준비
inputs_asr = processor(
    text=text_prompt_asr,
    audio=audios_asr, images=images_asr, videos=videos_asr, # 처리된 모달리티 전달
    return_tensors="pt", padding=True,
    use_audio_in_VIDEO_FLAG=USE_AUDIO_IN_VIDEO_FLAG # 일관된 플래그 설정
)
# 입력을 올바른 장치 및 데이터 유형으로 이동
inputs_asr = inputs_asr.to(model.device).to(model.dtype)
print("ASR 입력 생성 준비 완료.")

process_mm_info 유틸리티는 오디오 URL의 로딩 및 전처리를 처리합니다. 그런 다음 processor는 토큰화된 텍스트 프롬프트를 처리된 오디오 특징과 결합하여 입력 텐서를 생성합니다. 비디오가 포함되지 않았으므로 use_audio_in_video 플래그가 일관되게 False로 설정되어 있음을 확인하십시오.

대본을 생성하려면 model.generate 메서드를 호출합니다. 더 빠른 ASR을 위해 return_audio=False로 설정합니다.

print("ASR 대본 생성 중...")
with torch.no_grad(): # 추론을 위해 기울기 계산 비활성화
    text_ids_asr = model.generate(
        **inputs_asr,
        use_audio_in_video=USE_AUDIO_IN_VIDEO_FLAG,
        return_audio=False, # 텍스트 출력만 필요
        max_new_tokens=512  # 출력 길이 제한
    )

# 생성된 토큰 ID를 다시 텍스트로 디코딩
transcription = processor.batch_decode(text_ids_asr, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]

print("\n--- Qwen2.5-Omni-7B 모델: ASR 결과 ---")
print(f"오디오 소스: {audio_url_asr}")
print(f"생성된 대본: {transcription}")

음성 외에도 모델은 다른 소리를 분석할 수 있습니다. 기침과 같은 소리 이벤트를 식별해 보겠습니다. 프로세스는 유사하며 오디오 소스를 대체하고 텍스트 프롬프트를 조정합니다.

# 소리 분석을 위한 대화 준비
sound_url = "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen2.5-Omni/cough.wav"

conversation_sound = [
    {"role": "system", "content": [{"type": "text", "text": "당신은 가상 인간 Qwen입니다..."}]},
    {
        "role": "user",
        "content": [
            {"type": "audio", "audio": sound_url},
            {"type": "text", "text": "이 오디오 클립에서 발생하는 특정 소리 이벤트는 무엇인가요?"}
        ]
    }
]

# 입력 처리 (ASR과 유사한 단계)
print("\n소리 분석 입력 처리 중...")
text_prompt_sound = processor.apply_chat_template(conversation_sound, add_generation_prompt=True, tokenize=False)
audios_sound, _, _ = process_mm_info(conversation_sound, use_audio_in_video=False) # 이미지/비디오 없음
inputs_sound = processor(text=text_prompt_sound, audio=audios_sound, return_tensors="pt", padding=True, use_audio_in_video=False)
inputs_sound = inputs_sound.to(model.device).to(model.dtype)
print("소리 분석 입력 준비 완료.")

# 소리 분석 생성 (텍스트만)
print("소리 분석 생성 중...")
with torch.no_grad():
    text_ids_sound = model.generate(**inputs_sound, return_audio=False, max_new_tokens=128)

# 결과 디코딩 및 표시
analysis_text = processor.batch_decode(text_ids_sound, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
print("\n--- Qwen2.5-Omni-7B 모델: 소리 분석 결과 ---")
print(f"오디오 소스: {sound_url}")
print(f"소리 분석: {analysis_text}")

Qwen2.5-Omni-7B 모델을 사용한 비디오 정보 추출

cookbooks/video_information_extracting.ipynb 쿠킹북은 비디오 스트림에서 정보를 추출하는 데 중점을 둡니다. 이는 **Qwen2.5-Omni-7B 모델**의 통합 시청각 처리가 빛을 발하는 작업입니다.

여기서 중요한 차이점은 종종 비디오의 시각 프레임과 오디오 트랙 모두를 처리해야 한다는 것입니다. 이는 process_mm_infoprocessor 호출 중에 True로 설정해야 하는 use_audio_in_video 매개변수로 제어됩니다.

# 샘플 비디오 URL을 사용하여 비디오 분석을 위한 대화 준비
video_url = "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen2.5-Omni/draw.mp4"

conversation_video = [
    {"role": "system", "content": [{"type": "text", "text": "당신은 가상 인간 Qwen입니다..."}]},
    {
        "role": "user",
        "content": [
            {"type": "video", "video": video_url},
            # 통합 오디오-비전 이해가 필요한 프롬프트
            {"type": "text", "text": "이 비디오의 동작을 설명하고 존재하는 뚜렷한 소리를 언급해주세요."}
        ]
    }
]

# 멀티모달 정보 처리, 비디오에서 오디오를 활성화하는 것이 중요
USE_AUDIO_IN_VIDEO_FLAG = True # 오디오 트랙 처리 활성화
print("\n비디오 분석 입력 처리 중 (오디오 포함)...")
text_prompt_video = processor.apply_chat_template(conversation_video, add_generation_prompt=True, tokenize=False)

# process_mm_info는 비디오 로딩 처리 (decord 설치 시 사용)
audios_video, images_video, videos_video = process_mm_info(conversation_video, use_audio_in_video=USE_AUDIO_IN_VIDEO_FLAG)

# 최종 모델 입력 준비
inputs_video = processor(
    text=text_prompt_video,
    audio=audios_video, images=images_video, videos=videos_video,
    return_tensors="pt", padding=True,
    use_audio_in_video=USE_AUDIO_IN_VIDEO_FLAG # 여기에서도 True여야 합니다
)
inputs_video = inputs_video.to(model.device).to(model.dtype)
print("비디오 입력 생성 준비 완료.")

비디오 분석에 대한 응답을 생성할 때 return_audio=True를 사용하고 speaker를 지정하여 텍스트 설명과 합성된 음성 출력을 모두 요청할 수 있습니다.

# 비디오 분석 생성 (텍스트 및 오디오 출력 모두 요청)
print("비디오 분석 생성 중 (텍스트 및 오디오)...")
with torch.no_grad():
    text_ids_video, audio_output_video = model.generate(
        **inputs_video,
        use_audio_in_video=USE_AUDIO_IN_VIDEO_FLAG, # 여기에서도 True여야 합니다
        return_audio=True,         # 음성 합성 요청
        speaker="Ethan",           # 음성 선택 (예: Ethan)
        max_new_tokens=512
    )

# 응답의 텍스트 부분 디코딩
video_analysis_text = processor.batch_decode(text_ids_video, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]

print("\n--- Qwen2.5-Omni-7B 모델: 비디오 분석 결과 ---")
print(f"비디오 소스: {video_url}")
print(f"생성된 텍스트 분석: {video_analysis_text}")

# 생성된 오디오 응답이 있는 경우 저장
if audio_output_video is not None:
    output_audio_path = "video_analysis_response.wav"
    sf.write(
        output_audio_path,
        audio_output_video.reshape(-1).detach().cpu().numpy(), # 형태 변경 및 CPU로 이동
        samplerate=24000, # Qwen Omni는 24kHz 사용
    )
    print(f"생성된 오디오 응답 저장 위치: {output_audio_path}")
else:
    print("오디오 응답이 생성되지 않았습니다 (시스템 프롬프트 또는 플래그 확인).")

이러한 자세한 예제는 다양한 멀티모달 작업을 위해 **Qwen2.5-Omni-7B 모델**과 상호작용하는 핵심 워크플로우를 보여줍니다. 입력 대화를 신중하게 구성하고, 제공된 유틸리티를 활용하며, use_audio_in_videoreturn_audio와 같은 매개변수를 올바르게 설정함으로써 개발자는 이 고급 모델의 포괄적인 인지 및 생성 능력을 활용할 수 있습니다. BF16 정밀도 및 Flash Attention 2와 같은 기술을 통해 GPU 리소스를 관리하는 것은 종종 더 긴 비디오와 같은 복잡한 입력을 처리하는 데 필요하다는 것을 기억하십시오.

결론

**Qwen2.5-Omni-7B 모델**은 멀티모달 AI의 중요한 발전을 나타냅니다. 엔드투엔드 아키텍처, TMRoPE와 같은 혁신적인 기능, 다양한 작업에 걸친 강력한 벤치마크 성능, 실시간 상호작용 능력은 새로운 표준을 제시합니다. 텍스트, 이미지, 오디오 및 비디오에 대한 인지 및 생성을 원활하게 통합함으로써 정교한 가상 비서 및 콘텐츠 분석 도구에서 몰입형 교육 경험 및 접근성 솔루션에 이르기까지 더 풍부하고 자연스러우며 더 유능한 AI 애플리케이션을 위한 가능성을 열어줍니다. 주변 생태계가 성숙해짐에 따라 **Qwen2.5-Omni-7B 모델**은 차세대 지능형 시스템을 이끄는 초석 기술이 될 것입니다.

💡
아름다운 API 문서를 생성하는 훌륭한 API 테스팅 도구를 원하시나요?

최대 생산성으로 개발팀이 협업할 수 있는 통합된 올인원 플랫폼을 원하시나요?

Apidog는 여러분의 모든 요구 사항을 충족하며, Postman을 훨씬 저렴한 가격으로 대체합니다!
button