У меня есть несколько контейнеров с заданиями Tensorflow для графического процессора, и, если 2+ из них выполняются одновременно на одном хосте, только 1 будет успешным (2018-05-11 13:02:19.147869: E tensorflow/core/common_runtime/direct_session.cc:171] Internal: failed initializing StreamExecutor for CUDA device ordinal 0: Internal: failed call to cuDevicePrimaryCtxRetain: CUDA_ERROR_ECC_UNCORRECTABLE
, то есть они не могут совместно использовать GPU).
Идеальный сценарий будет выглядеть следующим образом: у меня 10 заданий на GPU и максимум 5 контейнеров. Первые 5 выполняются, остальные 5 ждут (в данный момент они не ждут, но пытаются выполнить и терпят неудачу), когда один из них завершается, 6-й сразу запускается на том же хосте, затем 7-й, 8-й, 9-й, 10-й.
Я использую p2.xlarge и настраиваю 4 vCPU и 42000 памяти для работы gpu. Согласно ec2instances.info, эта машина имеет 61 ГБ памяти и 4 виртуальных ЦП. Но, в любом случае, похоже, что пакет выполняет планирование нескольких контейнеров одновременно, что приводит к описанному отказу.
До сих пор я пытался играть с параметрами vCPU
и memory
, но планировщик Batch, похоже, игнорирует их.
Интересно, что соответствующее определение задачи ECS имеет 1/--
в качестве значения для Hard/Soft memory limits (MiB)
, поэтому значения из пакета "определение задания" не передаются в определение задачи ECS .
Другой альтернативой является установка очень большого количества попыток, но
- некрасиво
- для длительных заданий может истощиться даже большое число
- Я теряю защиту от вечно работающих заданий (например, неправильно настроен)
- не уверен, как такое прерывание повлияет на уже запущенные задания Tensorflow