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>
5.3 KiB
5.3 KiB
id, title, category, status, verification_status, canonical_id, aliases, duplicate_of, source_trust_level, confidence_score, created_at, updated_at, review_reason, merge_history, tags, raw_sources, applied_in, github_commit
| id | title | category | status | verification_status | canonical_id | aliases | duplicate_of | source_trust_level | confidence_score | created_at | updated_at | review_reason | merge_history | tags | raw_sources | applied_in | github_commit | |||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| lazy-evaluation---comfyui | Lazy Evaluation - ComfyUI | 10_Wiki/Topics | draft | conceptual | B | 0.8 | 2026-05-20 | 2026-05-20 |
|
|
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)
지연 입력을 만드는 과정은 두 단계로 나뉨:
- INPUT_TYPES 정의: 입력 옵션 딕셔너리에
lazy: True키-값 쌍을 추가함.- 예시:
"image1": ("IMAGE", {"lazy": True})
- 예시:
- 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 본문에서 초안 생성.