get_aws_instance_information.py 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import csv
  2. import sys
  3. from typing import List, Tuple, Dict
  4. import boto3
  5. def get_aws_instance_information() -> List[Dict[str, Tuple[int, int]]]:
  6. rows = []
  7. client = boto3.client("ec2")
  8. args = {}
  9. while True:
  10. result = client.describe_instance_types(**args)
  11. for instance in result["InstanceTypes"]:
  12. num_cpus = instance["VCpuInfo"]["DefaultVCpus"]
  13. num_gpus = sum(
  14. gpu["Count"] for gpu in instance.get("GpuInfo", {"Gpus": []})["Gpus"]
  15. )
  16. rows.append(
  17. {
  18. "instance": instance["InstanceType"],
  19. "cpus": num_cpus,
  20. "gpus": num_gpus,
  21. }
  22. )
  23. if "NextToken" not in result:
  24. break
  25. args["NextToken"] = result["NextToken"]
  26. return rows
  27. if __name__ == "__main__":
  28. rows = []
  29. rows += get_aws_instance_information()
  30. writer = csv.DictWriter(fieldnames=["instance", "cpus", "gpus"], f=sys.stdout)
  31. writer.writeheader()
  32. for row in sorted(rows, key=lambda item: item["instance"]):
  33. writer.writerow(row)