Skip to content

[MLA-1540] Training Analytics #4780

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 29 commits into from
Jan 28, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
288e111
WIP
Dec 17, 2020
89da5e3
WIP
Dec 19, 2020
ed114bb
side channel works
Dec 19, 2020
ceccf7d
send training start info
Dec 19, 2020
54f383b
move sidechannel to mlagents so it can import TrainerConfig, torch ve…
Dec 19, 2020
41a14c8
small feedback
Dec 28, 2020
a5bb159
gather info in sidechannel
Dec 28, 2020
530fbae
pass RunOptions to workers
Dec 29, 2020
a90eee2
debug sidechannel vars, only init sidechannel on worker0
Dec 29, 2020
cf56188
placeholder events
Dec 30, 2020
65b6e60
randomized params -> environment params
Jan 4, 2021
6787892
save academy caps
Jan 4, 2021
cf20d6d
add proto definitions for trainer events
Jan 11, 2021
5753637
any proto WIP
Jan 11, 2021
a5f1f40
Merge remote-tracking branch 'origin/master' into MLA-1540-training-a…
Jan 11, 2021
d7d521f
Merge remote-tracking branch 'origin/master' into MLA-1540-training-a…
Jan 11, 2021
75a71dd
fix proto.Any reading
Jan 11, 2021
c649eed
cleanup todos
Jan 12, 2021
f8d08ec
add meta file
Jan 12, 2021
f53308f
fix unit tests
Jan 12, 2021
954c4e8
test coverage
Jan 13, 2021
d1d1a7a
send events, cache trainer info
Jan 14, 2021
ac983b1
revert DevProject changes
Jan 14, 2021
f1f0c2e
apply proto patch
Jan 14, 2021
45cea7f
communicator version and docstrings
Jan 14, 2021
4265264
comments and docstring
Jan 16, 2021
b17f6da
Merge remote-tracking branch 'origin/master' into MLA-1540-training-a…
Jan 28, 2021
b15ddfd
Merge remote-tracking branch 'origin/master' into MLA-1540-training-a…
Jan 28, 2021
92b9d63
fix test that was added on master
Jan 28, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion com.unity.ml-agents/Runtime/Academy.cs
Original file line number Diff line number Diff line change
Expand Up @@ -91,9 +91,13 @@ public class Academy : IDisposable
/// <term>1.3.0</term>
/// <description>Support both continuous and discrete actions.</description>
/// </item>
/// <item>
/// <term>1.4.0</term>
/// <description>Support training analytics sent from python trainer to the editor.</description>
/// </item>
/// </list>
/// </remarks>
const string k_ApiVersion = "1.3.0";
const string k_ApiVersion = "1.4.0";

/// <summary>
/// Unity package version of com.unity.ml-agents.
Expand Down Expand Up @@ -406,6 +410,7 @@ void InitializeEnvironment()
EnableAutomaticStepping();

SideChannelManager.RegisterSideChannel(new EngineConfigurationChannel());
SideChannelManager.RegisterSideChannel(new TrainingAnalyticsSideChannel());
m_EnvironmentParameters = new EnvironmentParameters();
m_StatsRecorder = new StatsRecorder();

Expand Down
40 changes: 40 additions & 0 deletions com.unity.ml-agents/Runtime/Analytics/AnalyticsUtils.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
using System;
using UnityEngine;

namespace Unity.MLAgents.Analytics
{
internal static class AnalyticsUtils
{
/// <summary>
/// Hash a string to remove PII or secret info before sending to analytics
/// </summary>
/// <param name="s"></param>
/// <returns>A string containing the Hash128 of the input string.</returns>
public static string Hash(string s)
{
var behaviorNameHash = Hash128.Compute(s);
return behaviorNameHash.ToString();
}

internal static bool s_SendEditorAnalytics = true;

/// <summary>
/// Helper class to temporarily disable sending analytics from unit tests.
/// </summary>
internal class DisableAnalyticsSending : IDisposable
{
private bool m_PreviousSendEditorAnalytics;

public DisableAnalyticsSending()
{
m_PreviousSendEditorAnalytics = s_SendEditorAnalytics;
s_SendEditorAnalytics = false;
}

public void Dispose()
{
s_SendEditorAnalytics = m_PreviousSendEditorAnalytics;
}
}
}
}
3 changes: 3 additions & 0 deletions com.unity.ml-agents/Runtime/Analytics/AnalyticsUtils.cs.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

63 changes: 63 additions & 0 deletions com.unity.ml-agents/Runtime/Analytics/Events.cs
Original file line number Diff line number Diff line change
Expand Up @@ -91,4 +91,67 @@ public static EventObservationSpec FromSensor(ISensor sensor)
};
}
}

internal struct RemotePolicyInitializedEvent
{
public string TrainingSessionGuid;
/// <summary>
/// Hash of the BehaviorName.
/// </summary>
public string BehaviorName;
public List<EventObservationSpec> ObservationSpecs;
public EventActionSpec ActionSpec;

/// <summary>
/// This will be the same as TrainingEnvironmentInitializedEvent if available, but
/// TrainingEnvironmentInitializedEvent maybe not always be available with older trainers.
/// </summary>
public string MLAgentsEnvsVersion;
public string TrainerCommunicationVersion;
}

internal struct TrainingEnvironmentInitializedEvent
{
public string TrainingSessionGuid;

public string TrainerPythonVersion;
public string MLAgentsVersion;
public string MLAgentsEnvsVersion;
public string TorchVersion;
public string TorchDeviceType;
public int NumEnvironments;
public int NumEnvironmentParameters;
}

[Flags]
internal enum RewardSignals
{
Extrinsic = 1 << 0,
Gail = 1 << 1,
Curiosity = 1 << 2,
Rnd = 1 << 3,
}

[Flags]
internal enum TrainingFeatures
{
BehavioralCloning = 1 << 0,
Recurrent = 1 << 1,
Threaded = 1 << 2,
SelfPlay = 1 << 3,
Curriculum = 1 << 4,
}

internal struct TrainingBehaviorInitializedEvent
{
public string TrainingSessionGuid;

public string BehaviorName;
public string TrainerType;
public RewardSignals RewardSignalFlags;
public TrainingFeatures TrainingFeatureFlags;
public string VisualEncoder;
public int NumNetworkLayers;
public int NumNetworkHiddenUnits;
}
}
8 changes: 5 additions & 3 deletions com.unity.ml-agents/Runtime/Analytics/InferenceAnalytics.cs
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,10 @@ ActionSpec actionSpec
// Note - to debug, use JsonUtility.ToJson on the event.
//Debug.Log(JsonUtility.ToJson(data, true));
#if UNITY_EDITOR
EditorAnalytics.SendEventWithLimit(k_EventName, data, k_EventVersion);
if (AnalyticsUtils.s_SendEditorAnalytics)
{
EditorAnalytics.SendEventWithLimit(k_EventName, data, k_EventVersion);
}
#else
return;
#endif
Expand All @@ -143,8 +146,7 @@ ActionSpec actionSpec
var inferenceEvent = new InferenceEvent();

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

inferenceEvent.BarracudaModelSource = barracudaModel.IrSource;
inferenceEvent.BarracudaModelVersion = barracudaModel.IrVersion;
Expand Down
Loading