Kubernetes OOMЗабиленные контейнеры для Tensorflow
У меня есть модель Keras (backend тензорного потока), которая отлично работает на моем ноутбуке (16 ГБ ОЗУ).
Однако я использую Kubeflow для его развертывания в GCP, и каждый раз при завершении работы модуля (OOMKilled
). Для ЦП и памяти указаны как запросы, так и ограничения.
Dockerfile, созданный для меня kubeflow:
FROM gcr.io/deeplearning-platform-release/tf-cpu.1-14
WORKDIR /python_env
COPY requirements.txt .
RUN python3 -m pip install -r requirements.txt
COPY . .
Есть некоторый вывод журнала из того, что выглядит как Tensorflow:
First RAM-looking message:
time="2019-11-03T22:17:14Z" level=info msg="Alloc=3248 TotalAlloc=11862 Sys=70846 NumGC=12 Goroutines=11
Final RAM-looking message:
time="2019-11-03T22:52:14Z" level=info msg="Alloc=3254 TotalAlloc=11952 Sys=70846 NumGC=29 Goroutines=11
Но в конечном итоге оперативная память растет по линейной кривой, пока не будет отключена через ~50 минут.
Модель проста, и хотя данные представляют собой CSV-файл размером ~ 1 ГБ, он загружается немедленно, и сбой происходит примерно в 3-ю эпоху.
Я подозреваю, что Tensorflow не соблюдает максимальные ограничения памяти.
Я пробовал разные запросы / ограничения, и действительно, как я уже сказал, ранее модель отлично тренировалась на моем ноутбуке.
Что я могу попробовать? В чем заключается вина?
Соответствующая часть спецификации контейнера:
resources:
limits:
cpu: '7'
memory: 26Gi
requests:
cpu: '7'
memory: 26Gi
Узел был подготовлен автоматически с помощью автоматической подготовки GKE - он создал n1-standard-8
, т.е. 8 VCPU, 30 ГБ RAM.