WARNING
Для работы этого проекта требуется графический процессор NVIDIA (протестировано на H100).
Представьте: пока вы спите, ИИ самостоятельно подбирает гиперпараметры, обучается и проводит эксперименты. Проснувшись утром, вы видите логи экспериментов и улучшенную модель — это и есть autoresearch. Это минималистичный фреймворк для автономных исследований, в котором ИИ-агент сам правит скрипты обучения GPT, запускает тесты, оценивает результаты и итерирует процесс. Вам остается только наблюдать.
Целевая аудитория
- Разработчики, интересующиеся автономными ИИ-агентами (AI Research Agents)
- Те, кто хочет понять процесс обучения LLM с инженерной точки зрения
- Все, кому любопытно посмотреть, как ИИ может совершенствовать сам себя
Основные зависимости и окружение
- Python 3.10+
- NVIDIA GPU (протестировано на H100)
- Менеджер пакетов uv
Структура проекта
autoresearch/
├── prepare.py # Константы, подготовка данных, токенизатор (не изменять)
├── train.py # Модель, оптимизатор, цикл обучения (агент правит это)
├── program.md # Инструкции для агента (человек правит это)
├── pyproject.toml # Зависимости
└── results.tsv # Логи экспериментов (генерируются автоматически)
Репозиторий намеренно сделан минималистичным — важны всего три файла. Такой дизайн делает область экспериментов контролируемой, а изменения (diff) — удобными для проверки.
Пошаговое руководство
Шаг 1: Установка uv
Сначала установите менеджер пакетов uv:
curl -LsSf https://astral.sh/uv/install.sh | sh
TIP
В Windows можно использовать winget install astral-sh.uv или скачать установщик с официального сайта.
Шаг 2: Установка зависимостей
Клонируйте репозиторий и установите зависимости:
git clone https://github.com/karpathy/autoresearch.git
cd autoresearch
uv sync
На этом этапе установятся PyTorch и другие необходимые пакеты.
Шаг 3: Подготовка данных и токенизатора
Запустите скрипт одноразовой подготовки данных:
uv run prepare.py
Это займет около 2 минут: скачаются данные и обучится BPE-токенизатор. Данные будут сохранены в ~/.cache/autoresearch/.
Шаг 4: Запуск базового обучения (baseline)
Сначала запустим обучение вручную, чтобы установить точку отсчета:
uv run train.py
Обучение длится ровно 5 минут (без учета времени запуска и компиляции). Основная метрика — val_bpb (биты на байт на проверочной выборке): чем ниже, тем лучше.
По завершении вы увидите вывод, похожий на этот:
---
val_bpb: 0.997900
training_seconds: 300.1
total_seconds: 325.9
peak_vram_mb: 45060.2
mfu_percent: 39.80
total_tokens_M: 499.6
num_steps: 953
num_params_M: 50.3
depth: 8
Этот результат — наш baseline. Теперь передадим эстафету ИИ.
Шаг 5: Подключение ИИ-агента
Создайте новую ветку для эксперимента:
git checkout -b autoresearch/mar15
Инициализируйте файл результатов:
echo -e "commit\tval_bpb\tmemory_gb\tstatus\tdescription" > results.tsv
Запустите вашего ИИ-агента (Claude, Codex и т.д., убедившись в наличии прав на выполнение команд):
claude
И дайте ему команду:
Hi have a look at program.md and let's kick off a new experiment! let's do the setup first.
Агент прочитает program.md, поймет процесс и начнет самостоятельно итерировать train.py.
Шаг 6: Понимание цикла эксперимента
Агент будет циклически выполнять следующие действия:
- Модификация
train.py— изменение архитектуры, гиперпараметров или оптимизатора. - Git commit — сохранение изменений.
- Запуск эксперимента —
uv run train.py > run.log 2>&1. - Чтение результатов —
grep "^val_bpb:\|^peak_vram_mb:" run.log. - Запись в
results.tsv— логирование данных. - Принятие решения:
- val_bpb снизился → сохранить коммит и продолжать.
- val_bpb ухудшился → git reset и поиск другой идеи.
TIP
Агент работает полностью автономно. Не спрашивайте его «продолжать ли?» — просто дайте ему работать. Каждый цикл занимает около 5 минут, что позволяет проводить ~12 экспериментов в час.
Разбор ключевых инструкций из program.md
program.md — это «мозг» вашего ИИ-исследователя. Основные принципы:
- Фиксированный бюджет времени — всегда 5 минут для сопоставимости результатов.
- Правка только одного файла — разрешено изменять только
train.py. - Никаких новых зависимостей — использовать только то, что есть в
pyproject.toml. - Принцип простоты — небольшое улучшение не стоит резкого усложнения кода.
Первым делом агент всегда должен запустить baseline для сравнения.
Формат вывода
Результаты записываются в results.tsv с разделением табуляцией:
commit val_bpb memory_gb status description
a1b2c3d 0.997900 44.0 keep baseline
b2c3d4e 0.993200 44.2 keep increase LR to 0.04
c3d4e5f 1.005000 44.0 discard switch to GeLU activation
Используйте именно tab, а не запятую, так как запятые могут встречаться в описании.
Устранение типичных проблем
1. Данные не готовы
Ошибка: FileNotFoundError, файлы кэша не найдены.
Решение: Сначала запустите uv run prepare.py.
2. Нехватка памяти (OOM)
Ошибка: CUDA out of memory.
Решение: Агент должен сам это заметить и пометить как "crash". Типичные правки:
- Уменьшить
TOTAL_BATCH_SIZEвtrain.py. - Уменьшить количество слоев (
DEPTH). - Использовать меньшую длину последовательности.
3. Тайм-аут обучения
Ошибка: Работает дольше 10 минут.
Решение: Принудительно завершите процесс. Пометьте эксперимент как "discard" и откатитесь.
4. Агент бездействует
Проблема: Агент читает файлы, но не запускает обучение.
Решение: Убедитесь, что агент запущен в правильной директории и имеет права на исполнение команд в терминале.
5. Результаты хуже baseline
Проблема: Все эксперименты дают плохие результаты.
Решение:
- Попробуйте радикальные изменения архитектуры (внимание, функции активации).
- Настройте скорость обучения (Learning Rate).
- Попробуйте разные оптимизаторы (например, Muon вместо AdamW).
6. Несовместимость платформ
Ошибка: "No CUDA GPUs available".
Решение: Код требует NVIDIA GPU. Для других систем используйте форки:
- autoresearch-macos — MacOS
- autoresearch-mlx — MacOS Apple Silicon
- autoresearch-win-rtx — Windows
Продвинутые советы
Как играть с маленькой видеокартой
Если у вас нет H100, попробуйте следующее:
- Используйте датасет TinyStories (узкая область, лучше для малых моделей).
- Снизьте
vocab_sizeс 8192 до 2048 или даже 256 (byte-level). - Уменьшите
MAX_SEQ_LENвprepare.pyдо 256 или ниже. - Снизьте
TOTAL_BATCH_SIZEдо2**14(~16K). - Установите
WINDOW_PATTERNв значение "L" для упрощенного механизма внимания.
Дальнейшее развитие
Освоившись, вы можете:
- Изменить
program.md, добавив агентов с разными ролями. - Попробовать разные датасеты.
- Добавить более сложные метрики оценки.
- Реализовать многопроцессорное обучение (потребует правки prepare.py).
Полезные ресурсы
- Официальный репозиторий
- Твит Карпати с анонсом
- nanochat — родительский проект с поддержкой разных платформ
- Гайд по нейросетям для новичков