Руководства по Google ML
Обучение модели на платформе искусственного интеллекта Google
Как обучить модель на Python с помощью сервисов Google Cloud
Добро пожаловать в первую статью из этой серии о том, как выполнять машинное обучение на платформе Google Cloud Platform!
Посмотрим на AI Platform. Это подмножество инструментов, строго связанных с машинным обучением, среди которых:
- Обучение платформе AI, для обучения / настройки моделей в облаке.
- Прогнозирование платформы AI для размещения обученных моделей в облаке.
- AI Pipelines, чтобы создать пошаговый процесс с использованием Kubernetes и образов Docker.
и многие другие.
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ. Я никоим образом не связан с Google. Я просто решил
написать эти статьи, чтобы поделиться знаниями, которые я приобрел с помощью этих инструментов в своей
повседневной работе.
В этой первой статье я сосредоточусь на Обучение платформе AI, продукте для выполнения
учебных заданий в облаке с настраиваемым кодом и настраиваемыми машинами. Я думаю, что основные преимущества использования платформы AI для обучения ваших моделей:
- вы можете использовать более мощные ресурсы (например, несколько ядер или графический процессор) без особых хлопот для их создания
- вы можете поделиться кодом со своей командой и воспроизвести те же результаты, используя общую облачную инфраструктуру.
В этом руководстве мы напишем реальное приложение Python с определением обучения, запустим локальный тест и выполним задание обучения на Облачная платформа.
Для учебника вам понадобится
- Активная учетная запись Google Cloud Platform (вы можете создать новую учетную запись, посетив домашнюю страницу) и проект GCP
- Python 3, gcloud и gsutil, установленные на вашей рабочей станции
- набор данных, использованный в учебнике, набор данных банковского маркетинга UCI. Здесь
вы можете найти документацию по набору данных. Мы будем использовать полную версию.
Шаг 1. Сохраните данные в Google Storage
После того, как вы скачали набор данных на свой локальный компьютер, перейдите в Консоль Google Storage вашего проекта GCP. Создайте новый сегмент (я назвал его bank-marketing-model
) и загрузите в него набор данных. Теперь ваше ведро должно выглядеть так:
В качестве альтернативы, вы можете использовать gsutil
из командной строки, что интереснее. Перейдите в локальный каталог, содержащий набор данных, и запустите
gsutil mb gs://bank-marketing-model gsutil cp ./bank-additional-full.csv gs://bank-marketing-model
gsutil mb
создает ведроgsutil cp
копирует файл с локального пути в корзину GCS
Шаг 2: напишите приложение для обучения Python
Если вы читаете это, скорее всего, вы уже знаете, как написать сквозную программу Python для обучения модели машинного обучения. В любом случае, поскольку мы планируем обучать модель в облаке, есть несколько шагов, которые чем-то отличаются от обычного Kaggle-ish кода.
Первое, что нужно иметь в виду, вы можете использовать только scikit-learn, XGBoost или
Tensorflow для обучения своей модели (Pytorch находится в стадии бета-тестирования, и есть способ использовать собственный Python среды, но мы увидим это в другой статье).
Итак, основы приложения Python:
- скачать набор данных из хранилища
subprocess.call([ 'gsutil', 'cp', # Storage path os.path.join('gs://', STORAGE_BUCKET, DATA_PATH), # Local path os.path.join(LOCAL_PATH, 'dataset.csv') ]) df = pd.read_csv(os.path.join(LOCAL_PATH, 'dataset.csv'), sep=';')
- выполнить некоторую подготовку данных (разделенный тест на поезд, отсутствие вменения,…) и создать конвейер
train, test = train_test_split(df, test_size=args.test_size, random_state=42) ... pipeline = Pipeline([ # The ColumnTransformer divide the preprocessing process between # categorical and numerical data ('data_prep', ColumnTransformer([ ('num_prep', StandardScaler(), num_features), ('cat_prep', OneHotEncoder(), cat_features) ])), # ML model ('model', RandomForestClassifier( random_state=42, n_jobs=args.n_jobs, n_estimators=args.n_estimators, max_depth=args.max_depth, max_features=args.max_features if args.max_features is not None else 'sqrt', min_samples_split=args.min_samples_split, class_weight='balanced', max_samples=args.max_samples )) ])
- обучить модель
pipeline.fit(train, y_train)
- получить некоторые показатели производительности
results = pd.DataFrame( {'accuracy': [accuracy_score(y_train, pred_train), accuracy_score(y_test, pred_test)], 'precision': [precision_score(y_train, pred_train, pos_label='yes'), precision_score(y_test, pred_test, pos_label='yes')], 'recall': [recall_score(y_train, pred_train, pos_label='yes'), recall_score(y_test, pred_test, pos_label='yes')], 'f1': [f1_score(y_train, pred_train, pos_label='yes'), f1_score(y_test, pred_test, pos_label='yes')]}, index=['train', 'test'] )
- сохранить обученную модель и результаты в хранилище
subprocess.call([ 'gsutil', 'cp', # Local path of the model os.path.join(LOCAL_PATH, 'model.joblib'), os.path.join(args.storage_path, 'model.joblib') ]) subprocess.call([ 'gsutil', 'cp', # Local path of results os.path.join(LOCAL_PATH, 'results.csv'), os.path.join(args.storage_path, 'results.csv') ])
Вы можете найти весь код на Github.
Примечание: в верхней части кода есть несколько параметров, которые вы можете настроить.
Шаг 3: протестируйте код локально
Перед отправкой процесса обучения на облачную платформу лучше протестировать код локально. И для локального, и для облачного обучения мы будем использовать gcloud
; команда для запуска очень похожа, но есть несколько отличий.
Во-первых, чтобы обучить модель локально с помощью платформы AI, мы можем написать команду, которая «меняет» эту логику: gcloud ai-platform
(с платформой AI) local
(локально) train
(обучать модель). Мы добавляем кучу параметров, некоторые из которых относятся к процессу обучения, другие определены в нашем пользовательском приложении Python.
После перехода в основной каталог с каталогом src
полная команда выглядит следующим образом:
gcloud ai-platform local train \ --module-name=src.train \ --package-path=./src \ -- \ --storage-path=gs://bank-marketing-model/test \ --n-estimators=25
Давайте посмотрим на параметры:
module-name
- это имя модуля Python для запуска в формеdirectory.python_file
package-path
- это путь к каталогу модуля—-
сообщает, что мы начали отправлять специальные параметры
Поскольку это тестовый запуск, мы указываем небольшое количество деревьев для случайного леса.
Имейте в виду, что даже если это локальный тестовый запуск, он создаст все артефакты и сохранит их в вашем хранилище. Если все пройдет без ошибок, мы можем перейти к собственно обучению в облаке!
Шаг 4: тренируйтесь на платформе AI
Теперь, когда мы написали приложение и протестировали его, мы, наконец, можем обучить нашу модель на платформе. Например, мы можем создать экземпляр многоядерной машины и распараллелить обучение леса.
Как было сказано ранее, код bash очень похож, но мы должны вызвать другую группу команд. Вместо local train
мы используем jobs submit training
:
gcloud ai-platform jobs submit training $JOB_NAME \ --module-name=src.train \ --package-path=./src \ --staging-bucket=gs://bank-marketing-model \ --region=$REGION \ --scale-tier=CUSTOM \ --master-machine-type=n1-standard-8 \ --python-version=3.7 \ --runtime-version=2.2 \ -- \ --storage-path=gs://bank-marketing-model/$JOB_NAME \ --n-estimators=500 \ --n-jobs=8
Еще раз взглянем на новые параметры:
module-name
иpackage-path
такие же, как и раньшеstaging-bucket
указывает на корзину Google Storage, в которой хранятся обучающие артефакты.region
- регион Google Cloud (здесь полный список). Поскольку машины, экземпляры которых создаются для этих заданий, расположены по всему миру, вы можете указать, где создавать экземпляры машины. Если вы не знаете, как установить этот параметр, просто установите ближайший регион от того места, где вы находитесь!scale-tier
укажите, какой тип тренажера использовать для обучения. Это параметр высокого уровня
, вы можете установить для него конфигурацию по умолчанию (например,BASIC
илиSTANDARD_1
) или установить для него значениеCUSTOM
и использовать параметрmaster-machine-type
для использования низкоуровневого определения машины. В нашем примере мы используем стандартный компьютер с 8 ядрами. Мы также можем указатьhighmem
(для увеличения памяти) илиhighcpu
(для большего количества виртуального процессора) вместоstandard`
. Полный списокscale-tier
s и доступных машин находится здесь.- Параметры
python-version
иruntime-version
определяют основу пакетов, установленных на машине. Для каждой среды выполнения (здесь полный список) у нас есть одна или несколько версий Python, которые мы можем использовать, и список уже установленных пакетов Python.
БОНУСНЫЙ СОВЕТ: если вы хотите установить пакет, который недоступен в списке
среды выполнения, добавьте команду «pip» в верхней части приложения, например
subprocess.call ([«пункт», «установить», имя_пакета])
- Для наших пользовательских параметров мы устанавливаем большее количество оценщиков и указываем, что нужно запускать 8 заданий параллельно.
N.B. $JOB_NAME
в приведенном выше коде не является допустимым именем, но это ссылка на определенную ранее переменную bash. Очень важно каждый раз указывать
другое имя задания. Например, как вы видите в скрипте cloud_train
, мы можем указать
JOB_NAME=bank_marketing_$(date +%Y%m%d_%H%M%S)
поэтому суффикс будет меняться каждый раз в зависимости от дня и времени.
Если вы впервые используете этот инструмент, он, вероятно, попросит вас включить определенный Google API (например, ml.googleapis.com
): примите, чтобы включить его, и продолжайте. Если все в порядке, команда должна вернуть что-то вроде этого
и в вашей консоли Google AI Platform Jobs вы должны увидеть запущенное новое задание.
Теперь вы можете контролировать работу по обучению двумя способами:
- с предложенной командой
gcloud ai-platform jobs stream-logs $JOB_NAME
- нажав Просмотреть журналы на консоли заданий
Ура! Работа закончилась правильно. Давайте посмотрим на нашу корзину хранилища:
У нас есть объект model.joblib
, файл results.csv
с характеристиками модели и папка, автоматически созданная заданием для хранения приложения Python.
Давайте посмотрим на характеристики модели ... Мы можем скачать файл с результатами или ввести команду
gsutil cat gs://your-bucket/your/path/to/results.csv
чтобы увидеть файл прямо в командной строке.
Для моей обученной модели я получил следующие результаты:
Measure | Train | Test ------------|----------|---------- Accuracy | 81.53% | 81.01% Precision | 37.00% | 36.40% Recall | 91.42% | 90.05% F1 | 52.68% | 51.85%
Это неплохие результаты, но мы можем добиться большего, настроив гиперпараметры модели. В следующей статье мы увидим, как немного изменить обучающее приложение, чтобы сделать поиск на платформе AI поиск лучших гиперпараметров с помощью процесса байесовской оптимизации!
Спасибо за чтение, надеюсь, вы найдете это полезным!