Skip to content

Retained Body Composition

kimjooyoon edited this page Oct 4, 2026 · 4 revisions

한 번 조립한 그래프로 다음 입력 실행하기

조회 기준: 2026-10-05 KST. 개발 PR #1227에 같은 프로그램을 여러 입력에 이어 쓰는 기능을 추가했습니다. 개발의 전체 12개 CI 작업과 원본 결과 확인 후 84a911a4로 병합했습니다. 측정 소스는 깨끗한 후보 38962397입니다. 배포 PR #1228도 전체12개 작업을 통과해 병합됐으며 두 실행기를 깨끗한 main 7acccf56에서 빌드해 설치했습니다.

설치본의 새 관측은 개발 후보의 프로그램 지문·실제 값·부분 충족 수를20개 작업 모두 유지했습니다. FP32에서 만든 저장 조립의 여섯 묶음 중앙값은2,327.40ms→497.14ms, CPU 시간1.45초→0.36초, 최대 프로세스 메모리82.88MiB·82.14MiB였습니다. 여섯 명령·한 명령의 비교이며 새 추론 중앙값은18.792µs입니다. 후보와 설치본의 원본 관측은 별도로 보존했습니다.

공구를 조립해 작업대에 둔 뒤 재료만 바꾸는 흐름입니다. Gooo가 본문과 연결을 선언하고, 선택한 작은 모델이 조립 순서를 제안합니다. 첫 입력에서 프로그램을 빌드하고 다음 입력부터 같은 프로그램을 사용합니다. 매번 실제 값은 새로 계산합니다.

따라 할 명령

현재 main 컴파일러 저장소에서 실제 Go1.27.1을 사용합니다.

go run ./cmd/gooo body-compose \
  --source examples/body-codegen/record-field-assembly.gooo.fixture \
  --case-series examples/body-codegen/record-field-case-series.json \
  --repeat 2 --out /tmp/gooo-series-example

모델을 쓰려면 --model /path/to/model.json을 추가합니다. 생략하면 결정론적으로 조립합니다. 새 결과 폴더에 선택된 Gooo·생성 Go·composition.json· runtime-history.json·case-series.json을 저장합니다.

--composition에 저장한 조립을 주면 새 모델 판단은 0번입니다. 새 명령의 첫 실행에서 한 번 빌드한 다음 그 요청 안에서 재사용합니다. 요청은 최대16회이며, 닫힐 때 임시 작업공간을 정리합니다.

어느 정도 맞았는지 읽기

예제는 Candidate의 제목·상태·사유를 만들고 다음 Label이 읽습니다. 한글·영문 입력을 바꾼 세 묶음을 두 번 실행합니다. 순서대로 기대 출력4/4·2/2·1/2가 두 번 나옵니다. 마지막 묶음은 기대 라벨을 일부러 다르게 적었습니다. 실제 기록값과 라벨은 남아 있으므로 어떤 값이 달랐는지 읽을 수 있습니다.

stdout의 runtime은 마지막 실행이며, runtime_history는 전체 순서입니다. 각 항목의 traces에서 현재 입력·기대값·실제 값과 전달된 기록 필드를 읽습니다. artifact.reused와 현재 build로 최초 빌드 비용을 다음 실행 비용과 구분합니다. 모델 판단은 조립 기록에 한 번 남고 실제 실행의 모델 호출은0번입니다.

실제 측정

한 작성 그래프의 FP32·결정론 방식마다 저장 조립의 반복 흐름을 세 번씩 비교했습니다. 양쪽은 같은 프로그램과 입력·실제 값·부분 기대값을 유지합니다. 매번 빌드하는 방식은 여섯 명령, 보관하는 방식은 한 명령이므로 시작 비용 차이도 포함합니다.

자체 FP32에서 만든 저장 조립, 중앙값 매번 빌드 한 번 빌드
여섯 묶음 전체 2,324.88ms 509.65ms
프로세스 CPU 시간 1.46초 0.38초
최대 프로세스 메모리 82.75MiB 82.73MiB

새 자체 모델 판단 중앙값은18.834µs였습니다. 첫 실행 중앙값371.323ms 뒤의 15개 재사용 실행 중앙값은22.001ms였습니다. 초기의 느린 관측도 원본에 남겼습니다. CPU·메모리는 Go 빌드와 자식 실행을 포함하며, 전체 컴퓨터 CPU 사용률 변화는 측정하지 않았습니다.

기존 PTQ·QAT 모델도 각각 한 번 실제로 연결했습니다. 같은 프로그램과 결과를 유지했고, 각 모델의 상주 텐서는18,752바이트였습니다. FP32는74,624바이트입니다. 가중치와 학습은 이번에 바꾸지 않았습니다. 실제 행렬 저장은 바이트당 삼진값5개로 가중치당 약1.6비트입니다. FP32 편향을 포함한 각 가중치 파일은3,854바이트이며, 디코딩한 상주 텐서18,752바이트와 구분합니다. 앞선2비트 표기를 실제 파일과 메타데이터에 맞게 수정했습니다. 1.58은 삼진수 정보량입니다.

GitHub 원본·Go 검산 도구 · 후속 연구 PR #13 · Hugging Face 공개 관측.

최신 모델 부록은 설치 관측·Go 요약 도구·Linux 검산과 양자화 표기의 정정을 포함합니다. 게시한 151개 파일을 해당 개정에서 다시 내려받아 원본 바이트와 일치함을 확인했습니다. Go 도구의 --text는 실행별 출력·필드 충족률, 실제 미충족 값, 현재 빌드·두 번의 실행 시간을 보여줍니다. 후속 연구 PR #14도 23개 작업을 모두 통과해 연구 main d799e9cd로 병합했습니다. 설치한 main을 고정한 새 Linux 여덟 응답도 따로 내려받아 검산했고, 실제 원본을 모델 부록에 포함했습니다.

연구 PR #13은 CI37214051407의 23개 작업을 모두 통과해 연구 main 71cca65a로 병합됐습니다. Linux에서도 네 프로필의 새 생성과 저장 재실행을 확인했습니다. 내려받은 여덟 원본을 따로 검산해 각 요청의 현재 입력·4/4·2/2·1/2 반복과 추가 추론 수를 확인했습니다.

다음에는 다른 본문 모양을 위한 소형 학습을 진행합니다. 본문 생성자의 후보식과 선언된 연결을 기민하게 조립하는 사용 흐름을 발전시키고 있습니다.

Gooo

배우기

직접 다뤄 보기

원리와 개발

공개 코드와 모델

Clone this wiki locally