iBetter Books
수정

지연 실행(lazy) 모드와 실행 제어

marimo의 기본 동작은 셀을 수정하거나 위젯을 조작하는 즉시 의존 셀이 자동으로 재실행되는 것입니다. 탐색적 분석이나 빠른 프로토타이핑에서는 이것이 편리합니다. 그런데 계산 비용이 큰 셀이 포함된 노트북에서는 문제가 됩니다. 슬라이더를 드래그할 때마다 수 초씩 걸리는 모델 학습 코드가 실행된다면 작업이 어려워집니다.

이 상황을 위해 marimo는 lazy(지연) 모드를 제공합니다.

autorun과 lazy 두 가지 모드

marimo는 두 가지 실행 모드를 지원합니다.

autorun 모드 (기본값)

셀이 변경되거나 위젯 값이 바뀌면 의존 셀이 즉시 자동으로 재실행됩니다. 기본값이며 대부분의 노트북에 적합합니다.

lazy 모드

의존 셀을 즉시 실행하지 않습니다. 대신 해당 셀을 "stale(오래된)" 상태로 표시합니다. stale 상태의 셀은 사용자가 직접 실행 버튼을 클릭하거나 전체 실행 명령을 내릴 때 재계산됩니다.

lazy 모드 설정 방법

두 가지 방법으로 lazy 모드를 활성화할 수 있습니다.

방법 1: 에디터 UI 설정

marimo 에디터에서 우측 상단의 설정 아이콘을 클릭하면 런타임 설정 패널이 열립니다. "On cell change" 옵션을 "autorun"에서 "lazy"로 변경합니다. 이 설정은 현재 노트북 세션에 즉시 반영됩니다.

방법 2: pyproject.toml 설정

프로젝트 전체에 lazy 모드를 고정하려면 pyproject.toml에 설정합니다.

[tool.marimo.runtime]
on_cell_change = "lazy"

autorun으로 되돌리려면 값을 "autorun"으로 변경하거나 이 줄을 제거합니다.

stale 상태란

lazy 모드에서 의존 셀이 "오래됐다"는 것을 어떻게 알 수 있을까요. marimo 에디터는 stale 상태의 셀 테두리를 시각적으로 구분해서 표시합니다. "이 셀의 입력이 바뀌었으니 결과가 최신이 아닐 수 있다"는 신호입니다.

예를 들어 ML 노트북에서 이런 흐름을 생각해볼 수 있습니다.

# Cell A — 하이퍼파라미터 (슬라이더 위젯으로 조정)# 슬라이더 위젯 값 변경 시, lazy 모드에서는 Cell B가 stale 표시됨learning_rate = 0.01n_estimators = 100
# Cell B — 학습 (비용이 큰 셀)# autorun이면 슬라이더 조작마다 즉시 실행# lazy이면 stale 표시 후 사용자가 직접 실행from sklearn.ensemble import RandomForestClassifiermodel = RandomForestClassifier(n_estimators=n_estimators)# model.fit(X_train, y_train)  # 실제 사용 시 주석 해제
# Cell C — 평가 (Cell B에 의존)# Cell B가 stale이면 Cell C도 stale# score = model.score(X_test, y_test)pass

lazy 모드에서는 learning_raten_estimators를 바꾸더라도 Cell B와 Cell C가 즉시 실행되지 않습니다. 여러 파라미터를 조정하고 준비가 됐을 때 한 번에 실행할 수 있습니다.

조건부 실행 중단: mo.stop

경우에 따라 특정 조건이 만족되지 않으면 이하 셀의 실행 자체를 막고 싶을 때가 있습니다. mo.stop을 사용합니다.

import marimo as modata = None  # 데이터가 아직 로드되지 않은 상태mo.stop(data is None, mo.md("데이터를 먼저 로드하세요."))# 아래 코드는 data가 None이 아닐 때만 실행됨result = sum(data)

첫 번째 인자가 True이면 실행을 중단하고 두 번째 인자(출력)를 표시합니다. 파일 업로드나 데이터베이스 연결 같은 선행 조건이 필요한 셀에 활용할 수 있습니다.

autorun과 lazy 중 언제 무엇을 쓸까

상황 권장 모드
빠른 계산, 즉각 피드백이 중요한 노트북 autorun
모델 학습, 대용량 데이터 처리 등 오래 걸리는 셀 포함 lazy
여러 파라미터를 한 번에 조정 후 실행하고 싶을 때 lazy
팀 공유용, 앱 배포용 노트북 autorun (사용자가 즉각 결과 확인)

대부분의 노트북은 autorun이 적합합니다. 계산 비용이 특별히 높은 셀이 포함된 경우에만 lazy로 전환하는 것을 권장합니다. 노트북 전체를 lazy로 설정하면 편집할 때마다 수동 실행을 해야 하는 번거로움이 있습니다.

정리

  • marimo의 기본 실행 모드는 autorun으로, 변경 즉시 의존 셀을 재실행합니다.
  • lazy 모드에서는 의존 셀을 stale 상태로 표시하고 사용자가 직접 실행할 때 재계산합니다.
  • lazy 모드는 에디터 UI 설정 또는 pyproject.toml[tool.marimo.runtime] 섹션에서 전환합니다.
  • mo.stop으로 선행 조건이 충족되지 않을 때 하위 셀 실행을 중단할 수 있습니다.
  • 계산 비용이 높은 셀이 포함된 노트북에만 선택적으로 lazy 모드를 적용합니다.