У меня есть модель Keras (бэкэнд тензорного потока), которая отлично работает на моем ноутбуке (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ГБ ОЗУ.