FireRedASR-AED-L 배포 후 시스템 모니터링과 C 드라이브 유지보수

1. FireRedASR-AED-L 서비스를 오래 안정적으로 운영하려면

FireRedASR-AED-L 모델을 Windows 서버에 배포하고 WebUI나 API 서비스를 열어두면, 곧바로 일상적인 운영 단계가 시작됩니다. 서비스가 켜진 순간부터 다음과 같은 파일들은 지속적으로 쌓입니다.

  • 애플리케이션 로그: Gradio, FastAPI, Uvicorn 등에서 출력하는 접근/에러 로그
  • 임시 오디오 파일: 사용자 업로드 음성과 변환 과정에서 생성되는 버퍼
  • 캐시 및 중간 결과: 모델 추론 과정에서 남는 중간 데이터
  • 도우/프로그램 임시 파일: 시스템과 기타 소프트웨어가 생성하는 temp 파일

이 파일들이 대부분 C 라이브에 모이면 시간이 지남에 따라 시스템을 느리게 하고, 심하면 서비스를 중단시킬 수 있습니다. 이 문서에서는 모델 배포 후 꼭 필요한 모니터링과 C 드라이브 관리 방법을 정리합니다.

2. 로그 파일 위치 파악과 크기 모니터링

2.1 로그 파일 찾기

사용하는 프레임워크에 따라 로그 위치가 다릅니다.

  • Gradio: 터미널에 바로 출력되거나, nohup python app.py > webui.log 2>&1 형태로 리다이렉트될 수 있습니다.
  • FastAPI/Uvicorn: uvicorn.log, app.log, 또는 설정 파일에 지정한 경로에 저장됩니다.

프로젝트 폴더에서 최근에 수정된 로그 후보를 찾으려면 다음 명령을 사용합니다.

Get-ChildItem -Path . -Recurse -Include *.log,*.txt -File |
    Sort-Object LastWriteTime -Descending |
    Select-Object -First 10

2.2 로그 크기 자동 점검 스크립트

특정 파일이 임계값을 넘으면 경고하는 PowerShell 스크립트 예시입니다.

# log_size_check.ps1
param(
    [string]$TargetLog = "C:\ASR_Service\logs\webui.log",
    [int]$LimitMB = 500
)

if (-not (Test-Path $TargetLog)) {
    Write-Error "로그 파일을 찾을 수 없습니다: $TargetLog"
    exit 1
}

$item = Get-Item $TargetLog
$sizeMB = [math]::Round($item.Length / 1MB, 2)

Write-Host "[$($item.Name)] 현재 크기: ${sizeMB}MB"

if ($sizeMB -gt $LimitMB) {
    Write-Warning "경고: 로그가 ${LimitMB}MB를 초과했습니다. 회전 또는 제를 권장합니다."
} else {
    Write-Host "로그 크기가 정상 범위입니다."
}

3. 스케줄러로 자동 정리하기

3.1 오래된 로그 삭제

일반적으로 최근 7~30일치 로그만 보존하고 나머지는 삭제합니다.

# remove_old_logs.ps1
$LogDir = "C:\ASR_Service\logs"
$RetentionDays = 7
$CutoffDate = (Get-Date).AddDays(-$RetentionDays)

$OldLogs = Get-ChildItem -Path $LogDir -Filter "*.log" -Recurse -File |
    Where-Object { $_.LastWriteTime -lt $CutoffDate }

if ($OldLogs) {
    $OldLogs | Remove-Item -Force
    $totalMB = ($OldLogs | Measure-Object -Property Length -Sum).Sum / 1MB
    Write-Host "삭제 완료: $($OldLogs.Count)개, 약 $([math]::Round($totalMB, 2))MB"
} else {
    Write-Host "삭제 대상 로그가 없습니다."
}

로그가 단일 파일(webui.log)로 무한 증가하는 경우에는 삭제 대신 백업 후 비우는 방식이 안전합니다.

$log = "C:\ASR_Service\logs\webui.log"
$backup = "C:\ASR_Service\logs\webui_$(Get-Date -Format yyyyMMddHHmmss).log"
Move-Item $log $backup
New-Item -ItemType File -Path $log -Force | Out-Null

3.2 임시 오디오 파일 삭제

리 완료 후 불필요한 음성 파일은 짧은 주기로 제거합니다.

# cleanup_temp_audio.ps1
$TempDir = "C:\ASR_Service\temp_audio"
$KeepHours = 1
$CutoffTime = (Get-Date).AddHours(-$KeepHours)

$Targets = Get-ChildItem -Path $TempDir -Include *.wav, *.mp3, *.tmp -Recurse -File |
    Where-Object { $_.LastWriteTime -lt $CutoffTime }

if ($Targets) {
    $Targets | Remove-Item -Force
    Write-Host "임시 오디오 파일 $($Targets.Count)개 삭제 완료."
} else {
    Write-Host "정리할 시 오디오 파일이 없습니다."
}

3.3 Windows 작업 스케줄러 등록

  1. Win + R을 누르고 taskschd.msc 입력
  2. 오른쪽 작업 표시줄에서 기본 작업 만들기 선택
  3. 이름: ASR 로그 정리
  4. 트리거: 매일 또는 매주, 서비스 부하가 낮은 시간(예: 새벽 3시)
  5. 동작: 프로그램 시작 선택
    • 프로그램/스크립트: powershell.exe
    • 인수 추가: -NoProfile -ExecutionPolicy Bypass -File "C:\ASR_Service\scripts\remove_old_logs.ps1"
  6. 마침 클릭

임시 오디오 파일은 1시간 간격 등 짧은 주기로 같은 방식으로 등록합니다.

4. GPU 메모리 점검

FireRedASR-AED-L이 GPU로 동작 중이라면 nvidia-smi로 메모리 수를 감지해야 합니다.

# 현재 GPU 상태
nvidia-smi

# CSV 형식으로 메모리만 조회
nvidia-smi --query-gpu=timestamp,name,memory.used,memory.total --format=csv

서비스가 유후 상태임에도 메모리 사용량이 계속 증가하면, 추론 루프에서 텐서가 해제되지 않거나 캐시가 누적되고 있을 수 있으므로 코드 측면의 점검이 필요합니다.

5. C 드라이브 공간 분석과 깊이 정리

5.1 디스크 정리 도구

Windows 기본 도구로 가장 안전하게 정리할 수 있습니다.

  1. 내 PC에서 C 드라이브 우클릭 > 속성
  2. 디스크 정리 클릭
  3. Windows 업데이트 정리, 임시 파일, 휴지통 등을 선택 후 확인

5.2 폴더별 용량 시각화 도구

디스크 정리만으로 부족하면 WizTree 또는 TreeSize Free로 큰 폴더를 찾습니다. 관리자 권한으로 실행 후 C 드라이브를 스하면, 폴더별 용량을 시각적으로 비교할 수 있습니다. 용도를 알 수 없는 폴더는 삭제 전에 반드시 역할을 확인해야 합니다.

5.3 시스템 임시 폴더 정리

사용자 및 시스템 임시 폴더를 주기적으로 비웁니다.

# 사용자 임시 더
Remove-Item -Path "$env:TEMP\*" -Recurse -Force -ErrorAction SilentlyContinue

# 시스템 임시 폴(관리자 권한 필요)
Remove-Item -Path "C:\Windows\Temp\*" -Recurse -Force -ErrorAction SilentlyContinue

태그: FireRedASR Windows Server PowerShell Task Scheduler nvidia-smi

8월 17일 08:37에 게시됨