TL;DR

  • LensIR은 신경망 다이어그램을 실행 가능한 그림이 아니라 형식이 지정된 그래프로 편집하고, 이를 검증된 모듈로 낮춘 뒤 파이썬 소스 코드로 생성하는 연구용 컴파일러임.
  • 컴파일 과정은 각 노드와 연결을 정적 단일 할당(SSA) 연산, 이름이 지정된 매개변수, 명시적 상태를 포함하는 모듈로 변환하고, 형상·데이터형·포트를 검사함.
  • NumPy를 기준 런타임으로 제공하며, JAX·PyTorch·Keras·TensorFlow 백엔드에도 동일하게 검사된 모듈을 전달함.
  • 지연(delay)을 거치는 피드백 연결과 브라우저 내 다이어그램 저장·불러오기를 지원하며, 메모리 추정치는 매개변수와 텐서 크기 및 선택한 런타임의 데이터형 크기를 기준으로 함.
  • 여러 연산 상자를 하나의 원시 연산으로 묶고 재사용 가능한 프리미티브로 저장·가져오기·내보내기할 수 있으며, 확대·축소와 다중 선택을 지원하는 무한 캔버스를 제공함.

컴파일러 버그 신고

  • 버그 신고에는 마지막 컴파일 요청, 입력, 출력 또는 오류, 컴파일러 버전이 포함됨. 재현 자료를 전송하기 전에 비공개 데이터와 자격 증명을 제거해야 함.
  • 신고 양식에는 문제와 기대 동작을 적는 요약란 및 재현용 JSON이 포함됨.
  • 신고 제출, 보고서 다운로드, 창 닫기 기능이 제공됨.

LensIR 소개

  • LensIR은 연구용 신경망 컴파일러임. 여기서 그리는 다이어그램은 프레임워크가 직접 실행하는 그림이 아니라 형식이 지정된 그래프이며, 이 페이지는 그래프만 편집함.
  • 컴파일은 소스 코드를 반환하며 코드를 실행하지 않음.
  • 컴파일 요청은 lensir.diagram/1 문서를 전송함. 서버는 모든 상자와 연결을 LensIR 모듈로 낮추며, 모듈에는 정적 단일 할당 연산, 이름이 지정된 매개변수, 명시적 상태가 포함됨.
  • 형상, 데이터형, 포트를 검사한 뒤 연산마다 파이썬 문장 하나를 생성해 소스로 반환함.
  • 출력이 어떤 연결에서도 읽히지 않는 상자는 반환되며, 이를 위한 별도 표시 기능은 없음.
  • 다른 에이전트는 같은 호스트의 /skill.zip에서 컴파일러를 설치함. LensIR 제목이 없으면 아카이브의 AGENTS.lensir.md 내용을 AGENTS.md에 추가한 뒤 프로젝트 루트나 홈 디렉터리에서 아카이브를 압축 해제함.
  • 스킬은 .agents, .grok, .claude, .cursor 스킬 폴더에 설치되며, MCP 진입점은 tools/lensir-mcp.json임.

런타임과 실행 방식

  • NumPy는 참조 런타임이며, 즉시 실행 방식으로 동작하고 추가 프레임워크가 필요하지 않음.
  • 다른 런타임은 JAX·PyTorch·Keras·TensorFlow이며, 동일하게 검사된 모듈을 해당 백엔드에 전달함.
  • 즉시 실행(Eager)은 실행된 연산을 기록하고 각 기본 연산의 벡터-야코비안 곱(VJP)으로 역전파함.
  • JIT는 생성된 함수를 JAX 또는 PyTorch가 단계화하도록 요청함.
  • 데이터에 따라 달라지는 if와 while은 즉시 실행 모드에 남으며, 역전파는 실제로 실행된 분기를 따름.

피드백 연결과 다이어그램 저장

  • 피드백 연결은 지연(delay)을 통과하면 허용됨. 지연은 이전 호출에서 저장된 텐서를 반환함.
  • 출력 포트를 한 번 클릭한 뒤 연결할 입력 포트를 차례로 클릭함. 선택된 출력은 계속 활성화되어 여러 입력에 연결할 수 있음.
  • 출력을 다시 클릭하거나 Escape를 누르거나 캔버스를 클릭하면 출력을 비활성화함. 각 입력 포트에는 연결 하나만 허용됨.
  • Save는 현재 열린 다이어그램을 이 브라우저의 이름 아래 저장함. Save as new는 별도 사본을 추가하며 저장 이름 개수에 제한이 없음.
  • 목록에서 저장된 다이어그램을 불러오거나 삭제할 수 있음. Download는 열린 다이어그램을 파일로 저장하고 Open은 해당 파일을 읽어 옴. 페이지를 새로고침하면 열려 있던 다이어그램을 복원함.

메모리 추정

  • 메모리 수치는 매개변수 크기와 텐서 형상, 선택한 런타임의 데이터형 크기를 바탕으로 텐서 저장 공간을 추정함.
  • 학습에는 그래디언트 버퍼가 추가됨.
  • 함수와 반복문 본문은 한 번만 계산에 포함됨. 반복 실행, 백엔드 작업 공간, 메모리 할당자 오버헤드로 실제 메모리 사용량이 더 커질 수 있음.

캔버스와 그룹화

  • 캔버스에는 가장자리가 없음. 배경을 드래그하면 원점을 넘어 어느 방향으로든 이동할 수 있음.
  • 마우스 가운데 버튼으로도 이동할 수 있으며, 상자를 드래그하는 동안 Space를 누르는 방법도 동일하게 동작함.
  • Shift를 누른 채 배경을 드래그하면 여러 구성 요소를 둘러싸는 선택 상자를 그림. 상자 안의 모든 요소가 선택되며, 하나를 드래그하면 나머지도 함께 이동함.
  • Group은 선택 영역을 하나의 원시 연산으로 바꿈. 영역에 들어오는 연결은 입력 포트가 되고 영역을 나가는 연결은 출력 포트가 됨.
  • 선택된 상자 두 개 사이 경로에 있는 상자도 그룹에 포함되므로 원시 연산이 자기 자신으로 연결되지 않음. 그룹화된 원시 연산은 다른 상자처럼 연결할 수 있으며, Ungroup으로 다시 펼칠 수 있음.
  • Shift를 누른 채 클릭하면 상자 하나를 선택에 추가하거나 선택에서 제거함.

프리미티브 라이브러리

  • Group all은 다이어그램 입력을 포트로 유지하면서 모든 연산 상자를 하나로 접음.
  • 해당 원시 연산을 선택하고 이름을 지정한 뒤 Save primitive를 클릭하면 저장됨. 저장된 프리미티브는 새로고침 후 왼쪽 팔레트에 나타나며 어떤 다이어그램에도 삽입할 수 있음.
  • 프리미티브 복사본마다 매개변수와 상태가 별도로 존재함.
  • Export primitives는 라이브러리를 JSON 파일로 내려받고, Import primitives는 해당 파일을 다른 브라우저의 라이브러리에 추가함.
  • 이름 옆의 아래쪽 화살표는 해당 프리미티브 하나만 내보냄. 기존 항목은 유지되며 이름이 같은 프리미티브에는 번호가 붙은 이름이 지정됨.
  • 사이트 데이터를 지우면 로컬 저장 항목이 제거됨.

확대·축소

  • 캔버스 왼쪽 아래 조작부나 포인터 방향을 기준으로 하는 Ctrl 또는 Command와 마우스 휠을 사용해 확대·축소할 수 있음.
  • 백분율 표시를 클릭하면 확대율이 100%로 돌아오며, Fit은 모든 상자가 화면에 들어오도록 맞춤.
  • 확대율이 달라져도 상자를 드래그할 때 상자와 연결선은 같은 다이어그램 좌표를 유지함.