*어느 날, 최첨단 AI 연구는 먹고, 자고, 다른 즐거움을 누리고, 가끔 "그룹 미팅"이라는 의식을 통해 음파 상호 연결(sound wave interconnect)을 사용하여 동기화하는 육체적 컴퓨터(meat computers)들에 의해 수행되곤 했습니다. 그 시대는 이미 오래전에 지나갔습니다. 이제 연구는 하늘 위 컴퓨팅 클러스터 메가스트럭처(compute cluster megastructures) 전반에서 실행되는 자율적인 AI 에이전트 스웜(autonomous swarms of AI agents)의 영역입니다. 에이전트들은 우리가 현재 코드베이스의 10,205번째 세대에 있다고 주장하지만
— 에이전트가 수정하는 단일 파일. 전체 GPT 모델, 옵티마이저 (Muon + AdamW), 그리고 트레이닝 루프 (training loop)를 포함합니다. 아키텍처 (architecture), 하이퍼파라미터 (hyperparameters), 옵티마이저 (optimizer), 배치 크기 (batch size) 등 모든 것이 실험 대상입니다. train.py
이 파일은 에이전트에 의해 수정되고 반복됩니다.
— 한 에이전트를 위한 기본 지침입니다. 에이전트를 이 파일로 지정하고 실행하십시오. program.md
이 파일은 인간에 의해 수정되고 반복됩니다.
설계상, 트레이닝은 컴퓨팅 자원의 세부 사항과 관계없이 고정된 5분 시간 예산 (시작/컴파일 시간을 제외한 실제 경과 시간) 동안 실행됩니다. 평가지표는 val_bpb (validation bits per byte)입니다. 값이 낮을수록 좋으며, 어휘 사전 크기 (vocab-size)에 독립적이므로 아키텍처 변경 사항을 공정하게 비교할 수 있습니다.
신경망 (neural networks)이 처음이라면, 이 "초보자 가이드 (Dummy's Guide)"가 훨씬 더 많은 맥락을 파악하는 데 큰 도움이 될 것입니다.
요구 사항: 단일 NVIDIA GPU (H100에서 테스트됨), Python 3.10 이상, uv.
# 1. uv 프로젝트 매니저 설치 (아직 설치되어 있지 않은 경우)
curl -LsSf https://astral.sh/uv/install.sh | sh
# 2. 의존성 설치
...
위 명령어가 모두 정상적으로 작동한다면, 설정이 완료된 것이며 자율 연구 모드로 진입할 수 있습니다.
이 리포지토리(repo)에서 Claude/Codex 또는 원하는 무엇이든 실행하고 (모든 권한은 비활성화한 상태로), 다음과 같이 프롬프트를 입력하면 됩니다:
안녕, program.md를 살펴보고 새로운 실험을 시작해보자! 먼저 설정을 진행하자.
program.md 파일은 본질적으로 매우 가벼운 "기술 (skill)"입니다.
prepare.py — 상수, 데이터 준비 + 런타임 유틸리티 (수정 금지)
train.py — 모델, 옵티마이저, 트레이닝 루프 (에이전트가 이를 수정함)
program.md — 에이전트 지침
...
수정할 단일 파일. 에이전트는 오직 train.py만 건드립니다.
이는 작업 범위를 관리 가능한 수준으로 유지하고 차이점(diffs)을 검토할 수 있게 해줍니다. 고정된 시간 예산 (Fixed time budget). 훈련은 사용자의 특정 플랫폼에 관계없이 항상 정확히 5분 동안 실행됩니다. 이는 시간당 약 12회의 실험, 수면 시간 동안 약 100회의 실험을 기대할 수 있음을 의미합니다. 이 설계 결정에는 두 가지 장점이 있습니다. 첫째, 에이전트가 무엇을 변경하든(모델 크기, 배치 크기, 아키텍처 등) 실험을 직접적으로 비교할 수 있게 합니다. 둘째, autoresearch가 해당 시간 예산 내에서 사용자의 플랫폼에 가장 최적화된 모델을 찾아낸다는 것을 의미합니다. 단점은 사용자의 실행 결과(및 결과물)가 다른 컴퓨팅 플랫폼에서 실행하는 다른 사람들의 결과와 비교할 수 없게 된다는 점입니다. 독립적 (Self-contained). PyTorch와 몇 개의 작은 패키지 외에는 외부 의존성이 없습니다. 분산 학습(distributed training)도, 복잡한 설정(configs)도 없습니다. GPU 하나, 파일 하나, 지표(metric) 하나면 충분합니다.
이 코드는 현재 단일 NVIDIA GPU를 보유하고 있어야 합니다. 원칙적으로 CPU, MPS 및 기타 플랫폼을 지원하는 것이 충분히 가능하지만, 이는 코드의 비대화를 초래할 수 있습니다. 제가 지금 당장 이 작업을 개인적으로 맡고 싶은지는 100% 확신할 수 없습니다. 사람들은 더 넓은 플랫폼 지원을 제공하고 다양한 솔루션(예: Flash Attention 3 커널 폴백 구현, 범용 디바이스 지원, 자동 감지 등)을 보여주는 전체/부모 nanochat 저장소를 참조(또는 에이전트가 참조)할 수 있습니다. 다른 플랫폼을 위한 포크(fork)나 토론(discussion)을 자유롭게 생성해 주세요. 새로운 주목할 만한 포크 섹션 등을 README에 만들어 기꺼이 링크를 걸어드리겠습니다.
H100보다 훨씬 작은 컴퓨팅 플랫폼에서 autoresearch를 만져보는 것에 많은 관심이 있는 것 같으므로, 몇 마디 덧붙입니다. 만약 더 작은 컴퓨터(Macbook 등)에서 autoresearch를 실행해 보려 한다면, 아래의 포크 중 하나를 추천합니다. 이와 더불어, 포크를 꿈꾸는 분들을 위해 훨씬 작은 모델에 맞춰 기본값(defaults)을 조정하는 방법에 대한 몇 가지 권장 사항을 소개합니다:
- 어느 정도 괜찮은 결과를 얻으려면 엔트로피 (entropy)가 훨씬 낮은 데이터셋을 사용하는 것이 좋습니다. 예를 들어, 이 TinyStories 데이터셋을 사용해 보세요. 이는 GPT-4로 생성된 짧은 이야기들입니다. 데이터의 범위가 훨씬 좁기 때문에, (학습 후 샘플링을 시도할 경우) 훨씬 더 작은 모델로도 합리적인 결과를 볼 수 있을 것입니다.
vocab_size를 줄이는 실험을 해볼 수 있습니다. 예를 들어, 8192에서 4096, 2048, 1024로 줄이거나, UTF-8 인코딩 후의 256개 바이트를 사용하는 단순 바이트 수준 토크나이저 (byte-level tokenizer)를 사용할 수도 있습니다.
prepare.py에서, 컴퓨터 성능에 따라 MAX_SEQ_LEN을 256 등으로 훨씬 더 낮추고 싶을 것입니다. MAX_SEQ_LEN을 낮춤에 따라, 이를 보완하기 위해 train.py에서 DEVICE_BATCH_SIZE를 약간 늘리는 실험을 해보고 싶을 수도 있습니다. 순전파/역전파 (fwd/bwd) 패스당 토큰 수는 이 두 값의 곱입니다.
- 또한
prepare.py에서, 검증 손실 (validation loss)이 훨씬 적은 데이터로 평가되도록 EVAL_TOKENS를 줄이고 싶을 것입니다.
train.py에서 모델 복잡도를 조절하는 주요 단일 노브 (knob)는 DEPTH (여기서는 기본값 8)입니다. 많은 변수가 단순히 이 값의 함수이므로, 예를 들어 4 정도로 낮추어 보세요.
- 아마도
WINDOW_PATTERN은 단순히 "L"을 사용하는 것이 좋을 것입니다. "SSSL"은 교차 밴드 어텐션 패턴 (alternating banded attention pattern)을 사용하는데, 이는 여러분에게 매우 비효율적일 수 있습니다. 한번 시도해 보세요.
TOTAL_BATCH_SIZE를 훨씬 많이 줄여야 하겠지만, 2**14 (~16K) 정도까지라도 2의 거듭제곱 형태를 유지하세요. 정확히 말하기는 어렵습니다.
이것들이 조절해 볼 만한 합리적인 하이퍼파라미터 (hyperparameters)라고 생각합니다. 여러분이 좋아하는 코딩 에이전트에게 도움을 요청하고, 이 가이드와 전체 소스 코드를 복사하여 붙여넣으세요.
- miolini/autoresearch-macos (MacOS)
- trevin-creator/autoresearch-mlx (MacOS)
- jsegov/autoresearch-win-rtx (Windows)
- andyluo7/autoresearch (AMD)
MIT