New-ZZZ
RU / EN

OpenAI создает Pando: Масштабирование Git для разработки масштаба агентов

Р
Редакция New-ZZZ
OpenAI Blog · 5 дней назад

OpenAI объявила о разработке Pando — революционного нового бэкенда, предназначенного для обработки огромных требований к масштабированию, предъявляемых системам контроля версий, и конкретно нацеленного на потребности их массивного монорепозитория. Эта инициатива была вызвана экспоненциальным ростом сложности разработки и параллельной работы, став возможной благодаря продвинутым инструментам ИИ, таким как Codex. Огромный масштаб параллельной разработки — включающий многочисленных инженеров, исследовательские задания и CI pipelines — создал беспрецедентные требования к существующей инфраструктуре Git, что привело к значительным узким местам производительности, включая медленные операции fetch, медленные операции push и проблемы с надежностью, которые иногда опускались ниже 90%. Команда признала, что хотя сам Git является надежной системой, способ обслуживания и управления монорепозиторием достиг своего операционного предела, что потребовало фундаментальной переработки бэкенда при сохранении привычного и критически важного рабочего процесса Git для всех пользователей, включая автоматизированных агентов.

Pando был разработан с двумя основными, амбициозными целями: достижение горизонтально масштабируемых операций записи, что означает оптимизацию для параллельных операций push в множество различных веток, и максимизация пропускной способности чтения, гарантируя, что клиенты могут загружать данные достаточно быстро, чтобы полностью насытить доступную пропускную способность сети. Достигнув этих целей, Pando успешно обеспечивает всю разработку в монорепозитории OpenAI. Что особенно важно, система была разработана для сохранения полной совместимости с установленным протоколом Git и клиентскими инструментами. Эта совместимость была жизненно важна, поскольку она позволила как человеческим инженерам, так и сложным AI-агентам беспрепятственно внедрить Pando в свои существующие, глубоко укоренившиеся рабочие процессы без необходимости масштабной, прерывистой миграции инструментов или процессов. В реальном производственном тестировании Pando продемонстрировал драматическое улучшение, сократив медианную задержку push почти в пять раз, и теперь он управляет передачей почти петабайта данных Git каждый день.

Решение о создании нового бэкенда при сохранении совместимости с Git было стратегическим. Команда понимала, что Git формирует основополагающий фундамент их рабочего процесса контроля версий. Создавая улучшения поверх установленной модели Git, они гарантировали, что полученные достижения будут принадлежать не только OpenAI, но и могут быть переданы в более широкое, вышестоящее сообщество Git, принося пользу всей экосистеме разработчиков. Такой подход позволил им решить внутренние проблемы масштабирования, одновременно внося вклад в глобальный стандарт инструментов разработки программного обеспечения.

Масштабирование системы контроля версий по своей сути включает управление двумя различными, но одинаково критически важными измерениями: большой объем множества писателей, отправляющих обновления в различные ветки, и столь же большой объем множества читателей, загружающих одни и те же исторические данные. Pando решает обе эти задачи с помощью сложных архитектурных решений. Во-первых, Pando координирует обновления каждой ветки независимо. Это означает, что обновления, происходящие в несвязанных ветках, могут проходить параллельно, значительно повышая масштабируемость записи. Когда читатель загружает определенную ветку, он получает точную историю, необходимую для этой ревизии. Однако архитектура отмечает необходимый компромисс: клиент, пытающийся просмотреть несколько разных веток одновременно, может увидеть их в несколько разные моменты времени, что отражает независимые циклы обновления.

Во-вторых, и, возможно, наиболее эффективно для производительности чтения, Pando реализует механизм повторного использования packfiles для множественных загрузок клиентов. В традиционных системах создание packfile (оптимизированный формат Git для сжатия нескольких объектов) может включать создание уникального файла для каждого клиента. Pando избегает этих вычислительных накладных расходов, обслуживая одни и те же базовые байты для многих разных клиентов. Клиент может запросить некоторые объекты, которыми он уже обладает локально, но сервер может эффективно предоставить эти одни и те же байты многочисленным пользователям с минимальными дополнительными вычислениями, резко повышая эффективность чтения и снижая нагрузку на сервер. Эти комбинированные стратегии — параллельные обновления веток для записи и повторное использование packfile с оптимизацией кэша для чтения — и позволяют системе эффективно масштабироваться в ответ на огромные требования современной разработки, управляемой ИИ.

Чтобы в полной мере оценить техническое достижение Pando, необходимо понять базовую механику самого Git. По своей сути, репозиторий Git должен синхронизировать две взаимосвязанные части: объекты и ссылки. Git записывает снимки файлов и всю историю, связывающую их, которая структурирована как направленный ациклический граф (DAG) объектов. Сами объекты классифицируются на несколько типов: Blobs, которые просто хранят необработанное содержимое отдельного файла; Trees, которые отвечают за ассоциацию имен с блобами или другими деревьями, тем самым формируя иерархическую структуру каталогов; Commits, которые указывают на корневое дерево и ноль или более родительских коммитов, тем самым определяя историческую родословную; и Tags, которые являются указателями на конкретные точки в истории. Все объекты идентифицируются по уникальному хешу, полученному из их типа и содержимого, и они фундаментально неизменяемы. Если файл изменяется, создается новый blob; если он остается неизменным, используется существующий объект, что является ключом к эффективности Git.

Ссылки, или 'refs', — это указатели, которые делают историю доступной. Они указывают на конкретные коммиты. Когда разработчик делает коммит в ветку, создается новый коммит, и ссылка ветки обновляется, чтобы указывать на этот новый коммит. Вся структура взаимосвязана: объекты Git ссылаются друг на друга по их уникальным ID, коммиты указывают на деревья, а деревья указывают на другие деревья и блобы. Например, ссылка ветки refs/heads/main указывает на конкретный коммит (C2). Этот коммит C2, в свою очередь, указывает на корневое дерево (T2), которое диктует, что такой файл, как parser.py, ссылается на конкретный blob (B2). Родительский коммит (C1) указывает на другое корневое дерево (T1), где тот же файл с именем parser.py может ссылаться на другой blob (B1). Эта сложная, взаимосвязанная графовая структура — то, что управляет Git, и способность Pando масштабировать это управление графом до петабайтных уровней при сохранении совместимости является основной технической особенностью проекта. Способность обрабатывать петабайты данных ежедневно при сохранении почти оригинальной совместимости с Git является определяющим достижением Pando, обеспечивающим следующее поколение разработки в масштабе агентов.

Почему это важно

  • —Он решает критические инфраструктурные узкие места для крупномасштабной разработки ИИ, обеспечивая беспрецедентный уровень параллельной работы.
  • —Дизайн Pando обеспечивает горизонтальную масштабируемость для операций записи и максимизирует пропускную способность чтения, обрабатывая петабайты данных ежедневно.
  • —Сохраняя совместимость со стандартным протоколом Git, OpenAI гарантирует, что его масштабные инфраструктурные улучшения могут быть приняты более широким сообществом разработчиков и ИИ-агентами.

Ключевые факты

  • Pando — это новый бэкенд для репозиториев Git, питающий монорепозиторий OpenAI.
  • Он был создан для обработки огромного параллельного объема работы, генерируемого продвинутыми инструментами ИИ, такими как Codex.
  • Pando сократил медианную задержку при пуше почти в 5 раз и обрабатывает почти петабайт данных Git в день.
  • Система масштабируется путем координации обновлений каждой ветки независимо и повторного использования packfiles при получении данных клиентами.
Читать первоисточник →

Полный текст — в первоисточнике. Здесь — краткое изложение и ключевые факты.

/ похожие материалы