RTX 4090이 장착된 Ubuntu 서버에서 ComfyUI를 Docker로 돌리기까지 꽤 삽질을 했다. 공식 문서대로 하면 될 줄 알았는데, NVIDIA Container Toolkit 설정부터 VRAM 관련 이슈까지 여러 가지 걸림돌이 있었다. 같은 환경에서 작업하는 분들을 위해 처음부터 끝까지 정리해본다.
사전 준비
먼저 확인해야 할 것들이 있다. NVIDIA 드라이버가 제대로 설치되어 있는지 확인하자.
nvidia-smi
여기서 RTX 4090이 잡히고, 드라이버 버전이 535 이상이면 된다. 만약 드라이버가 없거나 버전이 낮으면 먼저 드라이버부터 업데이트해야 한다.
Docker도 설치되어 있어야 한다. 없으면 공식 문서 따라서 설치하면 되는데, Ubuntu 22.04 기준으로는 이렇게 한다:
sudo apt-get update
sudo apt-get install -y docker.io
sudo systemctl enable --now docker
sudo usermod -aG docker $USER
그리고 여기서 중요한 게 NVIDIA Container Toolkit이다. 이게 없으면 Docker 컨테이너 안에서 GPU를 못 쓴다.
NVIDIA Container Toolkit 설치
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
설치 후에 GPU가 Docker에서 잡히는지 테스트:
docker run --rm --gpus all nvidia/cuda:12.1.0-base-ubuntu22.04 nvidia-smi
RTX 4090 정보가 제대로 뜨면 성공이다.
Docker Compose 파일 작성
나는 docker-compose를 선호하는 편이라 compose 파일로 작성했다. 프로젝트 폴더를 하나 만들고 시작한다.
mkdir -p ~/comfyui && cd ~/comfyui
docker-compose.yml 파일을 만든다:
version: '3.8'
services:
comfyui:
image: ghcr.io/ai-dock/comfyui:latest
container_name: comfyui
ports:
- "8188:8188"
volumes:
- ./models:/workspace/ComfyUI/models
- ./output:/workspace/ComfyUI/output
- ./custom_nodes:/workspace/ComfyUI/custom_nodes
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
environment:
- CLI_ARGS=--listen 0.0.0.0
restart: unless-stopped
핵심 포인트를 몇 가지 짚어보면:
- models 볼륨 마운트: 체크포인트 파일이 수 GB씩 하니까 컨테이너 안에 두면 관리가 힘들다. 호스트에 마운트해서 모델을 관리하는 게 좋다.
- GPU 할당:
deploy.resources에서 GPU를 명시적으로 할당한다.count: 1이면 GPU 하나만 쓴다는 뜻이다. - listen 주소:
--listen 0.0.0.0을 안 넣으면 컨테이너 외부에서 접근이 안 된다.
실행 및 모델 다운로드
docker compose up -d
처음 실행하면 이미지 다운로드에 시간이 좀 걸린다. 로그를 확인하면서 기다리자:
docker compose logs -f
실행이 완료되면 브라우저에서 http://서버IP:8188로 접속하면 ComfyUI 인터페이스가 뜬다.
모델은 models 폴더에 직접 넣어주면 된다. 예를 들어 SDXL 모델을 쓰고 싶으면:
cd ~/comfyui/models/checkpoints
wget https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_base_1.0.safetensors
삽질했던 부분들
VRAM 부족 에러
RTX 4090이 24GB VRAM이라 대부분의 모델은 문제없이 돌아가는데, 고해상도 이미지를 생성할 때 간혹 OOM(Out of Memory)이 발생했다. 이때는 --lowvram 옵션을 추가하면 해결된다.
environment:
- CLI_ARGS=--listen 0.0.0.0 --lowvram
물론 속도는 좀 느려지지만, 4K 이미지 같은 거 생성할 때는 어쩔 수 없다.
커스텀 노드 설치
Docker 환경에서 커스텀 노드를 설치하려면 컨테이너 안에 들어가서 git clone을 해야 한다:
docker exec -it comfyui bash
cd /workspace/ComfyUI/custom_nodes
git clone https://github.com/ltdrdata/ComfyUI-Manager.git
pip install -r ComfyUI-Manager/requirements.txt
그런데 이렇게 하면 컨테이너를 재시작할 때마다 날아간다. 그래서 custom_nodes 폴더도 볼륨 마운트를 해둔 것이다. 마운트된 폴더에 clone하면 컨테이너를 다시 만들어도 유지된다.
포트 충돌
서버에서 다른 서비스도 돌리고 있다면 8188 포트가 이미 사용 중일 수 있다. 그때는 포트 매핑을 바꿔주면 된다:
ports:
- "9090:8188"
마무리
RTX 4090 + Docker 조합으로 ComfyUI를 쓰면 환경이 깔끔하게 격리되고, 나중에 서버를 옮기거나 환경을 재구성할 때도 편하다. GPU 패스스루 설정만 제대로 하면 네이티브 설치와 성능 차이도 거의 없다. Stable Diffusion 워크플로우를 GUI로 관리하고 싶다면 ComfyUI Docker 설치를 추천한다.