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은 모든 상자가 화면에 들어오도록 맞춤. - 확대율이 달라져도 상자를 드래그할 때 상자와 연결선은 같은 다이어그램 좌표를 유지함.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요