Обучение с использованием настраиваемого контейнера не заканчивается sh после завершения основного скрипта - PullRequest
0 голосов
/ 11 июля 2020

Я обучаю модель обнаружения объектов с тензорным потоком и API обнаружения объектов с использованием контейнера Docker на платформе Google Cloud AI Platform. После завершения обучения график tflite успешно экспортируется, но проблема в том, что задание не заканчивается sh после завершения main.py.

Для обучения модели и экспорта я использую сценарий main.py в качестве точки входа:

ENTRYPOINT ["python", "-u", "main.py"]

, и сценарий принимает некоторые аргументы, которые я передаю ему с помощью ключевого слова CMD внутри Dockerfile (хотя они могут быть перезаписаны с помощью команды gcloud ai-platform jobs submit training):

CMD ["--network_type", "mobilenet_v2_ssd", \
     "--train_whole_model", "True", \
     "--job-dir", "gs://job-dir", \
     "--dataset-dir", "gs://dataset"]

Содержимое main.py в основном выглядит так:

# import stuff

# define argparse stuff

def main(args):
    # Train Model
    # Export Graph
    print("Training finished")


if __name__ == "__main__":
    # get args
    main(args)

Чтобы начать задание, я выполняю следующее:

gcloud ai-platform jobs submit training $JOB_NAME \
    --region $REGION \
    --config config.yaml \
    --job-dir "gs://job-dir" \
    --master-image-uri $IMAGE_URI \
    -- \
    --network_type "mobilenet_v2_ssd" \
    --train_whole_model "True" \
    --dataset-dir "gs://dataset" \

Когда я вижу Training finished в средстве просмотра журналов Google Cloud контейнер работает не менее пяти минут без завершения, и я не знаю, остановится ли он, если я не отменю задание вручную.

Должен ли я инструктировать платформу AI о завершении sh задание в конце main.py? Может быть, вернуть код состояния (например, return 0)? Или мне просто подождать более пяти минут, чтобы sh задание завершилось само?

...