MLflow — это платформа с открытым исходным кодом, предназначенная для управления жизненным циклом машинного обучения от начала до конца. Она предлагает функциональность для отслеживания экспериментов, упаковки кода в воспроизводимые запуски, а также для обмена и развертывания моделей.
NeuralProphet совместим с MLflow, и мы можем отслеживать наши задачи на платформе MLflow.
# Для этого учебного пособия нам нужно установить MLflow.# !pip install mlflow# Запустите MLflow tracking-сервер на вашем локальном компьютере# !mlflow server --host 127.0.0.1 --port 8080if"google.colab"instr(get_ipython()):# Удаляем предустановленные пакеты из Colab, чтобы избежать конфликтов !pip uninstall -y torch notebook notebook_shim tensorflow tensorflow-datasets prophet torchaudio torchdata torchtext torchvision !pip install git+https://github.com/ourownstory/neural_prophet.git # может занять некоторое время# Намного быстрее с использованием следующего кода, но может не иметь последних обновлений/исправлений ошибок# pip install neuralprophet
import pandas as pdfrom neuralprophet import NeuralProphet, set_log_level, saveimport mlflowimport timeset_log_level("ERROR")# Устанавливаем уровень логирования на ERROR, чтобы уменьшить количество выводимой информацииdata_location ="https://raw.githubusercontent.com/ourownstory/neuralprophet-data/main/datasets/"df = pd.read_csv(data_location +"air_passengers.csv")# Читаем данные из CSV файла в DataFrame
Настройка сервера отслеживания MLflow
На этом этапе мы настраиваем MLflow для использования сервера отслеживания для регистрации и мониторинга наших экспериментов с машинным обучением. Сервер отслеживания служит центральным репозиторием для хранения данных о экспериментах в MLflow. Это включает в себя информацию, такую как параметры модели, метрики и выходные файлы.
# Установите переменную 'local' на True, если вы хотите запустить этот ноутбук локальноlocal =False
# Устанавливаем URI нашего сервера отслеживания для логирования, если переменная 'local' установлена в Truemlflow.set_tracking_uri(uri="http://127.0.0.1:8080")if local elseNone
Завершить предыдущий запуск
Если у вас есть активный процесс перед началом регистрации и мониторинга, это вызовет ошибку. Поэтому убедитесь, что вы завершили все предыдущие активные процессы. В обычной ситуации у вас не должно быть активных процессов, и вы можете игнорировать следующий блок.
В следующем шаге мы рассмотрим запуск и управление экспериментом с MLflow для обучения модели NeuralProphet. Акцент будет сделан на настройке эксперимента, определении гиперпараметров модели и регистрации основных метрик обучения.
# Запускаем новый сеанс MLflowif local:with mlflow.start_run():# Создаем новый эксперимент MLflow mlflow.set_experiment("NP-MLflow Quickstart_v1")# Устанавливаем тег для эксперимента mlflow.set_tag("Description", "NeuralProphet MLflow Quickstart")# Определяем гиперпараметры NeuralProphet params ={"n_lags":5,"n_forecasts":3,}# Логируем гиперпараметры mlflow.log_params(params)# Инициализируем и обучаем модель NeuralProphet start = time.time() m =NeuralProphet(**params) metrics_train = m.fit(df=df, freq="MS") end = time.time()# Логируем длительность обучения mlflow.log_metric("duration", end - start)# Логируем метрики обучения mlflow.log_metric("MAE_train", value=list(metrics_train["MAE"])[-1]) mlflow.log_metric("RMSE_train", value=list(metrics_train["RMSE"])[-1]) mlflow.log_metric("Loss_train", value=list(metrics_train["Loss"])[-1])# Сохраняем модель model_path ="np-model.np"save(m, model_path)# Логируем модель в MLflow mlflow.log_artifact(model_path, "np-model")
Просмотрите запуск NeuralProphet в пользовательском интерфейсе MLflow.
Чтобы увидеть результаты нашего запуска, мы можем перейти в пользовательский интерфейс MLflow. Поскольку мы уже запустили сервер отслеживания по адресу http://localhost:8080, мы можем просто перейти к этому URL в нашем браузере и наблюдать за нашими экспериментами. Если мы нажмем на соответствующие эксперименты, мы увидим список всех запусков, связанных с экспериментом. Нажав на запуск, мы перейдем на страницу запуска, где будут показаны детали того, что мы зарегистрировали.
Расширенный пример
с: авторегистрацией MLflow, набором данных, требованиями и метаданными среды с выводом сигнатуры модели, еще одним экспериментом MLflow с NeuralProphet.
# Настройка MLflow# Запустите эту команду с активированной средой: mlflow ui --port xxxx (например, 5000, 5001, 5002)# Скопируйте и вставьте URL из командной строки в веб-браузерimport mlflowimport torchmetricsfrom mlflow.data.pandas_dataset import PandasDatasetif local: mlflow.pytorch.autolog( log_every_n_epoch=1, log_every_n_step=None, log_models=True, log_datasets=True, disable=False, exclusive=False, disable_for_unsupported_versions=False, silent=False, registered_model_name=None, extra_tags=None, )import mlflow.pytorchfrom mlflow.client import MlflowClient model_name ="NeuralProphet"with mlflow.start_run()as run: dataset: PandasDataset = mlflow.data.from_pandas(df, source="AirPassengersDataset")# Логируем датасет в MLflow Run. Указываем контекст "training", чтобы указать, что# датасет используется для обучения модели mlflow.log_input(dataset, context="training") mlflow.log_param("model_type", "NeuralProphet") mlflow.log_param("n_lags", 8) mlflow.log_param("ar_layers", [8, 8, 8, 8]) mlflow.log_param("accelerator", "gpu")# Для обучения# Импортируем класс NeuralProphetfrom neuralprophet import NeuralProphet, set_log_level# Отключаем вывод сообщений, если нет ошибокset_log_level("ERROR")# Создаем модель NeuralProphet с параметрами по умолчанию m =NeuralProphet(n_lags=8, ar_layers=[8, 8, 8, 8], trainer_config={"accelerator": "gpu"})# Используем статические графики plotly в блокнотах m.set_plotting_backend("plotly-resampler")# Обучаем модель на датасете metrics = m.fit(df) df_future = m.make_future_dataframe(df, n_historic_predictions=48, periods=12)# Предсказываем будущее forecast = m.predict(df_future) mlflow.metrics.mae()# Сохраняем conda-окружение, используемое для запуска модели mlflow.pytorch.get_default_conda_env()# Сохраняем требования pip mlflow.pytorch.get_default_pip_requirements()# Регистрируем модель model_uri =f"runs:/{run.info.run_id}/NeuralProphet_test" mlflow.register_model(model_uri=model_uri, name=model_name)