16 #include "tensorflow_serving/resources/resource_tracker.h"
24 #include "tensorflow/core/lib/core/errors.h"
25 #include "tensorflow/core/lib/core/status.h"
26 #include "tensorflow_serving/resources/resources.pb.h"
28 namespace tensorflow {
31 Status ResourceTracker::Create(
const ResourceAllocation& total_resources,
32 std::unique_ptr<ResourceUtil> util,
33 std::unique_ptr<ResourceTracker>* tracker) {
34 TF_RETURN_IF_ERROR(util->VerifyValidity(total_resources));
35 const ResourceAllocation normalized_total_resources =
36 util->Normalize(total_resources);
37 if (!util->IsBound(normalized_total_resources)) {
38 return errors::InvalidArgument(
"total_resources must be bound: ",
39 total_resources.DebugString());
42 new ResourceTracker(normalized_total_resources, std::move(util)));
46 Status ResourceTracker::ReserveResources(
const Loader& servable,
48 ResourceAllocation servable_resources;
49 TF_RETURN_IF_ERROR(servable.EstimateResources(&servable_resources));
50 TF_RETURN_IF_ERROR(util_->VerifyValidity(servable_resources));
52 ResourceAllocation conservative_proposed_used_resources =
53 util_->Overbind(used_resources_);
54 util_->Add(servable_resources, &conservative_proposed_used_resources);
56 if (util_->LessThanOrEqual(conservative_proposed_used_resources,
58 util_->Add(servable_resources, &used_resources_);
61 LOG(WARNING) <<
"Insufficient resources to load servable "
62 <<
"\ntotal resources:\n"
63 << total_resources_.DebugString()
64 <<
"used/reserved resources:\n"
65 << used_resources_.DebugString()
66 <<
"resources requested by servable:\n"
67 << servable_resources.DebugString();
74 Status ResourceTracker::RecomputeUsedResources(
75 const std::vector<const Loader*>& servables) {
76 used_resources_.Clear();
77 for (
const Loader* servable : servables) {
78 ResourceAllocation servable_resources;
79 TF_RETURN_IF_ERROR(servable->EstimateResources(&servable_resources));
80 TF_RETURN_IF_ERROR(util_->VerifyValidity(servable_resources));
81 util_->Add(servable_resources, &used_resources_);
86 ResourceTracker::ResourceTracker(
const ResourceAllocation& total_resources,
87 std::unique_ptr<ResourceUtil> util)
88 : util_(std::move(util)), total_resources_(total_resources) {}