Browse Source

Merge branch 'master' into v0.70-tflite

tags/TensorFlowOpLayer
Oceania2018 4 years ago
parent
commit
eeb7ddf593
11 changed files with 106 additions and 70 deletions
  1. +14
    -14
      TensorFlow.NET.sln
  2. +1
    -1
      src/TensorFlowNET.Core/Graphs/c_api.graph.cs
  3. +8
    -6
      src/TensorFlowNET.Core/Sessions/BaseSession.cs
  4. +23
    -47
      src/TensorFlowNET.Core/Sessions/Session.cs
  5. +12
    -0
      src/TensorFlowNET.Core/Sessions/c_api.session.cs
  6. +28
    -0
      src/TensorFlowNet.Benchmarks/Leak/SavedModelCleanup.cs
  7. BIN
      src/TensorFlowNet.Benchmarks/Leak/TestModel/saved_model/saved_model.pb
  8. BIN
      src/TensorFlowNet.Benchmarks/Leak/TestModel/saved_model/variables/variables.data-00000-of-00001
  9. BIN
      src/TensorFlowNet.Benchmarks/Leak/TestModel/saved_model/variables/variables.index
  10. +3
    -1
      src/TensorFlowNet.Benchmarks/Program.cs
  11. +17
    -1
      src/TensorFlowNet.Benchmarks/Tensorflow.Benchmark.csproj

+ 14
- 14
TensorFlow.NET.sln View File

@@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31423.177
# Visual Studio Version 16
VisualStudioVersion = 16.0.31624.102
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tensorflow.Binding", "src\TensorFlowNET.Core\Tensorflow.Binding.csproj", "{FD682AC0-7B2D-45D3-8B0D-C6D678B04144}"
EndProject
@@ -77,8 +77,8 @@ Global
{03F06299-3F4B-4449-A709-3A647657BC0C}.Debug|x86.Build.0 = Debug|Any CPU
{03F06299-3F4B-4449-A709-3A647657BC0C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{03F06299-3F4B-4449-A709-3A647657BC0C}.Release|Any CPU.Build.0 = Release|Any CPU
{03F06299-3F4B-4449-A709-3A647657BC0C}.Release|x64.ActiveCfg = Release|Any CPU
{03F06299-3F4B-4449-A709-3A647657BC0C}.Release|x64.Build.0 = Release|Any CPU
{03F06299-3F4B-4449-A709-3A647657BC0C}.Release|x64.ActiveCfg = Release|x64
{03F06299-3F4B-4449-A709-3A647657BC0C}.Release|x64.Build.0 = Release|x64
{03F06299-3F4B-4449-A709-3A647657BC0C}.Release|x86.ActiveCfg = Release|Any CPU
{03F06299-3F4B-4449-A709-3A647657BC0C}.Release|x86.Build.0 = Release|Any CPU
{49D71826-C03D-4FA7-9BAC-22C1327E65CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -101,8 +101,8 @@ Global
{1AB8108D-4FFE-4A16-88E7-328EAF686370}.Debug|x86.Build.0 = Debug|Any CPU
{1AB8108D-4FFE-4A16-88E7-328EAF686370}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1AB8108D-4FFE-4A16-88E7-328EAF686370}.Release|Any CPU.Build.0 = Release|Any CPU
{1AB8108D-4FFE-4A16-88E7-328EAF686370}.Release|x64.ActiveCfg = Release|Any CPU
{1AB8108D-4FFE-4A16-88E7-328EAF686370}.Release|x64.Build.0 = Release|Any CPU
{1AB8108D-4FFE-4A16-88E7-328EAF686370}.Release|x64.ActiveCfg = Release|x64
{1AB8108D-4FFE-4A16-88E7-328EAF686370}.Release|x64.Build.0 = Release|x64
{1AB8108D-4FFE-4A16-88E7-328EAF686370}.Release|x86.ActiveCfg = Release|Any CPU
{1AB8108D-4FFE-4A16-88E7-328EAF686370}.Release|x86.Build.0 = Release|Any CPU
{F17AAECB-960A-4E18-A270-BAD776F0E55B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -113,8 +113,8 @@ Global
{F17AAECB-960A-4E18-A270-BAD776F0E55B}.Debug|x86.Build.0 = Debug|Any CPU
{F17AAECB-960A-4E18-A270-BAD776F0E55B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F17AAECB-960A-4E18-A270-BAD776F0E55B}.Release|Any CPU.Build.0 = Release|Any CPU
{F17AAECB-960A-4E18-A270-BAD776F0E55B}.Release|x64.ActiveCfg = Release|Any CPU
{F17AAECB-960A-4E18-A270-BAD776F0E55B}.Release|x64.Build.0 = Release|Any CPU
{F17AAECB-960A-4E18-A270-BAD776F0E55B}.Release|x64.ActiveCfg = Release|x64
{F17AAECB-960A-4E18-A270-BAD776F0E55B}.Release|x64.Build.0 = Release|x64
{F17AAECB-960A-4E18-A270-BAD776F0E55B}.Release|x86.ActiveCfg = Release|Any CPU
{F17AAECB-960A-4E18-A270-BAD776F0E55B}.Release|x86.Build.0 = Release|Any CPU
{84CA35F8-99FC-408E-8DF3-5AA175E5EFD3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -125,8 +125,8 @@ Global
{84CA35F8-99FC-408E-8DF3-5AA175E5EFD3}.Debug|x86.Build.0 = Debug|Any CPU
{84CA35F8-99FC-408E-8DF3-5AA175E5EFD3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{84CA35F8-99FC-408E-8DF3-5AA175E5EFD3}.Release|Any CPU.Build.0 = Release|Any CPU
{84CA35F8-99FC-408E-8DF3-5AA175E5EFD3}.Release|x64.ActiveCfg = Release|Any CPU
{84CA35F8-99FC-408E-8DF3-5AA175E5EFD3}.Release|x64.Build.0 = Release|Any CPU
{84CA35F8-99FC-408E-8DF3-5AA175E5EFD3}.Release|x64.ActiveCfg = Release|x64
{84CA35F8-99FC-408E-8DF3-5AA175E5EFD3}.Release|x64.Build.0 = Release|x64
{84CA35F8-99FC-408E-8DF3-5AA175E5EFD3}.Release|x86.ActiveCfg = Release|Any CPU
{84CA35F8-99FC-408E-8DF3-5AA175E5EFD3}.Release|x86.Build.0 = Release|Any CPU
{79EB56DF-E29E-4AE2-A7D9-FE403FD919BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -137,8 +137,8 @@ Global
{79EB56DF-E29E-4AE2-A7D9-FE403FD919BA}.Debug|x86.Build.0 = Debug|Any CPU
{79EB56DF-E29E-4AE2-A7D9-FE403FD919BA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{79EB56DF-E29E-4AE2-A7D9-FE403FD919BA}.Release|Any CPU.Build.0 = Release|Any CPU
{79EB56DF-E29E-4AE2-A7D9-FE403FD919BA}.Release|x64.ActiveCfg = Release|Any CPU
{79EB56DF-E29E-4AE2-A7D9-FE403FD919BA}.Release|x64.Build.0 = Release|Any CPU
{79EB56DF-E29E-4AE2-A7D9-FE403FD919BA}.Release|x64.ActiveCfg = Release|x64
{79EB56DF-E29E-4AE2-A7D9-FE403FD919BA}.Release|x64.Build.0 = Release|x64
{79EB56DF-E29E-4AE2-A7D9-FE403FD919BA}.Release|x86.ActiveCfg = Release|Any CPU
{79EB56DF-E29E-4AE2-A7D9-FE403FD919BA}.Release|x86.Build.0 = Release|Any CPU
{3F5388FF-FBB4-462B-8F6F-829FFBAEB8A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -149,8 +149,8 @@ Global
{3F5388FF-FBB4-462B-8F6F-829FFBAEB8A3}.Debug|x86.Build.0 = Debug|Any CPU
{3F5388FF-FBB4-462B-8F6F-829FFBAEB8A3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3F5388FF-FBB4-462B-8F6F-829FFBAEB8A3}.Release|Any CPU.Build.0 = Release|Any CPU
{3F5388FF-FBB4-462B-8F6F-829FFBAEB8A3}.Release|x64.ActiveCfg = Release|Any CPU
{3F5388FF-FBB4-462B-8F6F-829FFBAEB8A3}.Release|x64.Build.0 = Release|Any CPU
{3F5388FF-FBB4-462B-8F6F-829FFBAEB8A3}.Release|x64.ActiveCfg = Release|x64
{3F5388FF-FBB4-462B-8F6F-829FFBAEB8A3}.Release|x64.Build.0 = Release|x64
{3F5388FF-FBB4-462B-8F6F-829FFBAEB8A3}.Release|x86.ActiveCfg = Release|Any CPU
{3F5388FF-FBB4-462B-8F6F-829FFBAEB8A3}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection


+ 1
- 1
src/TensorFlowNET.Core/Graphs/c_api.graph.cs View File

@@ -289,7 +289,7 @@ namespace Tensorflow
[DllImport(TensorFlowLibName)]
public static extern IntPtr TF_LoadSessionFromSavedModel(SafeSessionOptionsHandle session_options, IntPtr run_options,
string export_dir, string[] tags, int tags_len,
IntPtr graph, ref TF_Buffer meta_graph_def, SafeStatusHandle status);
IntPtr graph, IntPtr meta_graph_def, SafeStatusHandle status);

[DllImport(TensorFlowLibName)]
public static extern IntPtr TF_NewGraph();


+ 8
- 6
src/TensorFlowNET.Core/Sessions/BaseSession.cs View File

@@ -36,6 +36,12 @@ namespace Tensorflow
protected byte[] _target;
public Graph graph => _graph;

public BaseSession(IntPtr handle, Graph g)
{
_handle = handle;
_graph = g ?? ops.get_default_graph();
}

public BaseSession(string target = "", Graph g = null, ConfigProto config = null, Status status = null)
{
_graph = g ?? ops.get_default_graph();
@@ -291,12 +297,8 @@ namespace Tensorflow

protected override void DisposeUnmanagedResources(IntPtr handle)
{
lock (Locks.ProcessWide)
using (var status = new Status())
{
c_api.TF_DeleteSession(handle, status.Handle);
status.Check(true);
}
// c_api.TF_CloseSession(handle, tf.Status.Handle);
c_api.TF_DeleteSession(handle, tf.Status.Handle);
}
}
}

+ 23
- 47
src/TensorFlowNET.Core/Sessions/Session.cs View File

@@ -26,10 +26,8 @@ namespace Tensorflow
public Session(string target = "", Graph g = null) : base(target, g, null)
{ }

public Session(IntPtr handle, Graph g = null) : base("", g, null)
{
_handle = handle;
}
public Session(IntPtr handle, Graph g = null) : base(handle, g)
{ }

public Session(Graph g, ConfigProto config = null, Status s = null) : base("", g, config, s)
{ }
@@ -39,51 +37,29 @@ namespace Tensorflow
return ops.set_default_session(this);
}

[MethodImpl(MethodImplOptions.NoOptimization)]
public static Session LoadFromSavedModel(string path)
{
lock (Locks.ProcessWide)
{
var graph = c_api.TF_NewGraph();
using var status = new Status();
var opt = new SessionOptions();

var tags = new string[] { "serve" };
var buffer = new TF_Buffer();

IntPtr sess;
try
{
sess = c_api.TF_LoadSessionFromSavedModel(opt.Handle,
IntPtr.Zero,
path,
tags,
tags.Length,
graph,
ref buffer,
status.Handle);
status.Check(true);
}
catch (TensorflowException ex) when (ex.Message.Contains("Could not find SavedModel"))
{
sess = c_api.TF_LoadSessionFromSavedModel(opt.Handle,
IntPtr.Zero,
Path.GetFullPath(path),
tags,
tags.Length,
graph,
ref buffer,
status.Handle);
status.Check(true);
}

// load graph bytes
// var data = new byte[buffer.length];
// Marshal.Copy(buffer.data, data, 0, (int)buffer.length);
// var meta_graph = MetaGraphDef.Parser.ParseFrom(data);*/

return new Session(sess, g: new Graph(graph)).as_default();
}
using var graph = new Graph();
using var status = new Status();
using var opt = c_api.TF_NewSessionOptions();

var tags = new string[] { "serve" };

var sess = c_api.TF_LoadSessionFromSavedModel(opt,
IntPtr.Zero,
path,
tags,
tags.Length,
graph,
IntPtr.Zero,
status.Handle);
status.Check(true);

// load graph bytes
// var data = new byte[buffer.length];
// Marshal.Copy(buffer.data, data, 0, (int)buffer.length);
// var meta_graph = MetaGraphDef.Parser.ParseFrom(data);*/
return new Session(sess, g: graph);
}

public static implicit operator IntPtr(Session session) => session._handle;


+ 12
- 0
src/TensorFlowNET.Core/Sessions/c_api.session.cs View File

@@ -21,6 +21,18 @@ namespace Tensorflow
{
public partial class c_api
{
/// <summary>
/// Close a session.
///
/// Contacts any other processes associated with the session, if applicable.
/// May not be called after TF_DeleteSession().
/// </summary>
/// <param name="s"></param>
/// <param name="status"></param>

[DllImport(TensorFlowLibName)]
public static extern void TF_CloseSession(IntPtr session, SafeStatusHandle status);

/// <summary>
/// Destroy a session object.
///


+ 28
- 0
src/TensorFlowNet.Benchmarks/Leak/SavedModelCleanup.cs View File

@@ -0,0 +1,28 @@
using BenchmarkDotNet.Attributes;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using static Tensorflow.Binding;

namespace Tensorflow.Benchmark.Leak
{
public class SavedModelCleanup
{
[Benchmark]
public void Run()
{
var modelDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
var ClassifierModelPath = Path.Combine(modelDir, "Leak", "TestModel", "saved_model");

for (var i = 0; i < 1024; i++)
{
using var sess = Session.LoadFromSavedModel(ClassifierModelPath);
}
}
}
}

BIN
src/TensorFlowNet.Benchmarks/Leak/TestModel/saved_model/saved_model.pb View File


BIN
src/TensorFlowNet.Benchmarks/Leak/TestModel/saved_model/variables/variables.data-00000-of-00001 View File


BIN
src/TensorFlowNet.Benchmarks/Leak/TestModel/saved_model/variables/variables.index View File


+ 3
- 1
src/TensorFlowNet.Benchmarks/Program.cs View File

@@ -13,7 +13,9 @@ namespace TensorFlowBenchmark
static void Main(string[] args)
{
print(tf.VERSION);
/*new RepeatDataSetCrash().Run();

/*new SavedModelCleanup().Run();
new RepeatDataSetCrash().Run();
new GpuLeakByCNN().Run();*/

if (args?.Length > 0)


+ 17
- 1
src/TensorFlowNet.Benchmarks/Tensorflow.Benchmark.csproj View File

@@ -37,11 +37,27 @@

<ItemGroup>
<PackageReference Include="BenchmarkDotNet" Version="0.13.0" />
<PackageReference Include="SciSharp.TensorFlow.Redist" Version="2.6.0-rc0" />
<PackageReference Include="SciSharp.TensorFlow.Redist" Version="2.6.0" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\TensorFlowNET.Keras\Tensorflow.Keras.csproj" />
</ItemGroup>

<ItemGroup>
<Folder Include="Leak\TestModel\saved_model\assets\" />
</ItemGroup>

<ItemGroup>
<None Update="Leak\TestModel\saved_model\saved_model.pb">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="Leak\TestModel\saved_model\variables\variables.data-00000-of-00001">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="Leak\TestModel\saved_model\variables\variables.index">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>

</Project>

Loading…
Cancel
Save