code: def start_spot_workers(
      self,
      queue_name,
      bid=None,
      resources_needed={},
      ssh_keypair=None,
      queue_upscaling=True,
      start_workers=1,
      max_workers=100,
      timeout=300,
      ports=[],
  ):
      if resources_needed is None:
          resources_needed = {}
  
      if queue_upscaling is not False:
          self.logger.warn(
              "autoscaling on the queue is not "
              + "supported for google workers yet"
          )
  
      if ssh_keypair is not None:
          self.logger.warn(
              "ssh keypairs are not supported " + "for google workers"
          )
  
      if bid is not None:
          self.logger.warn(
              "bidding is not supported for " + "google spot instances"
          )
  
      template_name = self._generate_template_name()
      group_name = self._generate_group_name()
  
      config = self._get_instance_config(
          resources_needed, queue_name, timeout=timeout
      )
      config["scheduling"]["preemptible"] = True
      config["machineType"] = config["machineType"].split("/")[-1]
      config["metadata"]["items"].append(
          {"key": "groupname", "value": group_name}
      )
  
      template_config = {"name": template_name, "properties": config}
  
      op = (
          self.compute.instanceTemplates()
          .insert(project=self.projectid, body=template_config)
          .execute()
      )
  
      self._wait_for_operation(op["name"], "global")
  
      self.logger.info(
          "instance template {} added".format(template_name)
      )
  
      self.compute.instanceGroupManagers().insert(
          project=self.projectid,
          zone=self.zone,
          body={
              "baseInstanceName": self._generate_instance_name(),
              "instanceTemplate": "global/instanceTemplates/"
              + template_name,
              "name": group_name,
              "targetSize": start_workers,
          },
      ).execute()
  
      self.logger.info("Managed groupd {} created".format(group_name))
  
imports: import os
  import time
  import googleapiclient.discovery
  import uuid
  import math
  import json
  from studio import git_util
  from studio.util import logs
  from studio.util.gpu_util import memstr2int
  from .cloud_worker_util import insert_user_startup_script
label_desc: Use image node_id 3 for calling the GCloudWorkerManager obj's underlying member method code with example usage: obj.start_spot_workers(queue_name, bid, resources_needed, ssh_keypair, queue_upscaling, start_workers, max_workers, timeout, ports) without return types