Этот проект демонстрирует полноценную реализацию ML pipeline с использованием современных инструментов в облачной инфраструктуре Yandex Cloud:
- Apache Airflow - оркестрация и планирование ML процессов
- MLflow - управление экспериментами и моделями
- Apache Spark - масштабируемая обработка данных
- Yandex DataProc - управляемые Spark кластеры
- Yandex Object Storage - хранение данных и артефактов
- Terraform - Infrastructure as Code
Реализация: Managed Service for Apache Airflow через Terraform
Компоненты:
- Airflow кластер с автомасштабированием
- Интеграция с S3 для хранения DAG'ов
- Security Groups и сетевая конфигурация
- Автоматическая установка Python пакетов
Файлы:
terraform/main.tf
- основная конфигурацияterraform/modules/
- модульная архитектураsrc/airflow_dags/ml_pipeline_dag_with_mlflow_fixed.py
- DAG для ML pipeline
Реализация:
- MLflow сервер на отдельной виртуальной машине
- PostgreSQL база данных (Managed Service)
- Интеграция с Yandex Object Storage для артефактов
Компоненты:
- VM с MLflow сервером (порт 5000)
- PostgreSQL кластер для метаданных
- S3 backend для хранения моделей
- Cloud-init автоматизация настройки
Файлы:
terraform/main.tf
- ресурсы MLflow и PostgreSQLterraform/mlflow-cloud-init.yaml
- автоматическая настройка MLflowsrc/ml_scripts/train_with_mlflow_yandex_fixed.py
- интеграция с MLflow
Реализация: Скрипт с полной интеграцией MLflow и DataProc
Возможности:
- Автоматическая установка MLflow на DataProc узлах
- Поддержка различных алгоритмов (Random Forest, GBT, Logistic Regression)
- Интеграция с MLflow для логирования экспериментов
- Автоматическая регистрация лучших моделей
- Robust error handling и логирование
Файлы:
src/ml_scripts/train_with_mlflow_yandex_fixed.py
- основной скрипт обученияsrc/data_processing/ML_pipeline_batch_fixed_v2.py
- пакетная обработка данных
Реализация: Полная интеграция с Yandex Object Storage
Компоненты:
- Автоматическое сохранение обученных моделей
- Логирование метрик в JSON и текстовом формате
- MLflow артефакты в S3
- Структурированное хранение по экспериментам
Особенности:
- S3A файловая система для Spark
- Конфигурация endpoint для Yandex Cloud
- Партиционирование данных для оптимизации
Реализация: DAG с поддержкой планирования и мониторинга
Возможности:
- Гибкая конфигурация расписания
- TaskGroups для логической группировки
- Последовательное выполнение итераций
- Автоматическое управление DataProc кластерами
- Error handling и cleanup
Особенности:
- Параллельная обработка данных
- Валидация входных файлов
- Мониторинг выполнения задач
Результаты выполнения:
✅ Все задания успешно выполнены:
- Apache Airflow развернут в Yandex Cloud Managed Service
- MLflow сервер запущен на отдельной ВМ с PostgreSQL backend
- PySpark скрипты интегрированы с MLflow для обучения моделей
- S3 хранилище используется для моделей и артефактов
- Периодическое выполнение настроено через Airflow DAG
Демонстрация работы:
Интерфейс MLflow с созданными экспериментами и запусками
Airflow DAG с успешным выполнением ML pipeline
Примечание: Скриншоты демонстрируют работающую систему с реальными экспериментами MLflow и выполненными задачами Airflow.
graph TB
subgraph "Yandex Cloud"
subgraph "Airflow Infrastructure"
AF[Airflow Cluster]
S3[Object Storage S3]
end
subgraph "MLflow Infrastructure"
MLF[MLflow Server VM]
PG[(PostgreSQL Managed)]
end
subgraph "Data Processing"
DP[DataProc Cluster]
SPARK[Spark Jobs]
end
subgraph "Data Storage"
S3D[Raw Data]
S3M[Models]
S3A[MLflow Artifacts]
end
end
AF --> DP
AF --> S3
DP --> SPARK
SPARK --> MLF
SPARK --> S3M
MLF --> PG
MLF --> S3A
S3D --> SPARK
- Yandex Cloud аккаунт с активированным биллингом
- Terraform >= 1.0
- yc CLI (Yandex Cloud CLI)
- SSH ключ для доступа к ресурсам
# Установка и настройка yc CLI
curl -sSL https://storage.yandexcloud.net/yandexcloud-yc/install.sh | bash
yc init
# Создание service account
yc iam service-account create --name terraform-sa
yc resource-manager folder add-access-binding <FOLDER_ID> \
--role editor --subject serviceAccount:<SERVICE_ACCOUNT_ID>
# Создание статического ключа доступа
yc iam access-key create --service-account-name terraform-sa
# Клонирование репозитория
git clone <repository-url>
cd HW6_prod
# Настройка Terraform переменных
cp terraform/claster_make/terraform.tfvars.template terraform/claster_make/terraform.tfvars
# Заполните реальными значениями
# Настройка ключа service account
cp terraform/claster_make/terraform/admin-key.json.template terraform/claster_make/terraform/admin-key.json
# Заполните реальным ключом
cd terraform/claster_make
terraform init
terraform plan
terraform apply
# Загрузка DAG в Airflow
aws s3 sync src/airflow_dags/ s3://<bucket>/dags/ --endpoint-url=https://storage.yandexcloud.net
# Загрузка скриптов обучения и обработки данных
aws s3 sync src/ml_scripts/ s3://<bucket>/scripts/ --endpoint-url=https://storage.yandexcloud.net
aws s3 sync src/data_processing/ s3://<bucket>/scripts/ --endpoint-url=https://storage.yandexcloud.net
Используйте сгенерированный файл airflow_variables_auto.json
:
# Импорт переменных через Web UI или CLI
airflow variables import airflow_variables_auto.json
- URL:
https://<airflow-cluster-domain>
- Логин:
admin
- Пароль: указанный в
terraform.tfvars
- URL:
http://<mlflow-vm-ip>:5000
- Эксперименты доступны без аутентификации
- Автоматически создаются и удаляются по мере необходимости
- Spark UI доступен на портах 4040-4050
- YARN ResourceManager: порт 8088
Переменная | Описание | Пример значения |
---|---|---|
cloud_id |
ID облака Yandex Cloud | b1g*************** |
folder_id |
ID папки | b1g*************** |
service_account_id |
ID service account | aje*************** |
network_id |
ID сети VPC | enp*************** |
enable_mlflow |
Включить MLflow | true |
enable_managed_postgresql |
Использовать Managed PostgreSQL | true |
Автоматически генерируются в airflow_variables_auto.json
:
MLFLOW_TRACKING_URI
- адрес MLflow сервераS3_BUCKET_SCRIPTS
- бакет для скриптов и DAG'овDATAPROC_*
- настройки DataProc кластеровML_*
- параметры машинного обучения
# Проверка статуса кластера
yc airflow cluster list
yc airflow cluster get <cluster-id>
# Логи через Cloud Logging
yc logging read --group-id=<log-group-id>
# SSH подключение к MLflow VM
ssh ubuntu@<mlflow-vm-ip>
# Проверка статуса сервиса
sudo systemctl status mlflow
sudo journalctl -u mlflow -f
# Проверка подключения к PostgreSQL
psql -h <postgresql-host> -U mlflow_user -d mlflow
# Логи Spark jobs
yc dataproc job log <job-id>
# SSH подключение к мастер ноде
ssh ubuntu@<dataproc-master-ip>
# Проверка логов Spark
yarn logs -applicationId <app-id>
HW6_prod/
├── README.md # Документация проекта
├── .gitignore # Исключения для Git
├── src/ # Исходный код
│ ├── airflow_dags/ # Airflow DAG'ы
│ ├── ml_scripts/ # ML скрипты
│ └── data_processing/ # Обработка данных
├── docs/ # Документация
│ └── screenshots/ # Скриншоты демонстрации
└── terraform/ # Infrastructure as Code
├── main.tf # Основная конфигурация
├── outputs.tf # Выходные значения
├── mlflow-cloud-init.yaml # Автонастройка MLflow
├── claster_make/ # Модуль DataProc
│ ├── main.tf
│ ├── terraform.tfvars.template # Шаблон конфигурации
│ └── terraform/
│ └── admin-key.json.template # Шаблон ключа SA
├── modules/ # Terraform модули
│ ├── dataproc/
│ ├── networking/
│ └── security/
└── environments/ # Конфигурации окружений
├── dev/
├── staging/
└── prod/
-
Network Security:
- Security Groups с минимальными правами
- NAT Gateway для исходящего трафика
- Изоляция компонентов по подсетям
-
Access Control:
- Service Accounts с принципом наименьших привилегий
- SSH ключи для аутентификации
- HTTPS для веб-интерфейсов
-
Data Protection:
- Шифрование данных в S3
- SSL соединения с базами данных
- Исключение секретов из репозитория
- Регулярно ротируйте access keys
- Используйте VPN для доступа к ресурсам
- Настройте мониторинг доступа
- Храните секреты в Yandex Lockbox
# Оптимизация для больших данных
"spark.sql.adaptive.enabled": "true"
"spark.sql.adaptive.coalescePartitions.enabled": "true"
"spark.sql.adaptive.skewJoin.enabled": "true"
"spark.serializer": "org.apache.spark.serializer.KryoSerializer"
- Мастер нода:
s3-c2-m8
(2 vCPU, 8 GB RAM) - Рабочие ноды:
s3-c4-m16
(4 vCPU, 16 GB RAM) - Автомасштабирование: 1-5 узлов
- SSD диски для лучшей производительности
- PostgreSQL:
s2.micro
(достаточно для метаданных) - S3 артефакты: партиционирование по экспериментам
- Кэширование: Redis для улучшения производительности
-
CI/CD Pipeline:
- GitHub Actions для автоматического развертывания
- Тестирование DAG'ов и скриптов
- Автоматическое обновление конфигураций
-
Monitoring & Alerting:
- Grafana дашборды для мониторинга
- Alerting при сбоях в pipeline
- Метрики производительности
-
Расширенная ML функциональность:
- A/B тестирование моделей
- Автоматический drift detection
- Online обучение и inference
-
Масштабирование:
- Multi-region развертывание
- Kubernetes для container orchestration
- Serverless функции для легких задач
Для вопросов и предложений:
- Создайте Issue в репозитории
- Проверьте документацию Yandex Cloud
- Обратитесь к логам для диагностики
Проект распространяется под лицензией MIT. См. файл LICENSE
для подробностей.
Автор: ML Engineering Team
Версия: 1.0.0
Дата: 2024