A.X-K2-Raon Logo
# A.X K2 Raon-Speech

Homepage Tech Blog GitHub Hugging Face License

English | 한국어

A.X K2 Raon-Speech는 약 21.2B의 전체 파라미터와 약 3.5B의 활성 파라미터를 갖는 영어/한국어 이중언어 음성 언어 모델(SpeechLM)입니다. SK텔레콤이 개발한 A.X K2 Light 20B-A3B mixture-of-experts 텍스트 backbone 위에 크래프톤이 독자 학습한 AuT 음성 인코더와 Mimi 계열 neural audio codec을 결합해, 음성 이해와 음성 생성을 하나의 멀티모달 모델로 통합했습니다. 크래프톤이 오픈소스로 공개한 음성 언어 모델 [Raon-Speech-9B](https://huggingface.co/KRAFTON/Raon-Speech-9B)의 recipe를 기반으로 학습되었습니다. ## Key Features - **End-to-End 음성 언어 모델**: SK텔레콤의 A.X K2 Light 20B-A3B mixture-of-experts backbone 위에 구축된 21.2B 파라미터(활성 약 3.5B) 멀티모달 모델입니다. - **독자 학습 음성 모듈**: curated 데이터와 자체 파이프라인으로 학습한 AuT 음성 인코더(약 317M 파라미터)와 Mimi 계열 neural audio codec(약 96M 파라미터)을 사용합니다. - **이중언어 지원**: 30B 이하급 공개 음성 언어 모델 중 한국어 종합 1위, 영어 종합 3위를 기록했습니다. - **멀티태스크 역량**: STT, TTS, SpeechQA, SpokenQA, turn 기반 멀티모달 chat을 하나의 통합 모델에서 지원합니다. - **Paralinguistic 인지**: 사용자 목소리에 담긴 감정, 억양 등의 정보를 활용해 자연스러운 음성 답변을 생성합니다. - **화자 목소리 conditioning**: ECAPA embedding을 통해 선택적 화자 reference 오디오로 voice conditioning TTS를 지원합니다. - **TTS Continuation**: Prefill 기반 continuation으로 reference 오디오에서 운율이 자연스럽게 이어지는 음성을 생성합니다. ## Speech Samples A.X K2 Raon-Speech가 대상 텍스트로부터 직접 합성한 음성 샘플입니다. > 어 그 거에 대한 체크하는 거? 막 어느 어떤 분야에서 이런 뭐 뭐라고 해야 되지? > 후기 근데 후기 어떻게 보면 내가 좀 인터넷으로 사는 거는 좀 믿음이 안가는 거 같애. 좀 하도 뭐라 해야 되지 좀 그렇게 정품이라고 해도 > 아 근데 어 일단 대전에서만 하는 게 아니라 이제 대전 어차피 그냥 대전 이번 달까지 월세 그거 냈으니까 그냥 있다가 > 그래서 그거 좀 음 좀 얘기 하고 있어. 자기는 아무튼 브랜드 할 생각은 없어. ## Architecture | Component | Configuration | |---|---| | Text backbone | A.X K2 Light 20B-A3B MoE, 48 layers, 2,048 hidden size | | Experts | 128 routed experts, top-8 routing | | Speech encoder | Qwen3-ASR 아키텍처 기반 독자 학습 AuT encoder, 24 layers, 약 317M 파라미터 | | Speech codec | 독자 학습 Mimi 계열 codec, 약 96M 파라미터 | | Codec configuration | 32 quantizers, 2,048-entry codebooks, 24 kHz, 12.5 frames per second | | SpeechLM code interface | 입력 8 code groups, 생성 출력 16 code groups | | Talker | Qwen3 기반 talker, 4 layers, 2,048 hidden size | | Text-backbone context window | 최대 131,072 tokens | 핵심 음성 이해와 direct-TTS 경로에 필요한 모든 구성 요소는 checkpoint에 포함되어 있습니다. 화자 조건 TTS와 continuation TTS는 추가로 frozen SpeechBrain ECAPA 화자 인코더를 사용하며, 최초 호출 시 자동으로 다운로드됩니다. ## Evaluation 평가는 음성 인식, 음성 합성, 음성 이해, 음성 질의응답, 텍스트 질의응답, 도구 호출 등 총 6개 영역에서 진행했으며, LibriSpeech, KsponSpeech, VoiceBench, KVoiceBench, MMAU, KMMAU, API-Bank, FunctionChat-Bench 등을 포함해 한국어 24개, 영어 22개 등 총 46개의 벤치마크를 활용했습니다. 각 평가 결과를 0~1 범위로 정규화한 뒤 언어별 종합 점수를 산출했으며, 세부 평가 방법과 결과는 [크래프톤 AI 테크 블로그](https://krafton.ai/blog/posts/2026-06-30-ax-raon/ax-raon-kr.html)에서 확인할 수 있습니다. 30B 이하급 공개 음성 언어 모델 중 한국어 종합 성능 1위(0.72), 영어 종합 성능 3위(0.75)를 기록했습니다.
A.X K2 Raon-Speech per-category benchmark radar
카테고리별 성능이며, 각 점수는 0부터 해당 카테고리 최고 점수까지로 정규화되어 있습니다. 비교 모델은 아래 표의 영어 상위 모델 중 영어와 한국어를 모두 지원하는 모델입니다. ### Aggregate scores | Korean Rank | Model | Korean | English | English Rank | |---|---|---|---|---| | 1 | **A.X K2 Raon-Speech** | **0.72** | **0.75** | **3** | | 2 | Raon-Speech | 0.70 | 0.79 | 1 | | 3 | Qwen3-Omni | 0.65 | 0.78 | 2 | | 4 | HyperCLOVA X 8B Omni | 0.60 | 0.68 | 8 | | 5 | MOSS-Audio | 0.58 | 0.62 | 13 | | 6 | Qwen2.5-Omni | 0.55 | 0.73 | 5 | | 7 | Fun-Audio-Chat | 0.53 | 0.69 | 7 | | 8 | Step-Audio 2 mini | 0.32 | 0.67 | 10 | | 9 | Interactive-Omni | 0.27 | 0.71 | 6 | | 10 | Ming-Lite-Omni v1.5 | 0.21 | 0.68 | 8 | | 10 | AF-Next | 0.21 | 0.65 | 11 | | 12 | COVO-Audio | 0.18 | 0.41 | 15 | | — | MiniCPM-o 4.5 | — | 0.74 | 4 | | — | Kimi-Audio | — | 0.65 | 11 | | — | Audio Flamingo 3 | — | 0.60 | 14 | ### Speech encoder 독자 학습한 AuT 음성 인코더는 Qwen3-ASR-1.7B AuT에 대해 보고된 약 4,000만 시간 대비 약 100만 시간의 오디오로 학습되었으면서도 SpeechLM subtask에서 Qwen3-ASR AuT에 필적하는 성능을 보입니다(Qwen AuT = 100% 기준 상대 성능). | Task / Metric | English | Korean | Language Average | |---|---|---|---| | Speech Recognition | 96.7% | 104.6% | 100.7% | | SpokenQA (Accuracy) | 90.3% | 104.8% | 97.6% | | SpeechQA (Accuracy) | 98.8% | 100.2% | 99.5% | | **Overall Language Average** | **95.3%** | **103.2%** | **99.2%** | ### Speech codec 독자 학습한 codec은 약 50만 시간의 오디오로 학습되어 Mimi 성능에 근접합니다(Mimi = 100% 기준 상대 성능). Moshi는 오디오 pretraining에 700만 시간 규모의 unsupervised corpus를 보고했습니다. | Metric | English | Korean | Language Average | |---|---|---|---| | PESQ | 83.7% | 83.3% | 83.5% | | ESTOI | 96.8% | 94.7% | 95.8% | | Speech Recognition | 100.7% | 112.6% | 106.7% | | Speaker Similarity | 96.9% | 99.6% | 98.3% | | UTMOS | 94.4% | 95.7% | 95.1% | | **Overall Language Average** | **94.5%** | **97.2%** | **95.9%** | ### Post-training ablations
Post-training ablation results
직전 checkpoint 대비, tool-use fine-tuning은 tool-call 점수를 0.543에서 0.740으로, paralinguistic self-distillation은 emotion/speaker 점수를 0.566에서 0.613으로 개선했으며, TTS direct preference optimization은 평균 TTS 오류율을 3.6%에서 3.1%로 낮췄습니다. ## Requirements ```bash pip install -r requirements.txt # Optional: lower-latency attention on supported CUDA systems pip install flash-attn --no-build-isolation ``` `transformers>=4.57.1`이 필요합니다. 화자 조건 및 continuation TTS API에는 `speechbrain`이 필요합니다. ## Load the model ```python from transformers import AutoConfig from transformers.dynamic_module_utils import get_class_from_dynamic_module MODEL_ID = "KRAFTON/A.X-K2-Raon-Speech-21B-A3B" config = AutoConfig.from_pretrained(MODEL_ID, trust_remote_code=True) RaonPipeline = get_class_from_dynamic_module( "modeling_raon.RaonPipeline", MODEL_ID, revision=getattr(config, "_commit_hash", None), ) pipe = RaonPipeline( MODEL_ID, device="cuda", dtype="bfloat16", ) ``` BF16 checkpoint는 약 42.4 GB의 weights를 포함하므로 80 GB GPU 또는 적절한 multi-GPU 구성을 권장합니다. ## Usage ### Speech-to-text ```python text = pipe.stt("audio.wav") ``` ### Text-to-speech ```python audio, sample_rate = pipe.tts("Hello, how are you?") pipe.save_audio((audio, sample_rate), "output.wav") ``` ### 화자 조건 TTS ```python audio, sample_rate = pipe.tts( "안녕하세요. 만나서 반갑습니다.", speaker_audio="speaker_reference.wav", ) pipe.save_audio((audio, sample_rate), "conditioned.wav") ``` ### Reference 오디오로부터의 TTS continuation ```python audio, sample_rate = pipe.tts_continuation( "And this is how the story continues.", ref_audio="reference.wav", ) pipe.save_audio((audio, sample_rate), "continuation.wav") ``` ### SpeechQA (오디오 context, 텍스트 질문) ```python messages = [ { "role": "user", "content": [ {"type": "audio", "audio": "context.wav"}, {"type": "text", "text": "Please answer the question in this audio."}, ], } ] response = pipe.chat(messages) ``` ### SpokenQA (오디오 context, 오디오 질문) ```python messages = [ { "role": "user", "content": [ {"type": "audio", "audio": "spoken_question.wav"}, ], } ] response = pipe.chat(messages) ``` ## vLLM-Omni 배포 KRAFTON의 공식 [vLLM-Omni 저장소](https://github.com/krafton-ai/vllm-omni)와 호환 브랜치인 `feat/axk2_raon_speech`를 사용합니다. 검증된 리비전은 [`7bcaf21`](https://github.com/krafton-ai/vllm-omni/commit/7bcaf21df881bda4280cbbf9752fc356e753d3bb)이며, 검증에 사용된 vLLM-Omni 구현 리비전과 일치시키려면 이 커밋으로 고정하세요. ### 설치 및 실행 ```bash git clone --branch feat/axk2_raon_speech --single-branch \ https://github.com/krafton-ai/vllm-omni.git cd vllm-omni # Optional: pin the revision validated with this checkpoint. git checkout 7bcaf21df881bda4280cbbf9752fc356e753d3bb python -m pip install "vllm==0.20.0" python -m pip install -e . ``` 함께 제공되는 단계 프로필은 약 96 GB VRAM을 갖춘 GPU 한 장을 대상으로 합니다. 텐서 병렬화는 1(`TP=1`)이며, 최대 모델 길이와 최대 배치 토큰 수는 모두 4096입니다. vLLM 0.20에서는 이 체크포인트의 KV 캐시 헤드 너비가 192이므로 `VLLM_MLA_DISABLE=1` 설정이 필요합니다. 복제한 저장소의 최상위 디렉터리에서 다음 명령으로 서버를 실행합니다. ```bash export VLLM_MLA_DISABLE=1 vllm-omni serve KRAFTON/A.X-K2-Raon-Speech-21B-A3B \ --stage-configs-path examples/offline_inference/raon/raon_axk1_local.yaml \ --host 0.0.0.0 \ --port 8091 \ --trust-remote-code \ --omni ``` ### 상태 확인 및 모델 목록 ```bash curl -fS http://localhost:8091/health curl -fS http://localhost:8091/v1/models ``` ### TTS ```bash curl -fS -X POST http://localhost:8091/v1/audio/speech \ -H "Content-Type: application/json" \ --data-binary @- \ --output axk2_tts.wav <<'EOF' { "model": "KRAFTON/A.X-K2-Raon-Speech-21B-A3B", "input": "Hello, this is A.X-K2 Raon Speech.", "response_format": "wav" } EOF ``` ### STT 입력 오디오를 이식성이 높은 한 줄짜리 base64 데이터 URL로 인코딩합니다. ```bash AUDIO_B64="$(base64 < audio.wav | tr -d '\n')" curl -fS -X POST http://localhost:8091/v1/chat/completions \ -H "Content-Type: application/json" \ --data-binary @- <