in ezsmdeploy/__init__.py [0:0]
def choose_instance_type(self):
# TO DO : add heuristic for auto selection of instance size
if self.prefix =='':
tmppath = "ezsmdeploy/model-" + self.name + "/"
else:
tmppath = self.prefix+"/ezsmdeploy/model-" + self.name + "/"
size = self.get_size(self.bucket, tmppath )
self.instancetypespath = pkg_resources.resource_filename(
"ezsmdeploy", "data/instancetypes.csv"
)
# Assume you need at least 4 workers, each model is deployed redundantly to every vcpu.
# So we base this decision on memory available per vcpu. If model is being downloaded from a hub
# one should ideally pass in an instance since we don't know the size of model.
# list includes some extremely large CPU instance and all GPU instances. For all instances that have the same
# memory per vcpu, what is done to tie break is min (cost/total vpcus). Also 'd' instances are preferred to others for
# faster load times at the same cost since they have NvMe. If budget is supplied, we can try to satisfy this.
choseninstance = None
mincost = 1000
for instance in list(self.instancedict.keys()):
# cost and memory per worker
memperworker = self.instancedict[instance][0]
cost = self.instancedict[instance][1]
costpermem = self.instancedict[instance][2]
#
if self.budget == 100:
# even though budget is unlimited, minimize cost
if memperworker > size and cost < mincost:
mincost = cost
choseninstance = instance
# print("instance ={}, size={}, memperworker={}, choseninstance = {}, mincost = {}".format(instance, size, memperworker, choseninstance,mincost))
else:
if memperworker > size and cost <= self.budget:
choseninstance = instance
break
if choseninstance == None and self.budget != 100:
raise ValueError(
"Could not find an instance that satisfies your budget of "
+ str(self.budget)
+ " per hour and can host your models with a total size of "
+ str(size)
+ " Gb. Please choose a higher budget per hour."
)
elif choseninstance == None and self.budget == 100:
raise ValueError(
"You may be using large models with a total size of "
+ str(size)
+ " Gb. Please choose a high memory GPU instance and launch without multiple models (if applicable)"
)
self.instance_type = choseninstance
self.costperhour = self.costdict[self.instance_type]