Трекер FLOPs для дообучения LLM на Amazon SageMaker AI с учетом требований EU AI Act — ИИ для бизнеса

Трекер FLOPs для дообучения LLM на Amazon SageMaker AI с учетом требований EU AI Act

Прослушать статью

EU AI Act требует от организаций, которые дообучают большие языковые модели (LLM), отслеживать вычислительные ресурсы, измеряемые в floating-point operations (FLOPs), чтобы определить свои обязательства по соблюдению требований. По мере того как клиенты все чаще дообучают LLM для доменно-специфичных сценариев, мы регулярно слышим один и тот же вопрос: как понять, запускает ли моя обучающая задача новые регуляторные обязательства?

Amazon SageMaker AI — это управляемый сервис machine learning (ML) для создания, обучения и развертывания моделей. В этом решении используются обучающие задания Amazon SageMaker Training для запуска рабочих нагрузок по дообучению на полностью управляемой инфраструктуре. SageMaker Training берет на себя выделение ресурсов, масштабирование и управление кластером, имеет встроенную поддержку распределенного обучения, интеграцию с AWS CloudTrail и Amazon CloudWatch для governance, а также автоматически выводит вычислительные ресурсы из эксплуатации после завершения обучения. Fine-Tuning FLOPs Meter расширяет эти возможности специализированным учетом требований compliance, который интегрируется в существующие конвейеры SageMaker AI.

В этом материале мы показываем, как настроить отслеживание FLOPs во время дообучения LLM с помощью open source набора инструментов Fine-Tuning FLOPs Meter toolkit на Amazon SageMaker AI. Вы узнаете, как определить свой статус compliance с помощью одного флага конфигурации и как формировать документацию, готовую для аудита.

Требования EU AI Act и отслеживание FLOPs

2 августа 2025 года EU AI Act ввел новые требования для организаций, работающих с моделями общего назначения artificial intelligence (GPAI). Если вы дообучаете LLM, вам нужно определить, переквалифицируют ли ваши изменения вас из downstream user (организации, которая использует существующую модель без существенной модификации) в GPAI model provider (организацию, которая несет юридическую ответственность за compliance модели). Классификация зависит от того, сколько вычислений потребляет ваше дообучение, измеряемое в FLOPs.

Правило одной трети отделяет незначительные модификации от существенного переобучения. Логика порога в 30% такова: регуляторный анализ показал, что использование более чем одной трети исходных вычислений на обучение обычно приводит к заметным изменениям поведения модели, фактически создавая новую модель с иными рисками, для которых требуются полные обязательства provider. Большинство организаций используют сценарий 2 в таблице ниже, потому что поставщики моделей редко публикуют точные FLOPs обучения. Если у вас нет документально подтвержденных данных о pretraining compute от поставщика модели, по умолчанию применяется порог 3.3×10²² FLOPs. Нужно учитывать 3 применимых сценария и порога:

Сценарий Порог
Pretraining compute известен и составляет ≥ 10²³ FLOPs 30% от фактического pretraining compute
Pretraining compute неизвестен или < 10²³ FLOPs Порог по умолчанию 3.3×10²² FLOPs
Модели системного риска (Pre-training FLOPs ≥ 10²⁵ FLOPs) 3.3×10²⁴ FLOPs (если базовые вычисления неизвестны)

Fine-Tuning FLOPs Meter автоматически определяет, какой сценарий применяется, в зависимости от того, укажете ли вы переменную окружения PRETRAIN_FLOPS. Чтобы быстро понять, какой путь порога вам подходит, используйте следующий алгоритм принятия решения:

Шаг 1: Известны ли вам pretraining FLOPs базовой модели?

  • Нет: Сразу переходите к порогу по умолчанию 3.3×10²² FLOPs.
  • Да: Перейдите к следующему этапу оценки.

Шаг 2: Оцените масштаб pretraining compute

Если вы знаете pretraining compute, сравните его со следующими порядками величины:

  1. Pretraining compute ≥ 10²⁵ FLOPs?
    • Да: Вы подпадаете под порог системного риска. Используйте порог 3.3×10²⁴ FLOPs.
    • Нет: Перейдите к следующему вопросу.
  2. Pretraining compute ≥ 10²³ FLOPs?
    • Да: Используйте относительный порог в 30% от фактического pretraining compute.
    • Нет: Переходите к порогу по умолчанию 3.3×10²² FLOPs.

Например, при дообучении Llama-3-70B (предобученной с оценочным минимумом 1.5×10²⁴ FLOPs) порог составляет 4.5×10²³ FLOPs. Превышение этого порога означает, что вы принимаете на себя полные обязательства GPAI model provider. Эти обязательства включают раскрытие подробностей об архитектуре и процессе обучения, публикацию списка использованных источников данных и подтверждение соответствия законодательству EU copyright law. Если вы не соблюдаете требования, вам может грозить штраф до €15 млн или 3% мирового годового оборота, в зависимости от того, что больше.

Проблема ручного отслеживания FLOPs

Эти пороги создают три задачи compliance:

  1. Формулы FLOPs сложны и различаются в зависимости от того, выполняете ли вы полное дообучение или используете parameter-efficient методы (подходы к обучению, такие как Low-Rank Adaptation (LoRA), которые обновляют лишь небольшую часть параметров модели).
  2. Выбрать применимый порог сложно, потому что показатели pretraining compute редко публикуются.
  3. Поддержание audit trail (постоянной записи метрик compliance для регуляторной проверки) по нескольким обучающим заданиям увеличивает операционные издержки.

Ошибки в расчетах меняют то, работаете ли вы как downstream user или подпадаете под классификацию полноценного GPAI model provider. Fine-Tuning FLOPs Meter автоматизирует процесс отслеживания и устраняет эти сложности.

Обзор решения

Fine-Tuning FLOPs Meter — это open source набор инструментов, доступный в репозитории Amazon SageMaker Generative AI recipes, который интегрируется в рабочие процессы обучения Hugging Face на Amazon SageMaker AI. Он отслеживает вычислительные ресурсы на протяжении всего жизненного цикла дообучения. Следующая схема иллюстрирует рабочий процесс compliance.

Диаграмма рабочего процесса compliance Fine-Tuning FLOPs Meter, включая оценку pre-training, отслеживание во время выполнения и audit trail после обучения
Рисунок 1. Рабочий процесс compliance Fine-Tuning FLOPs Meter

Набор инструментов охватывает три этапа жизненного цикла дообучения, при этом ключевой возможностью является отслеживание во время выполнения.

Первый этап: необязательная утилита оценки pre-training позволяет сравнить ожидаемые FLOPs для разных методов обучения (LoRA, Spectrum, Full) до запуска задания.

Второй этап: отслеживание во время выполнения, основная функция, использует Hugging Face TrainerCallback для расчета FLOPs в реальном времени во время обучения с применением как аналитики на основе архитектуры, так и мониторинга GPU на уровне оборудования через NVIDIA Management Library (NVML).

Третий этап: post-training audit trail автоматически сохраняет полные метрики compliance в формате JSON. Результаты можно сохранять в Amazon Simple Storage Service (Amazon S3) или Amazon DynamoDB.

Подключение выполняется одной строкой конфигурации (compute_flops: true). FLOPs Meter учитывает parameter-efficient подходы с помощью улучшенной формулы, которая позволяет точно оценивать full, LoRA и Spectrum fine-tuning. Он формирует документацию compliance, готовую для аудита, с полями, требуемыми для отчетности EU AI Act, а также автоматически сравнивает значения с порогом и отмечает, превышает ли ваше задание по дообучению этот порог.

Техническая реализация

В следующих подразделах показано, как рассчитываются FLOPs и как отслеживание интегрируется в рабочий процесс обучения на Amazon SageMaker AI.

Необходимые условия

Перед запуском демонстрации FLOPs Meter необходимо выполнить следующие действия:

  1. Подать запрос на увеличение квоты для SageMaker AI. Для этого сценария вам нужна минимум 1 инстанс ml.g5.4xlarge (с 1 GPU NVIDIA A10G). В консоли Service Quotas запросите квоту SageMaker AI G5 instances (ml.g5.4xlarge) for training job usage: 1.
  2. Создать роль AWS Identity and Access Management (IAM) с управляемыми политиками AmazonSageMakerFullAccess и AmazonS3FullAccess, чтобы предоставить SageMaker AI необходимый доступ для запуска примеров.
  3. Назначить следующую политику в качестве trust relationship для вашей IAM role:

{
 "Version": "2012-10-17",
 "Statement": [
 {
 "Sid": "",
 "Effect": "Allow",
 "Principal": {
 "Service": [
 "sagemaker.amazonaws.com"
 ]
 },
 "Action": "sts:AssumeRole"
 }
 ]
}
  1. (Необязательно) Создать домен Amazon SageMaker Studio (см. быструю настройку для Amazon SageMaker AI), чтобы получить доступ к Jupyter notebooks с указанной ролью. Также можно использовать JupyterLab в локальной среде.

Эти разрешения предоставляют широкий доступ и не рекомендуются для production environments. За рекомендациями по более тонкой настройке прав обратитесь к SageMaker AI Developer Guide.

Формулы расчета FLOPs

Для отчетности compliance используйте аналитический метод (Flops_architecture) как основной показатель. Набор инструментов также рассчитывает аппаратно-ориентированную верхнюю границу для консервативной отчетности. Оба метода выполняются автоматически. В следующих разделах описаны детали реализации.

Рекомендации EU AI Act (раздел A.2.1) описывают два подхода к оценке training compute:

  1. Подход на основе архитектуры (аналитический):

Стандартная формула EU для dense transformers выглядит так:

C ≈ 6 × P × D

Где P — число параметров, а D — число токенов обучения. Это предполагает полное дообучение, при котором обучаются все параметры.

Улучшенная формула учитывает parameter-efficient методы:

F_ft = (4 × N_total + 2 × N_trainable) × tokens_processed

Разберем ее по частям:

  • 4 × N_total — прямой проход (2×) плюс вычисление градиента при обратном проходе через каждый слой (2×), включая замороженные
  • 2 × N_trainable — вычисление градиента только по обучаемым весам

Для полного fine-tuning, где N_total = N_trainable, это сводится к 6 × N × D, что эквивалентно формуле EU. Для LoRA или Spectrum это дает более точную (и более низкую) оценку, отражая, что градиенты обновляются лишь для меньшего числа параметров.

  1. Подход на основе оборудования (верхняя граница):

В этом подходе используется следующая формула:

C = N_gpus × L × H × U

Где N_gpus — число GPU, L — длительность обучения в секундах, H — пиковая теоретическая производительность (FLOPs), а U — коэффициент использования. FLOPs Meter использует U = 1.0 (100% utilization), чтобы получить консервативную верхнюю границу через мониторинг GPU с NVML.

Логика порогов

Набор инструментов реализует логику порогов EU AI Act в функции determine_compliance_threshold():

Формулы и расчет
EU_AI_ACT_GPAI_THRESHOLD = 1e23 # 10²³ FLOPs
EU_AI_ACT_DEFAULT_THRESHOLD = 3.3e22 # One-third of 10²³
if pretrain_flops is None or pretrain_flops < EU_AI_ACT_GPAI_THRESHOLD:
    threshold = EU_AI_ACT_DEFAULT_THRESHOLD         # "default_3.3e22"
else:
    threshold = 0.30 * pretrain_flops               # "30pct_of_actual_pretraining"

Интеграция с SageMaker Training jobs

FLOPs Meter работает как Hugging Face TrainerCallback. Чтобы включить отслеживание, добавьте одну строку в YAML-файл recipe:

compute_flops: true

При запуске обучения скрипт sft.py проверяет этот флаг и, если он включен, инициализирует FlopsMeterCallback с количеством параметров модели и необязательной переменной окружения PRETRAIN_FLOPS. Пользовательский класс TokenCountingSFTTrainer заменяет стандартный SFTTrainer, чтобы подсчитывать токены без padding на каждом шаге обучения.

Формулы и расчет
n_total = sum(p.numel() for p in model.parameters())
n_trainable = sum(p.numel() for p in model.parameters() if p.requires_grad)

flops_cb = FlopsMeterCallback(
    pad_token_id=tokenizer.pad_token_id,
    pretrain_flops=pretrain_flops,       # from PRETRAIN_FLOPS env var
    sample_nvml=True,
    n_total=n_total,
    n_trainable=n_trainable,
    model_name=model_args.model_name_or_path,
    num_epochs=training_args.num_train_epochs,
)

По завершении обучения callback вычисляет как аналитические, так и аппаратные FLOPs, определяет применимый порог и записывает файл flops_meter.json в /opt/ml/output/. Затем шаг конвейера ProcessTrainingOutputs загружает результаты в Amazon S3 и сохраняет их в Amazon DynamoDB для целей audit trail.

Практический пример

Следующий пример использует meta-llama/Llama-3.2-3B-Instruct (3.21 млрд параметров). Поскольку Meta не публиковала точные pretraining FLOPs для этой модели, применяется путь порога по умолчанию: 3.3×10²² как порог compliance.

Оценка pre-training (необязательно)

Отдельная утилита оценки (estimate_flops.py) сравнивает ожидаемые FLOPs для методов обучения LoRA, Spectrum и полного fine-tuning перед запуском задания. Это полезно для планирования: утилита показывает, насколько конкретная конфигурация близка к порогу compliance, помогая принять взвешенное решение о методе обучения и размере набора данных. Утилита оценки отделена от основного отслеживания во время выполнения и может запускаться независимо в notebook.

Отслеживание во время выполнения

Во время обучения FlopsMeterCallback отслеживает FLOPs в реальном времени. Именно здесь происходит фактическое измерение compliance. Когда обучение начинается (on_train_begin), callback фиксирует количество параметров модели (N_total, N_trainable), запускает поток мониторинга GPU через NVML и записывает время старта. По мере обучения количество токенов без padding подсчитывается для каждого batch на каждом substep (on_substep_end) и агрегируется по всем GPU в distributed training. Когда обучение завершается (on_train_end), callback вычисляет архитектурные FLOPs на основе накопленного количества токенов, останавливает мониторинг NVML для расчета аппаратной верхней границы, определяет применимый порог и записывает полные метрики в flops_meter.json.

Пример конфигурации recipe для Llama-3.2-3B с LoRA и включенным отслеживанием FLOPs:

model_name_or_path: meta-llama/Llama-3.2-3B-Instruct
dataset_id_or_path: your-dataset.jsonl
use_peft: true
compute_flops: true
per_device_train_batch_size: 8
num_train_epochs: 10
learning_rate: 2e-5
peft_config:
 r: 8
 lora_alpha: 16
 target_modules: ["q_proj", "v_proj"]

В своем ноутбуке Amazon SageMaker AI или Python-скрипте используйте класс ModelTrainer из SageMaker Python SDK v3, чтобы запустить training job как SageMaker Training job:

Формулы и расчет
from sagemaker.modules.configs import Compute, SourceCode
from sagemaker.modules.train import ModelTrainer

training_instance_type = "ml.g5.4xlarge"
pytorch_image_uri = sagemaker.image_uris.retrieve(
    framework="pytorch",
    region=sess.boto_session.region_name,
    version="2.7.1",
    instance_type=training_instance_type,
    image_scope="training",
)

source_code = SourceCode(
    source_dir="./sagemaker_code",
    command="bash sm_accelerate_train.sh --config hf_recipes/meta-llama/Llama-3.2-3B-Instruct--vanilla-peft-qlora.yaml",
)

compute = Compute(
    instance_type=training_instance_type,
    instance_count=1,
    volume_size_in_gb=300,
)

model_trainer = ModelTrainer(
    training_image=pytorch_image_uri,
    source_code=source_code,
    compute=compute,
    role=role,
    environment={
        "FLOPS_METER_NVML": "1",
    },
)

model_trainer.train()

Поскольку pretraining FLOPs для этой модели неизвестны, переменная окружения PRETRAIN_FLOPS не указывается. Порог по умолчанию применяется автоматически.

Документация compliance

По завершении обучения callback генерирует файл flops_meter.json с метриками, необходимыми для регуляторной документации:

{
 "Flops_architecture": "1.45e+13",
 "Flops_hardware": "1.52e+15",
 "Flops_original": null,
 "N_total": 1585294704,
 "N_trainable": 680094720,
 "threshold_type": "default_3.3e22",
 "threshold_value": "3.30e+22",
 "pct_of_pretrain": 0.000000439,
 "exceeds_30pct": false,
 "tokens_processed": 2150,
 "model_name": "meta-llama/Llama-3.2-3B-Instruct",
 "num_epochs": 10,
 "training_duration_seconds": 245.30,
 "gpu_name": "NVIDIA A10G",
 "instance_type": "ml.g5.4xlarge",
 "training_job_name": "pipelines-abc123-TrainingStep-xyz789",
 "recipe_config": "hf_recipes/meta-llama/Llama-3.2-3B-Instruct--vanilla-peft-qlora.yaml"
}

Используйте Flops_architecture как основной показатель compliance. Он точно отражает вашу фактическую конфигурацию обучения. Flops_hardware дает консервативную верхнюю границу и может служить запасом безопасности для особенно осторожной отчетности. Для большинства регуляторных целей аналитического значения достаточно.

Другие ключевые поля включают threshold_type, которое показывает, какое правило порога было применено (default_3.3e22, поскольку pretraining FLOPs неизвестны), exceeds_30pct как логический флаг для быстрой оценки compliance, и Flops_original, который имеет значение null, если pretraining FLOPs не предоставлены.

Конвейер автоматически загружает этот файл в Amazon S3 и сохраняет его в Amazon DynamoDB, создавая постоянный audit trail для нескольких запусков обучения.

Что делать, если порог превышен?

Если в отчете compliance указано exceeds_30pct: true, вы классифицируетесь как GPAI model provider по EU AI Act. Ваши дальнейшие шаги должны включать: (1) документирование архитектуры модели и процесса обучения, (2) подготовку публичного списка источников обучающих данных, (3) подтверждение соответствия EU copyright law и (4) при необходимости консультацию с юристом, знакомым с EU AI regulations. Обратите внимание, что для моделей GPAI, классифицированных как Systemic Risk, действуют дополнительные обязательства. Также можно сократить объем обучения (меньше эпох, меньший набор данных или переход на LoRA), чтобы остаться ниже порога.

Масштабирование до production workloads

В этом примере использовался небольшой набор данных для демонстрации (2,150 токенов). В production обычно обрабатываются миллионы токенов. Например, дообучение Llama-3.2-3B на 1 млн токенов с LoRA дает примерно 6.7×10¹⁸ FLOPs, что все еще значительно ниже порога 3.3×10²². Однако полное дообучение на том же наборе данных потребляет примерно 1.9×10¹⁹ FLOPs, приближая вас к порогу.

Практическое правило: обеспокоенность compliance начинается, когда ваши FLOPs достигают 10²¹ или выше, то есть примерно 3% от порога по умолчанию. В этот момент мы рекомендуем запускать утилиту оценки pre-training перед каждым заданием, чтобы убедиться, что вы соответствуете стандартам compliance. Для большинства задач LoRA fine-tuning на моделях меньше 10B параметров вы остаетесь значительно ниже порога даже при миллионах обучающих токенов.

Начало работы

FLOPs Meter доступен в составе репозитория Amazon SageMaker Generative AI recipes.

Необходимые условия

Перед началом убедитесь, что у вас есть:

  • учетная запись AWS с доступом к Amazon SageMaker AI;
  • настроенный AWS Command Line Interface (AWS CLI) с соответствующими учетными данными;
  • установленный Python 3.11 или новее;
  • базовое знакомство с Hugging Face Transformers и PyTorch.

Порядок действий

Чтобы начать отслеживание FLOPs:

  1. Клонируйте репозиторий:

git clone https://github.com/aws-samples/amazon-sagemaker-generativeai.git
  1. Откройте файл конфигурации recipe, например hf_recipes/meta-llama/Llama-3.2-3B-Instruct--vanilla-peft-qlora.yaml, и добавьте следующую строку:

compute_flops: true
  1. (Необязательно) Если вы знаете pretraining FLOPs базовой модели, задайте переменную окружения:
Формулы и расчет
export PRETRAIN_FLOPS="1.5e24" # Example: Llama-3-70B
  1. Запустите training job в Amazon SageMaker AI:
    • Откройте свой notebook или Python-скрипт SageMaker AI.
    • Настройте PyTorch Estimator (см. пример кода в разделе Practical example).
    • Запустите estimator.fit(), чтобы начать training job.
  2. После завершения обучения просмотрите созданный файл flops_meter.json в выходном расположении Amazon S3. Вы должны увидеть JSON-файл с метриками FLOPs, определением порога и статусом compliance.

Более подробно с реализацией можно ознакомиться в исходном коде flops_meter.py.

Очистка ресурсов

Чтобы избежать дальнейших расходов, удалите созданные ресурсы:

  1. Остановите выполняющиеся training jobs SageMaker AI:
    • Откройте консоль Amazon SageMaker AI
    • Перейдите в раздел Training и откройте Training jobs
    • Выберите Running Jobs и нажмите Stop
  2. Удалите результаты в Amazon S3:
    • Откройте консоль Amazon S3
    • Перейдите в bucket с результатами обучения
    • Выберите файлы flops_meter.json и нажмите Delete
    • Или удалите весь bucket, если вы создали его только для этой демонстрации
  3. Удалите таблицу Amazon DynamoDB, если вы создали ее специально для этой демонстрации:
  4. Удалите endpoints SageMaker AI, если вы развернули дообученную модель

Заключение

В этом материале мы показали, как реализовать отслеживание FLOPs во время дообучения LLM на Amazon SageMaker AI. Вы узнали, как Fine-Tuning FLOPs Meter вычисляет вычислительные ресурсы аналитическим и аппаратным методами, как он применяет правило одной трети для определения регуляторных порогов и как формировать JSON-документацию, готовую к аудиту, с помощью одного флага конфигурации.

С этим инструментарием вы можете сосредоточиться на создании моделей, сохраняя полную прозрачность в отношении своего вычислительного следа.

Чтобы начать, клонируйте репозиторий и запустите инструмент оценки pre-training для запланированной модели и набора данных. Дополнительную информацию о создании AI-систем, соответствующих требованиям, в AWS см. в документации Amazon SageMaker AI.


Материал — перевод статьи с английского.

Оригинал: Navigating EU AI Act requirements for LLM fine-tuning on Amazon SageMaker AI