Опубликован исходный код распределённой файловой системы 3FS (Fire-Flyer File System), разработанной для использования в инфраструктурах тренировки и выполнения крупных моделей машинного обучения. ФС входит в состав AI-платформы Fire-Flyer и используется китайской компанией DeepSeek, развивающей языковые модели, охватывающие более 600 миллиардов параметров. Целью создания 3FS называется предоставление совместного хранилища для упрощения разработки распределённых приложений. Работа ФС оптимизирована для использования в сетях RDNA и хранения информации на SSD-накопителях. Код 3FS написан на языке С++ (ChunkEngine на Rust) и открыт под лицензией MIT.
ФС рассчитана на высокопроизводительную обработку большого числа операций случайного чтения данных, для которых не эффективны традиционные техники кэширования и упреждающего чтения. Подобная активность свойственна системам обучения AI-моделей, которые в пакетном режиме запрашивают небольшие порции несвязанных между собой и не повторяющихся данных. Для работы в обход файлового кэша и прямого обращения к носителям в 3FS применяется режим Direct I/O и интерфейсы ядра Linux io_uring и AIO. Проблема выравнивания размера, указателей и смещений при прямом обращении к накопителю решена через учёт выравнивания на уровне самой файловой системы.
Содержимое файлов разбивается на блоки одинакового размера, которые распределяются по нескольким цепочкам репликации. Размеры блока, цепочки репликации и таблицы репликации могут определяться в привязке к отдельным каталогам. Каждый блок имеет уникальный идентификатор и сохраняется независимо в разных сервисах хранения, а итоговый файл образуется путём логического объединения блоков. При создании файла блоки выбираются с расчётом на достижение равномерной нагрузки на узлы хранения и SSD-накопители.
Работу ФС обеспечивают менеджер кластера, сервис метаданных, сервис хранения и клиент, которые соединены через сеть RDMA (InfiniBand или RoCE). Менеджер кластера отвечает за изменение состава кластера и доставку конфигурации сервисам и клиентам. Одновременно работает несколько менеджеров кластера, один из которых имеет статус первичного (в случае сбоя, статус первичного занимает другой экземпляр).
Сервисы метаданных воссоздают семантику файловой системы и отвечают за предоставление метаданных и списков блоков, связанных с файлами и каталогами. Для распределённого хранения метаданных и конфигурации кластера используется FoundationDB. Клиент может подключаться к любому сервису метаданных, которые равноправны и работают без учёта состояния (stateless).
Сервисы хранения управляют доступом к локальным SSD-накопителям и предоставляют интерфейс для доступа к данным на уровне блоков. Для обеспечения согласованности реплицированных данных применяется механизм CRAQ (Chain Replication with Apportioned Queries), подразумевающий возможность чтения любого реплицированного блока, но обязательное подтверждение всех реплицированных операций записи.
Для работы с ФС предлагается два клиента: на базе FUSE и нативный.
Для оптимизации выполнения готовых больших языковых моделей предлагается техника KVCache, позволяющая кэшировать ключи и значения векторов ранее вычисленных токенов при работе декодировщика модели.
Проведено тестирование производительности кластера, включающего 180 узлов хранения (на каждом узле по два адаптера 200Gbps InfiniBand и 16 накопителей 14TiB NVMe SSD) и более 500 узлов с клиентским ПО (на каждом узле по одному адаптеру 200Gbps InfiniBand). Средняя пропускная способность для подобного кластера в процессе выполнения задач машинного обучения составила 6.6 TiB/s. Также протестирован небольшой кластер из 25 узлов хранения и 50 вычислительных узлов, производительность прохождения теста GraySort на котором составила 3.66 TiB/min при выполнении сортировки 110.5 TiB данных.