Repository navigation
fix: 서버 AI 경로 2세션 FPS 저하 원인 확인 #477
Copy link
Copy link
Open
Labels
fix버그 수정버그 수정
Description
작업 내용
- 최신 부하 측정 결과 2세션 수신 FPS 21.86으로 25 FPS 기준 미달, 4세션 이후 단계 미실행
- 마이그레이션 시점 측정은 8세션까지 약 30 FPS, RTT 평균 14.3ms
- 최신 측정 서버 처리 지연 평균 38.22ms로 프레임 예산 33.3ms 초과
- 세션당 AI 요청 1건 동기 처리 구조로 AI 왕복 지연이 FPS 상한을 결정
- 같은 GPU 서버 10-10 실방송 AI gRPC p50 19.8ms, 처리 fps 28.6 정상 기록
- 의심 원인 1. AI 블러 기본
DEFAULT_PIXEL_SIZE2에서 1 변경 - 근거: innolive-ai
1ea3c6c(10-03)service/mosaic.py변경,667c0be(10-12)로 main 반영, 커밋 메시지에 변경 이유 없음 - 근거: v6 모델 기준 pixel 1에서 2세션 22.83 FPS·37.68ms, pixel 2에서 29.76 FPS·27.28ms
- 근거: v7 모델 기준 pixel 1에서 2세션 21.86 FPS·38.22ms, pixel 2에서 28.95 FPS·29.36ms
- 실제 원인인가: 맞음, 2세션 FPS 저하의 주원인, 처리 지연 약 10ms 증가
- 조치: 육안 화질 차이 없음 확인 후 pixel 2 복원 수용, fix: restore-blur-pixel-size/#44 innolive-ai#45
- 의심 원인 2. AI 모델 v7 가중치 교체
- 근거: innolive-ai
f4e3ab4(10-15)best.pt6,532,054 B에서 54,461,738 B로 교체 - 근거: pixel 2 기준 v6 대비 v7 처리 지연 2세션 +2.1ms, 4세션 +3.4ms, 4세션 FPS 24.87에서 22.91
- 실제 원인인가: 부분 원인, 다세션 지연을 추가로 증가시키는 2순위 요인
- 의심 원인 3. 얼굴 합성 머지의 나머지 코드 변경
- 근거: 10-10 시점
65cac3b와77e68d2+ pixel 2의 2세션 29.55·29.76 FPS, 4세션 25.12·24.87 FPS로 동등 - 실제 원인인가: 아님
- 의심 원인 4. 마이그레이션 시점 이후 AI 파이프라인 처리 용량 변화
- 근거: 10-10 시점 코드
65cac3b도 4세션 25.12 FPS·33.94ms, 8세션 16.30 FPS·58.80ms로 마이그레이션 시점 8세션 약 30 FPS 미재현 - 근거: 세션 증가에 따라 처리 지연 28ms, 34ms, 59ms로 증가, CPU 258%, 462%, 679%로 증가, GPU 사용률 낮음
- 근거: AI 미경유 bypass 모드는 8세션 30 FPS·CPU 526% 유지, 병목은 AI 경로
- 실제 원인인가: 맞음, 다세션 용량 저하는 10-10 이전부터 존재하는 AI 경로 처리량 한계, 워커 수 확장 효과는 재측정 대기
- 의심 원인 10. AI 워커 프로세스 수와 세션 배정 방식
- 근거: 워커 2개(GPU당 1) 기준 4세션 24.87 FPS·34.35ms, 8세션 16.30 FPS·58.80ms, 워커 4개(GPU당 2) 기준 4세션 27.28 FPS·30.66ms, 8세션 20.58 FPS·43.94ms
- 근거: 2세션은 워커 2개 29.76 FPS, 워커 4개 29.80 FPS로 동등, 워커 1개당 동시 스트림 수가 지연을 결정
- 근거: Go
ai.Pool.Next()는 활성 스트림 수와 무관한 라운드로빈, 파이프라인 재시작마다 카운터 증가로 운영 2세션도 한 워커 몰림 가능 - 근거: v7·pixel 2 4세션 60초 워커 2개 23.21 FPS·37.35ms, 워커 4개 25.08 FPS·33.90ms
- 실제 원인인가: 맞음, 워커당 동시 스트림 수가 지연을 결정, 라운드로빈 편중 시 운영 2세션도 워커당 2스트림
- 조치: 활성 스트림 최소 워커 배정, fix: ai-least-loaded-worker/#477 #481
- 의심 원인 5. AI 프레임 wire format 차이
- 근거: raw yuv420p 전송은 9/15 추가, 마이그레이션 시점은 jpeg 전송
- 근거: v6·pixel 2 기준 jpeg wire 2·4·8세션 29.96·25.32·16.60 FPS, raw와 같은 수준
- 실제 원인인가: 아님
- 의심 원인 6. 측정 도구·지표 정의 차이
- 근거: 이전 RTT·구간 수신율과 최신 서버 처리 지연·수신 FPS의 집계 방식 상이
- 실제 원인인가: 확인 대기, 마이그레이션 시점 측정 조건 기록 부재
- 의심 원인 7. Go 서버 최근 변경
- 근거: fail-closed 블러(feat: fail-closed 출력을 화면 전체 블러로 전환 #463)·화면 전체 블러(feat: 화면 전체 블러 on/off 추가 #465)는 AI 실패·토글 시에만 동작, 정상 AI 경로 변경은
AnonymizationMode필드 추가뿐 - 실제 원인인가: 아님, 같은 Go 서버 이미지에서 AI 워커만 바꿔 FPS 회복 확인
- 의심 원인 8. 네트워크·디코더 손실
- 근거: RTP 손실 0%, 프레임 차이 27.14%와 stale drop 27.18% 일치
- 실제 원인인가: 아님, 손실 전량이 처리 큐의 stale drop
- 의심 원인 9. 같은 서버의 vLLM 서비스 재시작 반복
- 근거:
vllm-server.service설정 파일 부재로 10초마다 즉시 실패, 1회 CPU 84ms - 실제 원인인가: 아님, 별도 정리 대상
작업 체크리스트
- 원격 서버 AI 워커 버전별 배포
- 같은 Go 서버 이미지·측정 도구로 버전별 측정
- wire format·privacy mode 변경 측정
- 의심 원인별 실제 원인 여부 갱신
-
DEFAULT_PIXEL_SIZE2 복원 결정과 innolive-ai Draft PR 생성 - AI 워커 수 확장 효과 측정
- 운영 구성 v7·pixel 2 기준 워커 수 4세션 60초 측정
- AI 워커 배정 방식 활성 스트림 최소 기준 변경 Draft PR 생성
- 배포 후 운영 메트릭 워커별 활성 스트림 균등 배정 확인
- AI 워커 다세션 CPU 처리 단계별 지연 분석
- 수정 반영 후 운영 워커 기준 재측정
완료 기준
- 의심 원인별 실제 원인 여부 판정 기록
- AI 워커 버전별 서버 처리 지연·수신 FPS 비교표 기록
- 수정 반영 후 운영 워커 기준 2세션 수신 FPS 25 초과
참고
Reactions are currently unavailable
Activity
finefinee commentedon Oct 16, 2026
AI 워커 버전별 측정 결과 (2026-10-16)
c6276d9·같은 측정 도구·입력720p30.ivf, AI 워커만 테스트 포트(50061/50062)로 교체e·b·d는 단계당 60초(2→4→8→12),a·c는 단계당 40초(2→4→8)0637e9b(10-16 측정)e0637e9b테스트 워커b77e68d2d0637e9bd0637e9bc77e68d2c77e68d2a65cac3b(10-10 시점)a65cac3b(10-10 시점)a65cac3b(10-10 시점)e테스트 워커 대조 측정이 운영 워커 측정값을 재현, 테스트 워커 교체 방식 유효a·c첫 실행은 테스트 포트 TIME_WAIT 충돌로 실패, 구성별 포트 분리 후 재측정finefinee commentedon Oct 16, 2026
다세션 저하 원인 분리 측정 (2026-10-16)
77e68d2v6·pixel 2, 단계 2→4→8, 단계당 40초, 같은 Go 서버 이미지c6276d9gAI_PRIVACY_MODE=bypassgAI_PRIVACY_MODE=bypassgAI_PRIVACY_MODE=bypasshAI_FRAME_WIRE_FORMAT=jpeghAI_FRAME_WIRE_FORMAT=jpeghAI_FRAME_WIRE_FORMAT=jpegic·a)와 같은 수준, wire format은 원인 아님i는 2세션 측정 중 운영 활성 세션 발생으로 측정 도구가 중단, 재측정 대기finefinee commentedon Oct 16, 2026
AI 워커 수 확장 측정 (2026-10-16)
77e68d2v6·pixel 2, 단계 2→4→8, 단계당 40초c·a)a)i)i)i)finefinee commentedon Oct 16, 2026
4세션 60초 워커 수 비교 (2026-10-16)
77e68d2v6·pixel 2, 4세션 단일 단계 60초j)k)i, 40초)finefinee commentedon Oct 16, 2026
운영 구성 4세션 60초 워커 수 비교 (2026-10-16)
0637e9bv7·pixel 2(innolive-ai#45 반영 후 운영 구성), 4세션 단일 단계 60초, 운영 활성 세션 0finefinee commentedon Oct 16, 2026
finefinee commentedon Oct 16, 2026
merge: fix/ai-least-loaded-worker/#477
finefinee commentedon Oct 16, 2026
AI 워커 동시 처리 구조 확인 (innolive-ai
0637e9b소스)service/runtime.py:235ThreadPoolExecutor(max_workers=1)와asyncio.Lockai_processor_server.py:188max_workers=1, 동시 처리 상한MOSAIC_MAX_INFLIGHT = 2(91행)AI_ENCODE_WORKERS·AI_BATCH_WAIT_MS·AI_CONFIDENCE는 코드에서 읽지 않는 값, 변경 효과 없음OMP_NUM_THREADS=1·cv2.setNumThreads(0)고정, 추적기gmc_method: sparseOptFlow가 매 프레임 CPU 광류 계산73f04af), 배포 후innolive_ai_target_active_streams균등 배정 확인 대기