microsoft / onnxjs

ONNX.js: run ONNX models using JavaScript
Other
1.76k stars 129 forks source link

How to contribute to Webgl ops? #219

Open Manojbhat09 opened 4 years ago

Manojbhat09 commented 4 years ago

Please provide a short guide on how to write ops.

fs-eire commented 4 years ago

This commit is a good example of adding implementation for a operator on one or more backends.

A rough instruction -

  1. add a new file (if it doesn't exist) under lib/ops/ for the operator, implement an abstract class derived from Operator with member function initialize, checkInputs and checkInputTypes. Operator attributes are usually put here too.

  2. add a new file under lib/backends/webgl/ops/ for the operator, implement a class that extends the abstract class described in (1) and implement interface WebGLOperator as well.

    • function run usually implement as calling WebGLOperatorHelper.run(), unless a custom step is required
    • function createProgramInfo returns the shader and layout
    • function createRunData returns the texture data and uniform binding (if any)
  3. add resolve rules in /lib/backends/webgl/op-resolve-rules.ts for the newly implemented operator.

  4. add standard node test or custom operator test in unittest-whitelist.jsonc.

Let me know if you have further questions

Manojbhat09 commented 4 years ago

Hi, @fs-eire Thanks for your response. I wanted to know how to do tests. There are .pd files I guess generated from TensorFlow. I was wondering if we can generate the same from Pytorch? How would that look like?

I did a PR but failed due to tests I think. https://github.com/microsoft/onnxjs/pull/220