1. 프로젝트 개요
프로젝트 목표: 오디오 파일(음성)을 기반으로 단일 인물 사진을 3D 안면 애니메이션(Talking Face) 영상으로 생성하는`SadTalker`의 로컬 데모 환경을 구축한다.
최종 결과물: 로컬 GPU를 활용하여 안정적으로 영상을 생성하는 Gradio 웹 UI 실행.
작업 환경:
서버 위치:`hs@hs:/hdd2/
운영체제(OS):** Ubuntu (Linux)
가상 환경:Conda (환경명: `sadtalker`, `python=3.8`)
GPU: NVIDIA GeForce RTX 2070 (8GB VRAM)
2. 초기 설치 및 환경 구성
`README.md` 문서를 기반으로 초기 환경 구성을 진행함.
1. 소스 코드 복제: `git clone https://github.com/OpenTalker/SadTalker.git`
2. Conda 환경 생성 `conda create -n sadtalker python=3.8` 및 `conda activate sadtalker`
3. 라이브러리 설치:
- pip install torch==1.12.1+cu113 ...` (PyTorch)
- conda install ffmpeg` (영상/음성 처리를 위한 FFmpeg)
- pip install -r requirements.txt` (기타 Python 종속성)
4. 사전 학습 모델 다운로드: `bash scripts/download_models.sh` 실행 (Checkpoints, GFPGAN 등)
3. 단계별 장애 조치 및 해결 과정
데모 실행(`python app_sadtalker.py`) 과정에서 발생한 5단계의 주요 문제 및 해결 기록.
3.1. [1차 검증] PyTorch-CUDA 버전 호환성 확인
현상: `nvidia-smi` 명령 실행 결과, 시스템 드라이버가 지원하는 CUDA 버전은 `13.0`으로 확인됨. 반면, 설치된 PyTorch는`cu113` (CUDA 11.3) 버전임.
분석: 시스템의 CUDA 드라이버 버전(`13.0`)이 PyTorch 라이브러리가 요구하는 CUDA 버전(`11.3`)보다 높으므로, 하위 호환성을 보장함.
조치:문제없음. 정상적인 구성으로 판단하고 설치를 계속 진행함.
3.2. [2차 장애] Gradio API 버전 충돌
현상:`python app_sadtalker.py` 실행 시, Gradio UI 생성 단계에서 프로그램 중단.
오류 로그: `AttributeError: 'Row' object has no attribute 'style'`
분석: `requirements.txt`에 Gradio 버전이 고정(pinned)되어 있지 않아, 최신 `gradio 4.x` 버전이 설치됨. SadTalker 코드는 `gradio 3.x` 버전에서만 호환되는 `.style()` API를 사용하고 있어 충돌 발생.
조치: `pip uninstall gradio`로 최신 버전을 제거하고, `pip install gradio==3.41.2` 명령으로 Gradio 3.x 버전으로 다운그레이드함.
3.3. [3차 장애] `TTS` 모듈 종속성 충돌
현상: 2차 장애 해결 후 재실행 시, `TTS` 모듈을 찾을 수 없다는 오류 발생.
1차 오류: `ModuleNotFoundError: No module named 'TTS'`
분석: `app_sadtalker.py` 코드가 텍스트 음성 변환(TTS) 기능을 위해 `Coqui TTS` 라이브러리를 `import` 하고 있었음.
시도: `pip install TTS`를 실행하여 `TTS` 라이브러리 설치 시도.
2차 오류: `pip._vendor.resolvelib.resolvers.ResolutionTooDeep: 200000`
분석: 종속성 지옥(Dependency Hell)'발생. `TTS` 라이브러리가 요구하는 패키지 버전과, `sadtalker` 환경에 이미 설치된 `gradio==3.41.2` 및 `torch==1.12.1` 등이 요구하는 버전이 서로 충돌하여 `pip`이 해결 가능한 조합을 찾는 데 실패함.
- 조치:** `TTS` 기능은 (오디오 파일 업로드와 대비해) 부가 기능이라 판단함. `app_sadtalker.py` 파일을 직접 수정하여 TTS 관련 `import` 및 UI 생성 코드 블록(약 48\~55행)을 전체 주석 처리**하여, 해당 기능을 원천적으로 비활성화함.
3.4. [4차 장애] Gradio UI 비디오 표시 오류
현상: 3차 장애 해결 후, `python app_sadtalker.py`가 성공적으로 실행되고 웹 UI(`http://127.0.0.1:7860`)에 접근 가능해짐. 이미지와 오디오를 업로드하고 'Generate' 버튼 클릭 시, 터미널(콘솔)에서는 `Face Renderer:: 100%` 등 모든 작업이 성공적으로 완료되고 결과 `mp4` 파일이 생성되었다는 로그가 출력됨.
문제점:정작 웹 UI에서는 결과 영상이 나오지 않고, 빨간색 Error 상자만 표시됨.
분석: 백엔드(PyTorch/SadTalker)는 정상 작동했으나, 프론트엔드(Gradio)가 결과 파일을 화면에 렌더링하는 데 실패함. 이는 `gradio==3.41.2` 버전에 존재하는 비디오 컴포넌트 관련 버그로 추정됨.
조치: `pip uninstall gradio`로 기존 버전을 제거하고, `pip install gradio==3.48.0` 명령을 통해 Gradio 3.x의 다른 안정적인 버전으로 업데이트함.
결과:문제 해결. Gradio 3.48.0 버전에서는 생성된 영상이 웹 UI에 정상적으로 표시됨.
3.5. [5차/현재 장애] CUDA 메모리 부족 (OOM)
현상: 4차 장애 해결 후, 웹 UI에서 영상 생성을 시도하던 중 프로세스가 비정상적으로 중단되며 터미널에 오류 로그 출력.
- **오류 로그:**
File "/hdd2/SadTalker/src/facerender/modules/util.py", line 439, in forward
out = normalized * (1 + gamma) + beta
RuntimeError: CUDA out of memory. Tried to allocate 512.00 MiB (GPU 0; 7.60 GiB total capacity; 5.00 GiB already allocated; 299.19 MiB free; 6.21 GiB reserved in total by PyTorch) ...
```
분석: 이는 코드 버그가 아닌 하드웨어(VRAM)문제입니다.
1. GPU: RTX 2070 (총 VRAM: 8GB, PyTorch 인식: 7.60GiB)
2. 오류 시점: `facerender` 모듈, 즉 실제 얼굴 영상을 합성하는 딥러닝 모델의 디코더(`generator.py`)가 작동하는 도중 발생.
3. 메모리 상태:
- `5.00 GiB already allocated`: 모델 가중치, 입력 데이터 등이 이미 VRAM의 5GB를 사용 중.
- `299.19 MiB free`: 단편화 등으로 인해 실제 사용 가능한 여유 공간은 299.19 MiB**뿐임.
- `Tried to allocate 512.00 MiB`: 다음 연산을 위해 512 MiB의 VRAM이 추가로 필요했으나, 가용 공간(299.19 MiB)이 부족하여 오류 발생.
- 결론: 모델이 요구하는 VRAM(\> 5.5GB)이 RTX 2070의 8GB 한계에 도달함.
4. 현재 상태 및 권장 조치 (OOM 해결)
현재 SadTalker의 로컬 환경은 성공적으로 구축되었으나, 하드웨어 VRAM 한계로 인해 특정 조건에서만 실행 가능한 상태입니다.
`CUDA out of memory` 오류를 해결하고 영상을 성공적으로 생성하기 위한 권장 조치:
1. 배치 크기(Batch Size) 1로 설정 (필수):
-Gradio 웹 UI의 'Settings' 탭에서 `batch size in generation` 슬라이더를 \*\*`1`\*\*로 설정하십시오.
- 이유:배치 크기 2(기본값)는 VRAM 사용량을 거의 두 배로 늘립니다. 8GB VRAM 환경에서는 배치 크기 1이 필수적입니다.
2. 얼굴 모델 해상도(Face model resolution) 256 사용:
- UI에서 `256` 옵션(기본값)을 유지하고, `512`를 선택하지 마십시오.
- 이유: 512 모델은 훨씬 높은 VRAM을 요구하여 8GB 환경에서는 실행이 불가능합니다.
3. *Still Mode' 체크박스 활용:
- `preprocess` 옵션을 `full`로 설정하고, `Still Mode` 체크박스를 활성화하면 머리 움직임이 줄어들어 VRAM 사용량이 소폭 감소할 수 있습니다.
'메모' 카테고리의 다른 글
| FastAPI 프로젝트 환경 설정 및 서버 공유 (0) | 2025.11.10 |
|---|---|
| SadTalker 로컬 환경 구축 및 기능 적용 (0) | 2025.11.06 |
| Conda(Anaconda)는 무엇일까? (0) | 2025.11.05 |
| GPT-SoVITS - RuntimeError: Could not load libtorchcodec 에러관해 (0) | 2025.11.05 |
| 오라클 버츄얼박스(VirtualBox) ubuntu 가상서버 Vscode연결하기 (1) | 2025.07.31 |