我有一个在我的笔记本电脑(16GB RAM)上运行良好的 Keras 模型(tensorflow 后端)。
但是,我使用 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 文件,但它会立即加载,并且崩溃发生在第 3 个时期左右。
我怀疑 Tensorflow 没有遵守最大内存限制。
我尝试了不同的请求/限制,事实上,正如我所说的,该模型以前在我的笔记本电脑上训练得很好。
我可以尝试什么?错在哪里?
容器规范的相关部分:
resources:
limits:
cpu: '7'
memory: 26Gi
requests:
cpu: '7'
memory: 26Gi
该节点是使用 GKE 的自动配置自动配置的——它创建了一个n1-standard-8
,即 8 个 VCPU,30 GB RAM。