多亏了谷歌云,我们在云上运行GPU获得了免费积分,但我们在一开始就卡住了。
我们曾经通过机器学习模型每天获取图像进行处理,但不知何故,GPU系统并不是整天都在使用,有没有办法控制这个系统在所有图像通过一个函数处理后启动和停止?我们可以在特定的日期和时间通过cron调用它。
我听说过aws lambda,但不确定google cloud能为这个问题提供什么。
提前谢谢。
发布于 2020-01-14 21:47:20
您可以针对此用例使用Cloud Scheduler,也可以在镜像可用时触发Cloud Function并对其进行处理。
然而,300美元的免费配额是用于培训和创新目的,而不是用于实际生产应用。
发布于 2020-10-01 21:03:08
如果你愿意付出努力,你可以使用Google Kubernetes引擎来实现。据我所知,这是目前在GCP上自启动和停止GPU实例的唯一方法。为此,您需要在Kubernetes集群中添加一个具有自动伸缩功能的GPU节点池。
gcloud container node-pools create gpu_pool \
--cluster=${GKE_CLUSTER_NAME} \
--machine-type=n1-highmem-96 \
--accelerator=nvidia-tesla-v100,8 \
--node-taints=reserved-pool=true:NoSchedule \
--enable-autoscaling \
--min-nodes=0 \
--max-nodes=4 \
--zone=${GCP_ZONE} \
--project=${PROJECT_ID}确保将环境变量与实际项目ID等进行细分,并确保使用GCP专区,该专区实际上具有您想要的GPU类型(并不是所有专区都具有所有GPU类型)。确保指定区域,如europe-west1-b,而不是europe-west1。
此命令将一次启动所有节点,但它们将在默认集群配置中自动伸缩节点的默认超时后自动关闭(对我来说,我认为是5分钟)。但是,您可以更改该设置。
然后,您可以从CLI或使用显式请求GPU资源的任何可用的Kubernetes API客户端库启动Kubernetes Job (而不是部署)。
以下是一些包含主要必要组件的示例job.yaml,但是,您需要根据您的集群配置进行调整:
apiVersion: batch/v1
kind: Job
metadata:
name: some-job
spec:
parallelism: 1
template:
metadata:
name: some-job
labels:
app: some-app
spec:
containers:
- name: some-image
image: gcr.io/<project-id>/some-image:latest
resources:
limits:
cpu: 3500m
nvidia.com/gpu: 1
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- some-app
topologyKey: "kubernetes.io/hostname"
tolerations:
- key: reserved-pool
operator: Equal
value: "true"
effect: NoSchedule
- key: nvidia.com/gpu
operator: Equal
value: "present"
effect: NoSchedule
restartPolicy: OnFailure重要的是这样设置容差,并将实际资源限制设置为您想要的GPU数量。否则它就不会起作用。
然后将启动节点(如果没有可用的节点),并计算作业。在指定的自动伸缩超时后,空闲节点将再次关闭。
我是从here得到这个想法的。
https://stackoverflow.com/questions/59727294
复制相似问题