控制GPU机器从一个功能开始和停止?

Control GPU machine to start and stop from one function?

多亏了 Google 云,我们获得了云上 运行 GPU 的免费积分,但我们一开始就卡住了。

我们过去常常通过机器学习模型每天获取图像进行处理,但是不知何故 GPU 系统一整天都没有得到使用,有没有什么方法可以控制这个系统在所有图像都通过机器学习模型处理后启动和停止一个功能?我们可以在特定的日期和时间通过 cron 调用它。

我听说过 aws lambda,但不确定 google 云可以为这个问题提供什么。

提前致谢。

您可以按照 here 上的指南尝试优化实例的 GPU 使用,但是,您需要通过 cron 或实例中的其他方式对其进行管理。

此外,在免费试用 GPU 时请注意您的积分使用情况。免费试用仅提供 300 美元的积分,但是,正如 here 中所见,GPU 使用成本很高,如果不小心,可能会在 1 或 2 周内用完所有积分。

希望你觉得这有用!

您可以将 Cloud Scheduler 用于此用例,或者您可以在图像可用时触发 Cloud Function 并对其进行处理。

但是,300 美元的免费配额用于培训和创新目的,不用于实际生产应用。

如果你愿意付出努力,你可以使用 Google Kubernetes Engine 来实现。据我所知,这是目前在 GCP 上拥有 self-starting 和停止 GPU 实例的唯一方法。为此,您必须向您的 Kubernetes 集群添加 auto-scaling 的 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 等子环境变量,并确保使用实际具有您想要的可用 GPU 类型的 GCP 区域(并非所有区域都具有所有 GPU 类型)。确保指定区域 europe-west1-b 而不是 europe-west1.

此命令将立即启动所有节点,但无论自动缩放节点的默认超时在您的默认集群配置中是什么(对我来说我认为是 5 分钟),它们都会自动关闭。但是,您可以更改该设置。

然后您可以从 CLI 或使用任何可用的 Kubernetes API 显式请求 GPU 资源的客户端库启动 Kubernetes 作业(非部署)。

这里是一些示例 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 数量至关重要。不然不行。

然后将启动节点(如果 none 可用)并计算作业。空闲节点将在指定的自动缩放超时后再次关闭。

我的想法来自 here