홈으로 돌아가기

LLM 활성화로부터 오디오를 위한 PyTorch Hooks

이 기사는 두 가지 실험을 설명합니다: monkey patching을 통한 SigLIP 시각 잠재 표현과 MusicGen의 직접 스티칭, PyTorch forward hooks를 사용한 Qwen2.5 활성화로부터 암비언트 생성. 신경 상태 가로채기와 DSP 변조를 위한 코드가 제공됩니다. 텍스트 프롬프트 없이 독특한 오디오 생성에 적합합니다.

프롬프트 없이 AI '생각'으로부터 사운드 생성
Advertisement 728x90

PyTorch 훅으로 LLM 활성화 해킹해 오디오 생성하기

PaleoSonic Engine 실험에서 SigLIP의 시각 패치가 MusicGen 오디오 잠재 표현으로 직접 변환됩니다. 기존 Image -> Text -> Audio 파이프라인 대신, 선형 레이어(nn.Linear)가 196개의 196 크기 패치를 사운드 벡터로 투영합니다. 모델을 bfloat16으로 변환해 16GB RAM에서 실행합니다.

핵심은 MusicGen의 텍스트 인코더를 몽키 패칭하는 것입니다. 생성기는 196개의 텍스트 토큰을 기대하지만, 대신 이미지 지오메트리를 받습니다. 브리지의 랜덤 초기화는 미세 조정 없이 아키텍처 충돌을 흉내내는 거친 노이즈를 만듭니다.

# 원본 "뇌" 저장
original_text_encoder = self.audio_decoder.text_encoder.forward

# 가짜 클래스 생성
class VisualThoughts:
    def __init__(self, hidden_states):
        self.last_hidden_state = hidden_states
    def __getitem__(self, idx):
        return [self.last_hidden_state][idx]
        
def spoofed_text_encoder(*args, **kwargs):
    # 텍스트 대신 시각 텐서 주입!
    return VisualThoughts(audio_conditioning)
    
# 생성기 감염
self.audio_decoder.text_encoder.forward = spoofed_text_encoder

이 접근법은 텍스트 의미론을 우회해 픽셀 지오메트리를 음향으로 직접 번역합니다.

Google AdInline article slot

실시간 LLM '생각' 추출을 위한 PyTorch 훅

두 번째 실험에서 Neural-Analog Engine은 Qwen2.5-1.5B-Instruct를 사용해 DSP 오실레이터를 제어합니다. 추상 표현의 중심인 15번째 레이어에 forward 훅을 등록합니다. 활성화는 분리(detach)하고 float32로 변환한 후 배치 축으로 평균 압축합니다.

neural_activations = []

# 생각 훔치는 스파이 함수
def steal_thoughts_hook(module, input, output):
    # 현재 뉴런 상태 포착
    current_thought = output[0].detach().cpu().to(torch.float32).numpy()
    compressed_thought = np.mean(current_thought, axis=1)[0] 
    neural_activations.append(compressed_thought)

# Qwen의 15번째 레이어에 "바늘" 주입
hook_handle = model.model.layers[15].register_forward_hook(steal_thoughts_hook)

원시 벡터가 NumPy 오실레이터와 SciPy 필터로 들어갑니다. LLM이 "얼어붙은 양자 별의 침묵" 같은 프롬프트를 생성하지만, 사운드는 활성화 펄스에 의해 변조됩니다: 주파수, 위상, 감쇠가 뉴럴 값에 따라 움직입니다. 결과는 뉴럴 오디오 생성기 없이 순수한 다크 앰비언트입니다.

크로스 모달 브리징 기술 세부 사항

  • 시각 백본: google/siglip-base-patch16-224가 셀프 어텐션 후 196개 패치 출력.
  • 오디오 타겟: facebook/musicgen-small이 hidden_state [1, 196, dim]의 text_encoder 기대.
  • 브리지: nn.Linear(196dim_vision, 196dim_audio) 랜덤 초기화; '거친 맛' 위해 미세 조정 없음.
  • 훅 메커니즘: 15번째 레이어 MLP 후 출력 포착; detach로 그래디언트 방지.
  • DSP 파이프라인: np.sin 오실레이터 + scipy.signal.butter 저역통과 필터; 활성화로 진폭 변조.

사운드 차이:

Google AdInline article slot
  • PaleoSonic — 잠재 충돌로 인한 혼沌 노이즈.
  • Neural-Analog — 물리적 파동으로부터 구조화된 앰비언트.

프로덕션 스케일링 및 최적화

두 접근법 모두 Hugging Face Spaces에서 실행됩니다. 스케일링 위해:

  • torch.compile로 훅 속도 향상.
  • bitsandbytes로 Qwen 4비트 양자화해 메모리 절감.
  • 여러 GPU에서 DataParallel로 활성화 병렬화.

잠재력: 실시간 오디오(JACK/WASAPI) 통합으로 라이브 공연 가능. 다른 레이어 실험—초기 레이어는 저수준 특징, 후기 레이어는 의미론.

주요 요약

  • 몽키 패칭으로 generate() 우회, 재학습 없이 인코더 실시간 교체.
  • PyTorch forward 훅은 해석성 표준; 추론 시 detach 필수.
  • 활성화 압축(평균 axis=1)으로 차원 축소하면서 동역성 유지.
  • 저RAM 환경에서 bfloat16 핵심; CPU에서 float16 피함.
  • 간단 오실레이터에 NumPy/SciPy DSP가 torch.nn 압도.

— Editorial Team

Google AdInline article slot
Advertisement 728x90

다음 읽기