Перейти к основному содержимому

Тонкая настройка моделей Pi0 и Pi0.5: Платформа машинного обучения роботов с открытым исходным кодом Physical Intelligence

Pi0 и Pi0.5 — это ведущие в отрасли серии моделей Vision-Language-Action (VLA), разработанные командой Physical Intelligence. Эти модели предварительно обучены на больших объемах данных роботов и могут быстро адаптироваться к конкретным робототехническим задачам и сценариям применения посредством тонкой настройки.

Данное руководство основано на официальном фреймворке OpenPI от Physical Intelligence и подробно описывает, как эффективно выполнять тонкую настройку предварительно обученных моделей Pi0/Pi0.5 на пользовательских наборах данных.

Обзор серии моделей

Репозиторий OpenPI в настоящее время предоставляет три типа моделей:

Тип моделиОписаниеОсобенностиСлучаи использования
π₀ (Pi0)Модель Vision-Language-Action на основе потоковГенерация потоков, высококачественное предсказание действийСложные манипуляционные задачи, требования высокой точности
π₀-FASTАвторегрессионная VLA на основе токенизатора действий FASTАвторегрессионная генерация, быстрый выводУправление в реальном времени, требования низкой задержки
π₀.₅ (Pi0.5)Обновленная версия π₀ с лучшей обобщающей способностью в открытом миреОбучение с изоляцией знаний, улучшенная обобщающая способностьРазнообразные среды, междоменные приложения

Примечание: Все модели предварительно обучены на данных роботов объемом более 10 000 часов и предоставляют базовые контрольные точки модели для тонкой настройки.

Предварительные требования и настройка среды

Системные требования

Минимальная конфигурация:

  • Python 3.11+ (рекомендуется использовать менеджер пакетов uv)
  • GPU: Для обучения требуется NVIDIA GPU (рекомендуется A100/H100)
  • Память: 32GB+ системной оперативной памяти
  • Хранилище: 100GB+ доступного дискового пространства

Рекомендуемая конфигурация:

  • Оборудование: NVIDIA A100/H100 или установка с несколькими GPU
  • Хранилище: NVMe SSD-диски
  • Сеть: Стабильное сетевое соединение для загрузки моделей и данных

Установка и настройка среды

Использование менеджера пакетов uv (Рекомендуется)

# Клонировать официальный репозиторий OpenPI
git clone https://github.com/Physical-Intelligence/openpi.git
cd openpi

# Установить зависимости с помощью uv (автоматически создает виртуальную среду)
uv sync

# Проверить установку
uv run python -c "from openpi.policies import policy_config; print('Среда OpenPI настроена успешно!')"

Традиционная установка pip

# Клонировать репозиторий
git clone https://github.com/Physical-Intelligence/openpi.git
cd openpi

# Создать виртуальную среду
python -m venv venv
source venv/bin/activate # Linux/macOS
# или venv\Scripts\activate # Windows

# Установить зависимости
pip install -e .

# Проверить установку
python -c "from openpi.policies import policy_config; print('Среда OpenPI настроена успешно!')"

Подготовка набора данных

Использование экспорта данных платформы AI-O

Платформа данных AI-O предоставляет полную функциональность экспорта данных, позволяя экспортировать аннотированные данные в формат LeRobot, поддерживаемый OpenPI, одним щелчком мыши:

Процесс экспорта:

  1. Выбор формата экспорта: Выберите экспорт в формате LeRobot или HDF5 на платформе AI-O
  2. Фильтрация данных: Фильтруйте необходимые данные по проекту, времени, уровню качества и другим измерениям
  3. Пакетный экспорт: Поддержка пакетной обработки экспорта для крупномасштабных наборов данных
  4. Преобразование формата: Преобразование экспортированных данных в формат LeRobot, требуемый OpenPI

Экспорт данных в формате LeRobot

Требования к формату данных

OpenPI поддерживает несколько форматов данных, наборы данных должны содержать:

  • Данные наблюдений: Изображения, информация о состоянии и т.д.
  • Данные действий: Последовательности действий выполнения роботом
  • Языковые инструкции: Описания задач (опционально, для задач с языковыми условиями)

Конфигурация набора данных

OpenPI использует файлы конфигурации для определения наборов данных и параметров обучения. Вам необходимо:

  1. Создать конфигурацию набора данных: Определить пути к данным, форматы и т.д. в файлах конфигурации
  2. Предварительная обработка данных: Вычислить статистику нормализации
  3. Проверка данных: Убедиться в правильности формата данных
# Вычислить статистику нормализации набора данных (обязательный шаг)
uv run scripts/compute_norm_stats.py <config_name>

# Пример: Вычислить статистику для пользовательской конфигурации
uv run scripts/compute_norm_stats.py my_custom_config

Поддерживаемые форматы данных

OpenPI поддерживает несколько форматов данных роботов, включая:

  • Наборы данных HuggingFace
  • Данные в формате LeRobot
  • Данные в формате HDF5
  • Данные, экспортированные с платформы AI-O (поддерживается через преобразование формата)

Практика обучения модели

Использование платформы AI-O для обучения (Рекомендуется)

Платформа данных AI-O предоставляет полную функциональность обучения модели, поддерживая обучение OpenPI и других моделей машинного обучения роботов:

Обзор обучения на платформе AI-O

Преимущества обучения на платформе:

  • Обучение без кода: Завершите весь процесс обучения через визуальный интерфейс, не требуя опыта программирования
  • Гибкие вычислительные ресурсы: Поддержка частных и публичных облачных вычислительных ресурсов, выделяемых по требованию
  • Мониторинг в реальном времени: Предоставление мониторинга в реальном времени метрик обучения, выходов модели, системных журналов
  • Автоматизированное управление: Поддержка управления контрольными точками, возобновления после прерывания, настройки параметров и других функций

Процесс обучения

  1. Подготовка данных: Выберите экспортированные наборы данных или загрузите внешние данные Выбор источника данных для обучения

  2. Конфигурация модели: Выберите модель Pi0/Pi0.5 и настройте параметры обучения Конфигурация параметров обучения

  3. Мониторинг обучения: Просмотр прогресса обучения и производительности модели в реальном времени Детальный мониторинг обучения

  4. Экспорт модели: Получение контрольных точек модели после завершения обучения Управление контрольными точками модели

Локальное обучение версии JAX

Если вам нужно обучение в локальной среде, OpenPI в основном использует JAX для обучения, обеспечивая оптимальную производительность и стабильность:

# Установить выделение памяти JAX (рекомендуется)
export XLA_PYTHON_CLIENT_MEM_FRACTION=0.9

# Базовая команда обучения
uv run scripts/train.py <config_name> --exp_name <имя_эксперимента>

# Пример: Обучить модель Pi0
uv run scripts/train.py pi0_aloha_sim --exp_name my_pi0_experiment

# Обучение с несколькими GPU (используя FSDP)
uv run scripts/train.py <config_name> --exp_name <имя_эксперимента> --fsdp-devices <количество_gpu>

# Пример: Обучение с использованием 4 GPU
uv run scripts/train.py pi0_aloha_sim --exp_name my_experiment --fsdp-devices 4

Обучение версии PyTorch

OpenPI также поддерживает обучение PyTorch, но сначала требует настройки среды:

Настройка среды PyTorch

# Установить поддержку PyTorch (требует замены файлов transformers)
cp -r src/openpi/models_pytorch/transformers_replace/* .venv/lib/python3.11/site-packages/transformers/

# Предупреждение: Это навсегда изменит библиотеку transformers, может повлиять на другие проекты

Команды обучения PyTorch

# Обучение с одним GPU
uv run scripts/train_pytorch.py <config_name> --exp_name <имя_эксперимента>

# Обучение с несколькими GPU (один узел)
uv run torchrun --standalone --nnodes=1 --nproc_per_node=<количество_gpu> \
scripts/train_pytorch.py <config_name> --exp_name <имя_эксперимента>

# Пример: Обучение с использованием 2 GPU
uv run torchrun --standalone --nnodes=1 --nproc_per_node=2 \
scripts/train_pytorch.py pi0_aloha_sim --exp_name pytorch_experiment

Вывод и развертывание модели

Использование платформы AI-O для развертывания вывода (Рекомендуется)

Платформа данных AI-O предоставляет полные сервисы вывода модели, поддерживая возможности ИИ-вывода во всех сценариях от облачной проверки до пограничного развертывания:

Создание нового сервиса вывода

Преимущества вывода на платформе:

  • Развертывание одним щелчком: Развертывание обученных моделей как производственных сервисов вывода одним щелчком
  • Несколько методов тестирования: Поддержка симуляционного вывода, тестирования файлов MCAP, автономного пограничного развертывания
  • Мониторинг в реальном времени: Предоставление мониторинга в реальном времени состояния сервиса, использования ресурсов, метрик производительности
  • Интеллектуальная адаптация: Автоматическое распознавание и адаптация к требованиям ввода/вывода различных моделей

Функции сервиса вывода

  1. Мониторинг состояния сервиса: Просмотр состояния работы и информации о конфигурации сервиса вывода Детали сервиса вывода

  2. Симуляционное тестирование вывода: Использование случайных данных для быстрой проверки функциональности модели Симуляционное тестирование вывода

  3. Тестирование файлов MCAP: Использование реальных данных роботов для проверки эффективности вывода Тестирование файлов MCAP

  4. Автономное пограничное развертывание: Развертывание сервиса вывода на локальном GPU робота Автономное пограничное развертывание

Сравнение методов развертывания

Метод выводаСлучай использованияОписание
Симуляционное тестирование выводаБыстрая проверкаИспользование случайных данных или пользовательского ввода для быстрой проверки функциональности и производительности вывода модели
Тестирование файлов MCAPПроверка реальных данныхИспользование записанных демонстрационных данных робота для проверки эффективности вывода модели в реальных сценариях
Автономное пограничное развертываниеПрименение в производственной средеРазвертывание сервиса вывода на локальном GPU робота для управления в реальном времени с низкой задержкой

Локальное развертывание сервера политик

Если вам нужно развертывание в локальной среде, OpenPI предоставляет серверы политик для развертывания вывода модели:

# Запустить сервер политик (версия JAX)
uv run scripts/serve_policy.py policy:checkpoint \
--policy.config=<имя_конфигурации> \
--policy.dir=<путь_к_контрольной_точке>

# Пример: Развернуть модель Pi0.5
uv run scripts/serve_policy.py policy:checkpoint \
--policy.config=pi05_droid \
--policy.dir=/path/to/trained/checkpoint

# Развертывание версии PyTorch
uv run scripts/serve_policy.py policy:checkpoint \
--policy.config=pi05_droid \
--policy.dir=/path/to/converted/pytorch/checkpoint

Использование Python API

from openpi.training import config as _config
from openpi.policies import policy_config

# Загрузить конфигурацию
config = _config.get_config("pi05_droid")
checkpoint_dir = "/path/to/trained/checkpoint"

# Создать обученную политику
policy = policy_config.create_trained_policy(config, checkpoint_dir)

# Выполнить вывод
action_chunk = policy.infer(example)["actions"]

Доступные конфигурации

OpenPI предоставляет несколько предопределенных конфигураций, подходящих для различных робототехнических платформ и задач:

Имя конфигурацииОписаниеСлучай использования
pi0_aloha_simМодель Pi0, симуляционная среда ALOHAСимуляционное обучение робота ALOHA
pi05_droidМодель Pi0.5, набор данных DROIDОбучение на данных реального робота
debugКонфигурация отладки, небольшой набор данныхБыстрое тестирование и отладка

Пользовательская конфигурация

Вы можете создать пользовательские файлы конфигурации для адаптации к конкретным наборам данных и требованиям обучения:

# Добавить новую конфигурацию в src/openpi/training/config.py
@config_flags.DEFINE_config_file("config")
def get_config(config_name: str):
# Изменить на основе существующей конфигурации
config = get_base_config()

# Пользовательский путь к набору данных
config.dataset.path = "/path/to/your/dataset"

# Настроить параметры обучения
config.training.learning_rate = 1e-4
config.training.batch_size = 8

return config

Сравнение версий JAX и PyTorch

Настройки точности

Версия JAX:

  1. Вывод: Большинство весов и вычислений используют bfloat16, некоторые вычисления используют float32 для стабильности
  2. Обучение: По умолчанию смешанная точность, веса и градиенты используют float32, активации и вычисления используют bfloat16

Версия PyTorch:

  1. Вывод: Соответствует версии JAX, в основном используя bfloat16
  2. Обучение: Поддерживает полный bfloat16 (по умолчанию) или полный float32, настраивается через pytorch_training_precision

Сравнение производительности

  • Скорость вывода: При использовании torch.compile производительность PyTorch сопоставима с JAX
  • Использование памяти: Версия JAX обычно более эффективна
  • Стабильность: Версия JAX более зрелая и стабильная

Преобразование модели

Если вам нужно преобразовать модели между JAX и PyTorch:

# Преобразовать модель JAX в PyTorch
uv run examples/convert_jax_model_to_pytorch.py \
--checkpoint_dir /path/to/jax/checkpoint \
--config_name <имя_конфигурации> \
--output_path /path/to/pytorch/checkpoint

Решение общих проблем

Оптимизация памяти и производительности

  1. Недостаточно памяти GPU:

    # Установить соотношение выделения памяти JAX
    export XLA_PYTHON_CLIENT_MEM_FRACTION=0.9

    # Использовать FSDP для уменьшения использования памяти
    uv run scripts/train.py <config> --exp_name <name> --fsdp-devices <n>
  2. Оптимизация скорости обучения:

    • Использовать SSD-хранилище для улучшения скорости загрузки данных
    • Соответствующе увеличить размер пакета и накопление градиентов
    • Рассмотрить отключение EMA (экспоненциального скользящего среднего) для экономии памяти

Проблемы, связанные с данными

  1. Ошибка статистики нормализации:

    # Пересчитать статистику нормализации
    uv run scripts/compute_norm_stats.py <config_name>
  2. Неудача загрузки набора данных:

    • Проверить сетевое соединение
    • Для наборов данных HuggingFace убедиться, что вы вошли в систему: huggingface-cli login

Проблемы конфигурации среды

  1. Конфликты зависимостей:

    # Очистить виртуальную среду и переустановить
    rm -rf .venv
    uv sync
  2. Ошибки CUDA:

    • Проверить правильность установки драйверов NVIDIA
    • Для Docker убедиться, что установлен nvidia-container-toolkit
    • Может потребоваться удаление системных библиотек CUDA для избежания конфликтов

Мониторинг и оценка обучения

Журналы обучения

Процесс обучения OpenPI автоматически записывает подробные журналы, включая:

  • Кривые потерь: Тенденции изменения потерь обучения
  • Планирование скорости обучения: Ситуации изменения скорости обучения
  • Использование ресурсов: Использование памяти GPU и вычислений
  • Метрики обучения: Различные метрики оценки

Управление контрольными точками

# Контрольные точки обучения сохраняются в каталоге эксперимента
ls experiments/<exp_name>/checkpoints/

# Возобновить обучение (продолжить с последней контрольной точки)
uv run scripts/train.py <config> --exp_name <name> --resume

# Возобновить с конкретной контрольной точки
uv run scripts/train.py <config> --exp_name <name> --resume --checkpoint_path <path>

Оценка модели

Использование обученных моделей для оценки вывода:

from openpi.policies import policy_config
from openpi.training import config as _config

# Загрузить конфигурацию и модель
config = _config.get_config("pi05_droid")
policy = policy_config.create_trained_policy(config, checkpoint_dir)

# Выполнить вывод
result = policy.infer(observation_data)
actions = result["actions"]

Интегрированная оценка платформы AI-O

Платформа AI-O предоставляет поддержку интеграции для моделей OpenPI, включая:

  • Визуализированное сравнение: Визуальное сравнение между реальными данными и выходами модели
  • Анализ на уровне суставов: Анализ точности предсказания для каждого сустава
  • Статистика успешности задач: Статистика завершения задач после фактического развертывания

Метрики оценки

Количественные метрики

  • Точность действий: Статистика ошибок между предсказанными действиями и реальными действиями
  • Согласованность траектории: Плавность и разумность сгенерированных траекторий
  • Анализ сходимости: Сходимость функции потерь во время процесса обучения

Качественная оценка

  • Проверка на реальном роботе: Тестирование производительности модели на реальных роботах
  • Способность к обобщению: Адаптивность в невидимых сценариях
  • Тестирование робастности: Стабильность при шуме и помехах

Полный рабочий процесс платформы AI-O

Сквозной процесс машинного обучения роботов

Платформа данных AI-O предоставляет полное сквозное решение для моделей OpenPI, поддерживая весь конвейер от сбора данных до развертывания модели:

Преимущества интеграции платформы

Преимущества по сравнению с чистой разработкой OpenPI:

  1. Снижение технических барьеров: Не требуется опыт глубокого обучения и программирования, работа через визуальный интерфейс
  2. Повышение эффективности разработки: Полная автоматизация процесса от данных до модели, значительно сокращающая циклы разработки
  3. Обеспечение качества данных: Профессиональные процессы аннотации данных и контроля качества
  4. Упрощение процесса развертывания: Развертывание в производственную среду одним щелчком, поддержка нескольких методов развертывания
  5. Поддержка непрерывной оптимизации: Предоставление мониторинга производительности модели и механизмов непрерывного улучшения

Рекомендации по использованию

Рекомендуемые случаи использования:

  • Начинающие или нетехнические пользователи: Использование визуального интерфейса платформы AI-O для операций полного процесса
  • Быстрая проверка прототипов: Команды R&D, которым нужно быстро проверить идеи и концепции
  • Развертывание в производственной среде: Нужны стабильные и надежные решения для развертывания производственного уровня
  • Обработка крупномасштабных данных: Проекты, которым нужно обрабатывать большие объемы данных роботов

Сценарии локальной разработки:

  • Потребности глубокой настройки: Продвинутые пользователи, которым нужно изменить архитектуру модели или алгоритмы обучения
  • Исследовательские эксперименты: Академические пользователи, которым нужно проводить исследования алгоритмов и экспериментальные сравнения
  • Автономные среды: Среды с ограничениями сети или высокими требованиями безопасности

Связанные ресурсы

Часто задаваемые вопросы

В: Как выбрать между версиями JAX и PyTorch?

О:

  • Версия JAX: Рекомендуется для производственных сред, более стабильная и зрелая
  • Версия PyTorch: Подходит для сценариев, требующих интеграции экосистемы PyTorch

В: Как использовать модель Pi0.5 в OpenPI?

О: Модель Pi0.5 полностью поддерживается в OpenPI, используйте конфигурацию pi05_droid или аналогичные конфигурации Pi0.5.

В: Как справиться с проблемами недостаточной памяти?

О:

# Установить выделение памяти JAX
export XLA_PYTHON_CLIENT_MEM_FRACTION=0.9

# Использовать распределенное обучение FSDP
uv run scripts/train.py <config> --exp_name <name> --fsdp-devices <n>

В: Какой формат требуется для данных обучения?

О: OpenPI поддерживает несколько форматов данных, включая формат наборов данных HuggingFace. Данные, экспортированные с платформы AI-O, требуют преобразования формата.

В: Как отслеживать прогресс обучения?

О: OpenPI автоматически сохраняет журналы обучения и контрольные точки в каталог experiments/<exp_name>/, прогресс обучения можно отслеживать через файлы журналов.

В: Сколько времени занимает тонкая настройка модели?

О: Время обучения зависит от:

  • Размера набора данных
  • Конфигурации оборудования (количество и тип GPU)
  • Сложности модели
  • Параметров конфигурации обучения

Обычно занимает от нескольких часов до нескольких дней на одном A100.

В: Как интегрировать обученные модели в платформу AI-O?

О: Платформа AI-O предоставляет поддержку интеграции для моделей OpenPI, включая функции регистрации модели, развертывания и мониторинга. Для конкретных методов интеграции обратитесь к команде технической поддержки.


Через это руководство вы должны быть способны успешно обучать и развертывать модели Pi0/Pi0.5 с использованием фреймворка OpenPI. Если у вас есть вопросы, обратитесь к официальной документации или обратитесь за технической поддержкой.