Включение графика предварительной обработки BEAM в модели Keras при обслуживании - PullRequest
5 голосов
/ 11 марта 2019

Краткий вопрос:

Поскольку Tensorflow движется в направлении Keras и от Оценщиков, как мы можем включить наши конвейеры предварительной обработки, например, используя tf.Transform и build_serving_input_fn() (которые используются дляоценки), в наши tf.keras модели?


Насколько я понимаю, единственный способ включить этот график предварительной обработки - это сначала построить модель с использованием Keras.Тренируй это.Затем экспортируйте его как оценщик, используя tf.keras.estimator.model_to_estimator.Затем создайте serving_input_fn и экспортируйте оценщик как сохраненную модель вместе с этим serving_input_fn, который будет использоваться во время обслуживания.

Мне это кажется утомительным, а не правильным способом ведения дел.Вместо этого я бы хотел перейти непосредственно от Keras к сохраненной модели.


Задача

Я хотел бы иметь возможность включить график предварительной обработки APAHCE BEAM в сохраненную модель Keras.

Я хотел бы обслуживать обученную модель Keras, поэтому я экспортирую ее с помощью SavedModel.Учитывая обученную модель, я хотел бы применить следующую логику для прогнозирования результата:

raw_features = { 'feature_col_name': [100] } # features to transform
working_dir = 'gs://path_to_transform_fn' 

# transform features
transformed_features = tf_transform_output.transform_raw_features(raw_features)

model = load_model('model.h5')
model.predict(x=transformed_features)

Когда я определяю свою модель, я использую Functional API, и модель имеет следующие входные данные:

for i in numerical_features:
    num_inputs.append(tf.keras.layers.Input(shape=(1,), name=i))

Это проблема, потому что тензоры не вводятся непосредственно в кера из tf.Dataset, а вместо этого связаны с использованием слоя Input().

Когда я экспортирую модель, используя tf.contrib.saved_model.save_keras_model(model=model, saved_model_path=saved_model_path), я могу легко обслужить прогнозы, если обработаю предварительную обработку в отдельном скрипте.Вывод этого будет выглядеть как enter image description here

Это то, что обычно происходит?Например, я бы предварительно обработал объекты как часть какого-либо внешнего сценария, а затем отправил transformed_features в модель для прогнозирования.

В идеале все это должно происходить в модели / части Keras одного графа.В настоящее время кажется, что я использую вывод одного графика как вход в другой граф.Вместо этого я хотел бы иметь возможность использовать один график.

При использовании оценщиков мы можем построить serving_input_fn(), который может быть включен в качестве аргумента в оценщик, что позволяет нам включать логику предварительной обработки в граф.

Хотелось бы также услышать ваши идеи Keras + SavedModel + Preprocessing по обслуживанию моделей с использованием Cloud ML

Ответы [ 2 ]

1 голос
/ 12 июня 2019

Ваш вопрос о включении Apache Beam в функцию ввода для конвейера tf.transform см. В этом руководстве по TF, в котором объясняется, как это сделать:

"https://www.tensorflow.org/tfx/transform/get_started#apache_beam_implementation

При использовании TF 2.0 SavedModel с Keras этот учебник для ноутбука демонстрирует, как это сделать:

https://www.tensorflow.org/beta/guide/keras/saving_and_serializing#export_to_savedmodel

0 голосов
/ 24 марта 2019

Облако ML - это способ машинного обучения в Google Clouds.

Очень просто Начать и обучить пользовательский интерфейс, используя их документацию:

Разработайте и подтвердите ваше приложение для обучения на местном уровне

Прежде чем запускать учебное приложение в облаке, запустите его на местном уровне. Местные условия обеспечивают эффективное развитие и рабочий процесс проверки, так что вы можете быстро повторить. Вы также не будете взимать плату за облачные ресурсы при отладке приложения на местном уровне. Получить данные о тренировках

Соответствующие файлы данных, adult.data и adult.test, размещены на общедоступное облачное хранилище. Для целей этого примера используйте версии в облачном хранилище, которые прошли некоторую тривиальную очистку, вместо оригинальных исходных данных. Смотрите ниже для получения дополнительной информации о данных.

Вы можете читать файлы данных непосредственно из облачного хранилища или копировать их в вашу местную среду. Для целей этого образца вы будете загрузить образцы для местного обучения, а затем загрузить их на свой Собственное хранилище Cloud Storage для обучения в облаке. Загрузить данные в папку:

mkdir data
gsutil -m cp gs://cloud-samples-data/ml-engine/census/data/* data/

Затем просто установите переменные TRAIN_DATA AND EVAL_DATA в локальные пути к файлам. Например, следующие команды устанавливают переменные для локальных путей.

TRAIN_DATA=$(pwd)/data/adult.data.csv
EVAL_DATA=$(pwd)/data/adult.test.csv

Тогда у вас есть файл TSV, подобный этому:

39, State-gov, 77516, Bachelors, 13, Never-married, Adm-clerical, Not-in-family, White, Male, 2174, 0, 40, United-States, <=50K
50, Self-emp-not-inc, 83311, Bachelors, 13, Married-civ-spouse, Exec-managerial, Husband, White, Male, 0, 0, 13, United-States, <=50K
38, Private, 215646, HS-grad, 9, Divorced, Handlers-cleaners, Not-in-family, White, Male, 0, 0, 40, United-States, <=50K
53, Private, 234721, 11th, 7, Married-civ-spouse, Handlers-cleaners, Husband, Black, Male, 0, 0, 40, United-States, <=50K

Для запуска:

gcloud ml-engine local train \
    --module-name trainer.task \
    --package-path trainer/ \
    --job-dir $MODEL_DIR \
    -- \
    --train-files $TRAIN_DATA \
    --eval-files $EVAL_DATA \
    --train-steps 1000 \
    --eval-steps 100

Подробнее Учебные соображения , как ваш вопрос говорит:

Выполнение учебной работы

Cloud Machine Learning Engine обеспечивает обучение модели в качестве асинхронный (пакетный) сервис. Эта страница описывает, как настроить и отправить учебное задание, запустив gcloud ml-engine из командной строки или отправив запрос в API по адресу projects.jobs.create. Прежде чем начать

Прежде чем вы сможете отправить учебное задание, вы должны упаковать приложение и загрузить его и любые необычные зависимости в облако Ведро для хранения. Примечание. Если вы используете инструмент командной строки gcloud для отправить свою работу, вы можете упаковать заявку и отправить работу в тот же шаг. Настройка задания

Вы передаете свои параметры службе обучения, установив члены ресурса Job, который включает в себя элементы в Ресурс TrainingInput.

Если вы используете инструмент командной строки gcloud для отправки своих учебных заданий, Вы можете:

Specify the most common training parameters as flags of the gcloud ml-engine jobs submit training command.
Pass the remaining parameters in a YAML configuration file, named config.yaml by convention. The configuration file mirrors the

структура JSON-представления ресурса Job. Вы передаете путь к вашему файлу конфигурации во флаге --config gcloud Задания ml-engine представляют учебную команду. Так что, если путь к вашему Конфигурационный файл - config.yaml, вы должны установить --config = config.yaml.

Сбор данных конфигурации задания

Следующие свойства используются для определения вашей работы.

Имя работы (jobId) Имя, используемое для работы (только буквы, цифры и символы подчеркивания, начинающиеся с буквы). Конфигурация кластера (ScaleTier) Уровень масштаба, указывающий тип кластера обработки, на котором будет выполняться ваше задание. Это может быть уровень CUSTOM, в этом случае вы также явно укажите количество и тип машин для использования. Повышение квалификации пакет приложений (packageUris) Пакетное учебное приложение, размещенное в облачном хранилище. Если вы используете инструмент командной строки gcloud, шаг упаковки приложения в значительной степени автоматизирован. Смотрите детали в руководство по упаковке вашего приложения. Имя модуля (pythonModule) Название основного модуля в вашей упаковке. Основной модуль - это файл Python, который вы вызываете для запуска приложения. Если вы используете Команда gcloud для отправки вашей работы, укажите имя основного модуля в флаг имени модуля. Смотрите руководство по упаковке вашего приложения. Регион (регион)Регион Compute Engine, в котором вы хотите запустить свою работу.Вы должны выполнять свою учебную работу в том же регионе, что и хранилище Cloud Storage, в котором хранятся ваши тренировочные данные.См. Доступные регионы для сервисов Cloud ML Engine.Каталог заданий (jobDir) Путь к облачному хранилищу, используемому для вывода задания.Большинство обучающих приложений сохраняют контрольные точки во время обучения и сохраняют обученную модель в файл в конце работы.Вам нужно место облачного хранилища, чтобы сохранить их.Ваш проект Google Cloud Platform должен иметь доступ для записи в этот сегмент.Служба обучения автоматически передает путь, заданный вами для каталога заданий, в ваше учебное приложение в качестве аргумента командной строки с именем job_dir.Вы можете проанализировать его вместе с другими аргументами вашего приложения и использовать в своем коде.Преимущество использования каталога заданий состоит в том, что служба обучения проверяет каталог перед запуском приложения.Runtime version (runtimeVersion)

The Cloud ML Engine version to use for the job. If you don't specify a runtime version, the training service uses the default Cloud

ML Engine runtime version 1.0.Версия Python (pythonVersion)

The Python version to use for the job. Python 3.5 is available with Cloud ML Engine runtime version 1.4 or greater. If you don't

укажите версию Python, служба обучения использует Python 2.7.

Форматирование параметров конфигурации

Способ задания параметров конфигурации зависит откак вы начинаете свое учебное задание: предоставьте подробные сведения о конфигурации задания в команду обучения gcloud ml-engine jobs submitВы можете сделать это двумя способами:

With command-line flags.
In a YAML file representing the Job resource. You can name this file whatever you want. By convention the name is config.yaml.

Даже если вы используете файл YAML, некоторые данные должны быть указаны в виде флагов командной строки.Например, вы должны предоставить флаг --module-name и хотя бы один из --package-path или --packages.Если вы используете --package-path, вы также должны включить --job-dir или --staging-bucket.Кроме того, вы должны либо указать флаг --region, либо установить регион по умолчанию для своего клиента gcloud.Эти параметры, а также любые другие, которые вы указываете в качестве флагов командной строки, будут переопределять значения этих параметров в файле конфигурации.

Пример 1. В этом примере вы выбираете предварительно сконфигурированный кластер компьютеров и предоставляете все необходимые данные в видефлаги командной строки при отправке задания.Файл конфигурации не требуется.См. Руководство по отправке задания в следующем разделе.

Пример 2. В следующем примере показано содержимое файла конфигурации для задания с настраиваемым кластером обработки.Файл конфигурации содержит некоторые, но не все сведения о конфигурации, при условии, что при отправке задания вы предоставляете другие необходимые данные в виде флагов командной строки.

trainingInput: scaleTier: CUSTOM masterType: complex_model_m
workerType:complex_model_m параметрServerType: large_model
workerCount: 9 parameterServerCount: 3 runtimeVersion: '1.13'
pythonVersion: '3.5'

В приведенном выше примере указывается версия 3.5 Python, доступная при использовании среды выполнения Cloud ML Engineверсия 1.4 или выше.

Отправка задания

При отправке обучающего задания вы указываете два набора флагов:

Job configuration parameters. Cloud ML Engine needs these values to set up resources in the cloud and deploy your application on each

узел вобрабатывающий кластер.Пользовательские аргументы или параметры приложения.Cloud ML Engine передает значение этих флагов в ваше приложение.

Отправьте учебное задание, используя команду gcloud ml-engine jobs submit обучающая команда.

Во-первых, полезно определить некоторые переменные средысодержащий ваши данные конфигурации.Чтобы создать имя задания, следующий код добавляет дату и время к названию модели:

TRAINER_PACKAGE_PATH="/path/to/your/application/sources"
now=$(date +"%Y%m%d_%H%M%S")
JOB_NAME="your_name_$now"
MAIN_TRAINER_MODULE="trainer.task"
JOB_DIR="gs://your/chosen/job/output/path"
PACKAGE_STAGING_PATH="gs://your/chosen/staging/path"
REGION="us-east1"
RUNTIME_VERSION="1.13"

Следующая отправка задания соответствует приведенному выше примеру конфигурации 1, где вы выбираете предварительно настроенный уровень масштаба (базовый) иВы решаете предоставить все детали конфигурации с помощью флагов командной строки.В файле config.yaml нет необходимости:

gcloud ml-engine jobs submit training $JOB_NAME \
        --scale-tier basic \
        --package-path $TRAINER_PACKAGE_PATH \
        --module-name $MAIN_TRAINER_MODULE \
        --job-dir $JOB_DIR \
        --region $REGION \
        -- \
        --user_first_arg=first_arg_value \
        --user_second_arg=second_arg_value

Следующая отправка задания соответствует примеру конфигурации 2 above, где часть конфигурации находится в файле, и вы предоставляете другие подробности с помощью флагов командной строки:

gcloud ml-engine jobs submit training $JOB_NAME \
        --package-path $TRAINER_PACKAGE_PATH \
        --module-name $MAIN_TRAINER_MODULE \
        --job-dir $JOB_DIR \
        --region $REGION \
        --config config.yaml \
        -- \
        --user_first_arg=first_arg_value \
        --user_second_arg=second_arg_value

Примечания:

If you specify an option both in your configuration file (config.yaml) and as a command-line flag, the value on the command

строка переопределяет значение в файле конфигурации. Пустой флаг отмечает окончание определенных флагов gcloud и начало USER_ARGS, который вы хотите передать своему приложению. Флаги, специфичные для Cloud ML Engine, такие как --module-name, --runtime-version и --job-dir, должны стоять перед пустым флагом -. Сервис Cloud ML Engine интерпретирует эти флаги. Флаг --job-dir, если он указан, должен стоять перед флагом пустого - потому что Cloud ML Engine использует --job-dir для проверки пути. Ваше приложение должно также обрабатывать флаг --job-dir, если он указан. Несмотря на то, что флаг стоит перед пустым -, --job-dir также передается вашему приложению в виде флага командной строки. Вы можете определить столько USER_ARGS, сколько вам нужно. Cloud ML Engine передает --user_first_arg, --user_second_arg и т. Д. Через ваш применение.

...