我在 GCP 上的 GKE 环境中使用 GPU 实例。不幸的是,我在 GPU 实例上无法访问互联网。有时有效,有时无效。我第一次检测到这个问题是因为我从 Huggingface 下载预训练模型的请求无法解决。
我一直在尝试更好地解决这个问题,而这种“网络丢失”只发生在 GPU 实例中。
我一直在使用以下 kubernetes 容器来开始解决问题:
containers:
- name: test-img
image: test:0
command: [ "/bin/bash", "-c", "--" ]
args: [ "while true; do sleep 30; done;"]
(测试是一个简单的 ubuntu 镜像左右) 之后我执行到 pod 并尝试使用 apt-get install 安装任何软件包,例如 apt-get install -y wget,我得到以下输出:
Err:1 http://deb.debian.org/debian bullseye/main amd64 libpsl5 amd64 0.21.0-1.2
Temporary failure resolving 'deb.debian.org'
Err:2 http://deb.debian.org/debian bullseye/main amd64 wget amd64 1.21-1+b1
Temporary failure resolving 'deb.debian.org'
Err:3 http://deb.debian.org/debian bullseye/main amd64 publicsuffix all 20210108.1309-1
Temporary failure resolving 'deb.debian.org'
E: Failed to fetch http://deb.debian.org/debian/pool/main/libp/libpsl/libpsl5_0.21.0-1.2_amd64.deb Temporary failure resolving 'deb.debian.org'
E: Failed to fetch http://deb.debian.org/debian/pool/main/w/wget/wget_1.21-1%2bb1_amd64.deb Temporary failure resolving 'deb.debian.org'
E: Failed to fetch http://deb.debian.org/debian/pool/main/p/publicsuffix/publicsuffix_20210108.1309-1_all.deb Temporary failure resolving 'deb.debian.org'
请注意,一旦我在非 GPU 实例中重试此操作,它就会完美运行。相同的图像、相同的 yaml 文件等
我觉得这是 DNS 发现的问题,令人惊讶的是这个错误在几周前第一次出现并自行消失。现在它回来了,到目前为止没有对配置进行任何更改。
请注意,pod 属于 Job 类型。欢迎任何帮助,已经为此苦苦挣扎了一段时间
我已经成功解决了这个问题,尽管这是一个非常棘手的解决方案。仅当我只有 GPU 实例时才会发生此错误。将一个 CPU 实例作为 e1 micro 添加到集群中可以解决该问题。
GPU 实例是否有可能位于特定 VPN 上并且仅通过集群的 CPU 实例网络与外部通信?
经过一番研究,我发现 GKE 会自动污染 GPU 节点,因此像
kube-dns
这样的其他系统 Pod 无法在其上运行。我们可以至少创建一个非 GPU 节点或删除污点。我想用 e1-micro 创建一个 CPU 节点可能是一个更好的解决方案。
了解更多信息:https://cloud.google.com/kubernetes-engine/docs/how-to/gpus#create