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
이 접근법은 텍스트 의미론을 우회해 픽셀 지오메트리를 음향으로 직접 번역합니다.
실시간 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 저역통과 필터; 활성화로 진폭 변조.
사운드 차이:
- 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
아직 댓글이 없습니다.