Hugging Face출처 게시일

nemotron-halloween

아니, 정확히는…

NVIDIA Nemotron 오픈 모델로 유령의 집 만들기

아니, 정확히는…

우아! 이제 내 잔디에서 꺼져!

요약: MonsterHouse는 할로윈을 위해 제가 만든 인터랙티브 프로젝션입니다. 그는 트릭 오어 트리팅 아이들의 말을 듣고, 까다로운 늙은 해적선의 목소리로 대답하며, 방문객이 예의를 갖추면 부드러워집니다. 그는 다음을 기반으로 만들어졌습니다. NVIDIA Nemotron 음성 에이전트 NVIDIA와 함께 Nemotron ASR, Nemotron 3.5 Bolt E4B 4GB, Magpie TTS Zeroshot 그리고 Audio2Face-3D, 그는 단일 워크스테이션에서 실행합니다.

핼러윈 때 우리 집에 찾아오는 아이들이 재미있고 독특한 방식으로 교감하기를 원했습니다. 집이 주인공이 되어 간식을 나눠주되, 무섭기보다는 더 신경질적으로 꾸미려 했습니다. 어떻게든 해결책으로 차고문에 입을 달아 주고 불평을 토하도록 가르치기로 했습니다.

그것이 바로 MonsterHouse가 되었습니다: 해적 이야기를 들려주는 신찬 성질 많은 오래된 건물이자, 불타는 듯한 미소와 'please'라는 말에 묘하게 약한 존재입니다. NVIDIA Nemotron Voice Agent가 대화의 기반을 제공합니다. Nemotron Speech가 듣기를 담당하고, Bolt E4B가 두뇌이며, NVIDIA Magpie TTS Zeroshot이 실시간 음성을, NVIDIA Audio2Face-3D가 나무 입이 말하도록 만듭니다.

몬스터 하우스(Monster House)의 작동 원리

  • 듣기: NVIDIA Nemotron Speech ASR 방문자의 음성을 텍스트로 변환합니다. [CONFIRMED: nemotron-speech-streaming-en-0.6b.q8_0.gguf ]
  • 생각: NVIDIA Nemotron 3.5 Bolt E4B 4GB, 대화형 에이전트를 위한 공개 소형 언어 모델이 각 답변을 작성합니다. LoRA 어댑터가 성격을 제공합니다.
  • 발표: NVIDIA Magpie TTS Zeroshot 캐릭터의 짧은 참조 샘플을 바탕으로 각 응답의 목소리를 생성합니다.
  • 애니메이션 중: NVIDIA Audio2Face-3D Unreal Engine 5에서 깨끗한 음성을 입 모양 애니메이션으로 변환합니다.
  • 보기: NVIDIA Nemotron 3 Nano Omni 의상을 묘사하고, YOLO와 ByteTrack은 방문객을 집계하고 추적합니다.
  • 실행 방법: NVIDIA Nemotron Voice Agent NVIDIA RTX PRO 6000 Blackwell Max-Q 한 개와 NVIDIA RTX PRO 4000 Blackwell 한 개를 갖춘 한 대의 워크스테이션에서 모든 것을 조율합니다.

파편 가득한 미소

입이 먼저 시작되었습니다. 나는 차고의 나무 문짝들이 삐죽삐죽한 입술로 갈라지고, 그 저주받은 입이 열릴 때마다 지옥의 불꽃이 그 너머에서 진입로를 비추는 모습을 상상했습니다. 그는 고대부터 존재해 온 듯 표정이 풍부하고, 방문객들의 존재 자체에 살짝 언짢아 보여야 했습니다.

할 말이 많은 집이 지어내는 몇 가지 표정들.

커스텀 애니메이션 리그를 만드는 것은 이 제작 과정에서 가장 노동 집약적인 부분 중 하나였습니다. 고생 끝에 완성하고 나서, 나중에 Audio2Face-3D가 애니메이션으로 만들 수 있는 표정 셰이프들을 내보낼 수 있었습니다. 캐릭터 SkelMesh는 Autodesk Maya에서 제작한 뒤 Unreal Engine으로 내보냈고, 그곳에서 문 뒤에 가상의 불과 이펙트가 추가되었습니다. 눈도, 눈썹도 없고 눈을 깜빡이지도 않는 그는 의외로 경제적인 괴물입니다.

캐릭터를 만드는 별난 작업이 진행되는 동안, NVIDIA는 Nemotron Voice Agent를 만들었습니다. 원래는 제작의 가장 어려운 부분이 될 터였던 것이 이제는 꽤 재미있고, 반복 작업이 가능하고, 쉬운 일이 되었습니다. 저는 개봉 즉시 듣기, 대화, 발화를 위한 기반을 갖추고 있었습니다. 집에는 이미 입이 있었습니다. 이제 그는 마침내 불평거리를 찾을 수 있게 되었습니다.

무례한 예절 가르치기

집에는 그 성격만큼이나 괴팍한 과거가 필요했기에, 저는 이 집이 침몰한 해적선의 목재로 지어졌으며 폭풍우qual던 과거에 들뜬 영혼이 떠돌고 있다는 배경 이야기를 고안했습니다. 이제 뱃사람 특유의 불평들에게 이유가 생겼습니다. 이 집은 배가 부동산으로 환생한 것이며, 그 사실을 그다지 달가워하지 않는 존재였습니다.

이 공연에는 진행자가 필요했다. 인사부터 작별까지, 그 과정에서 간식도 제공하는 따라갈 경로가 필요했다. 먼저 집은 “지금 투덜거리느라 바쁘니까 옆집에나 가서 귀찮게 해!” 같은 말로 방문객을 튕겨내야 했다. 하지만 끈질기게 요청하면 마음이 풀렸다. “부탁합니다” 한마디면 즉시 마음을 열었고, “감사합니다”는 따뜻한 작별 인사를 받아냈다. 한 번 방문객에게 마음을 열면, 그 상태가 유지되길 원했다. 같은 차고 문과 두 번 협상하고 싶은 사람은 없다.

바로 여기서 Voice Agent가 진가를 발휘한다. 원하는 어떤 LLM이든 선택할 수 있다. 나는 이 시스템이 오프그리드(off-grid)로 완전히 독립적으로 작동하기를 원했기 때문에 메모리와 연산 예산이 정해져 있었다.

이 캐릭터는 단순히 “까칠하게 굴어”라고 말하는 프롬프트 그 이상이 필요했다. 마스터 대화 흐름을 따르고, 방문객이 실제로 말한 내용에 반응하고, 만남 상태를 추적하고, 파이프라인의 나머지 부분에 충분한 연산 여유를 남겨야 했다.

십여 개가 넘는 모델을 테스트한 끝에 나는 Bolt E4B 를 실시간 대화 담당으로 선택했다. 이는 로컬 대화형 에이전트와 인터랙티브 캐릭터를 위해 특별히 만들어진 오픈 소형 언어 모델로, 말하는 차고 문이라는 표현이 꽤 잘 어울린다. 나는 기본 응답 모델로 4-bit 양자화 릴리스(이름의 “4GB”)를 사용하며, 비교용으로 BF16 checkpoint 도 제공된다.

지금쯤 눈치챘겠지만 나는 NVIDIA에서 일하고 있어서, 이 덕분에 Bolt E4B를 공개 출시 전에 테스트할 수 있었고, 다른 유력 후보인 Qwen3 30B-A3B와 Qwen 3.6 35B-A3B보다 설치 공간(footprint)이 작은 견실한 선택이라는 것을 확인했다.

이 모델은 Nemotron Voice Agent 파이프라인 안에서 작동하며, 방문객의 말을 다음의 적절히 마지못한 대답으로 바꿔준다.

Bolt가 대화의 기반을 제공한다. 여기에 내 프롬프트, 애플리케이션 로직, 그리고 수천 건의 검토된 예시 대화로 학습된 LoRA 어댑터가 이를 이 특별한 고집 센 배로 만들어낸다.

5000개가 넘는 멀티턴 대화 데이터셋을 만든 덕분에, 채택할 가치가 있다고 판단한 각 모델마다 LoRA를 학습시킬 수 있었다. 학습에 약 1시간 걸린 것도 있고 몇 시간 걸린 것도 있었다. 로컬 에이전트가 모든 것을 실행하고 결과를 벤치마킹했다. 애초에 그 에이전트와 매우 큰 LLM이 데이터셋을 만들고 평가했다. 이 모든 작업은 밤에, 혹은 내가 본업을 하는 동안 진행되었다.

LoRA를 적용한 뒤에는 대답의 연속성, 타이밍, 톤을 확인하고, 모델과 어댑터를 품질, 반복, 속도에 대해 벤치마킹한 다음, 공연을 직접 들어본다. 집은 결국 마음을 열어야 하지만, 명랑한 컨시어지로 변해서는 안 된다. 약간의 저항은 매력의 일부다. 차고 문과의 끝없는 논쟁은 아니다.

기다릴 가치가 있는 목소리

두 개의 지름길, 두 개의 출력. 사전 작성된 텍스트는 새 대화 생성을 건너뛰고, 저장된 오디오는 합성을 건너뛴다. 깨끗한 음성은 관객 효과와 별도로 애니메이션을 구동한다.

불평을 늦게 꺼내면 유령의 집은 권위를 잃는다. 이 파이프라인은 전체 답변이 완성되기 전에 말할 수 있는 텍스트를 먼저 내보내므로, 문장의 나머지 부분이 아직 생성되는 동안에도 집이 말을 시작할 수 있다. 준비된 인사말과 사탕 농담은 익숙한 만남을 담당한다. 텍스트 뱅크는 언어 모델의 작업을 줄여주고, 캐시된 녹음은 음성 합성을 절약해준다. 늙은 구닥다리라도 예행연습의 도움은 받는 법이다.

median end-of-speech-to-audio with Bolt Q4 & TTS = 1.70 seconds
median end-of-speech-to-audio cached responses = 0.72 seconds
(note: speech-end detection currently waits for 300 ms of silence )

NVIDIA Magpie TTS Zeroshot 은 텍스트를 퀸스 잉글리시로 바꿔준다. 이 모델의 제로샷 음성 조건화는 학습된 목소리 대신 짧은 참조 샘플을 사용하며, 내 샘플이 까칠한 해적 캐릭터를 담당한다. 집에는 까칠함과 위협적인 분위기부터 즐거움과 기쁨까지 일곱 가지 분위기가 있으며, 프롬프트 템플릿이 지정하고 LLM이 제공하는 감정 태그가 각 대사의 전달 방식을 결정한다. 각 감정마다 서로 다른 3-10초 길이의 음성 샘플이 필요하기 때문에, 나는 UI의 도구 탭에 “Sample your Voice” 블록을 추가했다. 그 덕분에 나는 내 최고의 해피 해적 목소리나 앵그리 해적 목소리로 샘플 문장을 읽고 녹음할 수 있었다. “Go” 타이밍이 되면 Bolt E4B가 할 말을 결정하고, Magpie가 그 텍스트를 적절한 기쁨이나 절망이 담긴 음성으로 바꾼다.

파이프라인의 다음 단계는 Audio2Face-3D 와 내가 Epic의 Unreal Engine에서 만든 3D 캐릭터 장면이다. 기본 모델 가중치는 깨끗하고 중립적인 남성 또는 여성 목소리, 즉 너무 낮지도 너무 높지도 않은 목소리에 가장 잘 맞는다(용도에 맞는 적절한 성별 모델을 선택하라). 나는 집이 에코와 챔버 효과가 있는 아주 낮고 악마적인 목소리를 갖기를 원했다. 이 경우 내 음성 샘플에 그런 연극적인 중음이 없다는 것이 오히려 장점이 된다. Audio2Face-3D는 샘플에서 깨끗한 음성을 받아들이고, 두 번째 오디오 스트림이 조절 가능한 실시간 보컬 효과를 추가해 스피커로 재생한다.

모든 것이 원활하게 작동하도록 하기 위해, 나는 작업을 두 개의 GPU로 분할했다. 언어 및 음성 모델 파이프라인은 NVIDIA RTX PRO 6000 Blackwell Max-Q에서 실행되고, Audio2Face-3D를 포함한 Unreal Engine 그래픽은 NVIDIA RTX PRO 4000 Blackwell에서 실행된다. 문제는 메모리가 아니라 연산량이다. 나는 에이전트 파이프라인이 어떤 처리를 하든 애니메이션이 일정한 프레임 레이트를 유지하기를 원한다.

음성, 애니메이션, 효과가 동시에 맞아떨어져야 합니다. 설득력 있는 괴물에게는 빠른 대답만으로는 부족하고, 불평이 그 집에 속한 것처럼 들려야 합니다. 제 경우에는 실제로 그렇습니다. 오디오 전달 동기화를 조정하는 설정이 마련되어 있습니다. 저는 설정해 두고 잊어버릴 수 있음을 발견했습니다. (100ms가 Audio2Face-3D 버퍼링을 보상합니다)

괴물에는 조종 데스크가 있다

어느 순간부터 “집이 말하게 만들기”는 각종 조절 장치로 가득한 인터페이스를 요구하게 되었습니다. 캐시된 대사를 시험 들어보고, 시작 분위기를 조정하고, 대화를 따라가고, 음성 처리를 바꾸고, 입 애니메이션을 미세 조정할 수 있습니다. 탭에서는 대화, 모델 선택, 녹음, 프롬프트, 성능 모니터링, 카메라 피드를 다루며, 사운드보드와 커스텀 대사 입력란으로 괴물의 입에 말을 넣어줄 수도 있습니다. 모델 로딩 컨트롤과 Unreal Engine 연결 표시기도 있는데, 괴물이 삐져 있는 게 아니라 그냥 연결이 끊긴 때가 있기 때문입니다.

사운드보드, 커스텀 대사, 시작 분위기, 대화 흐름이 있는 MonsterHouse 조종 데스크.

불빛과 글로우 효과도 무대에 합류했습니다. 편집 가능한 규칙이 시각적 단서를 전달 방식과 연결합니다. 실시간 단서는 말과 함께 시작되고, 녹화된 공연은 저장된 타임라인을 따를 수 있습니다. 장면을 다시 만들지 않고도 분위기를 바꿀 수 있습니다.

라이브 모드는 trick-or-treat 캐릭터를 구동합니다. 데모 모드는 집이 스스로를 설명하도록 이끕니다. 마이크 모드는 인식, 대화 생성, 음성 합성을 우회하여 제가 직접 집을 통해 말할 수 있게 해줍니다. 제 맑은 목소리가 입을 움직이고, 관객에게는 처리된 버전이 들립니다. 집은 이것을 빙의라고 생각합니다. 저는 유용한 비상 수단이라고 생각합니다.

다음 문 두드림

NVIDIA Nemotron 3 Nano Omni 는 집에 시각적 맥락을 제공하는 VLM입니다. 선택적 관찰자로서 카메라 이미지를 해석하고 보이는 의상을 묘사하여 캐릭터가 구체적으로 반응할 거리를 갖게 합니다. 모든 바퀴를 새로 발명하려는 것은 아니라서, 현재 보이는 사람들을 세고 추적하기 위해 널리 쓰이는 객체 탐지 및 추적 모델인 YOLO와 ByteTrack을 선택했습니다. 이 작업들을 분리해 두면 Omni에게 모든 프레임을 묘사하도록 요청하지 않고도 집이 무리를 인지할 수 있습니다.

적절히 터무니없는 테스트로, 저는 Omni에게 문 앞에 있는 다섯 마리의 분장한 양 영상을 보여주었습니다. 저장된 분석에서 해적, 뱀파이어, 마녀, 호박, 유령 의상을 식별했습니다. 집이 활용하기를 바라는 바로 그런 시각적 맥락입니다. 보기에도 가축이 저보다 할로윈 계획이 더 치밀한 모양입니다.

합성 테스트 리플레이 속 다섯 명의 무척 보들보들한 trick-or-treater들. 의상 라벨은 저장된 Omni 분석에서 나온 것이며, 박스와 추적 ID는 예시용입니다.

양들은 합성 테스트일 뿐, 성공적인 할로윈 밤의 증거가 아닙니다. 실제 진입로의 무리, 의상, 야간 조명은 여전히 테스트가 필요합니다. 탐지는 자동 인사를 트리거하지만, 유행하는 의상 식별과 적절히 재치 있는 응수는 추가 학습이 필요할 수 있어 걱정입니다. 집에는 눈이 없기 때문에 방문자 인지 기능을 에코로케이션이라고 부릅니다. 저는 그 표현을 봐주고 있습니다.

할 일이 더 남아 있습니다. 애니메이션은 늘 개선할 수 있고, 완전한 공연 테스트에는 실제 방문객이 필요하며, 언젠가는 사탕이 자동으로 제공될 것입니다. 저는 아직 가족과 함께 이웃의 다른 구경거리를 보러 나가는 동안 괴물에게 할로윈을 맡기겠다는 원래 목표에 도달하지 못했습니다. 하지만 그것이 여전히 이 모든 것의 목적입니다. 언젠가 어떤 아이가 삐딱한 늙은 집을 만나 조금의 친절을 보이고, 늙은 목재에게도 여린 마음이 있음을 발견할 것입니다. 그리고 초콜릿바를 받아 갈 것입니다.

나만의 터무니없는 캐릭터 만들기

MonsterHouse 코드 자체는 릴리스용으로 패키징되어 있지 않지만, 여기에 쓰인 모든 NVIDIA 모델은 오늘날 이용할 수 있고, NVIDIA Nemotron Voice Agent가 대부분의 길을 안내해 줍니다. 제가 따를 경로는 이것입니다.

  1. 음성 파이프라인부터 시작하세요. 다음을 클론하세요: NVIDIA Nemotron Voice Agent 를 클론하고 Generic Assistant 예제를 실행하세요. Nemotron Speech ASR, LLM, Magpie TTS를 갖춘 캐스케이드 파이프라인에 음성 활동 감지와 발화 종료 처리까지 포함되어 캐릭터가 언제 말해야 하는지 알 수 있습니다.
  2. Bolt E4B를 두뇌로 만드세요. Voice Agent에는 클라우드, 서버, 단일 GPU 배포를 위한 Bolt E4B 프로파일이 포함되어 있습니다. 먼저 build.nvidia.com에서 모델을 시험해 볼 수 있습니다. 짧고 음성에 적합한 답변을 위해서는 conversational 모드를 시도하고, 더 단순한 대화를 위해서는 reasoning을 비활성화하세요.
  3. 개성을 부여하세요. 시스템 프롬프트와 몇 개의 연결된 예시 대화로 시작하세요. 이미 말했는지와 같은 대화 상태는 모델이 기억하게 하지 말고 애플리케이션에서 관리하세요. 프롬프트만으로 부족하다면 LoRA 어댑터를 학습시키세요. NVIDIA NeMo AutoModel 에 Bolt E4B용 LoRA 레시피가 있습니다.
  4. 목소리를 부여하세요. Magpie TTS Multilingual은 Voice Agent의 기본값입니다. 커스텀 캐릭터의 경우 Magpie TTS Zeroshot 이 짧은 레퍼런스 샘플만으로 작동합니다. build.nvidia.com에서 사용해 보고, 직접 실행할 수 있는 액세스를 요청하세요. [CONFIRM: access path and link] 사용 허가를 받은 목소리만 사용하세요.
  5. 얼굴을 부여하세요. NVIDIA Audio2Face-3D 는 음성을 캐릭터의 얼굴 애니메이션으로 변환합니다. 깨끗한 음성을 입력하고 효과는 이후에 추가하세요.
  6. 선택 사항: 눈을 부여하세요. Voice Agent의 Nemotron Omni Assistant Subagents 예제는 Nemotron 3 Nano Omni를 통해 라이브 웹캠 이해 기능을 추가합니다. 인원 수 집계가 필요하다면 가벼운 사람 추적기와 함께 사용하세요.

가장 자주 쓰는 대사에 대해 캐시된 응답 뱅크와 저장된 오디오를 두면 느린 몬스터조차 빠르게 느껴지게 만들 수 있습니다. 실제로 컴퓨팅 파워가 부족한 상황이라도 Nemotron Speech ASR과 파이썬 대화 라우터, 그리고 모두 캐시된 오디오만 사용하는 Live 버전을 만들 수 없을 이유가 없습니다. Bolt E4B와 Magpie 파이프라인을 사용해 100개의 응답을 오프라인으로 생성한 뒤, 쇼 때는 캐시를 사용할 수 있습니다. 저는 인터랙티브 호박을 위해 이 방법을 사용할 예정입니다.

리소스

원문 출처

Hugging Face

내용 안내

원문 발행 및 권리는 출처에 있습니다.

기계 번역 · 원문을 참고하세요