Files
2nd/10_Wiki/Topics/Comfyui/위키 Lazy Evaluation - ComfyUI 2026-05-20.md
T
koriweb a3f63e56e2 Add ComfyUI wikified docs and youtube extracts; tidy raw→Topics
- 10_Wiki/Comfyui/: ComfyUI docs generated via /wikify
- 00_Raw/_youtube/: /youtube extraction outputs
- Move some 00_Raw originals into 10_Wiki/Topics_meeting; remove empty canvases and stray files

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-20 18:41:10 +09:00

82 lines
5.3 KiB
Markdown

---
id: lazy-evaluation---comfyui
title: "Lazy Evaluation - ComfyUI"
category: "10_Wiki/Topics"
status: "draft"
verification_status: "conceptual"
canonical_id: ""
aliases: []
duplicate_of: ""
source_trust_level: "B"
confidence_score: 0.8
created_at: 2026-05-20
updated_at: 2026-05-20
review_reason: ""
merge_history: []
tags: ["web", "wikify"]
raw_sources: ["https://docs.comfy.org/custom-nodes/backend/lazy_evaluation"]
applied_in: []
github_commit: ""
---
# [[Lazy Evaluation - ComfyUI]]
## 🎯 한 줄 통찰 (One-line insight)
불필요한 연산을 방지하기 위해 필요한 시점에만 입력을 평가하여 그래프 실행 효율성을 최적화하는 기술적 전략.
## 🧠 핵심 개념 (Core concepts)
- **Lazy Evaluation (지연 평가)**: 모든 입력을 미리 계산하지 않고, 실제 사용 여부가 결정될 때까지 평가를 미루어 불필요한 프로세싱을 방지함.
- **Lazy Input Marking**: `INPUT_TYPES` 내의 옵션 딕셔너리에 `{"lazy": True}`를 추가하여 특정 입력을 지연 평가 대상으로 지정함.
- **check_lazy_status**: 지연된 입력이 필요한지 확인하기 위해 실행 전 호출되는 메서드로, 필요한 입력의 이름을 리스트로 반환함.
- **Execution Blocking**: [[ExecutionBlocker]] 객체를 사용하여 특정 노드의 실행을 중단하거나 에러 메시지를 표시하며 흐름을 제어함.
## 🧩 추출된 패턴 (Extracted patterns)
- **조건부 평가 전략**: 입력값의 비율(ratio)이 0.0 또는 1.0인 경우, 혹은 마스크가 전체 0.0 또는 1.0인 경우와 같이 특정 조건에서 로딩이나 계산을 생략하는 패턴.
- **2단계 구현 구조**: 입력을 지연 대상으로 표시(`lazy: True`)하고, 상태를 확인하는 메서드(`check_lazy_satus`)를 정의하는 일관된 구현 방식.
- **계층적 제어**: 직접적인 노드 개발 시에는 Lazy Evaluation을 권장하며, 외부 노드 제어가 불가능할 때는 `ExecutionBlocker`를 사용하는 우회 전략.
## 📖 세부 내용 (Details)
### 1. 지연 평가의 이점 및 사례
기본적으로 모든 입력은 실행 전 평가되지만, 다음과 같은 경우 지연 평가가 유용함:
- **ModelMergeSimple 노드**: 비율(ratio)이 0.0이면 첫 번째 모델을 로드할 필요가 없고, 1.0이면 두 번째 모델을 로드할 필요가 없음.
- **이미지 보간(Interpolation)**: 마스크나 비율이 완전히 0.0 또는 1.0인 경우 불필요한 이미지 평가를 생금함.
- **Switch 노드**: 특정 입력에 의해 다른 입력의 통과 여부가 결정되는 경우.
### 2. 지연 입력 구현 방법 (Creating Lazy Inputs)
지연 입력을 만드는 과정은 두 단계로 나뉨:
1. **INPUT_TYPES 정의**: 입력 옵션 딕셔너리에 `lazy: True` 키-값 쌍을 추가함.
- 예시: `"image1": ("IMAGE", {"lazy": True})`
2. **check_lazy_status 메서드 정의**:
- 역할: 지연된 입력 중 추가 평가가 필요한 입력을 찾아 이름 리스트를 반환함.
- 특징: 인자로 실제 입력값들을 받으며, 사용 불가능한(None) 지연 입력은 `None`으로 처리됨. 클래스 메서드가 아닌 일반 메서드로 작성되어야 함.
### 3. 실행 차단 (Execution Blocking)
노드의 실행을 제어하는 두 가지 방법:
- **직접 구현**: 출력 노드 개발 시 `enabled` 입력을 추가하고 다른 입력을 모두 지연 입력으로 설정하여 조건부로 평가함.
- **ExecutionBlocker 활용**:
- `None` 전달: 실행을 조용히 차단(silent block)하며, 출력을 비활성화할 때 유용함.
- `String` 메시지 전달: 차단 시 사용자에게 보여줄 에러 메시지를 표시함 (예: VAE가 없는 체크포인트 로드 시).
## ⚖️ 모tes 및 업데이트 (Contradictions & updates)
- **주의사항**: `check_lazy_status`는 실제 입력값을 사용하므로 클래스 메서드가 아닌 인스턴스 메서드로 동작해야 함. 또한, `ExecutionBlocker`를 전파 중단 용도로 사용하는 것은 권장되지 않으며(지연 평가 사용 권장), 이는 의도된 설계임.
## 🛠️ 적용 사례 (Applied in summary)
- **MixImages 노드 예시**: 마스크의 최소/최대값이 0.0 또는 1.0인 경우, `image1` 또는 `image2`를 평가하지 않도록 설계하여 연산 효율을 높임.
- **에러 핸들링**: `load_checkpoint` 시 VAE가 없는 경우 `ExecutionBlocker`에 에러 메시지를 담아 전달함으로써 사용자에게 명확한 정보를 제공함.
## ✅ 검증 상태 및 신뢰도
- **상태:** draft
- **검증 단계:** conceptual
- **출처 신뢰도:** B (Primary Source — 웹사이트 본문 직접 추출)
- **중복 검사 결과:** 신규 생성 (New discovery)
## 🔗 관련 문서 링크 (Related document links)
- [[Lazy Evaluation]] - 입력 평가 시점을 제어하는 핵심 기술.
- [[INPUT_TYPES]] - 노드의 입력 구조를 정의하는 메커니즘.
- [[check_lazy_status]] - 지연된 입력의 필요 여부를 판단하는 로직.
- [[ExecutionBlocker]] - 그래프 실행을 중단하거나 에러를 표시하는 특수 객체.
- [[ModelMergeSimple]] - 지연 평가가 적용될 수 있는 구체적인 노드 사례.
## 📝 변경 이력 (Change history)
- 2026-05-20: Astra /wikify 로 https://docs.comfy.org/custom-nodes/backend/lazy_evaluation 본문에서 초안 생성.