From 94169b01f2592e6237ab75a1f8aca1b40d29c6de Mon Sep 17 00:00:00 2001 From: Niklas Gustafsson Date: Fri, 1 Jul 2022 14:13:47 -0700 Subject: [PATCH 01/12] First batch of work on torch.jit. --- RELEASENOTES.md | 1 + src/Native/LibTorchSharp/THSJIT.cpp | 186 ++++++++-- src/Native/LibTorchSharp/THSJIT.h | 56 ++- src/Native/LibTorchSharp/THSLinearAlgebra.cpp | 5 + src/Native/LibTorchSharp/THSTensor.h | 2 + src/Native/LibTorchSharp/Utils.h | 2 + src/TorchSharp/JIT/Module.cs | 154 -------- src/TorchSharp/JIT/ScriptModule.cs | 328 ++++++++++++++++++ src/TorchSharp/JIT/Type/DynamicType .cs | 27 +- src/TorchSharp/JIT/Type/TensorType.cs | 113 +++--- src/TorchSharp/JIT/Type/Type.cs | 231 ++++++------ src/TorchSharp/NN/Module.cs | 40 ++- src/TorchSharp/Tensor/Tensor.LinearAlgebra.cs | 9 + src/TorchSharp/Tensor/Tensor.cs | 16 + .../TorchSharpTest.WithCudaBinaries.csproj | 12 + test/TorchSharpTest/TestLoadSave.cs | 59 ++++ test/TorchSharpTest/TestTraining.cs | 22 +- test/TorchSharpTest/TorchSharpTest.csproj | 9 + test/TorchSharpTest/l1000_100_10.script.dat | Bin 0 -> 411032 bytes test/TorchSharpTest/linrelu.script.dat | Bin 0 -> 4432 bytes 20 files changed, 892 insertions(+), 380 deletions(-) delete mode 100644 src/TorchSharp/JIT/Module.cs create mode 100644 src/TorchSharp/JIT/ScriptModule.cs create mode 100644 test/TorchSharpTest/l1000_100_10.script.dat create mode 100644 test/TorchSharpTest/linrelu.script.dat diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 20d05f526..a163115f5 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -10,6 +10,7 @@ __API Changes__: Add torch.utils.rnn
Add torchvision.io
+Add Tensor.trace() and torch.trace()
## NuGet Version 0.96.8 diff --git a/src/Native/LibTorchSharp/THSJIT.cpp b/src/Native/LibTorchSharp/THSJIT.cpp index 11531aef3..050dabfb0 100644 --- a/src/Native/LibTorchSharp/THSJIT.cpp +++ b/src/Native/LibTorchSharp/THSJIT.cpp @@ -3,9 +3,37 @@ JITModule THSJIT_load(const char* filename) { - auto res = torch::jit::load(filename); - auto copy = new torch::jit::Module(res); - return new std::shared_ptr(copy); + auto res = torch::jit::load(filename); + auto copy = new torch::jit::Module(res); + return new std::shared_ptr(copy); +} + +int THSJIT_Module_is_training(JITModule module) +{ + return (*module)->is_training(); +} + +void THSJIT_Module_train(JITModule module) +{ + (*module)->train(); +} + +void THSJIT_Module_eval(JITModule module) +{ + (*module)->eval(); +} + +void THSJIT_Module_to_device(JITModule module, int64_t device, int64_t index) +{ + c10::DeviceType dev = c10::kCPU; + if (device == 1) + dev = c10::kCUDA; + (*module)->to(torch::Device(dev, index)); +} + +void THSJIT_Module_to_dtype(JITModule module, int8_t dtype) +{ + (*module)->to((at::ScalarType)dtype); } void THSJIT_Module_modules(const JITModule module, JITModule* (*allocator)(size_t length)) @@ -35,6 +63,22 @@ void THSJIT_Module_named_modules(const JITModule module, } } +void THSJIT_Module_named_children(const JITModule module, + JITModule* (*allocator)(size_t length), + const char** (*allocator2)(size_t length)) +{ + auto modules = (*module)->named_children(); + JITModule* result = allocator(modules.size()); + const char** names = allocator2(modules.size()); + int i = 0; + for (const auto& child : modules) { + auto copy = new torch::jit::Module(child.value); + result[i] = new std::shared_ptr(copy); + names[i] = make_sharable_string(child.name); + i++; + } +} + void THSJIT_Module_parameters(const JITModule module, Tensor* (*allocator)(size_t length)) { auto parameters = (*module)->parameters(); @@ -60,6 +104,21 @@ void THSJIT_Module_named_parameters(const JITModule module, } } +void THSJIT_Module_named_buffers(const JITModule module, + Tensor* (*allocator)(size_t length), + const char** (*allocator2)(size_t length)) +{ + auto parameters = (*module)->named_buffers(); + Tensor* result = allocator(parameters.size()); + const char** names = allocator2(parameters.size()); + int i = 0; + for (const auto& child : parameters) { + result[i] = new torch::Tensor(child.value); + names[i] = make_sharable_string(child.name); + i++; + } +} + JITMethod THSJIT_Module_get_method(const JITModule module, const char* name) { auto method = (*module)->get_method(name); @@ -69,7 +128,7 @@ JITMethod THSJIT_Module_get_method(const JITModule module, const char* name) Tensor THSJIT_Module_forward(const JITModule module, const Tensor* tensorPtrs, const int length) { - return new torch::Tensor((*module)->forward(toTensors((torch::Tensor**)tensorPtrs, length)).toTensor()); + CATCH_TENSOR((*module)->forward(toTensors((torch::Tensor**)tensorPtrs, length)).toTensor()); } void THSJIT_Module_dispose(const JITModule module) @@ -87,6 +146,16 @@ int THSJIT_Method_num_inputs(const JITMethod method) return (int)(*method)->num_inputs(); } +int THSJIT_Module_num_inputs(const JITModule module) +{ + return (int)(*module)->get_method("forward").num_inputs()-1; // Don't count the 'self' argument. +} + +int THSJIT_Module_num_outputs(const JITModule module) +{ + return (int)(*module)->get_method("forward").function().getSchema().returns().size(); +} + JITFunction THSJIT_Method_function(const JITMethod method) { return new std::shared_ptr(&(*method)->function()); @@ -113,32 +182,77 @@ void THSJIT_Function_dispose(const JITFunction function) delete function; } -//void* THSJIT_typeCast(const JITType type) -//{ -// switch ((*type)->kind()) -// { -// case c10::TypeKind::TensorType: -// return new std::shared_ptr((*type)->cast()); -// case c10::TypeKind::DimensionedTensorType: -// return new std::shared_ptr((*type)->cast()); -// default: -// return NULL; -// } -//} -// -//int8_t THSJIT_typeKind(const JITType type) -//{ -// switch ((*type)->kind()) -// { -// case c10::TypeKind::TensorType: -// return (int8_t)TypeKind::TensorType; -// case c10::TypeKind::DimensionedTensorType: -// return (int8_t)TypeKind::DimensionedTensorType; -// default: -// return -1; -// } -//} -// +void THSJIT_Type_dispose(const JITType type) +{ + delete type; +} + +void THSJIT_TensorType_dispose(const JITTensorType type) +{ + delete type; +} + +void* THSJIT_Type_cast(const JITType type) +{ + switch ((*type)->kind()) + { + case c10::TypeKind::TensorType: + return new std::shared_ptr((*type)->cast()); + //case c10::TypeKind::DimensionedTensorType: + // return new std::shared_ptr((*type)->cast()); + default: + return NULL; + } +} + +int8_t THSJIT_TensorType_dtype(const JITTensorType type) +{ + auto scT = (*type)->scalarType(); + if (scT.has_value()) { + return (int8_t)scT.value(); + } + else { + return -1; + } +} + +void THSJIT_TensorType_sizes(const JITTensorType type, int64_t* (*allocator)(int64_t length)) +{ + //CATCH( + auto& t = *type; + auto dim = t->dim(); + auto res = (*type)->sizes().concrete_sizes(); + if (res.has_value()) { + const size_t sz = res.value().size(); + auto& vec = res.value(); + int64_t * result = allocator(sz); + for (size_t i = 0; i < sz; i++) + result[i] = vec[i]; + } + //); +} + +int8_t THSJIT_Type_kind(const JITType type) +{ + switch ((*type)->kind()) + { + case c10::TypeKind::TensorType: + return (int8_t)TypeKind::TensorType; + //case c10::TypeKind::DimensionedTensorType: + // return (int8_t)TypeKind::DimensionedTensorType; + default: + return -1; + } +} + +JITType THSJIT_Module_getInputType(JITModule module, int8_t index) +{ + auto typ = (*module)->type(); + c10::TypeKind kind = typ->kind(); + auto& schema = typ->getMethod("forward").getSchema(); + return new std::shared_ptr(schema.arguments()[1 + index].type()->cast()); +} + //int8_t THSJIT_getScalarFromDimensionedTensorType(const JITDimensionedTensorType type) //{ // return (int8_t)(*type)->scalarType(); @@ -159,10 +273,10 @@ void THSJIT_Function_dispose(const JITFunction function) // // return make_sharable_string(device_type); //} -// -// -//void THSJIT_typeDispose(const JITType type) -//{ -// delete type; -//} \ No newline at end of file + + +void THSJIT_typeDispose(const JITType type) +{ + delete type; +} \ No newline at end of file diff --git a/src/Native/LibTorchSharp/THSJIT.h b/src/Native/LibTorchSharp/THSJIT.h index 0f1926f41..e4232b616 100644 --- a/src/Native/LibTorchSharp/THSJIT.h +++ b/src/Native/LibTorchSharp/THSJIT.h @@ -7,38 +7,64 @@ #include "Utils.h" -//// Copied from libtorch to share the type as an int8_t. -//enum TypeKind : int8_t { -//#define DEFINE_TYPE(T) T, -// C10_FORALL_TYPES(DEFINE_TYPE) -//#undef DEFINE_TYPE -//}; -// -//// API. +// Copied from libtorch to share the type as an int8_t. +enum TypeKind : int8_t { +#define DEFINE_TYPE(T) T, + C10_FORALL_TYPES(DEFINE_TYPE) +#undef DEFINE_TYPE +}; + +// API. EXPORT_API(JITModule) THSJIT_load(const char* filename); +EXPORT_API(void) THSJIT_Module_dispose(const JITModule module); -EXPORT_API(void) THSJIT_Module_modules(const JITModule module, JITModule* (*allocator)(size_t length)); +EXPORT_API(int) THSJIT_Module_num_inputs(const JITModule method); +EXPORT_API(int) THSJIT_Module_num_outputs(const JITModule method); + +EXPORT_API(Tensor) THSJIT_Module_forward(const JITModule module, const Tensor* tensorPtrs, const int length); + +EXPORT_API(int) THSJIT_Module_is_training(JITModule module); +EXPORT_API(void) THSJIT_Module_train(JITModule module); +EXPORT_API(void) THSJIT_Module_eval(JITModule module); + +EXPORT_API(void) THSJIT_Module_to_device(JITModule module, int64_t device, int64_t index); +EXPORT_API(void) THSJIT_Module_to_dtype(JITModule module, int8_t dtype); +EXPORT_API(JITType) THSJIT_Module_getInputType(JITModule module, int8_t dtype); + +EXPORT_API(int8_t) THSJIT_Type_kind(JITType handle); +EXPORT_API(void*) THSJIT_Type_cast(const JITType type); + +EXPORT_API(int8_t) THSJIT_TensorType_dtype(const JITTensorType type); +EXPORT_API(void) THSJIT_TensorType_sizes(const JITTensorType type, int64_t* (*allocator)(int64_t length)); + +EXPORT_API(void) THSJIT_Type_dispose(const JITType type); +EXPORT_API(void) THSJIT_TensorType_dispose(const JITTensorType type); + +EXPORT_API(void) THSJIT_Module_modules(const JITModule module, JITModule* (*allocator)(size_t length)); EXPORT_API(void) THSJIT_Module_named_modules(const JITModule module, JITModule* (*allocator)(size_t length), const char** (*allocator2)(size_t length)); +EXPORT_API(void) THSJIT_Module_named_children(const JITModule module, + JITModule* (*allocator)(size_t length), + const char** (*allocator2)(size_t length)); + EXPORT_API(JITMethod) THSJIT_Module_get_method(const JITModule module, const char* name); EXPORT_API(void) THSJIT_Module_parameters(const JITModule module, Tensor* (*allocator)(size_t length)); - EXPORT_API(void) THSJIT_Module_named_parameters(const JITModule module, Tensor* (*allocator)(size_t length), const char** (*allocator2)(size_t length)); -EXPORT_API(Tensor) THSJIT_Module_forward(const JITModule module, const Tensor* tensorPtrs, const int length); - -EXPORT_API(void) THSJIT_Module_dispose(const JITModule module); - -EXPORT_API(const char*) THSJIT_Method_name(const JITMethod method); +EXPORT_API(void) THSJIT_Module_named_buffers(const JITModule module, + Tensor* (*allocator)(size_t length), + const char** (*allocator2)(size_t length)); EXPORT_API(int) THSJIT_Method_num_inputs(const JITMethod method); EXPORT_API(void) THSJIT_Method_dispose(const JITMethod method); + +EXPORT_API(const char*) THSJIT_Method_name(const JITMethod method); diff --git a/src/Native/LibTorchSharp/THSLinearAlgebra.cpp b/src/Native/LibTorchSharp/THSLinearAlgebra.cpp index d9539033b..861cbedcb 100644 --- a/src/Native/LibTorchSharp/THSLinearAlgebra.cpp +++ b/src/Native/LibTorchSharp/THSLinearAlgebra.cpp @@ -293,6 +293,11 @@ Tensor THSTensor_diag(const Tensor tensor, const int64_t diagonal) CATCH_TENSOR(tensor->diag(diagonal)); } +Tensor THSTensor_trace(const Tensor tensor) +{ + CATCH_TENSOR(tensor->trace()); +} + Tensor THSTensor_diagflat(const Tensor tensor, const int64_t offset) { CATCH_TENSOR(tensor->diagflat(offset)); diff --git a/src/Native/LibTorchSharp/THSTensor.h b/src/Native/LibTorchSharp/THSTensor.h index 7b034fac2..1e00105db 100644 --- a/src/Native/LibTorchSharp/THSTensor.h +++ b/src/Native/LibTorchSharp/THSTensor.h @@ -358,6 +358,8 @@ EXPORT_API(int) THSTensor_device_index(const Tensor tensor); EXPORT_API(Tensor) THSTensor_diag(const Tensor tensor, const int64_t diagonal); +EXPORT_API(Tensor) THSTensor_trace(const Tensor tensor); + EXPORT_API(Tensor) THSTensor_diagflat(const Tensor tensor, const int64_t offset); EXPORT_API(Tensor) THSTensor_diagonal(const Tensor tensor, const int64_t offset, const int64_t dim1, const int64_t dim2); diff --git a/src/Native/LibTorchSharp/Utils.h b/src/Native/LibTorchSharp/Utils.h index b399f4640..bbad85e41 100644 --- a/src/Native/LibTorchSharp/Utils.h +++ b/src/Native/LibTorchSharp/Utils.h @@ -20,6 +20,8 @@ typedef std::shared_ptr * JITModule; typedef std::shared_ptr* JITMethod; typedef std::shared_ptr * JITFunction; typedef std::shared_ptr * JITType; +typedef std::shared_ptr* JITTensorType; + //typedef std::shared_ptr* JITDimensionedTensorType; #define THS_API TH_API diff --git a/src/TorchSharp/JIT/Module.cs b/src/TorchSharp/JIT/Module.cs deleted file mode 100644 index d9e63b46f..000000000 --- a/src/TorchSharp/JIT/Module.cs +++ /dev/null @@ -1,154 +0,0 @@ -//// Copyright (c) .NET Foundation and Contributors. All Rights Reserved. See LICENSE in the project root for license information. -//using System; -//using System.Linq; -//using System.Runtime.InteropServices; -//using static TorchSharp.torch; - -//namespace TorchSharp.JIT -//{ -// public class Module : IDisposable -// { -// /// -// /// Class wrapping PyTorch's module object reference. -// /// -// internal sealed class HType : SafeHandle -// { -// public HType(IntPtr preexistingHandle, bool ownsHandle) : base(IntPtr.Zero, ownsHandle) -// { -// SetHandle(preexistingHandle); -// } - -// public override bool IsInvalid => handle == IntPtr.Zero; - -// // This is just for marshalling -// internal HType() : base(IntPtr.Zero, true) -// { -// } - -// [DllImport("LibTorchSharp")] -// private static extern void THSJIT_moduleDispose(HType handle); - -// protected override bool ReleaseHandle() -// { -// THSJIT_moduleDispose(this); -// return true; -// } - -// protected override void Dispose(bool disposing) -// { -// if (disposing) -// { -// ReleaseHandle(); -// } -// } -// } - -// internal HType handle; - -// internal Module(IntPtr handle) -// { -// this.handle = new HType(handle, true); -// } - -// ~Module() -// { -// Dispose(false); -// } - -// /// -// /// Releases the storage. -// /// -// public void Dispose() -// { -// Dispose(true); -// GC.SuppressFinalize(this); -// } - -// /// -// /// Implements the .NET Dispose pattern. -// /// -// protected void Dispose(bool disposing) -// { -// if (disposing) -// { -// handle.Dispose(); -// handle.SetHandleAsInvalid(); -// } -// } - -// [DllImport("LibTorchSharp")] -// private static extern IntPtr THSJIT_loadModule(string filename); - -// static public Module Load(string filename) -// { -// return new Module(THSJIT_loadModule(filename)); -// } - -// [DllImport("LibTorchSharp")] -// private static extern long THSJIT_getNumModules(HType module); - -// [DllImport("LibTorchSharp")] -// private static extern int THSJIT_getNumberOfInputs(HType module); - -// public int GetNumberOfInputs() -// { -// return THSJIT_getNumberOfInputs(handle); -// } - -// [DllImport("LibTorchSharp")] -// private static extern int THSJIT_getNumberOfOutputs(HType module); - -// public int GetNumberOfOutputs() -// { -// return THSJIT_getNumberOfOutputs(handle); -// } - -// [DllImport("LibTorchSharp")] -// private static extern IntPtr THSJIT_getInputType(HType module, int index); - -// public Type GetInputType(int index) -// { -// var type = new Type(THSJIT_getInputType(handle, index)); - -// return GetType(type); -// } - -// [DllImport("LibTorchSharp")] -// private static extern IntPtr THSJIT_getOutputType(HType module, int index); - -// public Type GetOutputType(int index) -// { -// var type = new Type(THSJIT_getOutputType(handle, index)); - -// return GetType(type); -// } - -// private Type GetType(Type type) -// { -// switch (type.Kind) -// { -// case Type.TypeKind.TensorType: -// var dynamic = type.AsDynamicType(); -// type.Dispose(); -// return dynamic; -// case Type.TypeKind.DimensionedTensorType: -// var tensor = type.AsTensorType(); -// type.Dispose(); -// return tensor; -// default: -// return type; -// } -// } - -// [DllImport("LibTorchSharp")] -// private static extern IntPtr THSJIT_forward(torch.nn.Module.HType module, IntPtr tensors, int length); - -// public Tensor forward(params Tensor[] tensors) -// { -// var parray = new PinnedArray(); -// IntPtr tensorRefs = parray.CreateArray(tensors.Select(p => p.Handle).ToArray()); - -// return new Tensor(THSJIT_forward(handle, tensorRefs, parray.Array.Length)); -// } -// } -//} diff --git a/src/TorchSharp/JIT/ScriptModule.cs b/src/TorchSharp/JIT/ScriptModule.cs new file mode 100644 index 000000000..beaba63c3 --- /dev/null +++ b/src/TorchSharp/JIT/ScriptModule.cs @@ -0,0 +1,328 @@ +// Copyright (c) .NET Foundation and Contributors. All Rights Reserved. See LICENSE in the project root for license information. +using System; +using System.Linq; +using System.Collections.Generic; +using System.Diagnostics; +using System.Reflection; +using System.Runtime.InteropServices; +using static TorchSharp.torch; + +namespace TorchSharp +{ + public static partial class jit + { + public class ScriptModule : torch.nn.Module + { + internal ScriptModule(IntPtr handle) : base(new HType(handle, true), null) + { + } + + ~ScriptModule() + { + Dispose(false); + } + + /// + /// Implements the .NET Dispose pattern. + /// + protected override void Dispose(bool disposing) + { + if (disposing && !handle.IsInvalid) { + + //foreach (var (_, p) in named_buffers(false)) { + // p.Dispose(); + //} + //foreach (var (_, b) in named_parameters(false)) { + // b.Dispose(); + //} + + //foreach (var (_, m) in named_modules()) { + // m.Dispose(); + //} + + handle.Dispose(); + handle.SetHandleAsInvalid(); + boxedModule?.Dispose(); + } + } + + [DllImport("LibTorchSharp")] + private static extern void THSJIT_Module_named_parameters(HType module, AllocatePinnedArray allocator1, AllocatePinnedArray allocator2); + + protected override (string name, TorchSharp.Modules.Parameter parameter)[] _named_parameters() + { + using var pa = new PinnedArray(); + using var sa = new PinnedArray(); + THSJIT_Module_named_parameters(handle, pa.CreateArray, sa.CreateArray); + CheckForErrors(); + var ptrArray = pa.Array; + var strArray = sa.Array; + + return ptrArray.Select((x, i) => (Marshal.PtrToStringAnsi(strArray[i]), new TorchSharp.Modules.Parameter(x))).ToArray(); + } + + [DllImport("LibTorchSharp")] + private static extern void THSJIT_Module_named_buffers(HType module, AllocatePinnedArray allocator1, AllocatePinnedArray allocator2); + + protected override (string name, Tensor buffer)[] _named_buffers() + { + using var pa = new PinnedArray(); + using var sa = new PinnedArray(); + THSJIT_Module_named_buffers(handle, pa.CreateArray, sa.CreateArray); + CheckForErrors(); + var ptrArray = pa.Array; + var strArray = sa.Array; + + return ptrArray.Select((x, i) => (Marshal.PtrToStringAnsi(strArray[i]), new Tensor(x))).ToArray(); + } + + [DllImport("LibTorchSharp")] + private static extern void THSJIT_Module_named_modules(HType module, AllocatePinnedArray allocator1, AllocatePinnedArray allocator2); + + public override IEnumerable<(string name, nn.Module module)> named_modules() + { + using var pa = new PinnedArray(); + using var sa = new PinnedArray(); + THSJIT_Module_named_modules(handle, pa.CreateArray, sa.CreateArray); + CheckForErrors(); + var ptrArray = pa.Array; + var strArray = sa.Array; + + return ptrArray.Select((x, i) => (Marshal.PtrToStringAnsi(strArray[i]), new ScriptModule(x) as nn.Module)); + } + + [DllImport("LibTorchSharp")] + private static extern void THSJIT_Module_named_children(HType module, AllocatePinnedArray allocator1, AllocatePinnedArray allocator2); + + public override IEnumerable<(string name, nn.Module module)> named_children() + { + using var pa = new PinnedArray(); + using var sa = new PinnedArray(); + THSJIT_Module_named_children(handle, pa.CreateArray, sa.CreateArray); + CheckForErrors(); + var ptrArray = pa.Array; + var strArray = sa.Array; + + return ptrArray.Select((x, i) => (Marshal.PtrToStringAnsi(strArray[i]), new ScriptModule(x) as nn.Module)); + } + + [DllImport("LibTorchSharp")] + private static extern long THSJIT_getNumModules(HType module); + + [DllImport("LibTorchSharp")] + private static extern int THSJIT_Module_num_inputs(HType module); + + public int GetNumberOfInputs() + { + return THSJIT_Module_num_inputs(handle); + } + + [DllImport("LibTorchSharp")] + private static extern int THSJIT_Module_num_outputs(HType module); + + public int GetNumberOfOutputs() + { + return THSJIT_Module_num_outputs(handle); + } + + [DllImport("LibTorchSharp")] + private static extern void THSJIT_Module_train(HType module); + + public override void train() + { + THSJIT_Module_train(handle); + CheckForErrors(); + } + + [DllImport("LibTorchSharp")] + private static extern void THSJIT_Module_eval(HType module); + + public override void eval() + { + THSJIT_Module_eval(handle); + CheckForErrors(); + } + + [DllImport("LibTorchSharp")] + private static extern bool THSJIT_Module_is_training(HType module); + + public override bool training { + get { + var res = THSJIT_Module_is_training(handle); + CheckForErrors(); + return res; + } + } + + [DllImport("LibTorchSharp")] + static extern void THSJIT_Module_to_device(HType module, long deviceType, long deviceIndex); + + [DllImport("LibTorchSharp")] + static extern void THSJIT_Module_to_dtype(HType module, sbyte dtype); + + /// + /// Moves the parameters and buffers. + /// + /// The device type, e.g. 'CPU' or 'CUDA'. + /// The optional device index. + /// + public override nn.Module to(DeviceType deviceType, int deviceIndex = -1) + { + if (deviceType != DeviceType.CUDA) deviceIndex = -1; + + if (deviceType == DeviceType.CUDA && !torch.cuda.is_available()) throw new InvalidOperationException("CUDA is not available."); + + if (deviceType != _deviceType || deviceIndex != _deviceIndex) { + + InitializeDeviceType(deviceType); + THSJIT_Module_to_device(handle, (int)deviceType, deviceIndex); + CheckForErrors(); + + foreach (var (_, sm) in named_children()) sm.to(deviceType, deviceIndex); + + foreach (var field in GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance)) { + + var fieldName = field.Name; + var value = field.GetValue(this); + + switch (value) { + // This test must come before the Tensor test + case Modules.Parameter param when deviceType == param.device_type && deviceIndex == param.device_index: + continue; + + case Modules.Parameter param: { + var t = param.to(deviceType, deviceIndex); + t.retain_grad(); + var p = new Modules.Parameter(t, param.requires_grad); + field.SetValue(this, p); + ConditionallyRegisterParameter(fieldName, p); + break; + } + + case Tensor tensor when (deviceType != tensor.device_type || deviceIndex != tensor.device_index): { + var t = tensor.to(deviceType, deviceIndex); + field.SetValue(this, t); + ConditionallyRegisterBuffer(fieldName, t); + break; + } + } + } + + _deviceType = deviceType; + _deviceIndex = deviceIndex; + } + + Debug.Assert(_deviceType == DeviceType.CUDA || _deviceIndex == -1); + + return this; + } + + private DeviceType _deviceType = DeviceType.CPU; + private int _deviceIndex = -1; + + /// + /// Convert the parameters and buffers. + /// + /// + public override nn.Module to(ScalarType dtype) + { + THSJIT_Module_to_dtype(handle, (sbyte)dtype); + CheckForErrors(); + + foreach (var (_, sm) in named_children()) sm.to(dtype); + foreach (var field in GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance)) { + + var fieldName = field.Name; + var value = field.GetValue(this); + + switch (value) { + // This test must come before the Tensor test + case Modules.Parameter param when dtype == param.dtype: + continue; + + case Modules.Parameter param: { + var t = param.to(dtype); + t.retain_grad(); + var p = new Modules.Parameter(t, param.requires_grad); + field.SetValue(this, p); + ConditionallyRegisterParameter(fieldName, p); + break; + } + + case Tensor tensor when dtype == tensor.dtype: + continue; + + case Tensor tensor: { + var t = tensor.to(dtype); + field.SetValue(this, t); + ConditionallyRegisterBuffer(fieldName, t); + break; + } + } + } + + return this; + } + +#if false // These functions "work," but the native code doesn't seem to find any interesting information. + + [DllImport("LibTorchSharp")] + private static extern IntPtr THSJIT_Module_getInputType(HType module, int index); + + public Type GetInputType(int index) + { + var type = new Type(THSJIT_Module_getInputType(handle, index), Type.TypeKind.AnyType); + + return GetType(type); + } + + [DllImport("LibTorchSharp")] + private static extern IntPtr THSJIT_getOutputType(HType module, int index); + + public Type GetOutputType(int index) + { + var type = new Type(THSJIT_getOutputType(handle, index), Type.TypeKind.AnyType); + + return GetType(type); + } + + private Type GetType(Type type) + { + switch (type.Kind) { + case Type.TypeKind.TensorType: + var dynamic = type.AsTensorType(); + type.Dispose(); + return dynamic; + //case Type.TypeKind.DimensionedTensorType: + // var tensor = type.AsTensorType(); + // type.Dispose(); + // return tensor; + default: + return type; + } + } +#endif + + [DllImport("LibTorchSharp")] + private static extern IntPtr THSJIT_Module_forward(HType module, IntPtr tensors, int length); + + public unsafe override Tensor forward(Tensor tensor) + { + using (var parray = new PinnedArray()) { + IntPtr tensorRefs = parray.CreateArray(new [] { tensor.Handle }); + return new Tensor(THSJIT_Module_forward(handle, tensorRefs, parray.Array.Length)); + } + } + } + + [DllImport("LibTorchSharp")] + private static extern IntPtr THSJIT_load(string filename); + + public static ScriptModule load(string filename) + { + return new ScriptModule(THSJIT_load(filename)); + } + + + } +} diff --git a/src/TorchSharp/JIT/Type/DynamicType .cs b/src/TorchSharp/JIT/Type/DynamicType .cs index 440d3532c..c345b2337 100644 --- a/src/TorchSharp/JIT/Type/DynamicType .cs +++ b/src/TorchSharp/JIT/Type/DynamicType .cs @@ -1,13 +1,16 @@ -//// Copyright (c) .NET Foundation and Contributors. All Rights Reserved. See LICENSE in the project root for license information. -//using System; +// Copyright (c) .NET Foundation and Contributors. All Rights Reserved. See LICENSE in the project root for license information. +using System; -//namespace TorchSharp.JIT -//{ -// public sealed class DynamicType : Type -// { -// internal DynamicType(IntPtr handle) : base(handle) -// { -// this.handle = new HType(handle, true); -// } -// } -//} +namespace TorchSharp +{ + public static partial class jit + { + public sealed class DynamicType : Type + { + internal DynamicType(IntPtr handle) : base(handle, Type.TypeKind.AnyType) + { + this.handle = new HType(handle, true, Type.TypeKind.AnyType); + } + } + } +} diff --git a/src/TorchSharp/JIT/Type/TensorType.cs b/src/TorchSharp/JIT/Type/TensorType.cs index 37d476c3e..152dc6e7f 100644 --- a/src/TorchSharp/JIT/Type/TensorType.cs +++ b/src/TorchSharp/JIT/Type/TensorType.cs @@ -1,45 +1,68 @@ -//// Copyright (c) .NET Foundation and Contributors. All Rights Reserved. See LICENSE in the project root for license information. -//using System; -//using System.Runtime.InteropServices; - -//namespace TorchSharp.JIT -//{ -// public sealed class TensorType : Type -// { -// internal TensorType(IntPtr handle) : base(handle) -// { -// this.handle = new HType(handle, true); -// } - -// internal TensorType(Type type) : base() -// { -// handle = type.handle; -// type.handle = new HType(IntPtr.Zero, true); -// type.Dispose(); -// } - -// [DllImport("LibTorchSharp")] -// private static extern short THSJIT_getScalarFromDimensionedTensorType(HType handle); - -// public Tensor.ScalarType GetScalarType() -// { -// return (Tensor.ScalarType)THSJIT_getScalarFromDimensionedTensorType(handle); -// } - -// [DllImport("LibTorchSharp")] -// private static extern int THSJIT_getDimensionedTensorTypeDimensions(HType handle); - -// public int GetDimensions() -// { -// return THSJIT_getDimensionedTensorTypeDimensions(handle); -// } - -// [DllImport("LibTorchSharp")] -// private static extern string THSJIT_getDimensionedTensorDevice(HType handle); - -// public string GetDevice() -// { -// return THSJIT_getDimensionedTensorDevice(handle); -// } -// } -//} +// Copyright (c) .NET Foundation and Contributors. All Rights Reserved. See LICENSE in the project root for license information. +using System; +using System.Runtime.InteropServices; + +namespace TorchSharp +{ + public static partial class jit + { + public sealed class TensorType : Type + { + internal TensorType(IntPtr handle) : base(handle, TypeKind.TensorType) + { + this.handle = new HType(handle, true, TypeKind.TensorType); + } + + internal TensorType(Type type) : base() + { + handle = type.handle; + type.handle = new HType(IntPtr.Zero, true, TypeKind.TensorType); + type.Dispose(); + } + + [DllImport("LibTorchSharp")] + private static extern sbyte THSJIT_TensorType_dtype(HType handle); + + public torch.ScalarType GetScalarType() + { + return (torch.ScalarType)THSJIT_TensorType_dtype(handle); + } + + + [DllImport("LibTorchSharp")] + static extern long THSJIT_TensorType_sizes(HType handle, AllocatePinnedArray allocator); + + /// + /// Retrieves the sizes of all dimensions of the tensor. + /// + public long[] size() + { + long[] ptrArray; + + using (var pa = new PinnedArray()) { + THSJIT_TensorType_sizes(handle, pa.CreateArray); + torch.CheckForErrors(); + ptrArray = pa.Array; + } + + return ptrArray; + } + + [DllImport("LibTorchSharp")] + private static extern int THSJIT_getDimensionedTensorTypeDimensions(HType handle); + + public int GetDimensions() + { + return THSJIT_getDimensionedTensorTypeDimensions(handle); + } + + [DllImport("LibTorchSharp")] + private static extern string THSJIT_getDimensionedTensorDevice(HType handle); + + public string GetDevice() + { + return THSJIT_getDimensionedTensorDevice(handle); + } + } + } +} diff --git a/src/TorchSharp/JIT/Type/Type.cs b/src/TorchSharp/JIT/Type/Type.cs index e06d40ccc..46bd923f9 100644 --- a/src/TorchSharp/JIT/Type/Type.cs +++ b/src/TorchSharp/JIT/Type/Type.cs @@ -1,108 +1,123 @@ -//// Copyright (c) .NET Foundation and Contributors. All Rights Reserved. See LICENSE in the project root for license information. -//using System; -//using System.Runtime.InteropServices; - -//namespace TorchSharp.JIT -//{ -// public class Type : IDisposable -// { -// /// -// /// Class wrapping PyTorch's type object reference. -// /// -// internal sealed class HType : SafeHandle -// { -// public HType(IntPtr preexistingHandle, bool ownsHandle) : base(IntPtr.Zero, ownsHandle) -// { -// SetHandle(preexistingHandle); -// } - -// public override bool IsInvalid => handle == IntPtr.Zero; - -// // This is just for marshalling -// internal HType() : base(IntPtr.Zero, true) -// { -// } - -// [DllImport("LibTorchSharp")] -// private static extern void THSJIT_typeDispose(HType handle); - -// protected override bool ReleaseHandle() -// { -// THSJIT_typeDispose(this); -// return true; -// } - -// protected override void Dispose(bool disposing) -// { -// if (disposing) -// { -// ReleaseHandle(); -// } -// } -// } - -// internal HType handle; - -// internal Type(IntPtr handle) -// { -// this.handle = new HType(handle, true); -// } - -// protected Type() -// { -// } - -// ~Type() -// { -// Dispose(false); -// } - -// /// -// /// Releases the storage. -// /// -// public void Dispose() -// { -// Dispose(true); -// GC.SuppressFinalize(this); -// } - -// /// -// /// Implements the .NET Dispose pattern. -// /// -// protected void Dispose(bool disposing) -// { -// if (disposing) -// { -// handle.Dispose(); -// handle.SetHandleAsInvalid(); -// } -// } - -// [DllImport("LibTorchSharp")] -// private static extern sbyte THSJIT_typeKind(HType handle); - -// internal TypeKind Kind -// { -// get { return (TypeKind)THSJIT_typeKind(handle); } -// } - -// [DllImport("LibTorchSharp")] -// private static extern IntPtr THSJIT_typeCast(HType module); - -// internal TensorType AsTensorType() -// { -// return new TensorType(THSJIT_typeCast(handle)); -// } - -// internal DynamicType AsDynamicType() -// { -// return new DynamicType(THSJIT_typeCast(handle)); -// } - -// internal enum TypeKind : sbyte -// { -// TensorType = 0, -// DimensionedTensorType = 1 -// } -// } -//} +// Copyright (c) .NET Foundation and Contributors. All Rights Reserved. See LICENSE in the project root for license information. +using System; +using System.Collections; +using System.Runtime.InteropServices; + +namespace TorchSharp +{ + public static partial class jit + { + + public class Type : IDisposable + { + /// + /// Class wrapping PyTorch's type object reference. + /// + internal sealed class HType : SafeHandle + { + public HType(IntPtr preexistingHandle, bool ownsHandle, TypeKind kind) : base(IntPtr.Zero, ownsHandle) + { + SetHandle(preexistingHandle); + this.kind = kind; + } + + public override bool IsInvalid => handle == IntPtr.Zero; + + // This is just for marshalling + internal HType() : base(IntPtr.Zero, true) + { + } + + [DllImport("LibTorchSharp")] + private static extern void THSJIT_Type_dispose(HType handle); + + [DllImport("LibTorchSharp")] + private static extern void THSJIT_TensorType_dispose(HType handle); + + protected override bool ReleaseHandle() + { + switch (kind) { + case TypeKind.TensorType: + THSJIT_TensorType_dispose(this); + break; + default: + THSJIT_Type_dispose(this); + break; + } + return true; + } + + protected override void Dispose(bool disposing) + { + if (disposing) { + ReleaseHandle(); + } + } + + private TypeKind kind; + } + + internal HType handle; + + internal Type(IntPtr handle, TypeKind kind) + { + this.handle = new HType(handle, true, kind); + } + + protected Type() + { + } + + ~Type() + { + Dispose(false); + } + + /// + /// Releases the storage. + /// + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + /// + /// Implements the .NET Dispose pattern. + /// + protected void Dispose(bool disposing) + { + if (disposing) { + handle.Dispose(); + handle.SetHandleAsInvalid(); + } + } + + [DllImport("LibTorchSharp")] + private static extern sbyte THSJIT_Type_kind(HType handle); + + internal TypeKind Kind { + get { return (TypeKind)THSJIT_Type_kind(handle); } + } + + [DllImport("LibTorchSharp")] + private static extern IntPtr THSJIT_Type_cast(HType module); + + internal TensorType AsTensorType() + { + return new TensorType(THSJIT_Type_cast(handle)); + } + + internal DynamicType AsDynamicType() + { + return new DynamicType(THSJIT_Type_cast(handle)); + } + + internal enum TypeKind : sbyte + { + AnyType = 0, + TensorType = 3, + } + } + } +} \ No newline at end of file diff --git a/src/TorchSharp/NN/Module.cs b/src/TorchSharp/NN/Module.cs index 53ddc465b..9a0872512 100644 --- a/src/TorchSharp/NN/Module.cs +++ b/src/TorchSharp/NN/Module.cs @@ -31,9 +31,10 @@ public class Module : IDisposable /// internal sealed class HType : SafeHandle { - public HType(IntPtr preexistingHandle, bool ownsHandle) + public HType(IntPtr preexistingHandle, bool ownsHandle, bool script = false) : base(IntPtr.Zero, ownsHandle) { + isScriptModule = script; SetHandle(preexistingHandle); } @@ -46,10 +47,18 @@ internal HType() : base(IntPtr.Zero, true) [DllImport("LibTorchSharp")] private static extern void THSNN_Module_dispose(HType handle); + [DllImport("LibTorchSharp")] + private static extern void THSJIT_Module_dispose(HType handle); protected override bool ReleaseHandle() { - if (!IsInvalid) THSNN_Module_dispose(this); + if (!IsInvalid) { + if (isScriptModule) { + THSJIT_Module_dispose(this); + } else { + THSNN_Module_dispose(this); + } + } SetHandle(IntPtr.Zero); return true; } @@ -60,6 +69,8 @@ protected override void Dispose(bool disposing) ReleaseHandle(); } } + + private bool isScriptModule; } internal HType handle; @@ -75,6 +86,19 @@ internal BoxedModule BoxedModule { } } + internal Module(HType handle, IntPtr? boxedHandle) + { + this.handle = handle; + boxedModule = boxedHandle.HasValue ? new BoxedModule(boxedHandle.Value) : null; + + foreach (var (parameterName, parameter) in _named_parameters()) { + register_parameter(parameterName, parameter); + } + foreach (var (bufferName, buffer) in _named_buffers()) { + register_buffer(bufferName, buffer); + } + } + internal Module(IntPtr handle, IntPtr? boxedHandle, bool ownsHandle = true) { this.handle = new HType(handle, ownsHandle); @@ -256,8 +280,8 @@ public virtual Module to(ScalarType dtype) /// public Module to(Tensor other) { - to(other.device_type, other.device_index); - return to(other.dtype); + to(other.dtype); + return to(other.device_type, other.device_index); } /// @@ -326,7 +350,7 @@ public virtual void eval() [DllImport("LibTorchSharp")] private static extern bool THSNN_Module_is_training(HType module); - public bool training { + public virtual bool training { get { var res = THSNN_Module_is_training(handle); CheckForErrors(); @@ -464,7 +488,7 @@ public virtual (IList missing_keys, IList unexpected_keyes) load [DllImport("LibTorchSharp")] private static extern void THSNN_Module_get_named_parameters(HType module, AllocatePinnedArray allocator1, AllocatePinnedArray allocator2); - protected (string name, Parameter parameter)[] _named_parameters() + protected virtual (string name, Parameter parameter)[] _named_parameters() { using var pa = new PinnedArray(); using var sa = new PinnedArray(); @@ -479,7 +503,7 @@ public virtual (IList missing_keys, IList unexpected_keyes) load [DllImport("LibTorchSharp")] private static extern void THSNN_Module_get_named_buffers(HType module, AllocatePinnedArray allocator1, AllocatePinnedArray allocator2); - protected (string name, Tensor buffer)[] _named_buffers() + protected virtual (string name, Tensor buffer)[] _named_buffers() { using var pa = new PinnedArray(); using var sa = new PinnedArray(); @@ -799,7 +823,7 @@ public static void save_state_dict(System.IO.BinaryWriter writer, Dictionary - public Module load(string location, bool strict = true, IList skip = null) + public virtual Module load(string location, bool strict = true, IList skip = null) { var dt = _deviceType; var di = _deviceIndex; diff --git a/src/TorchSharp/Tensor/Tensor.LinearAlgebra.cs b/src/TorchSharp/Tensor/Tensor.LinearAlgebra.cs index 002a1471d..e5b6be8cf 100644 --- a/src/TorchSharp/Tensor/Tensor.LinearAlgebra.cs +++ b/src/TorchSharp/Tensor/Tensor.LinearAlgebra.cs @@ -265,6 +265,15 @@ public static Tensor det(Tensor input) return torch.linalg.det(input); } + public static Tensor diag(Tensor input, long dimension = 0) => input.diag(dimension); + + /// + /// Returns the sum of the elements of the diagonal of the input 2-D matrix. + /// + /// The input tensor + /// + public static Tensor trace(Tensor input) => input.trace(); + /// /// Returns a partial view of input with the its diagonal elements with respect to dim1 and dim2 appended as a dimension at the end of the shape. /// The argument offset controls which diagonal to consider: diff --git a/src/TorchSharp/Tensor/Tensor.cs b/src/TorchSharp/Tensor/Tensor.cs index 63e4d9c54..420dbaae0 100644 --- a/src/TorchSharp/Tensor/Tensor.cs +++ b/src/TorchSharp/Tensor/Tensor.cs @@ -2990,6 +2990,22 @@ public Tensor diag(long dimension = 0) return new Tensor(res); } + [DllImport("LibTorchSharp")] + static extern IntPtr THSTensor_trace(IntPtr tensor); + + /// + /// Returns the sum of the elements of the diagonal of the input 2-D matrix. + /// + /// + public Tensor trace() + { + if (ndim != 2) + throw new ArgumentException($"Expected a matrix, but got tensor with ndim == {ndim}"); + var res = THSTensor_trace(Handle); + if (res == IntPtr.Zero) { torch.CheckForErrors(); } + return new Tensor(res); + } + [DllImport("LibTorchSharp")] static extern IntPtr THSTensor_diagflat(IntPtr tensor, long offset); diff --git a/test/TorchSharpTest.WithCudaBinaries/TorchSharpTest.WithCudaBinaries.csproj b/test/TorchSharpTest.WithCudaBinaries/TorchSharpTest.WithCudaBinaries.csproj index 5acc6b627..e65ba6bf3 100644 --- a/test/TorchSharpTest.WithCudaBinaries/TorchSharpTest.WithCudaBinaries.csproj +++ b/test/TorchSharpTest.WithCudaBinaries/TorchSharpTest.WithCudaBinaries.csproj @@ -42,6 +42,18 @@ + + + PreserveNewest + + + + + + PreserveNewest + + + diff --git a/test/TorchSharpTest/TestLoadSave.cs b/test/TorchSharpTest/TestLoadSave.cs index 6242e4a5d..217e69a24 100644 --- a/test/TorchSharpTest/TestLoadSave.cs +++ b/test/TorchSharpTest/TestLoadSave.cs @@ -76,6 +76,65 @@ public void TestSaveLoadLinear3() } + [Fact] + public void TestLoadJIT_1() + { + // One linear layer followed by ReLU. + var m = TorchSharp.jit.load(@".\linrelu.script.dat"); + var t = m.forward(torch.ones(10)); + + var inp = m.GetNumberOfOutputs(); + + Assert.Equal(new long[] { 6 }, t.shape); + Assert.Equal(torch.float32, t.dtype); + Assert.Equal(new float[] { 0.313458264f, 0, 0.9996568f, 0, 0, 0 }, t.data().ToArray()); + + m.Dispose(); + } + + [Fact] + public void TestLoadJIT_2() + { + // Two linear layers, nested Sequential, ReLU in between. + var m = TorchSharp.jit.load(@".\l1000_100_10.script.dat"); + + var sms = m.named_modules().ToArray(); + Assert.Equal(5, sms.Length); + + var kids = m.named_children().ToArray(); + Assert.Equal(2, kids.Length); + + var t = m.forward(torch.ones(1000)); + + Assert.Equal(new long[] { 10 }, t.shape); + Assert.Equal(torch.float32, t.dtype); + Assert.Equal(new float[] { 0.564213157f, -0.04519982f, -0.005117342f, 0.395530462f, -0.3780813f, -0.004734449f, -0.3221216f, -0.289159119f, 0.268511474f, 0.180702567f }, t.data().ToArray()); + + m.Dispose(); + } + + [Fact] + public void TestSaveLoadJITCUDA() + { + if (torch.cuda.is_available()) { + + var m = TorchSharp.jit.load(@".\linrelu.script.dat"); + + m.to(DeviceType.CUDA); + var params0 = m.parameters().ToArray(); + foreach (var p in params0) + Assert.Equal(DeviceType.CUDA, p.device_type); + + var t = m.forward(torch.ones(10).cuda()).cpu(); + + Assert.Equal(new long[] { 6 }, t.shape); + Assert.Equal(torch.float32, t.dtype); + Assert.Equal(new float[] { 0.313458264f, 0, 0.9996568f, 0, 0, 0 }, t.data().ToArray()); + + m.Dispose(); + } + } + [Fact] public void TestSaveLoadConv2D() { diff --git a/test/TorchSharpTest/TestTraining.cs b/test/TorchSharpTest/TestTraining.cs index a8561d409..107ecc200 100644 --- a/test/TorchSharpTest/TestTraining.cs +++ b/test/TorchSharpTest/TestTraining.cs @@ -186,7 +186,7 @@ private static void ReInitializeLinear(Generator gen, Linear linear) } } - private static float TrainLoop(Sequential seq, Tensor x, Tensor y, optim.Optimizer optimizer) + private static float TrainLoop(Module seq, Tensor x, Tensor y, optim.Optimizer optimizer) { var loss = mse_loss(Reduction.Sum); @@ -213,7 +213,7 @@ private static float TrainLoop(Sequential seq, Tensor x, Tensor y, optim.Optimiz return finalLoss; } - private static float TrainLoop(Sequential seq, Tensor x, Tensor y, optim.Optimizer optimizer, optim.lr_scheduler.LRScheduler scheduler, bool check_lr = true) + private static float TrainLoop(Module seq, Tensor x, Tensor y, optim.Optimizer optimizer, optim.lr_scheduler.LRScheduler scheduler, bool check_lr = true) { var loss = mse_loss(Reduction.Sum); @@ -1665,6 +1665,24 @@ public void TestTrainingLBFGS_ME() //Assert.True(finalLoss < initialLoss); } + [Fact] + public void TestTrainingLoadedTorchScript() + { + var gen = new Generator(4711); + CreateDataAndLabels(gen, out var x, out var y); + + var seq = TorchSharp.jit.load(@".\l1000_100_10.script.dat"); + + double learning_rate = 0.00004f; + var optimizer = torch.optim.SGD(seq.parameters(), learning_rate); + + var loss = TrainLoop(seq, x, y, optimizer); + + LossIsClose(53.81697f, loss); + + seq.eval(); + } + [Fact] public void TestTrainingConv2d() { diff --git a/test/TorchSharpTest/TorchSharpTest.csproj b/test/TorchSharpTest/TorchSharpTest.csproj index cc9971188..b93ba1cbe 100644 --- a/test/TorchSharpTest/TorchSharpTest.csproj +++ b/test/TorchSharpTest/TorchSharpTest.csproj @@ -26,6 +26,15 @@ + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + PreserveNewest diff --git a/test/TorchSharpTest/l1000_100_10.script.dat b/test/TorchSharpTest/l1000_100_10.script.dat new file mode 100644 index 0000000000000000000000000000000000000000..399c66b0aac73dfa9f04972a044fd707cee9476f GIT binary patch literal 411032 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

*m%I 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 Oe?fo2kNbbS_x}SkP1Vo< literal 0 HcmV?d00001 diff --git a/test/TorchSharpTest/linrelu.script.dat b/test/TorchSharpTest/linrelu.script.dat new file mode 100644 index 0000000000000000000000000000000000000000..7af081e969324debc9f9f9a6bc30dd3d1f1f2f61 GIT binary patch literal 4432 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 Date: Fri, 1 Jul 2022 14:44:21 -0700 Subject: [PATCH 02/12] Added a few file name validation tests. --- src/TorchSharp/JIT/ScriptModule.cs | 2 ++ src/TorchSharp/NN/Module.cs | 10 ++++++++-- test/TorchSharpTest/TestLoadSave.cs | 8 +++----- test/TorchSharpTest/TestTraining.cs | 2 +- 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/TorchSharp/JIT/ScriptModule.cs b/src/TorchSharp/JIT/ScriptModule.cs index beaba63c3..d87359671 100644 --- a/src/TorchSharp/JIT/ScriptModule.cs +++ b/src/TorchSharp/JIT/ScriptModule.cs @@ -320,6 +320,8 @@ public unsafe override Tensor forward(Tensor tensor) public static ScriptModule load(string filename) { + if (!System.IO.File.Exists(filename)) + throw new System.IO.FileNotFoundException(filename); return new ScriptModule(THSJIT_load(filename)); } diff --git a/src/TorchSharp/NN/Module.cs b/src/TorchSharp/NN/Module.cs index 9a0872512..2e949250f 100644 --- a/src/TorchSharp/NN/Module.cs +++ b/src/TorchSharp/NN/Module.cs @@ -312,9 +312,12 @@ public virtual Module apply(Action fn) [DllImport("LibTorchSharp")] static extern IntPtr THSNN_Module_load([MarshalAs(UnmanagedType.LPStr)] string location); - public static Module Load(string location) + public static Module Load(string filename) { - var handle = THSNN_Module_load(location); + if (!System.IO.File.Exists(filename)) + throw new System.IO.FileNotFoundException(filename); + + var handle = THSNN_Module_load(filename); if (handle == IntPtr.Zero) { CheckForErrors(); } return new Module(handle, IntPtr.Zero); } @@ -825,6 +828,9 @@ public static void save_state_dict(System.IO.BinaryWriter writer, Dictionary public virtual Module load(string location, bool strict = true, IList skip = null) { + if (!System.IO.File.Exists(location)) + throw new System.IO.FileNotFoundException(location); + var dt = _deviceType; var di = _deviceIndex; diff --git a/test/TorchSharpTest/TestLoadSave.cs b/test/TorchSharpTest/TestLoadSave.cs index 217e69a24..0143cc4f1 100644 --- a/test/TorchSharpTest/TestLoadSave.cs +++ b/test/TorchSharpTest/TestLoadSave.cs @@ -80,11 +80,9 @@ public void TestSaveLoadLinear3() public void TestLoadJIT_1() { // One linear layer followed by ReLU. - var m = TorchSharp.jit.load(@".\linrelu.script.dat"); + var m = TorchSharp.jit.load(@"linrelu.script.dat"); var t = m.forward(torch.ones(10)); - var inp = m.GetNumberOfOutputs(); - Assert.Equal(new long[] { 6 }, t.shape); Assert.Equal(torch.float32, t.dtype); Assert.Equal(new float[] { 0.313458264f, 0, 0.9996568f, 0, 0, 0 }, t.data().ToArray()); @@ -96,7 +94,7 @@ public void TestLoadJIT_1() public void TestLoadJIT_2() { // Two linear layers, nested Sequential, ReLU in between. - var m = TorchSharp.jit.load(@".\l1000_100_10.script.dat"); + var m = TorchSharp.jit.load(@"l1000_100_10.script.dat"); var sms = m.named_modules().ToArray(); Assert.Equal(5, sms.Length); @@ -118,7 +116,7 @@ public void TestSaveLoadJITCUDA() { if (torch.cuda.is_available()) { - var m = TorchSharp.jit.load(@".\linrelu.script.dat"); + var m = TorchSharp.jit.load(@"linrelu.script.dat"); m.to(DeviceType.CUDA); var params0 = m.parameters().ToArray(); diff --git a/test/TorchSharpTest/TestTraining.cs b/test/TorchSharpTest/TestTraining.cs index 107ecc200..251885618 100644 --- a/test/TorchSharpTest/TestTraining.cs +++ b/test/TorchSharpTest/TestTraining.cs @@ -1671,7 +1671,7 @@ public void TestTrainingLoadedTorchScript() var gen = new Generator(4711); CreateDataAndLabels(gen, out var x, out var y); - var seq = TorchSharp.jit.load(@".\l1000_100_10.script.dat"); + var seq = TorchSharp.jit.load(@"l1000_100_10.script.dat"); double learning_rate = 0.00004f; var optimizer = torch.optim.SGD(seq.parameters(), learning_rate); From e1da951070864a5f9931ae48fc1550a9cd96640f Mon Sep 17 00:00:00 2001 From: Niklas Gustafsson Date: Fri, 1 Jul 2022 16:11:17 -0700 Subject: [PATCH 03/12] Added another JIT'd test file -- this one was scripted, not traced. --- RELEASENOTES.md | 3 ++- .../TorchSharpTest.WithCudaBinaries.csproj | 3 +++ test/TorchSharpTest/TestLoadSave.cs | 14 ++++++++++++++ test/TorchSharpTest/TorchSharpTest.csproj | 2 +- test/TorchSharpTest/scripted.script.dat | Bin 0 -> 4310 bytes 5 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 test/TorchSharpTest/scripted.script.dat diff --git a/RELEASENOTES.md b/RELEASENOTES.md index a163115f5..29eee08f3 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -10,7 +10,8 @@ __API Changes__: Add torch.utils.rnn
Add torchvision.io
-Add Tensor.trace() and torch.trace()
+Add Tensor.trace() and torch.trace() (unrelated to torch.jit.trace)
+Add ability to load modules that were traced using torch.jit.trace() in Pytorch
## NuGet Version 0.96.8 diff --git a/test/TorchSharpTest.WithCudaBinaries/TorchSharpTest.WithCudaBinaries.csproj b/test/TorchSharpTest.WithCudaBinaries/TorchSharpTest.WithCudaBinaries.csproj index e65ba6bf3..8f2fc3f91 100644 --- a/test/TorchSharpTest.WithCudaBinaries/TorchSharpTest.WithCudaBinaries.csproj +++ b/test/TorchSharpTest.WithCudaBinaries/TorchSharpTest.WithCudaBinaries.csproj @@ -46,6 +46,9 @@ PreserveNewest + + PreserveNewest + diff --git a/test/TorchSharpTest/TestLoadSave.cs b/test/TorchSharpTest/TestLoadSave.cs index 0143cc4f1..d9465293c 100644 --- a/test/TorchSharpTest/TestLoadSave.cs +++ b/test/TorchSharpTest/TestLoadSave.cs @@ -92,6 +92,20 @@ public void TestLoadJIT_1() [Fact] public void TestLoadJIT_2() + { + // One linear layer followed by ReLU. + var m = TorchSharp.jit.load(@"scripted.script.dat"); + var t = m.forward(torch.ones(6)); + + Assert.Equal(new long[] { 6 }, t.shape); + Assert.Equal(torch.float32, t.dtype); + Assert.Equal(new float[] { 1.554085f, 1.01024628f, -1.35086036f, -1.84021854f, 0.0127189457f, 0.5994258f }, t.data().ToArray()); + + m.Dispose(); + } + + [Fact] + public void TestLoadJIT_3() { // Two linear layers, nested Sequential, ReLU in between. var m = TorchSharp.jit.load(@"l1000_100_10.script.dat"); diff --git a/test/TorchSharpTest/TorchSharpTest.csproj b/test/TorchSharpTest/TorchSharpTest.csproj index b93ba1cbe..a23b8f447 100644 --- a/test/TorchSharpTest/TorchSharpTest.csproj +++ b/test/TorchSharpTest/TorchSharpTest.csproj @@ -32,7 +32,7 @@ PreserveNewest - + PreserveNewest diff --git a/test/TorchSharpTest/scripted.script.dat b/test/TorchSharpTest/scripted.script.dat new file mode 100644 index 0000000000000000000000000000000000000000..1a769e2137add1896da7415b974c38bb1b9d6fce GIT binary patch literal 4310 zcmb7H3se)=7M%o5U;;`IXe0$e(MJ>#K8iviLC~P2AU`Dwgcy=Q0x==UM1quW3q?@` z;R!0wrNLTxU`uT&MFg~bte>KSpeVEoS`ZZl|A6{t5-JHFUmez6vohR$&bj;UbI-Z{ z44qj3psNc^c|d>wM2W=|E*oM~?CGAyK!i>u@}p_bDoUvjeiYH-&aR;OGqAcfWwxXCus>w@|1ed2f@nS@L2*=*$SgS|5XwN7lou%% z2)QhXCz6S!tZj~<1Z`u(#KH&}Jd+*Gljx`+AYCYCLqY0~pkx*k1<$dU%x3DqZ%&+C zf??=G0TL_&uwkGX7|4c!VW6Na4o55$@;Hz{ERum6q+Fhq$6X`fK%hjI6bJ=M^q7d| zASqiQ5{RNDU>4I9{>>7|SW$AJkQK@1#KyCwTozv}j+Nm2RBI6mL_D@sqCc@@vU*h_ z5qYa>uG#Uw-ua3=-3Fib5 zDPYSacrB!(#0W-W;N{L!Az|DE%9syk@o|3gNQntNOv#7@2m{Z<4#I>X1Cf9+oN7~Z z%>-Dek^o1{mCpj*G?rHIVwBWnPSJYr>nDNr3$!6K2>QB!EZcnFoL!WG1B=p*q zK0h{E&39?4u-?$In&cIj&|D)+DT%dj^V4ILo#cojF!HcGEKpOk)K3$!IJ z6^9KAvMJcq^H;}J?+(xN&&kPx)@P%!Ew6VP(S3Rx@O}izJl=zQ8}hC?e)CnTceXj? zL#Y(y&*v4U5$Lh4UlX?3#JZupnfJa}J=E;`M~d~?s?L@_K2zL@%sjSFifO?Ax3(tT z!XU)%IQdCKE^Q|&_K`_@=#Kfeo0orTYIScdE9lmIFYYL7@JQz&&pEr&=XsWl1gsNY zk2YwRl{E2p{vLqx-u>>g$D;G;oaYsZy`-h$v4u~s$FqlrWTzslM6MNy+n`;i zdUg!gcZXh>`|#VWQcm8oI*PSZc%SN!s%_Q3^af^j-v^ns18k;YmZHi&ibzBm&pwJe z`&7!c*5Y~k(^YCDhXxha;%7@1D`a0SaemBRYH=$Wd-!>zvYOpo^i!rz@r!t<(B<)GH|DljCtp?) zcUIDr;0f3MJ6Q#u+@k|2*ImrKbI7|4tX{?R?)|wb(YrV zVs;TA2iN7oIr`zCF~4zNgsw#Ppy8DnwP@{C%D-Hy#`^B2ywWW=W3_s&VMVJKLmJ># zds2q$=ksx4N1~Jm*0mk+we0QXN)<;o<4hW$`h5wyA;v56d!7^+>Rs;<{Ewf z*n1fBE1k+Srj+mBCH^2iSgYc$-pQoqG%Vi%c+6a5Nr2r4xr>sERF#S?R7saK6I)YN z%;iN{szq-j5XH$MSIb~kMYRPj;YVG3wZ9={#no~{98wwC!Z7vpaCbkkh)1%tqmJWU zVZ4+F$)zGob&1n-Vmofw))FyB0ud3pRpfIrU=olqbERFqMngTMNfs(EHS99_` zj5G1qi=L7Ewzq#*kiE61sj-{eUPNde%w#7DW7oKe_<&GEU1>FCCXQPy3=u|2maL%8BTZ_i-_L0v;eLY_jIVA3JbWryyT5k2=r4St8DM zaRGf|a=QS<-nMzo<&Obui{s7B3roTqm-sq z*|Rsq-S4vtEsOQBVPlD?2j5b(TZv|S0-A>Sa|ah zk5d}c$tEhn>i zC&xdb7|o-Yq~+ui-1~pXiB=t&9J^*lI%%10*ZT;wGsmr&gLo|mi(x^jC?X0mxAO8 Date: Fri, 1 Jul 2022 16:19:50 -0700 Subject: [PATCH 04/12] Fixed namespace issue. --- src/TorchSharp/JIT/ScriptModule.cs | 477 ++++++++++++------------ src/TorchSharp/JIT/Type/DynamicType .cs | 14 +- src/TorchSharp/JIT/Type/TensorType.cs | 89 ++--- src/TorchSharp/JIT/Type/Type.cs | 175 ++++----- test/TorchSharpTest/TestLoadSave.cs | 8 +- test/TorchSharpTest/TestTraining.cs | 2 +- 6 files changed, 389 insertions(+), 376 deletions(-) diff --git a/src/TorchSharp/JIT/ScriptModule.cs b/src/TorchSharp/JIT/ScriptModule.cs index d87359671..d0a693ed6 100644 --- a/src/TorchSharp/JIT/ScriptModule.cs +++ b/src/TorchSharp/JIT/ScriptModule.cs @@ -9,177 +9,229 @@ namespace TorchSharp { - public static partial class jit + public static partial class torch { - public class ScriptModule : torch.nn.Module + public static partial class jit { - internal ScriptModule(IntPtr handle) : base(new HType(handle, true), null) + public class ScriptModule : torch.nn.Module { - } + internal ScriptModule(IntPtr handle) : base(new HType(handle, true), null) + { + } - ~ScriptModule() - { - Dispose(false); - } + ~ScriptModule() + { + Dispose(false); + } - ///

- /// Implements the .NET Dispose pattern. - /// - protected override void Dispose(bool disposing) - { - if (disposing && !handle.IsInvalid) { - - //foreach (var (_, p) in named_buffers(false)) { - // p.Dispose(); - //} - //foreach (var (_, b) in named_parameters(false)) { - // b.Dispose(); - //} - - //foreach (var (_, m) in named_modules()) { - // m.Dispose(); - //} - - handle.Dispose(); - handle.SetHandleAsInvalid(); - boxedModule?.Dispose(); + /// + /// Implements the .NET Dispose pattern. + /// + protected override void Dispose(bool disposing) + { + if (disposing && !handle.IsInvalid) { + + //foreach (var (_, p) in named_buffers(false)) { + // p.Dispose(); + //} + //foreach (var (_, b) in named_parameters(false)) { + // b.Dispose(); + //} + + //foreach (var (_, m) in named_modules()) { + // m.Dispose(); + //} + + handle.Dispose(); + handle.SetHandleAsInvalid(); + boxedModule?.Dispose(); + } } - } - [DllImport("LibTorchSharp")] - private static extern void THSJIT_Module_named_parameters(HType module, AllocatePinnedArray allocator1, AllocatePinnedArray allocator2); + [DllImport("LibTorchSharp")] + private static extern void THSJIT_Module_named_parameters(HType module, AllocatePinnedArray allocator1, AllocatePinnedArray allocator2); - protected override (string name, TorchSharp.Modules.Parameter parameter)[] _named_parameters() - { - using var pa = new PinnedArray(); - using var sa = new PinnedArray(); - THSJIT_Module_named_parameters(handle, pa.CreateArray, sa.CreateArray); - CheckForErrors(); - var ptrArray = pa.Array; - var strArray = sa.Array; - - return ptrArray.Select((x, i) => (Marshal.PtrToStringAnsi(strArray[i]), new TorchSharp.Modules.Parameter(x))).ToArray(); - } + protected override (string name, TorchSharp.Modules.Parameter parameter)[] _named_parameters() + { + using var pa = new PinnedArray(); + using var sa = new PinnedArray(); + THSJIT_Module_named_parameters(handle, pa.CreateArray, sa.CreateArray); + CheckForErrors(); + var ptrArray = pa.Array; + var strArray = sa.Array; - [DllImport("LibTorchSharp")] - private static extern void THSJIT_Module_named_buffers(HType module, AllocatePinnedArray allocator1, AllocatePinnedArray allocator2); + return ptrArray.Select((x, i) => (Marshal.PtrToStringAnsi(strArray[i]), new TorchSharp.Modules.Parameter(x))).ToArray(); + } - protected override (string name, Tensor buffer)[] _named_buffers() - { - using var pa = new PinnedArray(); - using var sa = new PinnedArray(); - THSJIT_Module_named_buffers(handle, pa.CreateArray, sa.CreateArray); - CheckForErrors(); - var ptrArray = pa.Array; - var strArray = sa.Array; - - return ptrArray.Select((x, i) => (Marshal.PtrToStringAnsi(strArray[i]), new Tensor(x))).ToArray(); - } + [DllImport("LibTorchSharp")] + private static extern void THSJIT_Module_named_buffers(HType module, AllocatePinnedArray allocator1, AllocatePinnedArray allocator2); - [DllImport("LibTorchSharp")] - private static extern void THSJIT_Module_named_modules(HType module, AllocatePinnedArray allocator1, AllocatePinnedArray allocator2); + protected override (string name, Tensor buffer)[] _named_buffers() + { + using var pa = new PinnedArray(); + using var sa = new PinnedArray(); + THSJIT_Module_named_buffers(handle, pa.CreateArray, sa.CreateArray); + CheckForErrors(); + var ptrArray = pa.Array; + var strArray = sa.Array; - public override IEnumerable<(string name, nn.Module module)> named_modules() - { - using var pa = new PinnedArray(); - using var sa = new PinnedArray(); - THSJIT_Module_named_modules(handle, pa.CreateArray, sa.CreateArray); - CheckForErrors(); - var ptrArray = pa.Array; - var strArray = sa.Array; - - return ptrArray.Select((x, i) => (Marshal.PtrToStringAnsi(strArray[i]), new ScriptModule(x) as nn.Module)); - } + return ptrArray.Select((x, i) => (Marshal.PtrToStringAnsi(strArray[i]), new Tensor(x))).ToArray(); + } - [DllImport("LibTorchSharp")] - private static extern void THSJIT_Module_named_children(HType module, AllocatePinnedArray allocator1, AllocatePinnedArray allocator2); + [DllImport("LibTorchSharp")] + private static extern void THSJIT_Module_named_modules(HType module, AllocatePinnedArray allocator1, AllocatePinnedArray allocator2); - public override IEnumerable<(string name, nn.Module module)> named_children() - { - using var pa = new PinnedArray(); - using var sa = new PinnedArray(); - THSJIT_Module_named_children(handle, pa.CreateArray, sa.CreateArray); - CheckForErrors(); - var ptrArray = pa.Array; - var strArray = sa.Array; - - return ptrArray.Select((x, i) => (Marshal.PtrToStringAnsi(strArray[i]), new ScriptModule(x) as nn.Module)); - } + public override IEnumerable<(string name, nn.Module module)> named_modules() + { + using var pa = new PinnedArray(); + using var sa = new PinnedArray(); + THSJIT_Module_named_modules(handle, pa.CreateArray, sa.CreateArray); + CheckForErrors(); + var ptrArray = pa.Array; + var strArray = sa.Array; - [DllImport("LibTorchSharp")] - private static extern long THSJIT_getNumModules(HType module); + return ptrArray.Select((x, i) => (Marshal.PtrToStringAnsi(strArray[i]), new ScriptModule(x) as nn.Module)); + } - [DllImport("LibTorchSharp")] - private static extern int THSJIT_Module_num_inputs(HType module); + [DllImport("LibTorchSharp")] + private static extern void THSJIT_Module_named_children(HType module, AllocatePinnedArray allocator1, AllocatePinnedArray allocator2); - public int GetNumberOfInputs() - { - return THSJIT_Module_num_inputs(handle); - } + public override IEnumerable<(string name, nn.Module module)> named_children() + { + using var pa = new PinnedArray(); + using var sa = new PinnedArray(); + THSJIT_Module_named_children(handle, pa.CreateArray, sa.CreateArray); + CheckForErrors(); + var ptrArray = pa.Array; + var strArray = sa.Array; - [DllImport("LibTorchSharp")] - private static extern int THSJIT_Module_num_outputs(HType module); + return ptrArray.Select((x, i) => (Marshal.PtrToStringAnsi(strArray[i]), new ScriptModule(x) as nn.Module)); + } - public int GetNumberOfOutputs() - { - return THSJIT_Module_num_outputs(handle); - } + [DllImport("LibTorchSharp")] + private static extern long THSJIT_getNumModules(HType module); - [DllImport("LibTorchSharp")] - private static extern void THSJIT_Module_train(HType module); + [DllImport("LibTorchSharp")] + private static extern int THSJIT_Module_num_inputs(HType module); - public override void train() - { - THSJIT_Module_train(handle); - CheckForErrors(); - } + public int GetNumberOfInputs() + { + return THSJIT_Module_num_inputs(handle); + } - [DllImport("LibTorchSharp")] - private static extern void THSJIT_Module_eval(HType module); + [DllImport("LibTorchSharp")] + private static extern int THSJIT_Module_num_outputs(HType module); - public override void eval() - { - THSJIT_Module_eval(handle); - CheckForErrors(); - } + public int GetNumberOfOutputs() + { + return THSJIT_Module_num_outputs(handle); + } - [DllImport("LibTorchSharp")] - private static extern bool THSJIT_Module_is_training(HType module); + [DllImport("LibTorchSharp")] + private static extern void THSJIT_Module_train(HType module); - public override bool training { - get { - var res = THSJIT_Module_is_training(handle); + public override void train() + { + THSJIT_Module_train(handle); CheckForErrors(); - return res; } - } - [DllImport("LibTorchSharp")] - static extern void THSJIT_Module_to_device(HType module, long deviceType, long deviceIndex); + [DllImport("LibTorchSharp")] + private static extern void THSJIT_Module_eval(HType module); - [DllImport("LibTorchSharp")] - static extern void THSJIT_Module_to_dtype(HType module, sbyte dtype); - - /// - /// Moves the parameters and buffers. - /// - /// The device type, e.g. 'CPU' or 'CUDA'. - /// The optional device index. - /// - public override nn.Module to(DeviceType deviceType, int deviceIndex = -1) - { - if (deviceType != DeviceType.CUDA) deviceIndex = -1; + public override void eval() + { + THSJIT_Module_eval(handle); + CheckForErrors(); + } - if (deviceType == DeviceType.CUDA && !torch.cuda.is_available()) throw new InvalidOperationException("CUDA is not available."); + [DllImport("LibTorchSharp")] + private static extern bool THSJIT_Module_is_training(HType module); - if (deviceType != _deviceType || deviceIndex != _deviceIndex) { + public override bool training { + get { + var res = THSJIT_Module_is_training(handle); + CheckForErrors(); + return res; + } + } - InitializeDeviceType(deviceType); - THSJIT_Module_to_device(handle, (int)deviceType, deviceIndex); - CheckForErrors(); + [DllImport("LibTorchSharp")] + static extern void THSJIT_Module_to_device(HType module, long deviceType, long deviceIndex); + + [DllImport("LibTorchSharp")] + static extern void THSJIT_Module_to_dtype(HType module, sbyte dtype); + + /// + /// Moves the parameters and buffers. + /// + /// The device type, e.g. 'CPU' or 'CUDA'. + /// The optional device index. + /// + public override nn.Module to(DeviceType deviceType, int deviceIndex = -1) + { + if (deviceType != DeviceType.CUDA) deviceIndex = -1; + + if (deviceType == DeviceType.CUDA && !torch.cuda.is_available()) throw new InvalidOperationException("CUDA is not available."); + + if (deviceType != _deviceType || deviceIndex != _deviceIndex) { + + InitializeDeviceType(deviceType); + THSJIT_Module_to_device(handle, (int)deviceType, deviceIndex); + CheckForErrors(); + + foreach (var (_, sm) in named_children()) sm.to(deviceType, deviceIndex); + + foreach (var field in GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance)) { + + var fieldName = field.Name; + var value = field.GetValue(this); + + switch (value) { + // This test must come before the Tensor test + case Modules.Parameter param when deviceType == param.device_type && deviceIndex == param.device_index: + continue; + + case Modules.Parameter param: { + var t = param.to(deviceType, deviceIndex); + t.retain_grad(); + var p = new Modules.Parameter(t, param.requires_grad); + field.SetValue(this, p); + ConditionallyRegisterParameter(fieldName, p); + break; + } + + case Tensor tensor when (deviceType != tensor.device_type || deviceIndex != tensor.device_index): { + var t = tensor.to(deviceType, deviceIndex); + field.SetValue(this, t); + ConditionallyRegisterBuffer(fieldName, t); + break; + } + } + } + + _deviceType = deviceType; + _deviceIndex = deviceIndex; + } + + Debug.Assert(_deviceType == DeviceType.CUDA || _deviceIndex == -1); - foreach (var (_, sm) in named_children()) sm.to(deviceType, deviceIndex); + return this; + } + private DeviceType _deviceType = DeviceType.CPU; + private int _deviceIndex = -1; + + /// + /// Convert the parameters and buffers. + /// + /// + public override nn.Module to(ScalarType dtype) + { + THSJIT_Module_to_dtype(handle, (sbyte)dtype); + CheckForErrors(); + + foreach (var (_, sm) in named_children()) sm.to(dtype); foreach (var field in GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance)) { var fieldName = field.Name; @@ -187,11 +239,11 @@ public override nn.Module to(DeviceType deviceType, int deviceIndex = -1) switch (value) { // This test must come before the Tensor test - case Modules.Parameter param when deviceType == param.device_type && deviceIndex == param.device_index: + case Modules.Parameter param when dtype == param.dtype: continue; case Modules.Parameter param: { - var t = param.to(deviceType, deviceIndex); + var t = param.to(dtype); t.retain_grad(); var p = new Modules.Parameter(t, param.requires_grad); field.SetValue(this, p); @@ -199,8 +251,11 @@ public override nn.Module to(DeviceType deviceType, int deviceIndex = -1) break; } - case Tensor tensor when (deviceType != tensor.device_type || deviceIndex != tensor.device_index): { - var t = tensor.to(deviceType, deviceIndex); + case Tensor tensor when dtype == tensor.dtype: + continue; + + case Tensor tensor: { + var t = tensor.to(dtype); field.SetValue(this, t); ConditionallyRegisterBuffer(fieldName, t); break; @@ -208,123 +263,71 @@ public override nn.Module to(DeviceType deviceType, int deviceIndex = -1) } } - _deviceType = deviceType; - _deviceIndex = deviceIndex; + return this; } - Debug.Assert(_deviceType == DeviceType.CUDA || _deviceIndex == -1); +#if true // These functions "work," but the native code doesn't seem to find any interesting information. - return this; - } + [DllImport("LibTorchSharp")] + private static extern IntPtr THSJIT_Module_getInputType(HType module, int index); - private DeviceType _deviceType = DeviceType.CPU; - private int _deviceIndex = -1; + public Type GetInputType(int index) + { + var type = new Type(THSJIT_Module_getInputType(handle, index), Type.TypeKind.AnyType); - /// - /// Convert the parameters and buffers. - /// - /// - public override nn.Module to(ScalarType dtype) - { - THSJIT_Module_to_dtype(handle, (sbyte)dtype); - CheckForErrors(); - - foreach (var (_, sm) in named_children()) sm.to(dtype); - foreach (var field in GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance)) { - - var fieldName = field.Name; - var value = field.GetValue(this); - - switch (value) { - // This test must come before the Tensor test - case Modules.Parameter param when dtype == param.dtype: - continue; - - case Modules.Parameter param: { - var t = param.to(dtype); - t.retain_grad(); - var p = new Modules.Parameter(t, param.requires_grad); - field.SetValue(this, p); - ConditionallyRegisterParameter(fieldName, p); - break; - } - - case Tensor tensor when dtype == tensor.dtype: - continue; - - case Tensor tensor: { - var t = tensor.to(dtype); - field.SetValue(this, t); - ConditionallyRegisterBuffer(fieldName, t); - break; - } - } + return GetType(type); } - return this; - } - -#if false // These functions "work," but the native code doesn't seem to find any interesting information. - - [DllImport("LibTorchSharp")] - private static extern IntPtr THSJIT_Module_getInputType(HType module, int index); - - public Type GetInputType(int index) - { - var type = new Type(THSJIT_Module_getInputType(handle, index), Type.TypeKind.AnyType); + [DllImport("LibTorchSharp")] + private static extern IntPtr THSJIT_getOutputType(HType module, int index); - return GetType(type); - } + public Type GetOutputType(int index) + { + var type = new Type(THSJIT_getOutputType(handle, index), Type.TypeKind.AnyType); - [DllImport("LibTorchSharp")] - private static extern IntPtr THSJIT_getOutputType(HType module, int index); + return GetType(type); + } - public Type GetOutputType(int index) - { - var type = new Type(THSJIT_getOutputType(handle, index), Type.TypeKind.AnyType); + private Type GetType(Type type) + { + switch (type.Kind) { + case Type.TypeKind.TensorType: + var dynamic = type.AsTensorType(); + type.Dispose(); + return dynamic; + //case Type.TypeKind.DimensionedTensorType: + // var tensor = type.AsTensorType(); + // type.Dispose(); + // return tensor; + default: + return type; + } + } +#endif - return GetType(type); - } + [DllImport("LibTorchSharp")] + private static extern IntPtr THSJIT_Module_forward(HType module, IntPtr tensors, int length); - private Type GetType(Type type) - { - switch (type.Kind) { - case Type.TypeKind.TensorType: - var dynamic = type.AsTensorType(); - type.Dispose(); - return dynamic; - //case Type.TypeKind.DimensionedTensorType: - // var tensor = type.AsTensorType(); - // type.Dispose(); - // return tensor; - default: - return type; + public unsafe override Tensor forward(Tensor tensor) + { + using (var parray = new PinnedArray()) { + IntPtr tensorRefs = parray.CreateArray(new[] { tensor.Handle }); + return new Tensor(THSJIT_Module_forward(handle, tensorRefs, parray.Array.Length)); + } } } -#endif [DllImport("LibTorchSharp")] - private static extern IntPtr THSJIT_Module_forward(HType module, IntPtr tensors, int length); + private static extern IntPtr THSJIT_load(string filename); - public unsafe override Tensor forward(Tensor tensor) + public static ScriptModule load(string filename) { - using (var parray = new PinnedArray()) { - IntPtr tensorRefs = parray.CreateArray(new [] { tensor.Handle }); - return new Tensor(THSJIT_Module_forward(handle, tensorRefs, parray.Array.Length)); - } + if (!System.IO.File.Exists(filename)) + throw new System.IO.FileNotFoundException(filename); + return new ScriptModule(THSJIT_load(filename)); } - } - [DllImport("LibTorchSharp")] - private static extern IntPtr THSJIT_load(string filename); - public static ScriptModule load(string filename) - { - if (!System.IO.File.Exists(filename)) - throw new System.IO.FileNotFoundException(filename); - return new ScriptModule(THSJIT_load(filename)); } - - } } diff --git a/src/TorchSharp/JIT/Type/DynamicType .cs b/src/TorchSharp/JIT/Type/DynamicType .cs index c345b2337..e65a649f3 100644 --- a/src/TorchSharp/JIT/Type/DynamicType .cs +++ b/src/TorchSharp/JIT/Type/DynamicType .cs @@ -3,14 +3,18 @@ namespace TorchSharp { - public static partial class jit + public static partial class torch { - public sealed class DynamicType : Type + + public static partial class jit { - internal DynamicType(IntPtr handle) : base(handle, Type.TypeKind.AnyType) + public sealed class DynamicType : Type { - this.handle = new HType(handle, true, Type.TypeKind.AnyType); + internal DynamicType(IntPtr handle) : base(handle, Type.TypeKind.AnyType) + { + this.handle = new HType(handle, true, Type.TypeKind.AnyType); + } } } } -} +} \ No newline at end of file diff --git a/src/TorchSharp/JIT/Type/TensorType.cs b/src/TorchSharp/JIT/Type/TensorType.cs index 152dc6e7f..296a680a7 100644 --- a/src/TorchSharp/JIT/Type/TensorType.cs +++ b/src/TorchSharp/JIT/Type/TensorType.cs @@ -4,64 +4,67 @@ namespace TorchSharp { - public static partial class jit + public static partial class torch { - public sealed class TensorType : Type + public static partial class jit { - internal TensorType(IntPtr handle) : base(handle, TypeKind.TensorType) + public sealed class TensorType : Type { - this.handle = new HType(handle, true, TypeKind.TensorType); - } + internal TensorType(IntPtr handle) : base(handle, TypeKind.TensorType) + { + this.handle = new HType(handle, true, TypeKind.TensorType); + } - internal TensorType(Type type) : base() - { - handle = type.handle; - type.handle = new HType(IntPtr.Zero, true, TypeKind.TensorType); - type.Dispose(); - } + internal TensorType(Type type) : base() + { + handle = type.handle; + type.handle = new HType(IntPtr.Zero, true, TypeKind.TensorType); + type.Dispose(); + } - [DllImport("LibTorchSharp")] - private static extern sbyte THSJIT_TensorType_dtype(HType handle); + [DllImport("LibTorchSharp")] + private static extern sbyte THSJIT_TensorType_dtype(HType handle); - public torch.ScalarType GetScalarType() - { - return (torch.ScalarType)THSJIT_TensorType_dtype(handle); - } + public torch.ScalarType GetScalarType() + { + return (torch.ScalarType)THSJIT_TensorType_dtype(handle); + } - [DllImport("LibTorchSharp")] - static extern long THSJIT_TensorType_sizes(HType handle, AllocatePinnedArray allocator); + [DllImport("LibTorchSharp")] + static extern long THSJIT_TensorType_sizes(HType handle, AllocatePinnedArray allocator); - /// - /// Retrieves the sizes of all dimensions of the tensor. - /// - public long[] size() - { - long[] ptrArray; + /// + /// Retrieves the sizes of all dimensions of the tensor. + /// + public long[] size() + { + long[] ptrArray; - using (var pa = new PinnedArray()) { - THSJIT_TensorType_sizes(handle, pa.CreateArray); - torch.CheckForErrors(); - ptrArray = pa.Array; - } + using (var pa = new PinnedArray()) { + THSJIT_TensorType_sizes(handle, pa.CreateArray); + torch.CheckForErrors(); + ptrArray = pa.Array; + } - return ptrArray; - } + return ptrArray; + } - [DllImport("LibTorchSharp")] - private static extern int THSJIT_getDimensionedTensorTypeDimensions(HType handle); + [DllImport("LibTorchSharp")] + private static extern int THSJIT_getDimensionedTensorTypeDimensions(HType handle); - public int GetDimensions() - { - return THSJIT_getDimensionedTensorTypeDimensions(handle); - } + public int GetDimensions() + { + return THSJIT_getDimensionedTensorTypeDimensions(handle); + } - [DllImport("LibTorchSharp")] - private static extern string THSJIT_getDimensionedTensorDevice(HType handle); + [DllImport("LibTorchSharp")] + private static extern string THSJIT_getDimensionedTensorDevice(HType handle); - public string GetDevice() - { - return THSJIT_getDimensionedTensorDevice(handle); + public string GetDevice() + { + return THSJIT_getDimensionedTensorDevice(handle); + } } } } diff --git a/src/TorchSharp/JIT/Type/Type.cs b/src/TorchSharp/JIT/Type/Type.cs index 46bd923f9..612a09478 100644 --- a/src/TorchSharp/JIT/Type/Type.cs +++ b/src/TorchSharp/JIT/Type/Type.cs @@ -5,118 +5,121 @@ namespace TorchSharp { - public static partial class jit + public static partial class torch { - - public class Type : IDisposable + public static partial class jit { - /// - /// Class wrapping PyTorch's type object reference. - /// - internal sealed class HType : SafeHandle + + public class Type : IDisposable { - public HType(IntPtr preexistingHandle, bool ownsHandle, TypeKind kind) : base(IntPtr.Zero, ownsHandle) + /// + /// Class wrapping PyTorch's type object reference. + /// + internal sealed class HType : SafeHandle { - SetHandle(preexistingHandle); - this.kind = kind; + public HType(IntPtr preexistingHandle, bool ownsHandle, TypeKind kind) : base(IntPtr.Zero, ownsHandle) + { + SetHandle(preexistingHandle); + this.kind = kind; + } + + public override bool IsInvalid => handle == IntPtr.Zero; + + // This is just for marshalling + internal HType() : base(IntPtr.Zero, true) + { + } + + [DllImport("LibTorchSharp")] + private static extern void THSJIT_Type_dispose(HType handle); + + [DllImport("LibTorchSharp")] + private static extern void THSJIT_TensorType_dispose(HType handle); + + protected override bool ReleaseHandle() + { + switch (kind) { + case TypeKind.TensorType: + THSJIT_TensorType_dispose(this); + break; + default: + THSJIT_Type_dispose(this); + break; + } + return true; + } + + protected override void Dispose(bool disposing) + { + if (disposing) { + ReleaseHandle(); + } + } + + private TypeKind kind; } - public override bool IsInvalid => handle == IntPtr.Zero; + internal HType handle; - // This is just for marshalling - internal HType() : base(IntPtr.Zero, true) + internal Type(IntPtr handle, TypeKind kind) { + this.handle = new HType(handle, true, kind); } - [DllImport("LibTorchSharp")] - private static extern void THSJIT_Type_dispose(HType handle); + protected Type() + { + } - [DllImport("LibTorchSharp")] - private static extern void THSJIT_TensorType_dispose(HType handle); + ~Type() + { + Dispose(false); + } - protected override bool ReleaseHandle() + /// + /// Releases the storage. + /// + public void Dispose() { - switch (kind) { - case TypeKind.TensorType: - THSJIT_TensorType_dispose(this); - break; - default: - THSJIT_Type_dispose(this); - break; - } - return true; + Dispose(true); + GC.SuppressFinalize(this); } - protected override void Dispose(bool disposing) + /// + /// Implements the .NET Dispose pattern. + /// + protected void Dispose(bool disposing) { if (disposing) { - ReleaseHandle(); + handle.Dispose(); + handle.SetHandleAsInvalid(); } } - private TypeKind kind; - } - - internal HType handle; - - internal Type(IntPtr handle, TypeKind kind) - { - this.handle = new HType(handle, true, kind); - } - - protected Type() - { - } - - ~Type() - { - Dispose(false); - } - - /// - /// Releases the storage. - /// - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } + [DllImport("LibTorchSharp")] + private static extern sbyte THSJIT_Type_kind(HType handle); - /// - /// Implements the .NET Dispose pattern. - /// - protected void Dispose(bool disposing) - { - if (disposing) { - handle.Dispose(); - handle.SetHandleAsInvalid(); + internal TypeKind Kind { + get { return (TypeKind)THSJIT_Type_kind(handle); } } - } - - [DllImport("LibTorchSharp")] - private static extern sbyte THSJIT_Type_kind(HType handle); - - internal TypeKind Kind { - get { return (TypeKind)THSJIT_Type_kind(handle); } - } - [DllImport("LibTorchSharp")] - private static extern IntPtr THSJIT_Type_cast(HType module); + [DllImport("LibTorchSharp")] + private static extern IntPtr THSJIT_Type_cast(HType module); - internal TensorType AsTensorType() - { - return new TensorType(THSJIT_Type_cast(handle)); - } + internal TensorType AsTensorType() + { + return new TensorType(THSJIT_Type_cast(handle)); + } - internal DynamicType AsDynamicType() - { - return new DynamicType(THSJIT_Type_cast(handle)); - } + internal DynamicType AsDynamicType() + { + return new DynamicType(THSJIT_Type_cast(handle)); + } - internal enum TypeKind : sbyte - { - AnyType = 0, - TensorType = 3, + internal enum TypeKind : sbyte + { + AnyType = 0, + TensorType = 3, + } } } } diff --git a/test/TorchSharpTest/TestLoadSave.cs b/test/TorchSharpTest/TestLoadSave.cs index d9465293c..b97069be9 100644 --- a/test/TorchSharpTest/TestLoadSave.cs +++ b/test/TorchSharpTest/TestLoadSave.cs @@ -80,7 +80,7 @@ public void TestSaveLoadLinear3() public void TestLoadJIT_1() { // One linear layer followed by ReLU. - var m = TorchSharp.jit.load(@"linrelu.script.dat"); + var m = torch.jit.load(@"linrelu.script.dat"); var t = m.forward(torch.ones(10)); Assert.Equal(new long[] { 6 }, t.shape); @@ -94,7 +94,7 @@ public void TestLoadJIT_1() public void TestLoadJIT_2() { // One linear layer followed by ReLU. - var m = TorchSharp.jit.load(@"scripted.script.dat"); + var m = torch.jit.load(@"scripted.script.dat"); var t = m.forward(torch.ones(6)); Assert.Equal(new long[] { 6 }, t.shape); @@ -108,7 +108,7 @@ public void TestLoadJIT_2() public void TestLoadJIT_3() { // Two linear layers, nested Sequential, ReLU in between. - var m = TorchSharp.jit.load(@"l1000_100_10.script.dat"); + var m = torch.jit.load(@"l1000_100_10.script.dat"); var sms = m.named_modules().ToArray(); Assert.Equal(5, sms.Length); @@ -130,7 +130,7 @@ public void TestSaveLoadJITCUDA() { if (torch.cuda.is_available()) { - var m = TorchSharp.jit.load(@"linrelu.script.dat"); + var m = torch.jit.load(@"linrelu.script.dat"); m.to(DeviceType.CUDA); var params0 = m.parameters().ToArray(); diff --git a/test/TorchSharpTest/TestTraining.cs b/test/TorchSharpTest/TestTraining.cs index 251885618..fbdee3492 100644 --- a/test/TorchSharpTest/TestTraining.cs +++ b/test/TorchSharpTest/TestTraining.cs @@ -1671,7 +1671,7 @@ public void TestTrainingLoadedTorchScript() var gen = new Generator(4711); CreateDataAndLabels(gen, out var x, out var y); - var seq = TorchSharp.jit.load(@"l1000_100_10.script.dat"); + var seq = torch.jit.load(@"l1000_100_10.script.dat"); double learning_rate = 0.00004f; var optimizer = torch.optim.SGD(seq.parameters(), learning_rate); From f847569c0225c1df58993f767201fb0a9f13f5a7 Mon Sep 17 00:00:00 2001 From: Niklas Gustafsson Date: Fri, 1 Jul 2022 18:11:10 -0700 Subject: [PATCH 05/12] Update RELEASE NOTES --- RELEASENOTES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 29eee08f3..a092d4cd1 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -11,7 +11,7 @@ __API Changes__: Add torch.utils.rnn
Add torchvision.io
Add Tensor.trace() and torch.trace() (unrelated to torch.jit.trace)
-Add ability to load modules that were traced using torch.jit.trace() in Pytorch
+Add ability to load TorchScript modules created using Pytorch
## NuGet Version 0.96.8 From b3d217215286e4c664a3edc22e8f33c53c2c2c69 Mon Sep 17 00:00:00 2001 From: Niklas Gustafsson Date: Fri, 1 Jul 2022 18:12:41 -0700 Subject: [PATCH 06/12] Disabled input and output type retrieval for ScriptModule --- src/TorchSharp/JIT/ScriptModule.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/TorchSharp/JIT/ScriptModule.cs b/src/TorchSharp/JIT/ScriptModule.cs index d0a693ed6..afc39c229 100644 --- a/src/TorchSharp/JIT/ScriptModule.cs +++ b/src/TorchSharp/JIT/ScriptModule.cs @@ -266,7 +266,7 @@ public override nn.Module to(ScalarType dtype) return this; } -#if true // These functions "work," but the native code doesn't seem to find any interesting information. +#if false // These functions "work," but the native code doesn't seem to find any interesting information. [DllImport("LibTorchSharp")] private static extern IntPtr THSJIT_Module_getInputType(HType module, int index); From 5a3cc16ab8ceaef5dc28121aa83406d8af23a0f0 Mon Sep 17 00:00:00 2001 From: Niklas Gustafsson Date: Fri, 1 Jul 2022 18:56:14 -0700 Subject: [PATCH 07/12] Fixed unit test and leftovers from debugging. --- src/TorchSharp/JIT/ScriptModule.cs | 24 ------------------------ test/TorchSharpTest/TestLoadSave.cs | 6 +++--- 2 files changed, 3 insertions(+), 27 deletions(-) diff --git a/src/TorchSharp/JIT/ScriptModule.cs b/src/TorchSharp/JIT/ScriptModule.cs index afc39c229..2acbbd3e9 100644 --- a/src/TorchSharp/JIT/ScriptModule.cs +++ b/src/TorchSharp/JIT/ScriptModule.cs @@ -24,30 +24,6 @@ internal ScriptModule(IntPtr handle) : base(new HType(handle, true), null) Dispose(false); } - /// - /// Implements the .NET Dispose pattern. - /// - protected override void Dispose(bool disposing) - { - if (disposing && !handle.IsInvalid) { - - //foreach (var (_, p) in named_buffers(false)) { - // p.Dispose(); - //} - //foreach (var (_, b) in named_parameters(false)) { - // b.Dispose(); - //} - - //foreach (var (_, m) in named_modules()) { - // m.Dispose(); - //} - - handle.Dispose(); - handle.SetHandleAsInvalid(); - boxedModule?.Dispose(); - } - } - [DllImport("LibTorchSharp")] private static extern void THSJIT_Module_named_parameters(HType module, AllocatePinnedArray allocator1, AllocatePinnedArray allocator2); diff --git a/test/TorchSharpTest/TestLoadSave.cs b/test/TorchSharpTest/TestLoadSave.cs index b97069be9..b6268b34c 100644 --- a/test/TorchSharpTest/TestLoadSave.cs +++ b/test/TorchSharpTest/TestLoadSave.cs @@ -85,7 +85,7 @@ public void TestLoadJIT_1() Assert.Equal(new long[] { 6 }, t.shape); Assert.Equal(torch.float32, t.dtype); - Assert.Equal(new float[] { 0.313458264f, 0, 0.9996568f, 0, 0, 0 }, t.data().ToArray()); + Assert.True(torch.tensor(new float[] { 0.313458264f, 0, 0.9996568f, 0, 0, 0 }).allclose(t)); m.Dispose(); } @@ -99,7 +99,7 @@ public void TestLoadJIT_2() Assert.Equal(new long[] { 6 }, t.shape); Assert.Equal(torch.float32, t.dtype); - Assert.Equal(new float[] { 1.554085f, 1.01024628f, -1.35086036f, -1.84021854f, 0.0127189457f, 0.5994258f }, t.data().ToArray()); + Assert.True(torch.tensor(new float[] { 1.554085f, 1.01024628f, -1.35086036f, -1.84021854f, 0.0127189457f, 0.5994258f }).allclose(t)); m.Dispose(); } @@ -120,7 +120,7 @@ public void TestLoadJIT_3() Assert.Equal(new long[] { 10 }, t.shape); Assert.Equal(torch.float32, t.dtype); - Assert.Equal(new float[] { 0.564213157f, -0.04519982f, -0.005117342f, 0.395530462f, -0.3780813f, -0.004734449f, -0.3221216f, -0.289159119f, 0.268511474f, 0.180702567f }, t.data().ToArray()); + Assert.True(torch.tensor(new float[] { 0.564213157f, -0.04519982f, -0.005117342f, 0.395530462f, -0.3780813f, -0.004734449f, -0.3221216f, -0.289159119f, 0.268511474f, 0.180702567f }).allclose(t)); m.Dispose(); } From 00e3c02d3bdae74ec5938870f4821615888d613b Mon Sep 17 00:00:00 2001 From: Niklas Gustafsson Date: Sat, 2 Jul 2022 10:34:12 -0700 Subject: [PATCH 08/12] ScriptModule.named_modules() must rule out the "" module. --- src/Native/LibTorchSharp/THSJIT.cpp | 16 ++++++++++------ src/TorchSharp/JIT/ScriptModule.cs | 8 ++++++-- src/TorchSharp/JIT/Type/Type.cs | 7 ------- test/TorchSharpTest/TestLoadSave.cs | 9 ++++++++- test/TorchSharpTest/TorchSharpTest.csproj | 3 +++ 5 files changed, 27 insertions(+), 16 deletions(-) diff --git a/src/Native/LibTorchSharp/THSJIT.cpp b/src/Native/LibTorchSharp/THSJIT.cpp index 050dabfb0..6d426a4b0 100644 --- a/src/Native/LibTorchSharp/THSJIT.cpp +++ b/src/Native/LibTorchSharp/THSJIT.cpp @@ -3,9 +3,13 @@ JITModule THSJIT_load(const char* filename) { - auto res = torch::jit::load(filename); - auto copy = new torch::jit::Module(res); - return new std::shared_ptr(copy); + CATCH( + auto res = torch::jit::load(filename); + auto copy = new torch::jit::Module(res); + return new std::shared_ptr(copy); + ); + + return nullptr; } int THSJIT_Module_is_training(JITModule module) @@ -148,7 +152,7 @@ int THSJIT_Method_num_inputs(const JITMethod method) int THSJIT_Module_num_inputs(const JITModule module) { - return (int)(*module)->get_method("forward").num_inputs()-1; // Don't count the 'self' argument. + return (int)(*module)->get_method("forward").num_inputs() - 1; // Don't count the 'self' argument. } int THSJIT_Module_num_outputs(const JITModule module) @@ -225,8 +229,8 @@ void THSJIT_TensorType_sizes(const JITTensorType type, int64_t* (*allocator)(int if (res.has_value()) { const size_t sz = res.value().size(); auto& vec = res.value(); - int64_t * result = allocator(sz); - for (size_t i = 0; i < sz; i++) + int64_t* result = allocator(sz); + for (size_t i = 0; i < sz; i++) result[i] = vec[i]; } //); diff --git a/src/TorchSharp/JIT/ScriptModule.cs b/src/TorchSharp/JIT/ScriptModule.cs index 2acbbd3e9..0755b27b9 100644 --- a/src/TorchSharp/JIT/ScriptModule.cs +++ b/src/TorchSharp/JIT/ScriptModule.cs @@ -66,7 +66,7 @@ protected override (string name, Tensor buffer)[] _named_buffers() var ptrArray = pa.Array; var strArray = sa.Array; - return ptrArray.Select((x, i) => (Marshal.PtrToStringAnsi(strArray[i]), new ScriptModule(x) as nn.Module)); + return ptrArray.Select((x, i) => (Marshal.PtrToStringAnsi(strArray[i]), new ScriptModule(x) as nn.Module)).Where(m => !String.IsNullOrEmpty(m.Item1)); } [DllImport("LibTorchSharp")] @@ -300,7 +300,11 @@ public static ScriptModule load(string filename) { if (!System.IO.File.Exists(filename)) throw new System.IO.FileNotFoundException(filename); - return new ScriptModule(THSJIT_load(filename)); + + var result = THSJIT_load(filename); + if (result == IntPtr.Zero) + CheckForErrors(); + return new ScriptModule(result); } diff --git a/src/TorchSharp/JIT/Type/Type.cs b/src/TorchSharp/JIT/Type/Type.cs index 612a09478..33725a156 100644 --- a/src/TorchSharp/JIT/Type/Type.cs +++ b/src/TorchSharp/JIT/Type/Type.cs @@ -49,13 +49,6 @@ protected override bool ReleaseHandle() return true; } - protected override void Dispose(bool disposing) - { - if (disposing) { - ReleaseHandle(); - } - } - private TypeKind kind; } diff --git a/test/TorchSharpTest/TestLoadSave.cs b/test/TorchSharpTest/TestLoadSave.cs index b6268b34c..c2d693ea7 100644 --- a/test/TorchSharpTest/TestLoadSave.cs +++ b/test/TorchSharpTest/TestLoadSave.cs @@ -111,7 +111,7 @@ public void TestLoadJIT_3() var m = torch.jit.load(@"l1000_100_10.script.dat"); var sms = m.named_modules().ToArray(); - Assert.Equal(5, sms.Length); + Assert.Equal(4, sms.Length); var kids = m.named_children().ToArray(); Assert.Equal(2, kids.Length); @@ -125,6 +125,13 @@ public void TestLoadJIT_3() m.Dispose(); } + [Fact] + public void TestLoadJIT_4() + { + // Definitely not a TorchScript file. Let's see what the runtime does with it. + Assert.Throws(() => torch.jit.load(@"torch.dll")); + } + [Fact] public void TestSaveLoadJITCUDA() { diff --git a/test/TorchSharpTest/TorchSharpTest.csproj b/test/TorchSharpTest/TorchSharpTest.csproj index a23b8f447..73e7e9aba 100644 --- a/test/TorchSharpTest/TorchSharpTest.csproj +++ b/test/TorchSharpTest/TorchSharpTest.csproj @@ -32,6 +32,9 @@ PreserveNewest + + PreserveNewest + PreserveNewest From 9571402c6986a4b87506510bc65506a117a05cad Mon Sep 17 00:00:00 2001 From: Niklas Gustafsson Date: Sat, 2 Jul 2022 11:20:48 -0700 Subject: [PATCH 09/12] Replaced a boolean flag with a more general delegate. --- src/TorchSharp/JIT/ScriptModule.cs | 5 ++- src/TorchSharp/NN/Module.cs | 14 +++----- test/TorchSharpTest/TestLoadSave.cs | 51 ++++++++++++----------------- 3 files changed, 29 insertions(+), 41 deletions(-) diff --git a/src/TorchSharp/JIT/ScriptModule.cs b/src/TorchSharp/JIT/ScriptModule.cs index 0755b27b9..c8485b2c5 100644 --- a/src/TorchSharp/JIT/ScriptModule.cs +++ b/src/TorchSharp/JIT/ScriptModule.cs @@ -15,7 +15,7 @@ public static partial class jit { public class ScriptModule : torch.nn.Module { - internal ScriptModule(IntPtr handle) : base(new HType(handle, true), null) + internal ScriptModule(IntPtr handle) : base(new HType(handle, true, THSJIT_Module_dispose), null) { } @@ -24,6 +24,9 @@ internal ScriptModule(IntPtr handle) : base(new HType(handle, true), null) Dispose(false); } + [DllImport("LibTorchSharp")] + private static extern void THSJIT_Module_dispose(HType handle); + [DllImport("LibTorchSharp")] private static extern void THSJIT_Module_named_parameters(HType module, AllocatePinnedArray allocator1, AllocatePinnedArray allocator2); diff --git a/src/TorchSharp/NN/Module.cs b/src/TorchSharp/NN/Module.cs index 2e949250f..fde92471e 100644 --- a/src/TorchSharp/NN/Module.cs +++ b/src/TorchSharp/NN/Module.cs @@ -31,10 +31,10 @@ public class Module : IDisposable ///
internal sealed class HType : SafeHandle { - public HType(IntPtr preexistingHandle, bool ownsHandle, bool script = false) + public HType(IntPtr preexistingHandle, bool ownsHandle, Action dispose = null) : base(IntPtr.Zero, ownsHandle) { - isScriptModule = script; + _dispose = dispose??THSNN_Module_dispose; SetHandle(preexistingHandle); } @@ -47,17 +47,11 @@ internal HType() : base(IntPtr.Zero, true) [DllImport("LibTorchSharp")] private static extern void THSNN_Module_dispose(HType handle); - [DllImport("LibTorchSharp")] - private static extern void THSJIT_Module_dispose(HType handle); protected override bool ReleaseHandle() { if (!IsInvalid) { - if (isScriptModule) { - THSJIT_Module_dispose(this); - } else { - THSNN_Module_dispose(this); - } + _dispose(this); } SetHandle(IntPtr.Zero); return true; @@ -70,7 +64,7 @@ protected override void Dispose(bool disposing) } } - private bool isScriptModule; + private Action _dispose; } internal HType handle; diff --git a/test/TorchSharpTest/TestLoadSave.cs b/test/TorchSharpTest/TestLoadSave.cs index c2d693ea7..e2a0430c8 100644 --- a/test/TorchSharpTest/TestLoadSave.cs +++ b/test/TorchSharpTest/TestLoadSave.cs @@ -60,7 +60,7 @@ public void TestSaveLoadLinear2() public void TestSaveLoadLinear3() { if (File.Exists(".model.ts")) File.Delete(".model.ts"); - var linear = Linear(100, 10, true); + using var linear = Linear(100, 10, true); var params0 = linear.parameters(); linear.save(".model.ts"); @@ -75,40 +75,35 @@ public void TestSaveLoadLinear3() Assert.Equal(params0.Skip(1).First(), params2.Skip(1).First()); } - [Fact] public void TestLoadJIT_1() { // One linear layer followed by ReLU. - var m = torch.jit.load(@"linrelu.script.dat"); + using var m = torch.jit.load(@"linrelu.script.dat"); var t = m.forward(torch.ones(10)); Assert.Equal(new long[] { 6 }, t.shape); Assert.Equal(torch.float32, t.dtype); Assert.True(torch.tensor(new float[] { 0.313458264f, 0, 0.9996568f, 0, 0, 0 }).allclose(t)); - - m.Dispose(); } [Fact] public void TestLoadJIT_2() { // One linear layer followed by ReLU. - var m = torch.jit.load(@"scripted.script.dat"); + using var m = torch.jit.load(@"scripted.script.dat"); var t = m.forward(torch.ones(6)); Assert.Equal(new long[] { 6 }, t.shape); Assert.Equal(torch.float32, t.dtype); Assert.True(torch.tensor(new float[] { 1.554085f, 1.01024628f, -1.35086036f, -1.84021854f, 0.0127189457f, 0.5994258f }).allclose(t)); - - m.Dispose(); } [Fact] public void TestLoadJIT_3() { // Two linear layers, nested Sequential, ReLU in between. - var m = torch.jit.load(@"l1000_100_10.script.dat"); + using var m = torch.jit.load(@"l1000_100_10.script.dat"); var sms = m.named_modules().ToArray(); Assert.Equal(4, sms.Length); @@ -121,8 +116,6 @@ public void TestLoadJIT_3() Assert.Equal(new long[] { 10 }, t.shape); Assert.Equal(torch.float32, t.dtype); Assert.True(torch.tensor(new float[] { 0.564213157f, -0.04519982f, -0.005117342f, 0.395530462f, -0.3780813f, -0.004734449f, -0.3221216f, -0.289159119f, 0.268511474f, 0.180702567f }).allclose(t)); - - m.Dispose(); } [Fact] @@ -137,7 +130,7 @@ public void TestSaveLoadJITCUDA() { if (torch.cuda.is_available()) { - var m = torch.jit.load(@"linrelu.script.dat"); + using var m = torch.jit.load(@"linrelu.script.dat"); m.to(DeviceType.CUDA); var params0 = m.parameters().ToArray(); @@ -149,8 +142,6 @@ public void TestSaveLoadJITCUDA() Assert.Equal(new long[] { 6 }, t.shape); Assert.Equal(torch.float32, t.dtype); Assert.Equal(new float[] { 0.313458264f, 0, 0.9996568f, 0, 0, 0 }, t.data().ToArray()); - - m.Dispose(); } } @@ -158,10 +149,10 @@ public void TestSaveLoadJITCUDA() public void TestSaveLoadConv2D() { if (File.Exists(".model.ts")) File.Delete(".model.ts"); - var conv = Conv2d(100, 10, 5); + using var conv = Conv2d(100, 10, 5); var params0 = conv.parameters(); conv.save(".model.ts"); - var loaded = Conv2d(100, 10, 5); + using var loaded = Conv2d(100, 10, 5); loaded.load(".model.ts"); var params1 = loaded.parameters(); File.Delete(".model.ts"); @@ -172,12 +163,12 @@ public void TestSaveLoadConv2D() [Fact] public void TestSaveLoadConv2D_sd() { - var conv = Conv2d(100, 10, 5); + using var conv = Conv2d(100, 10, 5); var params0 = conv.parameters(); var sd = conv.state_dict(); - var loaded = Conv2d(100, 10, 5); + using var loaded = Conv2d(100, 10, 5); Assert.NotEqual(params0, loaded.parameters()); loaded.load_state_dict(sd); @@ -188,10 +179,10 @@ public void TestSaveLoadConv2D_sd() public void TestSaveLoadSequential() { if (File.Exists(".model.ts")) File.Delete(".model.ts"); - var conv = Sequential(Conv2d(100, 10, 5), Linear(100, 10, true)); + using var conv = Sequential(Conv2d(100, 10, 5), Linear(100, 10, true)); var params0 = conv.parameters(); conv.save(".model.ts"); - var loaded = Sequential(Conv2d(100, 10, 5), Linear(100, 10, true)); + using var loaded = Sequential(Conv2d(100, 10, 5), Linear(100, 10, true)); loaded.load(".model.ts"); var params1 = loaded.parameters(); File.Delete(".model.ts"); @@ -202,12 +193,12 @@ public void TestSaveLoadSequential() [Fact] public void TestSaveLoadSequential_sd() { - var conv = Sequential(Conv2d(100, 10, 5), Linear(100, 10, true)); + using var conv = Sequential(Conv2d(100, 10, 5), Linear(100, 10, true)); var params0 = conv.parameters(); var sd = conv.state_dict(); - var loaded = Sequential(Conv2d(100, 10, 5), Linear(100, 10, true)); + using var loaded = Sequential(Conv2d(100, 10, 5), Linear(100, 10, true)); Assert.NotEqual(params0, loaded.parameters()); loaded.load_state_dict(sd); @@ -217,13 +208,13 @@ public void TestSaveLoadSequential_sd() [Fact] public void TestSaveLoadSequential_error1() { - var conv = Sequential(Conv2d(100, 10, 5), Linear(100, 10, true)); + using var conv = Sequential(Conv2d(100, 10, 5), Linear(100, 10, true)); var params0 = conv.parameters(); var sd = conv.state_dict(); sd.Remove("0.bias"); - var loaded = Sequential(Conv2d(100, 10, 5), Linear(100, 10, true)); + using var loaded = Sequential(Conv2d(100, 10, 5), Linear(100, 10, true)); Assert.NotEqual(params0, loaded.parameters()); Assert.Throws(() => loaded.load_state_dict(sd)); @@ -232,7 +223,7 @@ public void TestSaveLoadSequential_error1() [Fact] public void TestSaveLoadSequential_error2() { - var conv = Sequential(Conv2d(100, 10, 5), Linear(100, 10, true)); + using var conv = Sequential(Conv2d(100, 10, 5), Linear(100, 10, true)); var params0 = conv.parameters(); var sd = conv.state_dict(); @@ -240,7 +231,7 @@ public void TestSaveLoadSequential_error2() sd.Add("2.bias", t); - var loaded = Sequential(Conv2d(100, 10, 5), Linear(100, 10, true)); + using var loaded = Sequential(Conv2d(100, 10, 5), Linear(100, 10, true)); Assert.NotEqual(params0, loaded.parameters()); Assert.Throws(() => loaded.load_state_dict(sd)); @@ -249,7 +240,7 @@ public void TestSaveLoadSequential_error2() [Fact] public void TestSaveLoadSequential_lax() { - var conv = Sequential(Conv2d(100, 10, 5), Linear(100, 10, true)); + using var conv = Sequential(Conv2d(100, 10, 5), Linear(100, 10, true)); var params0 = conv.parameters(); var sd = conv.state_dict(); @@ -258,7 +249,7 @@ public void TestSaveLoadSequential_lax() sd.Add("2.bias", t); - var loaded = Sequential(Conv2d(100, 10, 5), Linear(100, 10, true)); + using var loaded = Sequential(Conv2d(100, 10, 5), Linear(100, 10, true)); Assert.NotEqual(params0, loaded.parameters()); var (m,u) = loaded.load_state_dict(sd, false); @@ -273,14 +264,14 @@ public void TestSaveLoadCustomWithParameters() { if (File.Exists(".model.ts")) File.Delete(".model.ts"); - var original = new TestModule1(); + using var original = new TestModule1(); Assert.True(original.has_parameter("test")); var params0 = original.parameters(); Assert.True(params0.ToArray().ToArray()[0].requires_grad); original.save(".model.ts"); - var loaded = new TestModule1(); + using var loaded = new TestModule1(); Assert.True(loaded.has_parameter("test")); var params1 = loaded.parameters(); From 59bb7c8b48b3eb3d50be79a21de31fefcb14425b Mon Sep 17 00:00:00 2001 From: Niklas Gustafsson Date: Sat, 2 Jul 2022 12:42:23 -0700 Subject: [PATCH 10/12] Adding torch.jit.save and unit test, updated the release notes. Adding article on torchscript. --- RELEASENOTES.md | 2 +- docfx/articles/torchscript.md | 25 +++++++++++++++++++++++++ docfx/index.md | 10 +++------- src/Native/LibTorchSharp/THSJIT.cpp | 9 ++++++++- src/Native/LibTorchSharp/THSJIT.h | 2 ++ src/TorchSharp/JIT/ScriptModule.cs | 24 +++++++++++++++++++++++- test/TorchSharpTest/TestLoadSave.cs | 24 +++++++++++++++++++++++- 7 files changed, 85 insertions(+), 11 deletions(-) create mode 100644 docfx/articles/torchscript.md diff --git a/RELEASENOTES.md b/RELEASENOTES.md index a092d4cd1..0e4a9a4b5 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -11,7 +11,7 @@ __API Changes__: Add torch.utils.rnn
Add torchvision.io
Add Tensor.trace() and torch.trace() (unrelated to torch.jit.trace)
-Add ability to load TorchScript modules created using Pytorch
+Add ability to load and save TorchScript modules created using Pytorch
## NuGet Version 0.96.8 diff --git a/docfx/articles/torchscript.md b/docfx/articles/torchscript.md new file mode 100644 index 000000000..4a53753ba --- /dev/null +++ b/docfx/articles/torchscript.md @@ -0,0 +1,25 @@ +# Loading TorchScript Modules + +Starting with release 0.96.9, you can load TorchScript modules (but not yet TorchScript functions) that have been either traced or scripted in Pytorch. It is, however, not yet possible to create a TorchScript module from scratch using TorchSharp. Refer to the [Pytorch JIT](https://pytorch.org/docs/stable/jit.html) docs for information on how to create such a file. + +TorchScript is very powerful, because it allows you to save the logic and the weights of a model together, and it furthermore allows the module to be loaded into another program, __without any dependencies on the Python runtime.__ Thus, you can load a model that has been serialized using TorchScript and have it behave as any TorchScript module -- you can use it for training, or you can use it for inference. + +Once you have a TorchScript file, you can load it into TorchSharp using: + +```C# +var m = torch.jit.load("file-name"); +``` + +It returns a ScriptModule, which behaves just like any other TorchSharp module. You can use it for training of inference by calling either `train()` or `eval()`. ScriptModules always start out on the CPU, so you have to call `cuda()` in order to move it to a GPU. + +Note that if you used __tracing__ to create the TorchScript file in Pytorch, submodules that behave differently in training and eval modes will behave according to the mode they were traced in. + +If you use the script module to train, you may want / need to save it afterwards. + +That is easily done using `save()`: + +```C# +torch.jit.save(m, "file-name"); +``` + +While it is possible to save a modified ScriptModule from TorchSharp, it is not (yet) possible to create one _from scratch_ using either tracing or scripting. diff --git a/docfx/index.md b/docfx/index.md index 30701ffd2..e7dda7beb 100644 --- a/docfx/index.md +++ b/docfx/index.md @@ -1,10 +1,9 @@ -TorchSharp are .NET bindings to the Torch library published -here: +TorchSharp are .NET bindings to the Torch library published here: https://pytorch.org/get-started/locally/ -This surfaces the C API as a strongly-typed C# API. +This surfaces the C++ library as a strongly-typed .NET API. ## Getting Started @@ -18,7 +17,4 @@ Then, start by reading up on [creating your own modules](articles/modules.md). An intruction on how to [share model](articles/saveload.md) weights between applications, whether in Python or .NET. - -## API documentation - -The [API Documentation](api/TorchSharp.html) \ No newline at end of file +Loading existing TorchScript files is now supported and described in [Loading TorchScript](articles/torchscript.md). diff --git a/src/Native/LibTorchSharp/THSJIT.cpp b/src/Native/LibTorchSharp/THSJIT.cpp index 6d426a4b0..3485ff8a3 100644 --- a/src/Native/LibTorchSharp/THSJIT.cpp +++ b/src/Native/LibTorchSharp/THSJIT.cpp @@ -5,13 +5,20 @@ JITModule THSJIT_load(const char* filename) { CATCH( auto res = torch::jit::load(filename); - auto copy = new torch::jit::Module(res); + auto copy = new torch::jit::Module(res); return new std::shared_ptr(copy); ); return nullptr; } +void THSJIT_save(JITModule module, const char* filename) +{ + CATCH( + (*module)->save(filename); + ); +} + int THSJIT_Module_is_training(JITModule module) { return (*module)->is_training(); diff --git a/src/Native/LibTorchSharp/THSJIT.h b/src/Native/LibTorchSharp/THSJIT.h index e4232b616..a9d2b4a47 100644 --- a/src/Native/LibTorchSharp/THSJIT.h +++ b/src/Native/LibTorchSharp/THSJIT.h @@ -18,6 +18,8 @@ enum TypeKind : int8_t { EXPORT_API(JITModule) THSJIT_load(const char* filename); +EXPORT_API(void) THSJIT_save(JITModule module, const char* filename); + EXPORT_API(void) THSJIT_Module_dispose(const JITModule module); EXPORT_API(int) THSJIT_Module_num_inputs(const JITModule method); diff --git a/src/TorchSharp/JIT/ScriptModule.cs b/src/TorchSharp/JIT/ScriptModule.cs index c8485b2c5..22dd88088 100644 --- a/src/TorchSharp/JIT/ScriptModule.cs +++ b/src/TorchSharp/JIT/ScriptModule.cs @@ -291,7 +291,21 @@ public unsafe override Tensor forward(Tensor tensor) { using (var parray = new PinnedArray()) { IntPtr tensorRefs = parray.CreateArray(new[] { tensor.Handle }); - return new Tensor(THSJIT_Module_forward(handle, tensorRefs, parray.Array.Length)); + var res = THSJIT_Module_forward(handle, tensorRefs, parray.Array.Length); + if (res == IntPtr.Zero) + CheckForErrors(); + return new Tensor(res); + } + } + + public unsafe override Tensor forward(Tensor tensor1, Tensor tensor2) + { + using (var parray = new PinnedArray()) { + IntPtr tensorRefs = parray.CreateArray(new[] { tensor1.Handle, tensor2.Handle }); + var res = THSJIT_Module_forward(handle, tensorRefs, parray.Array.Length); + if (res == IntPtr.Zero) + CheckForErrors(); + return new Tensor(res); } } } @@ -310,6 +324,14 @@ public static ScriptModule load(string filename) return new ScriptModule(result); } + [DllImport("LibTorchSharp")] + private static extern void THSJIT_save(nn.Module.HType handle, string filename); + + public static void save(ScriptModule module, string filename) + { + THSJIT_save(module.handle, filename); + CheckForErrors(); + } } } diff --git a/test/TorchSharpTest/TestLoadSave.cs b/test/TorchSharpTest/TestLoadSave.cs index e2a0430c8..bce9c8153 100644 --- a/test/TorchSharpTest/TestLoadSave.cs +++ b/test/TorchSharpTest/TestLoadSave.cs @@ -87,6 +87,26 @@ public void TestLoadJIT_1() Assert.True(torch.tensor(new float[] { 0.313458264f, 0, 0.9996568f, 0, 0, 0 }).allclose(t)); } + [Fact] + public void TestSaveJIT() + { + if (File.Exists(".model.ts")) File.Delete(".model.ts"); + + // One linear layer followed by ReLU. + using var m1 = torch.jit.load(@"linrelu.script.dat"); + + torch.jit.save(m1, ".model.ts"); + using var m2 = torch.jit.load(@".model.ts"); + + var t = m2.forward(torch.ones(10)); + + Assert.Equal(new long[] { 6 }, t.shape); + Assert.Equal(torch.float32, t.dtype); + Assert.True(torch.tensor(new float[] { 0.313458264f, 0, 0.9996568f, 0, 0, 0 }).allclose(t)); + + if (File.Exists(".model.ts")) File.Delete(".model.ts"); + } + [Fact] public void TestLoadJIT_2() { @@ -116,13 +136,15 @@ public void TestLoadJIT_3() Assert.Equal(new long[] { 10 }, t.shape); Assert.Equal(torch.float32, t.dtype); Assert.True(torch.tensor(new float[] { 0.564213157f, -0.04519982f, -0.005117342f, 0.395530462f, -0.3780813f, -0.004734449f, -0.3221216f, -0.289159119f, 0.268511474f, 0.180702567f }).allclose(t)); + + Assert.Throws(() => m.forward(torch.ones(100))); } [Fact] public void TestLoadJIT_4() { // Definitely not a TorchScript file. Let's see what the runtime does with it. - Assert.Throws(() => torch.jit.load(@"torch.dll")); + Assert.Throws(() => torch.jit.load(@"bug510.dat")); } [Fact] From 40cac593a2c55909a78361a24450b38ce54037ca Mon Sep 17 00:00:00 2001 From: Niklas Gustafsson Date: Sat, 2 Jul 2022 15:12:14 -0700 Subject: [PATCH 11/12] Added more overloads for forward(). Added unit test for a script module formed from a function in Pytorch. --- docfx/articles/torchscript.md | 6 +- src/TorchSharp/JIT/ScriptModule.cs | 54 +++++++++++++++++- src/TorchSharp/NN/EmbeddingBag.cs | 2 +- src/TorchSharp/NN/Module.cs | 3 + src/TorchSharp/NN/TransformerEncoder.cs | 2 +- src/TorchSharp/NN/TransformerEncoderLayer.cs | 2 +- .../TorchSharpTest.WithCudaBinaries.csproj | 3 + test/TorchSharpTest/TestLoadSave.cs | 21 +++++++ test/TorchSharpTest/TorchSharpTest.csproj | 3 + test/TorchSharpTest/func.script.dat | Bin 0 -> 1334 bytes 10 files changed, 87 insertions(+), 9 deletions(-) create mode 100644 test/TorchSharpTest/func.script.dat diff --git a/docfx/articles/torchscript.md b/docfx/articles/torchscript.md index 4a53753ba..d86378577 100644 --- a/docfx/articles/torchscript.md +++ b/docfx/articles/torchscript.md @@ -1,6 +1,6 @@ # Loading TorchScript Modules -Starting with release 0.96.9, you can load TorchScript modules (but not yet TorchScript functions) that have been either traced or scripted in Pytorch. It is, however, not yet possible to create a TorchScript module from scratch using TorchSharp. Refer to the [Pytorch JIT](https://pytorch.org/docs/stable/jit.html) docs for information on how to create such a file. +Starting with release 0.96.9, you can load TorchScript modules and functions that have been either traced or scripted in Pytorch. It is, however, not yet possible to create a TorchScript module from scratch using TorchSharp. Refer to the [Pytorch JIT](https://pytorch.org/docs/stable/jit.html) docs for information on how to create such a file. TorchScript is very powerful, because it allows you to save the logic and the weights of a model together, and it furthermore allows the module to be loaded into another program, __without any dependencies on the Python runtime.__ Thus, you can load a model that has been serialized using TorchScript and have it behave as any TorchScript module -- you can use it for training, or you can use it for inference. @@ -10,7 +10,7 @@ Once you have a TorchScript file, you can load it into TorchSharp using: var m = torch.jit.load("file-name"); ``` -It returns a ScriptModule, which behaves just like any other TorchSharp module. You can use it for training of inference by calling either `train()` or `eval()`. ScriptModules always start out on the CPU, so you have to call `cuda()` in order to move it to a GPU. +It returns a ScriptModule, which behaves just like any other TorchSharp module. Whether the original script came from a module or a function, it is deserialized as a module. You can use it for training of inference by calling either `train()` or `eval()`. ScriptModules always start out on the CPU, so you have to call `cuda()` in order to move it to a GPU. Note that if you used __tracing__ to create the TorchScript file in Pytorch, submodules that behave differently in training and eval modes will behave according to the mode they were traced in. @@ -22,4 +22,4 @@ That is easily done using `save()`: torch.jit.save(m, "file-name"); ``` -While it is possible to save a modified ScriptModule from TorchSharp, it is not (yet) possible to create one _from scratch_ using either tracing or scripting. +While it is possible to save a modified ScriptModule from TorchSharp, it is not (yet) possible to create one _from scratch_ using either tracing or scripting. Another limitation is that the TorchSharp code assumes that the `forward()` function takes only tensors as its arguments and returns a single tensor, a limitation it shares with other TorchSharp modules. diff --git a/src/TorchSharp/JIT/ScriptModule.cs b/src/TorchSharp/JIT/ScriptModule.cs index 22dd88088..729a6c141 100644 --- a/src/TorchSharp/JIT/ScriptModule.cs +++ b/src/TorchSharp/JIT/ScriptModule.cs @@ -287,21 +287,69 @@ private Type GetType(Type type) [DllImport("LibTorchSharp")] private static extern IntPtr THSJIT_Module_forward(HType module, IntPtr tensors, int length); + /// + /// Invoke the 'forward' function of the script with one tensor as its argument + /// + /// The input tensor + /// public unsafe override Tensor forward(Tensor tensor) { using (var parray = new PinnedArray()) { IntPtr tensorRefs = parray.CreateArray(new[] { tensor.Handle }); - var res = THSJIT_Module_forward(handle, tensorRefs, parray.Array.Length); + var res = THSJIT_Module_forward(handle, tensorRefs, 1); + if (res == IntPtr.Zero) + CheckForErrors(); + return new Tensor(res); + } + } + + /// + /// Invoke the 'forward' function of the script with two tensors as its argument + /// + /// The first input tensor + /// The second input tensor + /// + public unsafe override Tensor forward(Tensor x, Tensor y) + { + using (var parray = new PinnedArray()) { + IntPtr tensorRefs = parray.CreateArray(new[] { x.Handle, y.Handle }); + var res = THSJIT_Module_forward(handle, tensorRefs, 2); if (res == IntPtr.Zero) CheckForErrors(); return new Tensor(res); } } - public unsafe override Tensor forward(Tensor tensor1, Tensor tensor2) + /// + /// Invoke the 'forward' function of the script with three tensors as its argument + /// + /// The first input tensor + /// The second input tensor + /// The third input tensor + /// + public unsafe override Tensor forward(Tensor x, Tensor y, Tensor z) + { + using (var parray = new PinnedArray()) { + IntPtr tensorRefs = parray.CreateArray(new[] { x.Handle, y.Handle, z.Handle }); + var res = THSJIT_Module_forward(handle, tensorRefs, 3); + if (res == IntPtr.Zero) + CheckForErrors(); + return new Tensor(res); + } + } + + /// + /// Invoke the 'forward' function of the script with four or more tensors as its argument + /// + /// The first input tensor + /// The second input tensor + /// The third input tensor + /// The remaining tensors. + /// + public unsafe Tensor forward(Tensor x, Tensor y, Tensor z, params Tensor[] tensors) { using (var parray = new PinnedArray()) { - IntPtr tensorRefs = parray.CreateArray(new[] { tensor1.Handle, tensor2.Handle }); + IntPtr tensorRefs = parray.CreateArray(new[] { x, y, z }.Concat(tensors).Select(t => t.Handle).ToArray()); var res = THSJIT_Module_forward(handle, tensorRefs, parray.Array.Length); if (res == IntPtr.Zero) CheckForErrors(); diff --git a/src/TorchSharp/NN/EmbeddingBag.cs b/src/TorchSharp/NN/EmbeddingBag.cs index 122efd956..e6c0ff42d 100644 --- a/src/TorchSharp/NN/EmbeddingBag.cs +++ b/src/TorchSharp/NN/EmbeddingBag.cs @@ -32,7 +32,7 @@ internal EmbeddingBag(IntPtr handle, IntPtr boxedHandle) : base(handle, boxedHan /// If specified, per_sample_weights must have exactly the same shape as input and is treated as having the same offsets, if those are not None. /// Only supported for mode='sum'. /// - public Tensor forward(Tensor input, Tensor offsets, Tensor perSampleWeights) + public override Tensor forward(Tensor input, Tensor offsets, Tensor perSampleWeights) { if (!input.IsIntegral()) throw new ArgumentException("Embedding input must be an integral tensor."); if (!(offsets is null) && input.dtype != offsets.dtype) throw new ArgumentException("input and offsets must have the same element type."); diff --git a/src/TorchSharp/NN/Module.cs b/src/TorchSharp/NN/Module.cs index fde92471e..30d8d1934 100644 --- a/src/TorchSharp/NN/Module.cs +++ b/src/TorchSharp/NN/Module.cs @@ -748,6 +748,9 @@ public virtual Tensor forward(Tensor t) public virtual Tensor forward(Tensor x, Tensor y) => throw new NotImplementedException("forward(x,y)"); + public virtual Tensor forward(Tensor x, Tensor y, Tensor z) + => throw new NotImplementedException("forward(x,y,z)"); + /// /// Save the parameters and buffers of the module to a disk location. /// diff --git a/src/TorchSharp/NN/TransformerEncoder.cs b/src/TorchSharp/NN/TransformerEncoder.cs index 46858a39a..84b1f05a7 100644 --- a/src/TorchSharp/NN/TransformerEncoder.cs +++ b/src/TorchSharp/NN/TransformerEncoder.cs @@ -29,7 +29,7 @@ internal TransformerEncoder(IntPtr handle, IntPtr boxedHandle) : base(handle, bo /// The additive mask for the src sequence (optional). /// The ByteTensor mask for src keys per batch (optional). /// - public Tensor forward(Tensor src, Tensor src_mask, Tensor src_key_padding_mask) + public override Tensor forward(Tensor src, Tensor src_mask, Tensor src_key_padding_mask) { var res = THSNN_TransformerEncoder_forward(handle, src.Handle, diff --git a/src/TorchSharp/NN/TransformerEncoderLayer.cs b/src/TorchSharp/NN/TransformerEncoderLayer.cs index 4567599da..ae40d83d4 100644 --- a/src/TorchSharp/NN/TransformerEncoderLayer.cs +++ b/src/TorchSharp/NN/TransformerEncoderLayer.cs @@ -23,7 +23,7 @@ internal TransformerEncoderLayer(IntPtr handle, IntPtr boxedHandle) : base(handl /// The additive mask for the src sequence (optional). /// The ByteTensor mask for src keys per batch (optional). /// - public Tensor forward(Tensor src, Tensor src_mask, Tensor src_key_padding_mask) + public override Tensor forward(Tensor src, Tensor src_mask, Tensor src_key_padding_mask) { var res = THSNN_TransformerEncoderLayer_forward(handle, src.Handle, diff --git a/test/TorchSharpTest.WithCudaBinaries/TorchSharpTest.WithCudaBinaries.csproj b/test/TorchSharpTest.WithCudaBinaries/TorchSharpTest.WithCudaBinaries.csproj index 8f2fc3f91..eb145cbb2 100644 --- a/test/TorchSharpTest.WithCudaBinaries/TorchSharpTest.WithCudaBinaries.csproj +++ b/test/TorchSharpTest.WithCudaBinaries/TorchSharpTest.WithCudaBinaries.csproj @@ -52,6 +52,9 @@ + + PreserveNewest + PreserveNewest diff --git a/test/TorchSharpTest/TestLoadSave.cs b/test/TorchSharpTest/TestLoadSave.cs index bce9c8153..f615240ac 100644 --- a/test/TorchSharpTest/TestLoadSave.cs +++ b/test/TorchSharpTest/TestLoadSave.cs @@ -75,6 +75,27 @@ public void TestSaveLoadLinear3() Assert.Equal(params0.Skip(1).First(), params2.Skip(1).First()); } + + + [Fact] + public void TestLoadJIT_Func() + { + // One linear layer followed by ReLU. + using var m = torch.jit.load(@"func.script.dat"); + + var sms = m.named_modules().ToArray(); + Assert.Empty(sms); + + var kids = m.named_children().ToArray(); + Assert.Empty(kids); + + var t = m.forward(torch.ones(10), torch.ones(10)); + + Assert.Equal(new long[] { 10 }, t.shape); + Assert.Equal(torch.float32, t.dtype); + Assert.True(torch.tensor(new float[] { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 }).allclose(t)); + } + [Fact] public void TestLoadJIT_1() { diff --git a/test/TorchSharpTest/TorchSharpTest.csproj b/test/TorchSharpTest/TorchSharpTest.csproj index 73e7e9aba..ab3fb075b 100644 --- a/test/TorchSharpTest/TorchSharpTest.csproj +++ b/test/TorchSharpTest/TorchSharpTest.csproj @@ -29,6 +29,9 @@ PreserveNewest + + PreserveNewest + PreserveNewest diff --git a/test/TorchSharpTest/func.script.dat b/test/TorchSharpTest/func.script.dat new file mode 100644 index 0000000000000000000000000000000000000000..659837edd62d318eb55b0bd56723bbfaf39ae898 GIT binary patch literal 1334 zcmWIWW@cev;NW1u06Yw03~BlK`YDMeiFyUuIc`ou3{e=MfhjpYz9hdWIU_!vD+oo4g>E>jQ#Yq@$#3zv2dyucmK)~gF%~2UeN4o`` z{~9~l^N*Qu-{tarJ1e*I!*`(z%@4O&=NlQvE|^lld8JVQ;Kq4JdmB%`4Ozyprgq|` z$;R26#N6+^)6R8&|34s1>XCrFL5AxgCzk}h1v6`MTotv%AS2UZ7)m1$p@zl zJM)VEo#bl2{M~f*;yLcU5wE3+*3HQ}6Z(-66eiC62hIC{;c*cfCfH*~o?m%-GapA?8Nlc;uvsBh{?(_H^RAOH=byyB9?ypm!_D&|26lm;eEu#vg?oZ&!o7(f`ek=)RfSe9B;oSC0T zh4g341&Z^F^U_0^fHs40fHxzEg6B!(Ji-H#Kmo`(6rvN6hmcc}D2lEwAP=MyBS)cI zjvUhRC`Qa<#9;&?0iqj*9L9nuh8+a@7~&qJs6y9{97xVkaU1ID;tQ-3WOl_5VZi;@k7@D literal 0 HcmV?d00001 From 401d07451d9a1e4f342008c7d015e5efa1ddaece Mon Sep 17 00:00:00 2001 From: Niklas Gustafsson Date: Sat, 2 Jul 2022 16:12:01 -0700 Subject: [PATCH 12/12] Modified train() to comply with Pytorch. Added doc comments. --- src/Native/LibTorchSharp/THSJIT.cpp | 4 +-- src/Native/LibTorchSharp/THSJIT.h | 2 +- src/Native/LibTorchSharp/THSModule.cpp | 9 ++--- src/Native/LibTorchSharp/THSNN.h | 3 +- src/TorchSharp/JIT/ScriptModule.cs | 48 ++++++++++++++++++++++++-- src/TorchSharp/NN/Module.cs | 27 +++++++++++---- src/TorchSharp/NN/Sequential.cs | 16 +++++++-- test/TorchSharpTest/NN.cs | 5 +++ 8 files changed, 90 insertions(+), 24 deletions(-) diff --git a/src/Native/LibTorchSharp/THSJIT.cpp b/src/Native/LibTorchSharp/THSJIT.cpp index 3485ff8a3..8fb622b56 100644 --- a/src/Native/LibTorchSharp/THSJIT.cpp +++ b/src/Native/LibTorchSharp/THSJIT.cpp @@ -24,9 +24,9 @@ int THSJIT_Module_is_training(JITModule module) return (*module)->is_training(); } -void THSJIT_Module_train(JITModule module) +void THSJIT_Module_train(JITModule module, bool on) { - (*module)->train(); + (*module)->train(on); } void THSJIT_Module_eval(JITModule module) diff --git a/src/Native/LibTorchSharp/THSJIT.h b/src/Native/LibTorchSharp/THSJIT.h index a9d2b4a47..a1331cc73 100644 --- a/src/Native/LibTorchSharp/THSJIT.h +++ b/src/Native/LibTorchSharp/THSJIT.h @@ -28,7 +28,7 @@ EXPORT_API(int) THSJIT_Module_num_outputs(const JITModule method); EXPORT_API(Tensor) THSJIT_Module_forward(const JITModule module, const Tensor* tensorPtrs, const int length); EXPORT_API(int) THSJIT_Module_is_training(JITModule module); -EXPORT_API(void) THSJIT_Module_train(JITModule module); +EXPORT_API(void) THSJIT_Module_train(JITModule module, bool on); EXPORT_API(void) THSJIT_Module_eval(JITModule module); EXPORT_API(void) THSJIT_Module_to_device(JITModule module, int64_t device, int64_t index); diff --git a/src/Native/LibTorchSharp/THSModule.cpp b/src/Native/LibTorchSharp/THSModule.cpp index a0dc52ec6..7f81ec25c 100644 --- a/src/Native/LibTorchSharp/THSModule.cpp +++ b/src/Native/LibTorchSharp/THSModule.cpp @@ -10,14 +10,9 @@ int THSNN_Module_is_training(NNModule module) return (*module)->is_training(); } -void THSNN_Module_train(NNModule module) +void THSNN_Module_train(NNModule module, bool on) { - (*module)->train(); -} - -void THSNN_Module_eval(NNModule module) -{ - (*module)->eval(); + (*module)->train(on); } const char* THSNN_Module_name(const NNModule module) diff --git a/src/Native/LibTorchSharp/THSNN.h b/src/Native/LibTorchSharp/THSNN.h index 1932c1a9a..269f5cfd5 100644 --- a/src/Native/LibTorchSharp/THSNN.h +++ b/src/Native/LibTorchSharp/THSNN.h @@ -17,8 +17,7 @@ EXPORT_API(void) THSNN_Module_get_named_children(const NNModule module, N EXPORT_API(void) THSNN_Module_get_named_modules(const NNModule module, NNModule* (*allocator1)(size_t length), const char** (*allocator2)(size_t length)); EXPORT_API(void) THSNN_Module_get_parameters(const NNModule module, Tensor* (*allocator1)(size_t length), bool recurse); EXPORT_API(int) THSNN_Module_is_training(NNModule module); -EXPORT_API(void) THSNN_Module_train(NNModule module); -EXPORT_API(void) THSNN_Module_eval(NNModule module); +EXPORT_API(void) THSNN_Module_train(NNModule module, bool on); EXPORT_API(long) THSNN_Module_children_size(const NNModule module); EXPORT_API(NNModule) THSNN_Module_child(const NNModule module, const int index); EXPORT_API(const char*) THSNN_Module_name(const NNModule module); diff --git a/src/TorchSharp/JIT/ScriptModule.cs b/src/TorchSharp/JIT/ScriptModule.cs index 729a6c141..e91aa153f 100644 --- a/src/TorchSharp/JIT/ScriptModule.cs +++ b/src/TorchSharp/JIT/ScriptModule.cs @@ -60,6 +60,10 @@ protected override (string name, Tensor buffer)[] _named_buffers() [DllImport("LibTorchSharp")] private static extern void THSJIT_Module_named_modules(HType module, AllocatePinnedArray allocator1, AllocatePinnedArray allocator2); + /// + /// Returns an enumerable of all modules in the network, yielding both the name of the module as well as the module itself. + /// + /// (string, Module) – Tuple of name and module public override IEnumerable<(string name, nn.Module module)> named_modules() { using var pa = new PinnedArray(); @@ -75,6 +79,10 @@ protected override (string name, Tensor buffer)[] _named_buffers() [DllImport("LibTorchSharp")] private static extern void THSJIT_Module_named_children(HType module, AllocatePinnedArray allocator1, AllocatePinnedArray allocator2); + /// + /// Returns an enumerable of immediate children modules, yielding both the name of the module as well as the module itself. + /// + /// (string, Module) – Tuple containing a name and child module public override IEnumerable<(string name, nn.Module module)> named_children() { using var pa = new PinnedArray(); @@ -107,17 +115,31 @@ public int GetNumberOfOutputs() } [DllImport("LibTorchSharp")] - private static extern void THSJIT_Module_train(HType module); + private static extern void THSJIT_Module_train(HType module, bool on); - public override void train() + /// + /// Sets the module in evaluation mode. + /// + /// + /// Any script module that was created using torch.jit.trace() will be unaffected. The behavior of such + /// modules will be captured when traced. + /// + public override void train(bool on = true) { - THSJIT_Module_train(handle); + THSJIT_Module_train(handle, on); CheckForErrors(); } [DllImport("LibTorchSharp")] private static extern void THSJIT_Module_eval(HType module); + /// + /// Sets the module in evaluation mode. + /// + /// + /// Any script module that was created using torch.jit.trace() will be unaffected. The behavior of such + /// modules will be captured when traced. + /// public override void eval() { THSJIT_Module_eval(handle); @@ -127,6 +149,9 @@ public override void eval() [DllImport("LibTorchSharp")] private static extern bool THSJIT_Module_is_training(HType module); + /// + /// Check whether the module is set to training or evaluation mode. + /// public override bool training { get { var res = THSJIT_Module_is_training(handle); @@ -361,6 +386,15 @@ public unsafe Tensor forward(Tensor x, Tensor y, Tensor z, params Tensor[] tenso [DllImport("LibTorchSharp")] private static extern IntPtr THSJIT_load(string filename); + /// + /// Load a ScriptModule or ScriptFunction previously saved with torch.jit.save + /// + /// + /// A ScriptModule instance, whether the script originated as a module or function. + /// + /// All previously saved modules, no matter their device, are first loaded onto CPU, and then are moved to the devices they were saved from.If this fails (e.g.because the run time system doesn’t have certain devices), an exception is raised. + /// + /// Raised if the file is not found. public static ScriptModule load(string filename) { if (!System.IO.File.Exists(filename)) @@ -375,6 +409,14 @@ public static ScriptModule load(string filename) [DllImport("LibTorchSharp")] private static extern void THSJIT_save(nn.Module.HType handle, string filename); + /// + /// Save an offline version of a previously loaded script module. + /// + /// The saved module serializes all of the methods, submodules, parameters, and attributes of this module. + /// It can be loaded into the C++ API using torch::jit::load(filename) or into the .NET API with torch.jit.load(). + /// + /// + /// public static void save(ScriptModule module, string filename) { THSJIT_save(module.handle, filename); diff --git a/src/TorchSharp/NN/Module.cs b/src/TorchSharp/NN/Module.cs index 30d8d1934..9f3ca9521 100644 --- a/src/TorchSharp/NN/Module.cs +++ b/src/TorchSharp/NN/Module.cs @@ -325,28 +325,41 @@ public virtual void Save(string modelPath) => THSNN_Module_save(handle, modelPath); [DllImport("LibTorchSharp")] - private static extern void THSNN_Module_train(HType module); + private static extern void THSNN_Module_train(HType module, bool on); - public virtual void train() + /// + /// Sets the module in training mode. + /// + /// + /// This has any effect only on certain modules.See documentations of particular modules for details of their behaviors in training/evaluation mode, if they are affected, e.g.Dropout, BatchNorm, etc. + /// + public virtual void train(bool train = true) { - THSNN_Module_train(handle); + THSNN_Module_train(handle, train); CheckForErrors(); - foreach (var (_, m) in named_children()) { m.train(); } + foreach (var (_, m) in named_children()) { m.train(train); } } [DllImport("LibTorchSharp")] private static extern void THSNN_Module_eval(HType module); + /// + /// Sets the module in evaluation mode. + /// + /// + /// This has any effect only on certain modules.See documentations of particular modules for details of their behaviors in training/evaluation mode, if they are affected, e.g.Dropout, BatchNorm, etc. + /// public virtual void eval() { - THSNN_Module_eval(handle); - CheckForErrors(); - foreach (var (_, m) in named_children()) { m.eval(); } + train(false); } [DllImport("LibTorchSharp")] private static extern bool THSNN_Module_is_training(HType module); + /// + /// Check whether the module is set to training or evaluation mode. + /// public virtual bool training { get { var res = THSNN_Module_is_training(handle); diff --git a/src/TorchSharp/NN/Sequential.cs b/src/TorchSharp/NN/Sequential.cs index a1720c82a..096d204ef 100644 --- a/src/TorchSharp/NN/Sequential.cs +++ b/src/TorchSharp/NN/Sequential.cs @@ -130,11 +130,23 @@ protected override void Dispose(bool disposing) base.Dispose(disposing); } - public override void train() + /// + /// Sets the module in training mode. + /// + /// + /// This has any effect only on certain modules.See documentations of particular modules for details of their behaviors in training/evaluation mode, if they are affected, e.g.Dropout, BatchNorm, etc. + /// + public override void train(bool on = true) { - foreach (var m in _modules) { m.train(); } + foreach (var m in _modules) { m.train(on); } } + /// + /// Sets the module in evaluation mode. + /// + /// + /// This has any effect only on certain modules.See documentations of particular modules for details of their behaviors in training/evaluation mode, if they are affected, e.g.Dropout, BatchNorm, etc. + /// public override void eval() { foreach (var m in _modules) { m.eval(); } diff --git a/test/TorchSharpTest/NN.cs b/test/TorchSharpTest/NN.cs index 8b29ea011..8090754a2 100644 --- a/test/TorchSharpTest/NN.cs +++ b/test/TorchSharpTest/NN.cs @@ -1096,6 +1096,8 @@ public void TestGradConditional() modT.train(); + Assert.True(modT.training); + var eval = modT.forward(x); var loss = mse_loss(Reduction.Sum); var output = loss(eval, y); @@ -3154,7 +3156,10 @@ public void TestMultiheadAttention() using (var K = torch.tensor(k_data, src_seq_len, batch_size, kembed_dim)) using (var V = torch.tensor(v_data, src_seq_len, batch_size, vembed_dim)) using (var Attn = torch.tensor(attn_data, batch_size, src_seq_len, src_seq_len)) { + mha.eval(); + Assert.False(mha.training); + var (att_out, att_wts) = mha.forward(Q, K, V); var t = att_wts.allclose(Attn, rtol: 0.5, atol: 0.5); Assert.True(t);