Производительность онлайн-прогнозирования Cloud ML Engine

Я создал модель Cloud ML Engine и попытался сгенерировать прогнозы онлайн / HTTP, но обнаружил, что задержка выполнения прогноза все еще довольно высока. Ниже приведен сценарий Python, который я использую для создания прогнозов (здесь ):

def predict_json(project, model, instances, version=None):
    service = googleapiclient.discovery.build('ml', 'v1')
    name = 'projects/{}/models/{}'.format(project, model)

    if version is not None:
        name += '/versions/{}'.format(version)

    response = service.projects().predict(
        name=name,
        body={'instances': instances}
    ).execute()

    if 'error' in response:
        raise RuntimeError(response['error'])

    return response['predictions']

Когда модель запускается на моем ноутбуке, когда у меня есть tf.Session с графиком и восстановленными всеми переменными, прямой проход по сети занимает около 0,16 с (для размера пакета 1). Однако, когда я загружаю одни и те же данные с помощью Cloud ML, прямой проход занимает около 3,6 секунды, даже когда я запускаю один и тот же сценарий несколько раз.

Я подозреваю, что модель перезагружается с нуля каждый раз, когда я пытаюсь сделать прогноз - есть ли способ, чтобы тот же tf.Session работал в фоновом режиме, чтобы прогнозы генерировались намного быстрее? Или я еще что-то делаю неправильно?

Заранее спасибо за помощь!


person yuji    schedule 14.01.2018    source источник
comment
Согласно этому документу, вы можете использовать версию по умолчанию модель или вы можете каждый раз указывать другую версию. Вы каждый раз используете одну и ту же версию? Прочтите этот документ об управлении моделями и вакансиями. Возможно, этот общий документ по устранению неполадок также будет полезен - проверьте, как Cloud ресурсы предусмотрены для прогнозов.   -  person Tudormi    schedule 15.01.2018
comment
Спасибо за ваш ответ. Модель, которую я использую, имеет только 1 версию (которую я установил по умолчанию), так что это не должно быть проблемой - ни одна из проблем в документе по устранению неполадок также не применима.   -  person yuji    schedule 15.01.2018


Ответы (1)


  1. Измерьте задержку между вашим компьютером и облаком Google? Попробуйте отправить неверный URL-адрес и измерьте время ответа.

  2. Проверьте регион, в котором была развернута служба.

  3. Отправьте в сервис пять запросов с интервалом 30 секунд. Уменьшается ли задержка?

person Lak    schedule 16.01.2018
comment
1. Я попытался отправить пустой файл json, когда использовал команду gcloud из Cloud Shell, а затем рассчитал время с помощью time, и это заняло около 400 мс, что не учитывает остальные 3000 мс. 2. Он развернут на us-central1, я на западном побережье. 3. Задержка не уменьшается, когда я отправляю запрос с интервалом в 30 секунд (или даже с более короткими интервалами, например, 2 секунды). - person yuji; 16.01.2018
comment
Когда вы измеряли его локально, используете ли вы локальный прогноз gcloud? Если нет, можешь попробовать и это? - person Lak; 16.01.2018
comment
Я предлагаю использовать проводник API, ml.projects.predict endpoint, чтобы увидеть возможные изменения в производительности, когда отделяет код от задания, оставляя чистые HTTP-запросы-ответы. Пожалуйста, ответьте с результатами - person Tudormi; 17.01.2018