В 2021 году AWS представила script mode для Amazon SageMaker, позволяющий запускать собственные алгоритмы на управляемых контейнерах без создания Docker-образов. Теперь SageMaker Python SDK v3, переписанный с нуля, делает этот процесс ещё более простым: вместо нескольких Estimator-классов для разных фреймворков появляется единый ModelTrainer, а код синхронизируется в контейнер через новый объект SourceCode.

Ключевое изменение — отказ от фреймворк-специфичных Estimator-классов (SKLearn, PyTorch, XGBoost) в пользу одного ModelTrainer для обучения и ModelBuilder для развертывания. Это унифицирует API: независимо от того, обучаете ли вы модель на scikit-learn, PyTorch, Stable Diffusion или используете кастомный C++ инференс-бинарник, интерфейс одинаков. Разработчикам больше не нужно запоминать различия между классами — достаточно передать ModelTrainer команду и путь к коду.

АспектSDK v2 (Estimator pattern)SDK v3 (ModelTrainer pattern)
Класс обученияSKLearn, PyTorch, XGBoost, …ModelTrainer (единый класс)
Класс развертыванияModel + PredictorModelBuilder для endpoint, предсказание через invoke()
КонтейнерУправляемый образ AWSЛюбой: свой, AWS DLC или сторонний
Инъекция кодаentry_point + source_dir, фреймворк-специфичноSourceCode с source_dir + command/entry_script
Зависимостиrequirements.txt в source_dirrequirements.txt в source_dir

Второе важное новшество — объект SourceCode. Он принимает source_dir (путь к локальному каталогу с кодом) и либо command (для обучения), либо entry_script (для инференса). При запуске задания SageMaker синхронизирует этот каталог в контейнер, и код выполняется внутри без встраивания в образ. Это ускоряет итерации: изменили скрипт — перезапустили, не пересобирая Docker. При этом сохраняется полный контроль над окружением: можно устанавливать системные пакеты или библиотеки CUDA, и SDK не делает предположений о содержимом образа.

Новый объект SourceCode синхронизирует локальный каталог с кодом в контейнер при запуске, устраняя необходимость пересборки Docker-образа.

В посте приведены два сквозных примера. Первый — классический ML-пайплайн: обучение Random Forest на датасете диабета и развертывание в real-time endpoint с помощью Deep Java Library (DJL) Serving. Второй — генеративный ИИ: fine-tuning Stable Diffusion 3.5 с LoRA, используя Hugging Face Accelerate для мульти-GPU распределенного обучения. Оба примера используют одни и те же классы ModelTrainer и ModelBuilder.

Для работы с SDK v3 нужны AWS-аккаунт с доступом к SageMaker ИИ, IAM-роль с правами на SageMaker и S3, установленный пакет sagemaker>=3.0, образ контейнера в Amazon ECR и S3-бакет для данных и артефактов. Опционально можно подключить MLflow для отслеживания экспериментов. Если вы работаете из JupyterLab в SageMaker Studio, потребуется включить Docker на уровне домена.

Сравнение SDK v2 и v3 показывает архитектурный сдвиг: вместо отдельных классов обучения и развертывания — два универсальных, вместо управляемых образов AWS — любые (собственные, AWS DLC или сторонние), вместо entry_point и source_dir — SourceCode с command или entry_script. Требования к зависимостям остаются прежними: requirements.txt в source_dir.

Это изменение упрощает перенос существующих пайплайнов и снижает порог входа для новых пользователей SageMaker. Особенно это актуально для команд, которые хотят использовать собственные Docker-образы с нестандартными библиотеками или версиями CUDA, не полагаясь на предустановленные фреймворки AWS.