Skip to content

mrPDA/HW6_prod

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🚀 ML Pipeline с Apache Airflow и MLflow в Yandex Cloud

📋 Описание проекта

Этот проект демонстрирует полноценную реализацию ML pipeline с использованием современных инструментов в облачной инфраструктуре Yandex Cloud:

  • Apache Airflow - оркестрация и планирование ML процессов
  • MLflow - управление экспериментами и моделями
  • Apache Spark - масштабируемая обработка данных
  • Yandex DataProc - управляемые Spark кластеры
  • Yandex Object Storage - хранение данных и артефактов
  • Terraform - Infrastructure as Code

🎯 Выполненные задания

✅ 1. Запуск Apache Airflow в Yandex Cloud

Реализация: 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

✅ 2. Развертывание MLflow сервера

Реализация:

  • MLflow сервер на отдельной виртуальной машине
  • PostgreSQL база данных (Managed Service)
  • Интеграция с Yandex Object Storage для артефактов

Компоненты:

  • VM с MLflow сервером (порт 5000)
  • PostgreSQL кластер для метаданных
  • S3 backend для хранения моделей
  • Cloud-init автоматизация настройки

Файлы:

  • terraform/main.tf - ресурсы MLflow и PostgreSQL
  • terraform/mlflow-cloud-init.yaml - автоматическая настройка MLflow
  • src/ml_scripts/train_with_mlflow_yandex_fixed.py - интеграция с MLflow

✅ 3. PySpark скрипт для обучения моделей

Реализация: Скрипт с полной интеграцией 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 - пакетная обработка данных

✅ 4. Сохранение в S3 хранилище

Реализация: Полная интеграция с Yandex Object Storage

Компоненты:

  • Автоматическое сохранение обученных моделей
  • Логирование метрик в JSON и текстовом формате
  • MLflow артефакты в S3
  • Структурированное хранение по экспериментам

Особенности:

  • S3A файловая система для Spark
  • Конфигурация endpoint для Yandex Cloud
  • Партиционирование данных для оптимизации

✅ 5. Периодическое выполнение в Airflow

Реализация: DAG с поддержкой планирования и мониторинга

Возможности:

  • Гибкая конфигурация расписания
  • TaskGroups для логической группировки
  • Последовательное выполнение итераций
  • Автоматическое управление DataProc кластерами
  • Error handling и cleanup

Особенности:

  • Параллельная обработка данных
  • Валидация входных файлов
  • Мониторинг выполнения задач

Результаты выполнения:

Все задания успешно выполнены:

  1. Apache Airflow развернут в Yandex Cloud Managed Service
  2. MLflow сервер запущен на отдельной ВМ с PostgreSQL backend
  3. PySpark скрипты интегрированы с MLflow для обучения моделей
  4. S3 хранилище используется для моделей и артефактов
  5. Периодическое выполнение настроено через Airflow DAG

Демонстрация работы:

MLflow Experiments Интерфейс MLflow с созданными экспериментами и запусками

Airflow DAG
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
Loading

🚀 Быстрый старт

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

  1. Yandex Cloud аккаунт с активированным биллингом
  2. Terraform >= 1.0
  3. yc CLI (Yandex Cloud CLI)
  4. SSH ключ для доступа к ресурсам

Шаг 1: Настройка Yandex Cloud

# Установка и настройка 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

Шаг 2: Подготовка конфигурации

# Клонирование репозитория
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
# Заполните реальным ключом

Шаг 3: Развертывание инфраструктуры

cd terraform/claster_make
terraform init
terraform plan
terraform apply

Шаг 4: Загрузка DAG'ов и скриптов

# Загрузка 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

Шаг 5: Настройка Airflow переменных

Используйте сгенерированный файл airflow_variables_auto.json:

# Импорт переменных через Web UI или CLI
airflow variables import airflow_variables_auto.json

📊 Мониторинг и доступ

Airflow Web UI

  • URL: https://<airflow-cluster-domain>
  • Логин: admin
  • Пароль: указанный в terraform.tfvars

MLflow UI

  • URL: http://<mlflow-vm-ip>:5000
  • Эксперименты доступны без аутентификации

DataProc кластеры

  • Автоматически создаются и удаляются по мере необходимости
  • Spark UI доступен на портах 4040-4050
  • YARN ResourceManager: порт 8088

🔧 Конфигурация

Основные переменные Terraform

Переменная Описание Пример значения
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

Автоматически генерируются в airflow_variables_auto.json:

  • MLFLOW_TRACKING_URI - адрес MLflow сервера
  • S3_BUCKET_SCRIPTS - бакет для скриптов и DAG'ов
  • DATAPROC_* - настройки DataProc кластеров
  • ML_* - параметры машинного обучения

🔍 Поиск и устранение неисправностей

Проблемы с Airflow

# Проверка статуса кластера
yc airflow cluster list
yc airflow cluster get <cluster-id>

# Логи через Cloud Logging
yc logging read --group-id=<log-group-id>

Проблемы с MLflow

# 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

Проблемы с DataProc

# Логи 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/

🔐 Безопасность

Реализованные меры:

  1. Network Security:

    • Security Groups с минимальными правами
    • NAT Gateway для исходящего трафика
    • Изоляция компонентов по подсетям
  2. Access Control:

    • Service Accounts с принципом наименьших привилегий
    • SSH ключи для аутентификации
    • HTTPS для веб-интерфейсов
  3. Data Protection:

    • Шифрование данных в S3
    • SSL соединения с базами данных
    • Исключение секретов из репозитория

Рекомендации:

  • Регулярно ротируйте access keys
  • Используйте VPN для доступа к ресурсам
  • Настройте мониторинг доступа
  • Храните секреты в Yandex Lockbox

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

Spark настройки:

# Оптимизация для больших данных
"spark.sql.adaptive.enabled": "true"
"spark.sql.adaptive.coalescePartitions.enabled": "true"  
"spark.sql.adaptive.skewJoin.enabled": "true"
"spark.serializer": "org.apache.spark.serializer.KryoSerializer"

DataProc конфигурация:

  • Мастер нода: s3-c2-m8 (2 vCPU, 8 GB RAM)
  • Рабочие ноды: s3-c4-m16 (4 vCPU, 16 GB RAM)
  • Автомасштабирование: 1-5 узлов
  • SSD диски для лучшей производительности

MLflow оптимизация:

  • PostgreSQL: s2.micro (достаточно для метаданных)
  • S3 артефакты: партиционирование по экспериментам
  • Кэширование: Redis для улучшения производительности

🚧 Дальнейшее развитие

Планируемые улучшения:

  1. CI/CD Pipeline:

    • GitHub Actions для автоматического развертывания
    • Тестирование DAG'ов и скриптов
    • Автоматическое обновление конфигураций
  2. Monitoring & Alerting:

    • Grafana дашборды для мониторинга
    • Alerting при сбоях в pipeline
    • Метрики производительности
  3. Расширенная ML функциональность:

    • A/B тестирование моделей
    • Автоматический drift detection
    • Online обучение и inference
  4. Масштабирование:

    • Multi-region развертывание
    • Kubernetes для container orchestration
    • Serverless функции для легких задач

📞 Поддержка

Для вопросов и предложений:

  • Создайте Issue в репозитории
  • Проверьте документацию Yandex Cloud
  • Обратитесь к логам для диагностики

📄 Лицензия

Проект распространяется под лицензией MIT. См. файл LICENSE для подробностей.


Автор: ML Engineering Team
Версия: 1.0.0
Дата: 2024

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published