Ласкаво просимо до Дня 73 нашого курсу 100 днів подорожі в ML! Тепер, коли ми налаштували середовище та репозиторій на GitHub, час підняти рукави й приділити увагу кільком важливим аспектам у побудові основної структури нашого ML проєкту. Це момент, коли ми починаємо створювати скелет, що утримає нашу машинно-навчальну майстерність.
Це продовження теми з попередньої статті, будь ласка, прочитайте останню статтю для кращого розуміння.
Уявіть собі багатолюдне місто. Що утримує його функціональним? Дороги, комунікації та будівлі, які працюють в гармонії. Подібно до цього, добре структурований ML проєкт потребує важливих компонентів, що безперервно працюють разом для забезпечення чіткості, підтримуваності та масштабованості.
Згенеровано за допомогою ШІ
План: Структура ML проєкту
Почнемо з уявлення проєкту як про будинок. Кожна кімната має свою конкретну мету, а разом вони створюють комфортний дім. У нашому ML проєкті ці кімнати — це папки й скрипти з чітко визначеними ролями.
1. Папка джерел (src/
)
Це серце вашого проєкту, де міститься вся магія. Кожна функція, кожен пайплайн починаються саме тут. Подумайте про це як про центр міста, що вирує активністю.
[ви вже створили файл _init_.py тут]
2. Папка компонентів (src/components/
)
— створіть папку 'components' всередині папки src. Усередині компонентів створіть файл init.py (компоненти можуть бути витягнуті як модуль/пакет і використані для імпорту як модуль пізніше).
Папка компонентів — це місце, де відбувається магія. Вона містить окремі модулі для кожного етапу ML пайплайна. Ось що ви знайдете:
a. Інтеграція даних
— створіть файл data_ingestion.py.
Це вхідна ворота, куди надходять сирі дані в ваш проєкт.
Приклад: зчитування CSV файлів, отримання даних з API або запити до баз даних.
b. Трансформація даних
— створіть файл data_transformation.py.
Уявіть кухаря, який нарізає овочі і приправляє їх перед готуванням — трансформація даних саме така. Вона кодує категоріальні змінні, нормалізує дані і готує їх до моделі.
c. Тренування моделі
— створіть файл model_trainer.py.
Це ваша кухня, де рецепт оживає. Тренер моделі навчає вашу ML модель, перевіряючи її на кожному етапі і зберігаючи її для подальшого використання.
3. Папка пайплайнів (src/pipeline/
)
Пайплайни — це як автомагістралі, вони з’єднують різні частини вашого проєкту, забезпечуючи плавний потік.
— створіть папку 'pipeline' всередині папки src. Усередині пайплайнів спочатку створіть файл init.py (пайплайни можуть бути витягнуті як модуль/пакет і використані для імпорту як модуль пізніше).
a. Тренувальний пайплайн
— створіть файл train_pipeline.py.
Цей пайплайн відповідає за повний процес навчання: від інтеграції даних до збереження навченої моделі.
Подумайте про це як про приготування страви від сирих інгредієнтів до готового блюда.
b. Пайплайн прогнозування
— створіть файл predict_pipeline.py.
Коли модель вже навчена, цей пайплайн гарантує, що вона зможе робити прогнози на нових даних, як подача страви гостям.
4. Логгер (src/logger.py
)
Уявіть, що ви керуєте рестораном без ведення обліку замовлень або відгуків — це було б хаос! Логгер забезпечує фіксацію кожної значущої події.
— створіть файл logger.py всередині папки src.
- Мета: Збирає логи для налагодження і моніторингу.
- Приклад: Логування повідомлень, як "Інтеграція даних почалася" або "Навчання моделі завершено".
5. Обробка виключень (src/exception.py
)
Помилки неминучі, але те, як ви з ними справляєтесь, має велике значення.
Цей модуль гарантує, що помилки не зірвуть ваш прогрес.
— створіть файл exception.py всередині папки src.
- Мета: Кастомна обробка виключень для збереження і надання детальних повідомлень про помилки.
- Приклад: Якщо файл відсутній, логує помилку з зазначенням імені файлу, номера рядка та проблеми.
6. Утиліти (src/utils.py
)
— створіть файл utils.py всередині папки src.
Кожен великий проєкт потребує інструментів. Утиліти надають повторно використовувані рішення для загальних завдань, таких як обробка файлів, налаштування параметрів або побудова графіків.
Побудова надійних пайплайнів
Після того, як структура готова, час реалізувати пайплайни. Пайплайни дають життя вашому проєкту, з’єднуючи етапи від інтеграції даних до розгортання моделі.
Тренувальний пайплайн
- Зчитує сирі дані з джерела.
- Очищає та трансформує дані для аналізу.
- Тренує модель за допомогою підготовлених даних.
- Зберігає навчений модель для прогнозування.
Пайплайн прогнозування
- Завантажує попередньо навчений модель.
- Обробляє нові вхідні дані.
- Подає прогнози.
Обробка помилок та логування: Залізні обмеження для успіху
1. Кастомна обробка виключень
Уявіть, що ви їдете, і ваш GPS попереджає вас про неправильний поворот, замість того щоб дати вам заблукати. Подібно до цього, кастомні виключення надають чітке керівництво, коли щось іде не так.
Приклад коду:
import sys
def error_message_detail(error, error_detail:sys):
_, _, exc_tb = error_detail.exc_info()
file_name = exc_tb.tb_frame.f_code.co_filename
error_message = "Error occured in python script name [{0}] line number [{1}] error message [{2}]".format(file_name, exc_tb.tb_lineno, str(error))
return error_message
class CustomException(Exception):
def __init__(self, error_message, error_detail:sys):
super().__init__(error_message)
self.error_message=error_message_detail(error_message, error_detail=error_detail)
def __str__(self):
return self.error_message
2. Логування для чіткості
Логування дозволяє всім залишатися в курсі подій — як кухонна дошка для запису денних спеціалітетів.
Приклад коду:
import logging
import os
from datetime import datetime
LOG_FILE = f"{datetime.now().strftime('%m_%d_%Y_%H_%M_%S')}.log"
logs_path = os.path.join(os.getcwd(), "logs", LOG_FILE)
os.makedirs(logs_path,exist_ok=True)
LOG_FILE_PATH = os.path.join(logs_path, LOG_FILE)
logging.basicConfig(
filename=LOG_FILE_PATH,
format="[%(asctime)s] %(lineno)d %(name)s - %(levelname)s - %(message)s",
level=logging.INFO
)
Тестування вашого логера:
logging.info("Data ingestion started.")
logging.info("Model training completed.")
Фінальна структура виглядає приблизно так
Після роботи у VS Code, не забудьте зафіксувати зміни в репозиторії Git.
— кроки для коміту змін у репозиторій Git:
# Відкрийте ваш термінал
1. git status --перевіряє статус
2. git add .
3. git commit -m "Structure, Logging, and Exception Handling"
4. git push -u origin main
Чому це важливо?
Модульна структура з логуванням та обробкою виключень робить ваш ML проєкт чимось більшим, ніж просто набором скриптів — це стає професійною, масштабованою та підтримуваною системою. Незалежно від того, чи працюєте ви в команді, чи переглядаєте своє розв'язання через кілька місяців, ця основа забезпечує, що ви ніколи не втратите напрямку.
Джерело:
Tutorial 2- End To End ML Project With Deployment-Project Structure, Logging And Exception Handling by Krish Naik
Підсумок
Сьогодні ми зробили значний крок до створення професійного ML проєкту.
Структуруючи ваш проєкт, додаючи пайплайни та реалізуючи надійне логування і обробку виключень, ви побудували основу, яка забезпечує успіх.
У наступній сесії ми розглянемо створення нашого першого повільного end-to-end ML проєкту, починаючи з аналізу заявленої проблеми. Залишайтеся з нами, адже ми будемо продовжувати будувати цей проєкт, крок за кроком!
Дякую за увагу…Зв’яжіться зі мною!
Перекладено з: Day 73: Building the Foundation of Your ML Project — Structure, Logging, and Exception Handling