В 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 + Predictor | ModelBuilder для endpoint, предсказание через invoke() |
| Контейнер | Управляемый образ AWS | Любой: свой, AWS DLC или сторонний |
| Инъекция кода | entry_point + source_dir, фреймворк-специфично | SourceCode с source_dir + command/entry_script |
| Зависимости | requirements.txt в source_dir | requirements.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.



