Kubeflow 动态配置的 PVC 出现内存不足 (OOM) 错误

问题描述

尊敬的 Stackoverflow 社区和 K8s/Kubeflow 专家,

我对将 K8s 用于 MLops 还很陌生,并且遇到了配置 Kubeflow 管道以挂载到 NFS、将 HDF5 数据从该卷传输到 PVC 的问题。前两个任务按预期工作。然后,当我对这些文件运行预处理任务时,我收到以下两个错误之一:

  1. “退出代码 137” - 表示内存不足错误,但经过一些研究可能与 Istio 活跃度检查有关,这些检查在 pod 中给定节点的 docker 镜像中失败

  2. “OOMKilled”

我在 PVC 和管道布置的多种配置中遇到了这些错误。我正在使用的服务器具有多个 GPU、24 个 CPU 内核、近 1 TB 的 RAM 和 28 TB NVMe Raid。因此,分配足够大的内存和 PV 存储空间以容纳执行的图像预处理和计算机视觉任务的资源不是问题。 PVC 有 3-500 GB 的空间可供使用,这对于总共约 100 GB 的图像文件来说已经足够了。

注意:调出打包在 Docker 容器中的完全相同的 Python 脚本可能很重要,这些脚本在 Kubeflow 中的笔记本服务器上运行得非常好,但不是 Kubeflow 管道

第一我不确定如何检查动态配置是否在集群上正确设置,第二如果我在下面看到的动态配置中的任何一种配置 PVC 更好,否则我在此过程中完全遗漏了一些东西。

第一种方法 - Kubeflow Native VolumeOp PVC 配置

https://www.kubeflow.org/docs/pipelines/sdk/manipulate-resources/

出于隐私原因,这是我的 pipeline.py 脚本的一个非常淡化的版本,但总体思路是使用 kfp.dsl.VolumeOp() 在 PipelineParams 中动态提供指定大小的 PVC,这种方法导致“退出代码 137":

temp_pvc_op = dsl.VolumeOp(
    name='temp-pvc',resource_name='temp-pvc',size=pvc_temp_size,modes=["ReadWriteOnce"]
)
temp_pvc_vol = temp_pvc_op.volume

step1 = dsl.ContainerOp(
    name='Process data',image=<private-docker-registry-image>,command=['python3'],arguments=[
       'my_script.py','--argument1',<arg_var>,'--argument2',],pvolumes={"/workspace/temp_data",temp_pvc_vol}
)

第二种方法 - 手动定义一个动态配置的 PVC,称为 PipelineVolume

https://kubernetes.io/docs/concepts/storage/dynamic-provisioning/

根据上面的文章和“Kubernetes In Action”(Luksa 2018)中不包含 storageName 时,默认的 StorageClass 将用于预置 PVC,在这种情况下,它是一个 rook ceph 块存储,它挂载了NAS 到 kubeflow 命名空间中的 pod。这是应用到 API 服务器的 yaml 文件:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: dynamic-pvc
  namespace: kubeflow
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 300Gi

$ kubectl apply -f dynamic-pvc.yml

然后在pipeline.py文件中,这一行在step1 ContainerOp中分配pvolumes时替换了temp_pvc_op对VolumeOp.volume属性的引用:

temp_pvc_vol = dsl.PipelineVolume(pvc="dynamic-pvc")

这可行并且数据已挂载/可见,但是在容器内部时,执行代码以读取 HDF5 文件,显示 OOM 错误,并且 pod 卡在运行状态。

Kubernetes Dashboard message for pod showing OOMkilled

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...