aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArtyom Palvelev <artyompp@google.com>2023-11-06 17:05:55 +0000
committerArtyom Palvelev <artyompp@google.com>2023-11-06 18:38:22 +0000
commit15ca84580d287cd9d0ae0ad71d7c43e5016cdaee (patch)
treeca6cc6df22dd1562a2842bd047e5cbc1ab3ade60
parentf17bab7374f7a05ecf019599473653509aa3bd7e (diff)
downloadgamesdk-15ca84580d287cd9d0ae0ad71d7c43e5016cdaee.tar.gz
update MemoryAdvice model
This commit fixes several issues with MemoryAdvice library: * it removes "realtime" model which is trained on 0 and 1 labels, so it couldn't accurately predict values in between; * now red/yellow/green signals are given basing on the percentage of available memory; * available memory model is also updated: - hyperparameters are generated now by Hyperopt; - the final model is trained on the full dataset without validation. Fix: 308808048 Test: use any memory-allocating app like Hogger, AGDKTunnel, etc Change-Id: Ib3e05093efece5b09cda3212d16c76ee3b6ac1c0
-rw-r--r--games-memory-advice/core/memory_advice_impl.cpp16
-rw-r--r--games-memory-advice/core/memory_advice_impl.h3
-rw-r--r--games-memory-advice/default.json4
-rw-r--r--games-memory-advice/src/main/assets/available.tflitebin3660 -> 242928 bytes
-rw-r--r--games-memory-advice/src/main/assets/realtime.tflitebin3660 -> 0 bytes
-rw-r--r--games-memory-advice/src/main/assets/realtime_features.json6
-rw-r--r--test/memory_advice/crowdtester/app/src/main/java/com/memory_advice/crowdtester/MainActivity.java6
-rw-r--r--test/memory_advice/endtoend/withallocation.cpp4
-rw-r--r--test/memory_advice/endtoend/withmockmetrics.cpp2
-rw-r--r--test/memory_advice/memory_utils.cpp14
-rw-r--r--test/memory_advice/memory_utils.h2
11 files changed, 16 insertions, 41 deletions
diff --git a/games-memory-advice/core/memory_advice_impl.cpp b/games-memory-advice/core/memory_advice_impl.cpp
index 6bb66796..3027ca62 100644
--- a/games-memory-advice/core/memory_advice_impl.cpp
+++ b/games-memory-advice/core/memory_advice_impl.cpp
@@ -39,26 +39,16 @@ MemoryAdviceImpl::MemoryAdviceImpl(const char* params,
IPredictor* realtime_predictor,
IPredictor* available_predictor)
: metrics_provider_(metrics_provider),
- realtime_predictor_(realtime_predictor),
available_predictor_(available_predictor) {
if (metrics_provider_ == nullptr) {
default_metrics_provider_ = std::make_unique<DefaultMetricsProvider>();
metrics_provider_ = default_metrics_provider_.get();
}
- if (realtime_predictor_ == nullptr) {
- default_realtime_predictor_ = std::make_unique<DefaultPredictor>();
- realtime_predictor_ = default_realtime_predictor_.get();
- }
if (available_predictor_ == nullptr) {
default_available_predictor_ = std::make_unique<DefaultPredictor>();
available_predictor_ = default_available_predictor_.get();
}
- initialization_error_code_ =
- realtime_predictor_->Init("realtime.tflite", "realtime_features.json");
- if (initialization_error_code_ != MEMORYADVICE_ERROR_OK) {
- return;
- }
initialization_error_code_ = available_predictor_->Init(
"available.tflite", "available_features.json");
if (initialization_error_code_ != MEMORYADVICE_ERROR_OK) {
@@ -145,12 +135,6 @@ Json::object MemoryAdviceImpl::GetAdvice() {
data["sample"] = variable_metrics;
data["build"] = build_;
- if (variable_spec.find("predictRealtime") != variable_spec.end() &&
- variable_spec.at("predictRealtime").bool_value()) {
- variable_metrics["predictedUsage"] =
- Json(Clamp(realtime_predictor_->Predict(data), 0.0f, 1.0f));
- }
-
if (variable_spec.find("availableRealtime") != variable_spec.end() &&
variable_spec.at("availableRealtime").bool_value()) {
variable_metrics["predictedAvailable"] =
diff --git a/games-memory-advice/core/memory_advice_impl.h b/games-memory-advice/core/memory_advice_impl.h
index 6fcef4af..c4a09ad2 100644
--- a/games-memory-advice/core/memory_advice_impl.h
+++ b/games-memory-advice/core/memory_advice_impl.h
@@ -30,9 +30,6 @@ using namespace json11;
class MemoryAdviceImpl {
private:
IMetricsProvider* metrics_provider_;
- /** @brief A predictor that tries to predict the current memory consumption
- * as a percentage of total memory. */
- IPredictor* realtime_predictor_;
/** @brief A predictor that attempts to predict the remanining memory that
* can be safely allocated. */
IPredictor* available_predictor_;
diff --git a/games-memory-advice/default.json b/games-memory-advice/default.json
index 4f2d2c90..5544caea 100644
--- a/games-memory-advice/default.json
+++ b/games-memory-advice/default.json
@@ -3,10 +3,10 @@
"canaryProcessTester": true,
"formulas": {
"yellow": [
- "predictedUsage > 0.65"
+ "predictedAvailable < 0.20"
],
"red": [
- "predictedUsage > 0.75"
+ "predictedAvailable < 0.15"
]
}
},
diff --git a/games-memory-advice/src/main/assets/available.tflite b/games-memory-advice/src/main/assets/available.tflite
index af0bc9b3..97165a96 100644
--- a/games-memory-advice/src/main/assets/available.tflite
+++ b/games-memory-advice/src/main/assets/available.tflite
Binary files differ
diff --git a/games-memory-advice/src/main/assets/realtime.tflite b/games-memory-advice/src/main/assets/realtime.tflite
deleted file mode 100644
index 7b855bc5..00000000
--- a/games-memory-advice/src/main/assets/realtime.tflite
+++ /dev/null
Binary files differ
diff --git a/games-memory-advice/src/main/assets/realtime_features.json b/games-memory-advice/src/main/assets/realtime_features.json
deleted file mode 100644
index f4a9a848..00000000
--- a/games-memory-advice/src/main/assets/realtime_features.json
+++ /dev/null
@@ -1,6 +0,0 @@
-[
- "/baseline/constant/MemoryInfo/totalMem",
- "/baseline/meminfo/SwapTotal",
- "/sample/MemoryInfo/availMem",
- "/sample/proc/oom_score"
-] \ No newline at end of file
diff --git a/test/memory_advice/crowdtester/app/src/main/java/com/memory_advice/crowdtester/MainActivity.java b/test/memory_advice/crowdtester/app/src/main/java/com/memory_advice/crowdtester/MainActivity.java
index 33ace957..67309cdf 100644
--- a/test/memory_advice/crowdtester/app/src/main/java/com/memory_advice/crowdtester/MainActivity.java
+++ b/test/memory_advice/crowdtester/app/src/main/java/com/memory_advice/crowdtester/MainActivity.java
@@ -30,10 +30,10 @@ public class MainActivity extends AppCompatActivity {
try {
javaPrediction = new JSONObject(javaAdvisor.getAdvice())
.getJSONObject("metrics")
- .getDouble("predictedUsage");
+ .getDouble("predictedAvailable");
nativePrediction = new JSONObject(getMemoryAdvice())
.getJSONObject("metrics")
- .getDouble("predictedUsage");
+ .getDouble("predictedAvailable");
} catch (JSONException e) {
e.printStackTrace();
}
@@ -64,4 +64,4 @@ public class MainActivity extends AppCompatActivity {
public native int initMemoryAdvice();
public native String getMemoryAdvice();
public native boolean allocate(long bytes);
-} \ No newline at end of file
+}
diff --git a/test/memory_advice/endtoend/withallocation.cpp b/test/memory_advice/endtoend/withallocation.cpp
index 4060716f..98fc1a48 100644
--- a/test/memory_advice/endtoend/withallocation.cpp
+++ b/test/memory_advice/endtoend/withallocation.cpp
@@ -46,8 +46,8 @@ std::string TestEndToEndWithAllocation() {
while (s_impl->GetAdvice()
.at("metrics")
.object_items()
- .at("predictedUsage")
- .number_value() < 0.5) {
+ .at("predictedAvailable")
+ .number_value() > 0.5) {
AllocateMemory(100 * kBytesInMegabyte);
}
std::string result = json11::Json(s_impl->GetAdvice()).dump();
diff --git a/test/memory_advice/endtoend/withmockmetrics.cpp b/test/memory_advice/endtoend/withmockmetrics.cpp
index c8d97188..e8601f8e 100644
--- a/test/memory_advice/endtoend/withmockmetrics.cpp
+++ b/test/memory_advice/endtoend/withmockmetrics.cpp
@@ -58,7 +58,7 @@ std::string TestEndToEndWithMockMetrics() {
TEST(EndToEndTest, WithMockMetrics) {
auto result = TestEndToEndWithMockMetrics();
- std::string expected = GetAdviceString("12341234", "0.97!REGEX(\\d+)", "500", true);
+ std::string expected = GetAdviceString("12341234", "0.9!REGEX(\\d+)", "500", true);
gamesdk_test::CheckStrings("Base", result, expected);
}
diff --git a/test/memory_advice/memory_utils.cpp b/test/memory_advice/memory_utils.cpp
index 4fa25802..82dc6405 100644
--- a/test/memory_advice/memory_utils.cpp
+++ b/test/memory_advice/memory_utils.cpp
@@ -30,7 +30,7 @@ static std::list<std::unique_ptr<char[]>> allocated_bytes_list;
static std::mutex allocated_mutex;
std::string GetAdviceString(const std::string& avail_mem,
- const std::string& predicted_usage,
+ const std::string& predicted_avail,
const std::string& oom_score, bool with_warnings) {
if (with_warnings) {
return R"MA(
@@ -44,8 +44,8 @@ std::string GetAdviceString(const std::string& avail_mem,
"meta": {
"time": !REGEX(\d+)
},
- "predictedUsage": )MA" +
- predicted_usage + R"MA(,
+ "predictedAvailable": )MA" +
+ predicted_avail + R"MA(,
"proc": {
"_meta":["duration", !REGEX(\d)],
"oom_score": )MA" +
@@ -54,11 +54,11 @@ std::string GetAdviceString(const std::string& avail_mem,
},
"warnings": [
{
- "formula": "predictedUsage>0.75",
+ "formula": "predictedAvailable<0.15",
"level": "red"
},
{
- "formula": "predictedUsage>0.65",
+ "formula": "predictedAvailable<0.20",
"level": "yellow"
}
]
@@ -76,8 +76,8 @@ std::string GetAdviceString(const std::string& avail_mem,
"meta": {
"time": !REGEX(\d+)
},
- "predictedUsage": )MA" +
- predicted_usage + R"MA(,
+ "predictedAvailable": )MA" +
+ predicted_avail + R"MA(,
"proc": {
"_meta":["duration", !REGEX(\d)],
"oom_score": )MA" +
diff --git a/test/memory_advice/memory_utils.h b/test/memory_advice/memory_utils.h
index 44d72cf3..f51ed1fa 100644
--- a/test/memory_advice/memory_utils.h
+++ b/test/memory_advice/memory_utils.h
@@ -40,7 +40,7 @@ bool CheckStrings(const std::string& name, const std::string& result,
// Generates an advice string that satisfies the given parameters
std::string GetAdviceString(const std::string& avail_mem,
- const std::string& predicted_usage,
+ const std::string& predicted_avail,
const std::string& oom_score,
bool with_warnings = false);