In the previous post, I made an introduction and a POC to interact with ONNX models and Go. I have decoded the information to reconstruct a graph. Now I propose to expand the principle and to create a proper execution backend based on Gorgonia. This post is a bit more technical than the previous one because all the concepts needed to work should be present in the last article.
This year has started with a lot of deep thoughts about the software 2.0. My conclusion (which is slightly different from Andrej Karpathy’s consideration) is that a software 2.0 is a combination of a Neural network model and its associated weights. This is a concept; now the question is: how to materialize the idea? What artifact represents a software 2.0. I emitted several ideas and tried one of them: to serialize the mathematical model and the weights.
During the past weeks, I’ve had the opportunity to play a bit with Wasm and Go. All those experiments led me to a write a proof of concepts that can illustrate everything I have said recently about: Thinking the deep-learning stack like an Ops (see my post about NNRE/NNDK). Capturing the real value of the training process (the knowledge) into a sequence of bits (the lightning talk I gave about it at the dotAI should be online soon).
This is a rapid post about webassembly. Its goal is to act as a reminder for me more than a tutorial on how to use it. The upcoming version of go 1.11 will have support for Wasm. @neelance has done most of the work of implementation. The support for wasm can already be tested by extracting his working branch from GitHub. See this article for more information. Setup of the toolchain To generate a wasm file from a go source, you need to get and patch the go toolset from the sources: