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 작업 스케줄러 등록
- Win + R을 누르고
taskschd.msc입력 - 오른쪽 작업 표시줄에서 기본 작업 만들기 선택
- 이름:
ASR 로그 정리 - 트리거: 매일 또는 매주, 서비스 부하가 낮은 시간(예: 새벽 3시)
- 동작: 프로그램 시작 선택
- 프로그램/스크립트:
powershell.exe - 인수 추가:
-NoProfile -ExecutionPolicy Bypass -File "C:\ASR_Service\scripts\remove_old_logs.ps1"
- 프로그램/스크립트:
- 마침 클릭
임시 오디오 파일은 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 기본 도구로 가장 안전하게 정리할 수 있습니다.
- 내 PC에서 C 드라이브 우클릭 > 속성
- 디스크 정리 클릭
- 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