Распределенный тюнер Keras на Google Cloud Platform ML Engine / AI Platform - PullRequest
1 голос
/ 06 февраля 2020

Я пытаюсь реализовать этот пример распределенного Keras Tuner на движке ML Google Cloud Platform (GCP) (он же AI Platform): https://github.com/keras-team/keras-tuner/blob/master/docs/templates/tutorials/distributed-tuning.md

Вот мой вклад в обучение ML .yaml:

scaleTier : CUSTOM
masterType: standard
masterConfig:
   imageUri: tensorflow/tensorflow:2.1.0-gpu-py3
workerCount: 8
workerType: standard_gpu
workerConfig:
   imageUri: tensorflow/tensorflow:2.1.0-gpu-py3

Вверху сценария python добавляю:

tf_config = json.loads(os.environ['TF_CONFIG'])

cluster = tf_config['cluster']
task = tf_config['task']

master_addr = cluster['master'][0].split(':')
os.environ['KERASTUNER_ORACLE_IP'] = master_addr[0]
os.environ['KERASTUNER_ORACLE_PORT'] = '8000'

if task['type'] == 'master':
    os.environ['KERASTUNER_TUNER_ID'] = 'chief'
else:
    os.environ['KERASTUNER_TUNER_ID'] = 'tuner{}'.format(task['index'])

К сожалению, это не работает. Мастер возвращает ошибку:

server_chttp2.cc:40] {"created":"@1580940408.588629852","description":"No address added out of total 1 resolved","file":"src/core/ext/transport/chttp2/server/chttp2_server.cc","file_line":395,"referenced_errors":[{"created":"@1580940408.588623412","description":"Unable to configure socket","fd":22,"file":"src/core/lib/iomgr/tcp_server_utils_posix_common.cc","file_line":208,"referenced_errors":[{"created":"@1580940408.588609041","description":"Cannot assign requested address","errno":99,"file":"src/core/lib/iomgr/tcp_server_utils_posix_common.cc","file_line":181,"os_error":"Cannot assign requested address","syscall":"bind"}]}]}

Таким образом, получается, что мастер не может подключиться к прослушивающему порту.

Итак, я полагаю, что реальный вопрос: как выполнить привязку к порт прослушивания на GCP ML Engine? Это разрешено?

Любое понимание того, как запустить распределенную настройку Keras на GCP ML Engine, приветствуется.

1 Ответ

0 голосов
/ 04 апреля 2020

KERASTUNER_ORACLE_IP ожидает IP-адрес, а не имя хоста.

Вот функция, которую я использовал в своем проекте, см. https://github.com/vlasenkoalexey/gcp_runner/blob/master/entry_point.ipynb

import os
import json
import socket

def setup_keras_tuner_config():
    if 'TF_CONFIG' in os.environ:
        try:
            tf_config = json.loads(os.environ['TF_CONFIG'])
            cluster = tf_config['cluster']
            task = tf_config['task']
            chief_addr = cluster['chief'][0].split(':')
            chief_ip = socket.gethostbyname(chief_addr[0])
            chief_port = chief_addr[1]
            os.environ['KERASTUNER_ORACLE_IP'] = chief_ip
            os.environ['KERASTUNER_ORACLE_PORT'] = chief_port
            if task['type'] == 'chief':
                os.environ['KERASTUNER_TUNER_ID'] = 'chief'
            else:
                os.environ['KERASTUNER_TUNER_ID'] = 'tuner{}'.format(task['index'])

            print('set following environment arguments:')
            print('KERASTUNER_ORACLE_IP: %s' % os.environ['KERASTUNER_ORACLE_IP'])
            print('KERASTUNER_ORACLE_PORT: %s' % os.environ['KERASTUNER_ORACLE_PORT'])
            print('KERASTUNER_TUNER_ID: %s' % os.environ['KERASTUNER_TUNER_ID'])
        except Exception as ex:
            print('Error setting up keras tuner config: %s' % str(ex))

И для TF2 .x «мастер» был заменен на «шеф» в TF_CONFIG. Вы можете передать - use-chief-in-tf-config , чтобы обновить его. Подтвердил, что он работает на платформе AI и на Kubernetes.

...