pytorch_dart 0.1.0 copy "pytorch_dart: ^0.1.0" to clipboard
pytorch_dart: ^0.1.0 copied to clipboard

A dart wrapper for Libtorch,provides some fundametal bindings.

Pytorch_Dart #

Pytorch_Dart is a dart wrapper for Libtorch,striving to provide an experience identical to PyTorch.

You can use it as an alternative to Numpy in your Dart/Flutter projects.

This package is experimental and APIs may change in the future.

Platform Status Prebuilt binaries
Windows x64(without CUDA)
Android arm64-v8a
armeabi-v7a
x86_64
x86
Linux x64(without CUDA)
iOS coming soon
MacOS coming soon

Theoretically you can run pytorch_dart on MacOS by simply replace /libtorch-linux/libtorch with libtorch for MacOS.

Getting Started #

Add pytorch_dart to your pubspec.yaml #

    pytorch_dart:^0.0.9

Setup #

dart run pytorch_dart:setup --platform <your_platform>

<your_platform> only support linux , android and windows now.

Enjoy it! #

    import 'package:pytorch_dart/pytorch_dart.dart' as torch;

For Android developers #

libtorch for android needs a specific version of NDK,so install NDK and choose version 21.4.7075529

Then add a row in android/local.properties in your project

ndk.dir=<path_to_your_ndk>/21.4.7075529

After adding a row,your local.properties should look like this:

flutter.sdk=/home/pc/flutter
sdk.dir=/home/pc/Android/Sdk
flutter.buildMode=debug
ndk.dir=/home/pc/Android/Sdk/ndk/21.4.7075529

Also,'torch.load()' and 'torch.save()' are not available on Android.In fact,they only work well on Linux

Some exceptions they threw in Windows are like this:

[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: Exception: [enforce fail at inline_container.cc:633] . invalid file name: 
00007FFAA49D3F08 <unknown symbol address> c10.dll!<unknown symbol> [<unknown file> @ <unknown line number>]
00007FFAA49D4823 <unknown symbol address> c10.dll!<unknown symbol> [<unknown file> @ <unknown line number>]

For windows developers #

Troubleshooting

Launching lib\main.dart on Windows in debug mode...
√  Built build\windows\x64\runner\Debug\example.exe.
Error waiting for a debug connection: The log reader stopped unexpectedly, or never started.
Error launching application on Windows.

Solutions:

  1. Download libtorch from here
  2. Unzip it
  3. copy all the files from libtorch\lib\ to build\windows\x64\runner\Debug\

Usage #

Brief Introduction #

  1. It include some basic functions in torch now.
  2. Support for torch.nn is coming soon.
  3. Almost all function usages remain consistent with PyTorch.
  4. Broadcasting also works for pytorch_dart.
  5. Example
var d=torch.eye(3,2);
print(d);

Result:

flutter:
 1  0
 0  1
 0  0
[ CPUFloatType{3,2} ]

Operator overloading #

Attention:Dart has no magic functions(like _radd_ in python).Therefore, in binary operators, tensor can only be on the left side.

Example

import 'package:pytorch_dart/pytorch_dart.dart' as torch;
...

var c=torch.DoubleTensor([[1.0,2.0,3.0],[4.0,5.0,6.0]]);
var d=c+10;// no errors
var e=10+c;//cause errors

Other binary operators (-,*,/)are just like +

For operator [] ,you can use it just like in Pytorch.

However,in current version,slicing is not supported.Therefore,you cant't use [a:b] to select sub tensor.

Example

import 'package:pytorch_dart/pytorch_dart.dart' as torch;
...

var c=torch.DoubleTensor([[1.0,2.0,3.0],[4.0,5.0,6.0]]);
print(c[0][0]);

Result

flutter: 1
[ CPUDoubleType{} ]

torch #

  1. torch.tensor() is not supported in pytorch_dart,use torch.IntTensor(),torch.FloatTensor or torch.DoubleTensor to create tensors.

  2. Functions avaliable now: torch.empty() torch.eye() torch.ones() torch.IntTensor(List<int> list) torch.FloatTensor(List<double> list) torch.DoubleTensor(List<double> list) torch.arange(double start, double end, double step,{bool requiresGrad = false}) torch.linspace(double start, double end, int steps,{bool requiresGrad = false}) torch.logspace(double start, double end, int steps, double base,{bool requiresGrad = false}) torch.equal(Tensor a,Tensor b) torch.add(Tensor a, tensor b,{double alpha=1}) torch.sub(Tensor a, tensor b,{double alpha=1}) torch.mul(Tensor a, tensor b) torch.div(Tensor a, tensor b) torch.add_(Tensor a, tensor b,{double alpha=1}) torch.sub_(Tensor a, tensor b,{double alpha=1}) torch.mul_(Tensor a, tensor b) torch.div_(Tensor a, tensor b) torch.sum(Tensor a) torch.mm(Tensor a, Tensor b) torch.transpose(Tensor a,int dim0,int dim1) torch.permute(Tensor a,List <int> permute_list) torch.save(Tensor a,String path) torch.load(String path)

  3. Almost all function usages remain consistent with PyTorch.

  4. Some in-place operation are supported,such as torch.add_()

  5. Example

    import 'package:pytorch_dart/pytorch_dart.dart' as torch;
    ...
    
    var c=torch.DoubleTensor([[1.0,2.0,3.0],[4.0,5.0,6.0]]);
    var d=torch.add(10,c)
    print(d)
    

    Result:

    flutter:
     11  12  13
     14  15  16
    [ CPUDoubleType{2,3} ]
    

torch.tensor #

  1. Functions avaliable now: .dim() .dtype() .shape() .size() .detach() .add_() .sub_() .mul_() .div_() .toList()

  2. .dtype() is different from its implementation in Pytorch.

    In Pytorch,.dtype returns an object represents the data type of a tensor

    But in pytorch_dart,.dtype() returns a number represents the data type of a tensor.(maybe I will rewrite it later)

    Example

    import 'package:pytorch_dart/pytorch_dart.dart' as torch;
    ...
    
    var c=torch.DoubleTensor([[1.0,2.0,3.0],[4.0,5.0,6.0]]);
    print(c.dtype())
    

    Result

    flutter: 7
    

    7 represents torch.float64.

    All the corresponding relations are in lib/src/constants.dart

  3. Other function usages remain consistent with PyTorch.

Roadmap #

  1. Add support for iOS and MacOS.
  2. Add support for other functions,such as torch.nn

Acknowledgement #

This project uses pytorch-flutter-FFI-example and gotorch

4
likes
0
points
39
downloads

Publisher

unverified uploader

Weekly Downloads

A dart wrapper for Libtorch,provides some fundametal bindings.

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

archive, collection, ffi, flutter, http, package_config, path, plugin_platform_interface

More

Packages that depend on pytorch_dart

Packages that implement pytorch_dart