SkyPilot и Hugging Face объединили усилия: запуск ИИ-задач на любом облаке с бесплатным чтением данных из хранилища Hugging Face

Компании SkyPilot и Hugging Face совместно выпустили новый вид хранилища для SkyPilot, store: hf, доступный через схему адресов hf://. Идея: модели и датасеты хранятся на Hugging Face Hub, а вычисления (разработка, обучение, инференс) SkyPilot запускает там, где есть свободные GPU, на любом из 20+ облаков, в Kubernetes, Slurm или на собственном оборудовании. Раньше объектные хранилища привязывали задачу к конкретному облаку: большинство провайдеров берут плату за исходящий трафик (egress), например около $0.09 за гигабайт у AWS, и команды были вынуждены закреплять каждый запуск за тем облаком, где физически лежат данные, оставляя остальные зарезервированные мощности простаивать. Hugging Face Storage такую плату за чтение не берёт вообще, только за запись, которая и так тарифицируется обычным облаком-исполнителем.
В файле file_mounts указывается путь вида hf://buckets/org/name (бакет для чтения-записи, например чекпоинтов) или hf://Qwen/Qwen3.5-4B (модель/датасет, только чтение), режим MOUNT (ленивое монтирование через FUSE-драйвер hf-mount) или COPY (полная выгрузка через библиотеку huggingface_hub заранее). При MOUNT данные читаются лениво: код может начать обработку большого файла ещё до его полной закачки, а повторные чтения кешируются на диск, GPU не простаивает в ожидании копирования датасета. Авторизация, тот же токен HF_TOKEN, что и раньше, передаётся через --secret HF_TOKEN и работает на любом из облаков без отдельных ключей доступа к бакетам под каждого провайдера.
Команды привели результаты собственного бенчмарка: дообучение модели Qwen/Qwen3.5-4B на датасете HuggingFaceH4/Multilingual-Thinking с помощью TRL SFTTrainer запускалось одним и тем же YAML-файлом SkyPilot на AWS, GCP и Lambda (менялся только флаг --infra), при этом все три облака читали и писали в один и тот же бакет. Модель загружалась и была готова к обучению примерно за 30 секунд на скорости до 500 МБ/с, и это чтение не стоило ничего, тогда как хранение модели в S3 обошлось бы в egress-плату при каждом обращении GPU с другого облака. Чекпоинты (по 8,43 ГБ весов) записывались в бакет со скоростью до ~170 МБ/с и сохранялись уже после остановки инстанса с GPU. По цене хранение Hugging Face Storage оценивается в $12, 18 за ТБ в месяц против примерно $23 за ТБ плюс egress у AWS S3.
Бакеты Hugging Face построены на технологии Xet, которая разбивает файлы на чанки примерно по 64 КБ по содержимому и хранит каждый уникальный чанк один раз. Это даёт экономию в нескольких сценариях: инкрементальные чекпоинты и адаптеры при заморозке слоёв передают только изменившиеся чанки; вариации одной базовой модели (файнтюны, квантизации) хранят общие чанки один раз на всех; при дозаписи датасетов (например, построчном добавлении в Parquet-таблицы) передаются только новые строки, в тесте Hugging Face дозапись 10 тысяч строк в таблицу из 100 тысяч строк потребовала передать около 10 МБ вместо полных ~106 МБ. Повторная выгрузка уже сохранённого блока 8,43 ГБ заняла около 8 секунд против 24 секунд при первой загрузке, поскольку передаются только хеши чанков; тот же механизм позволяет серверной команде hf buckets cp копировать данные между репозиториями и бакетами по ссылке, без повторной передачи байтов.
Для начала работы нужно установить pip install "skypilot[huggingface]", авторизоваться командой hf auth login (или задать HF_TOKEN) и добавить hf:// монтирование в любую задачу SkyPilot. Режим MOUNT требует базового образа с glibc 2.34+ и доступом к /dev/fuse. Первоначальный вклад store: hf сделал независимый контрибьютор Никхил Джа (Nikhil Jha), команда Hugging Face довела реализацию до продакшена и добавила в апстрим исправления FUSE-драйвера hf-mount, которые позволяют монтировать хранилище в непривилегированных контейнерах, таких, что используются по умолчанию во многих кластерах Kubernetes. Весь стек, SkyPilot, hf-mount и huggingface_hub, с открытым исходным кодом.
Ключевые факты
- SkyPilot и Hugging Face выпустили общий бэкенд хранилища store: hf со схемой адресов hf://, модели и датасеты остаются на Hub, вычисления SkyPilot запускает на любом из 20+ облаков
- Чтение данных с Hugging Face Storage бесплатно (нет платы за egress), в отличие от AWS S3, где выход трафика стоит около $0.09 за ГБ; хранение оценивается в $12, 18 за ТБ в месяц против ~$23 у S3
- В бенчмарке на AWS, GCP и Lambda модель Qwen3.5-4B загружалась за ~30 секунд на скорости до 500 МБ/с, чекпоинты (8,43 ГБ) писались в бакет со скоростью до ~170 МБ/с
- Хранилище построено на технологии дедупликации Xet: дозапись 10 тысяч строк в таблицу потребовала передать ~10 МБ вместо полных ~106 МБ, повторная загрузка уже сохранённого блока заняла 8 секунд вместо 24
- Начальный вклад в реализацию store: hf сделал независимый разработчик Никхил Джа, весь стек (SkyPilot, hf-mount, huggingface_hub) открытый; для запуска нужны pip install "skypilot[huggingface]" и HF_TOKEN
Почему это важно
GPU-мощности сегодня редко сосредоточены у одного провайдера: команды держат зарезервированные квоты сразу у нескольких облаков и на собственном оборудовании и хотят запускать задачи там, где в моменте есть свободные видеокарты. До сих пор этому мешало хранилище: объектные хранилища привязаны к конкретному облаку и региону, и чтение данных с чужого облака означает либо дублирование копий в бакетах каждого провайдера, либо оплату egress-трафика поверх уже оплаченных GPU. Совместное решение SkyPilot и Hugging Face убирает именно эту статью расходов на стороне чтения: один и тот же бакет на Hugging Face Hub одинаково доступен с любого из облаков, и чтение с него бесплатно независимо от того, где физически находятся вычисления.
Кому это важно
В первую очередь, ML-инженерам и MLOps-командам, которые обучают и обслуживают модели на нескольких облачных провайдерах одновременно (гибридные схемы с зарезервированными мощностями у гиперскейлеров, нео-облаков и собственных кластеров Kubernetes/Slurm). Также это касается команд, которые уже держат модели и датасеты на Hugging Face Hub и хотят использовать эти данные как единый источник для обучения и инференса без миграции в отдельное объектное хранилище и без создания нового аккаунта для хранения.
Как это применить
Нужно установить pip install "skypilot[huggingface]", авторизоваться через hf auth login или переменную окружения HF_TOKEN, и в описании задачи SkyPilot (file_mounts) указать источник вида hf://buckets/org/name для чтения-записи или hf://org/model (либо hf://datasets/...) для готовых репозиториев с моделями и датасетами, с параметром store: hf и режимом MOUNT (ленивое монтирование через FUSE, часть данных читается по мере обращения) или COPY (полная выгрузка заранее через huggingface_hub). Один и тот же YAML-файл запускается на разных облаках через флаг --infra без изменений в остальной конфигурации. Для режима MOUNT нужен базовый образ с glibc версии 2.34 или новее и доступом к /dev/fuse.
Можно ли доверять
Материал, официальный совместный пост команд SkyPilot и Hugging Face с описанием функциональности и результатами собственного бенчмарка (не независимой проверки), поэтому конкретные цифры скорости и экономии стоит воспринимать как ориентир от разработчиков, а не как гарантированные показатели для любой нагрузки. При этом весь программный стек, SkyPilot, FUSE-драйвер hf-mount и клиент huggingface_hub, открытый, начальный вклад в реализацию store: hf сделал независимый контрибьютор Никхил Джа, а команда Hugging Face публично упоминает, что довела исправления FUSE-драйвера до апстрима, что снижает вероятность лишь маркетингового описания без реальной кодовой базы.
Риски и подводные камни
Плата за запись сохраняется, egress с облака, где идёт обучение, тарифицируется как обычно, бесплатно только чтение. Приведённый бенчмарк, единичный тест на одной задаче дообучения на трёх облаках, а не всесторонний замер под разные типы нагрузок и объёмы данных. Выигрыш от дедупликации Xet зависит от того, насколько сильно пересекаются чекпоинты и варианты моделей между собой, для полностью различных данных экономии не будет. Режим MOUNT предъявляет требования к базовому образу (glibc 2.34+, /dev/fuse), что может потребовать доработки существующих контейнеров. Наконец, перенос части инфраструктуры хранения на Hugging Face Storage означает дополнительную зависимость от этого провайдера как единой точки хранения данных для мультиоблачных запусков.