[faster-qwen3-tts] HF Space에 1000자 텍스트 제한 추가로 CUDA static cache overflow 방지
PR 링크: andimarafioti/faster-qwen3-tts#33 상태: Merged | 변경: +36 / -0
들어가며
faster-qwen3-tts는 CUDA graph 캡처를 위해 StaticCache(max_seq_len=2048)을 사용한다. 사용자가 이 제한을 초과하는 텍스트를 입력하면 KV cache 범위를 넘어서 index error나 잘못된 출력이 발생한다. HF Space 등 공개 데모에서 이를 방지해야 한다.
핵심 코드 분석
입력 제한 상수 정의
# ~3-4 chars/token for English, system/ref token 오버헤드를 고려하면
# ~1000자가 max_seq_len=2048의 안전 상한
MAX_TEXT_CHARS = 1000
# ~10 MB는 44.1kHz stereo 16-bit WAV 기준 약 1분
MAX_AUDIO_BYTES = 10 * 1024 * 1024
4개 엔드포인트에 검증 추가
Before:
async def generate_stream(text, ...):
if not _active_model_name:
raise HTTPException(status_code=400, detail="Model not loaded.")
# 바로 생성 시작 - 입력 크기 무제한
After:
async def generate_stream(text, ...):
if not _active_model_name:
raise HTTPException(status_code=400, detail="Model not loaded.")
if len(text) > MAX_TEXT_CHARS:
raise HTTPException(
status_code=400,
detail=f"Text too long ({len(text)} chars). Maximum is {MAX_TEXT_CHARS}.",
)
# 오디오 파일 크기도 검증
if len(content) > MAX_AUDIO_BYTES:
raise HTTPException(status_code=400, detail=_AUDIO_TOO_LARGE_MSG.format(...))
streaming, non-streaming, transcribe 3개 엔드포인트 모두에 동일한 검증이 적용된다.
왜 이게 좋은가
- CUDA crash 방지: StaticCache 범위 초과 시 segfault 또는 corrupted output이 발생할 수 있다. 서버 레벨에서 차단이 필수다.
- 사용자 친화적 에러: "Text too long (1500 chars). Maximum is 1000 characters." 같은 명확한 메시지를 반환한다.
- DoS 방지: 거대한 오디오 파일이나 매우 긴 텍스트로 인한 서버 과부하를 막는다.
정리
CUDA graph의 static cache는 고정 크기라는 근본적 제약이 있다. 이를 서버 입력 검증으로 보호하는 것은 프로덕션 배포의 기본이며, 이 PR은 텍스트와 오디오 양쪽 모두를 커버하는 방어적 구현이다.
참고 자료
이 글은 AI(Claude)의 도움을 받아 작성되었습니다. 코드 분석과 해석에서 오류가 있을 수 있으니, 정확한 내용은 원본 PR을 참고해주세요.
관련 포스트
PR Analysis 의 다른글
- 이전글 [triton] AMD GFX1250 MachineSink 이슈 우회를 위한 fence 추가
- 현재글 : [faster-qwen3-tts] HF Space에 1000자 텍스트 제한 추가로 CUDA static cache overflow 방지
- 다음글 [triton] AMD Software Warp Pipeline에서 크래시 수정
댓글