a3f63e56e2
- 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>
82 lines
5.3 KiB
Markdown
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 본문에서 초안 생성. |