TorchSharp.PyBridge
1.4.3
dotnet add package TorchSharp.PyBridge --version 1.4.3
NuGet\Install-Package TorchSharp.PyBridge -Version 1.4.3
<PackageReference Include="TorchSharp.PyBridge" Version="1.4.3" />
paket add TorchSharp.PyBridge --version 1.4.3
#r "nuget: TorchSharp.PyBridge, 1.4.3"
// Install TorchSharp.PyBridge as a Cake Addin #addin nuget:?package=TorchSharp.PyBridge&version=1.4.3 // Install TorchSharp.PyBridge as a Cake Tool #tool nuget:?package=TorchSharp.PyBridge&version=1.4.3
TorchSharp.PyBridge
TorchSharp.PyBridge is an extension library for TorchSharp, providing seamless interoperability between .NET and Python for model serialization. It simplifies the process of saving and loading PyTorch models in a .NET environment, enabling developers to easily develop models in both .NET and Python and transfer models easily.
Features
module.load_py(...)
,optim.load_py(...)
: Extension method for modules and optimizers for easily loading PyTorch models saved in the standard Python format (usingtorch.save
) directly into TorchSharp.This only works for when the
state_dict
was saved and not the whole model, see example below.module.save_py(...)
,optim.save_py(...)
: Extension method for modules and optimizers for easily saving TorchSharp models in a format that can be directly loaded in PyTorch (usingtorch.load
), offering cross-platform model compatibility.module.load_safetensors(...)
,module.save_safetensors(...)
: Extension methods for modules for easily saving and loading model weights using the safetensors format.module.load_checkpoint(...)
: Extension method for loading in a checkpoint (both safetensors and regular pytorch, including sharded models) from a directory saved using HuggingFace'sPreTrainedModel.save_pretrained()
method.
Getting Started
Installation
TorchSharp.PyBridge is available on NuGet. You can install it using the following command:
.NET CLI
dotnet add package TorchSharp.PyBridge
NuGet Package Manager
Install-Package TorchSharp.PyBridge
Prerequisites
- .NET SDK
- TorchSharp library
Usage
Loading a PyTorch Model in .NET
Saving the model in Python:
import torch
model = ...
torch.save(model.state_dict(), 'path_to_your_model.pth')
Loading it in C#:
using TorchSharp.PyBridge;
var model = ...;
model.load_py("path_to_your_model.pth");
Saving a TorchSharp Model for PyTorch
To save a model in a format compatible with PyTorch:
using TorchSharp.PyBridge;
var model = ...;
model.save_py("path_to_save_model.pth");
And loading it in in Python:
import torch
model = ...
model.load_state_dict(torch.load('path_to_save_model.pth'))
Contributing
Contributions to TorchSharp.PyBridge are welcome.
Acknowledgments
This project makes use of the pickle
library, a Java and .NET implementation of Python's pickle serialization protocol, developed by Irmen de Jong. The pickle
library plays a vital role in enabling the serialization features within TorchSharp.PyBridge. We extend our thanks to the developer for their significant contributions to the open-source community. For more details about the pickle
library, please visit their GitHub repository.
Support and Contact
For support, questions, or feedback, please open an issue in the GitHub repository.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
-
net6.0
- Razorvine.Pickle (>= 1.5.0)
- TqdmSharp (>= 1.3.3)
NuGet packages (3)
Showing the top 3 NuGet packages that depend on TorchSharp.PyBridge:
Package | Downloads |
---|---|
Microsoft.ML.GenAI.Phi
Package Description |
|
Microsoft.ML.GenAI.LLaMA
Package Description |
|
Microsoft.ML.GenAI.Mistral
Package Description |
GitHub repositories (2)
Showing the top 2 popular GitHub repositories that depend on TorchSharp.PyBridge:
Repository | Stars |
---|---|
dotnet/machinelearning
ML.NET is an open source and cross-platform machine learning framework for .NET.
|
|
dotnet/ai-samples
|
1.4.3:
- Fixed #21: `strict` is not passed to `load_safetensor` in `load_checkpoint` extension
1.4.2:
- PR #20: Optimize load_py for memory and speed (@ejhg)
1.4.1:
- Fixed #17: How to disable tqdm output when loading sharded safetensors
1.4.0:
- Exposed `Safetensors`, `PytorchPickler` and `PytorchUnpickler` to allow for loading/saving python tensors outside of a model.
- Fixed #16: SaveStateDict calls itself recursively and fails on locked file
1.3.2:
- Fixed #13: UnpickleStateDict on BatchNorm2d error
1.3.1:
- Fixed error on Apple Silicon devices
1.3.0:
- Added support for loading tensors that are greater than 2GB (following the update in TorchSharp 0.102.0)
- Added support for loading and saving safetensors when model isn't on CPU.