Skip to content

Commit 82b7602

Browse files
author
Chris Elion
authored
[MLA-1540] Training Analytics (#4780)
1 parent 93af95a commit 82b7602

38 files changed

+2134
-76
lines changed

com.unity.ml-agents/Runtime/Academy.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,9 +91,13 @@ public class Academy : IDisposable
9191
/// <term>1.3.0</term>
9292
/// <description>Support both continuous and discrete actions.</description>
9393
/// </item>
94+
/// <item>
95+
/// <term>1.4.0</term>
96+
/// <description>Support training analytics sent from python trainer to the editor.</description>
97+
/// </item>
9498
/// </list>
9599
/// </remarks>
96-
const string k_ApiVersion = "1.3.0";
100+
const string k_ApiVersion = "1.4.0";
97101

98102
/// <summary>
99103
/// Unity package version of com.unity.ml-agents.
@@ -406,6 +410,7 @@ void InitializeEnvironment()
406410
EnableAutomaticStepping();
407411

408412
SideChannelManager.RegisterSideChannel(new EngineConfigurationChannel());
413+
SideChannelManager.RegisterSideChannel(new TrainingAnalyticsSideChannel());
409414
m_EnvironmentParameters = new EnvironmentParameters();
410415
m_StatsRecorder = new StatsRecorder();
411416

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
using System;
2+
using UnityEngine;
3+
4+
namespace Unity.MLAgents.Analytics
5+
{
6+
internal static class AnalyticsUtils
7+
{
8+
/// <summary>
9+
/// Hash a string to remove PII or secret info before sending to analytics
10+
/// </summary>
11+
/// <param name="s"></param>
12+
/// <returns>A string containing the Hash128 of the input string.</returns>
13+
public static string Hash(string s)
14+
{
15+
var behaviorNameHash = Hash128.Compute(s);
16+
return behaviorNameHash.ToString();
17+
}
18+
19+
internal static bool s_SendEditorAnalytics = true;
20+
21+
/// <summary>
22+
/// Helper class to temporarily disable sending analytics from unit tests.
23+
/// </summary>
24+
internal class DisableAnalyticsSending : IDisposable
25+
{
26+
private bool m_PreviousSendEditorAnalytics;
27+
28+
public DisableAnalyticsSending()
29+
{
30+
m_PreviousSendEditorAnalytics = s_SendEditorAnalytics;
31+
s_SendEditorAnalytics = false;
32+
}
33+
34+
public void Dispose()
35+
{
36+
s_SendEditorAnalytics = m_PreviousSendEditorAnalytics;
37+
}
38+
}
39+
}
40+
}

com.unity.ml-agents/Runtime/Analytics/AnalyticsUtils.cs.meta

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

com.unity.ml-agents/Runtime/Analytics/Events.cs

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,4 +91,67 @@ public static EventObservationSpec FromSensor(ISensor sensor)
9191
};
9292
}
9393
}
94+
95+
internal struct RemotePolicyInitializedEvent
96+
{
97+
public string TrainingSessionGuid;
98+
/// <summary>
99+
/// Hash of the BehaviorName.
100+
/// </summary>
101+
public string BehaviorName;
102+
public List<EventObservationSpec> ObservationSpecs;
103+
public EventActionSpec ActionSpec;
104+
105+
/// <summary>
106+
/// This will be the same as TrainingEnvironmentInitializedEvent if available, but
107+
/// TrainingEnvironmentInitializedEvent maybe not always be available with older trainers.
108+
/// </summary>
109+
public string MLAgentsEnvsVersion;
110+
public string TrainerCommunicationVersion;
111+
}
112+
113+
internal struct TrainingEnvironmentInitializedEvent
114+
{
115+
public string TrainingSessionGuid;
116+
117+
public string TrainerPythonVersion;
118+
public string MLAgentsVersion;
119+
public string MLAgentsEnvsVersion;
120+
public string TorchVersion;
121+
public string TorchDeviceType;
122+
public int NumEnvironments;
123+
public int NumEnvironmentParameters;
124+
}
125+
126+
[Flags]
127+
internal enum RewardSignals
128+
{
129+
Extrinsic = 1 << 0,
130+
Gail = 1 << 1,
131+
Curiosity = 1 << 2,
132+
Rnd = 1 << 3,
133+
}
134+
135+
[Flags]
136+
internal enum TrainingFeatures
137+
{
138+
BehavioralCloning = 1 << 0,
139+
Recurrent = 1 << 1,
140+
Threaded = 1 << 2,
141+
SelfPlay = 1 << 3,
142+
Curriculum = 1 << 4,
143+
}
144+
145+
internal struct TrainingBehaviorInitializedEvent
146+
{
147+
public string TrainingSessionGuid;
148+
149+
public string BehaviorName;
150+
public string TrainerType;
151+
public RewardSignals RewardSignalFlags;
152+
public TrainingFeatures TrainingFeatureFlags;
153+
public string VisualEncoder;
154+
public int NumNetworkLayers;
155+
public int NumNetworkHiddenUnits;
156+
}
94157
}

com.unity.ml-agents/Runtime/Analytics/InferenceAnalytics.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,10 @@ ActionSpec actionSpec
116116
// Note - to debug, use JsonUtility.ToJson on the event.
117117
//Debug.Log(JsonUtility.ToJson(data, true));
118118
#if UNITY_EDITOR
119-
EditorAnalytics.SendEventWithLimit(k_EventName, data, k_EventVersion);
119+
if (AnalyticsUtils.s_SendEditorAnalytics)
120+
{
121+
EditorAnalytics.SendEventWithLimit(k_EventName, data, k_EventVersion);
122+
}
120123
#else
121124
return;
122125
#endif
@@ -143,8 +146,7 @@ ActionSpec actionSpec
143146
var inferenceEvent = new InferenceEvent();
144147

145148
// Hash the behavior name so that there's no concern about PII or "secret" data being leaked.
146-
var behaviorNameHash = Hash128.Compute(behaviorName);
147-
inferenceEvent.BehaviorName = behaviorNameHash.ToString();
149+
inferenceEvent.BehaviorName = AnalyticsUtils.Hash(behaviorName);
148150

149151
inferenceEvent.BarracudaModelSource = barracudaModel.IrSource;
150152
inferenceEvent.BarracudaModelVersion = barracudaModel.IrVersion;

0 commit comments

Comments
 (0)