我有一个Keras模型(tensorflow后端),可以在我的笔记本电脑(16GB RAM)上很好地运行。
但是,我使用Kubeflow将其部署到GCP,并且每次pod终止时(OOMKilled
)。同时为CPU和内存指定了请求和限制。
kubeflow为我生成的dockerfile:
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
但是最终,RAM会以线性曲线增长,直到〜50分钟后终止。
该模型很简单,尽管数据是一个约1GB的CSV文件,但该文件会立即加载,并且崩溃会在第三个时期发生。
我怀疑Tensorflow没有遵守最大内存限制。
我尝试了不同的请求/限制,确实,正如我所说的,该模型以前在我的笔记本电脑上训练得很好。
我可以尝试什么?问题出在哪里?
容器规范的相关部分:
resources:
limits:
cpu: '7'
memory: 26Gi
requests:
cpu: '7'
memory: 26Gi
该节点是使用GKE的自动配置自动配置的-它创建了n1-standard-8
,即8个VCPU,30 GB RAM。