Repository files navigation

TinyFlow: Build Your Own DL System in 2K Lines

TinyFlow is "example code" for NNVM.

It demonstrates how can we build a clean, minimum and powerful computational graph based deep learning system with same API as TensorFlow. The operator code are implemented with Torch7 to reduce the effort to write operators while still demonstrating the concepts of the system (and Embedding Lua in C++ is kinda of fun:).

TinyFlow is a real deep learning system that can run on GPU and CPUs. To support the examples, it takes.

  • 927 lines code for operators
  • 734 lines of code for execution runtime
  • 71 lines of code for API glue
  • 233 lines of code for front-end

Note that more code in operators can easily be added to make it as feature complete as most existing deep learning systems.

What is it for

As explained in the goal of NNVM, it is important to make modular and reusable components for to enable us to build customized learning system easily.

  • Course Material for teaching DL system. TinyFlow can be used to teach student the concepts in deep learning systems.
    • e.g. design homeworks on implementing symbolic differentiation, memory allocation, operator fusion.
  • Experiment bed for learning system researchers. TinyFlow allows easy addition with new system features with the modular design being portable to other system that reuses NNVM.
  • Showcase of intermediate representation usecase. It demonstrates how intermediate representation like NNVM to be able to target multiple front-ends(TF, MXNet) and backends(Torch7, MXNet) with common set of optimizations.
  • Test bed on common reusable modules for DL system. TinyFlow, together with other systems(e.g. MXNet) can be used as testbed on the common reusable modules in deep learning to encourage front-end, optimization module and backends that are shared across frameworks.
  • Just for fun :)

We believe the Unix Philosophy can building learning system more fun and everyone can be able to build and understand learning system better.

The Design

  • The graph construction API is automatically reused from NNVM
  • We choose Torch7 as the default operator execution backend.
    • So TinyFlow can also be called "TorchFlow" since it is literally TensorFlow on top of Torch:)
    • This allows us to quickly implement the operators and focus code on the system part.
  • We intentionally choose to avoid using MXNet as front or backend, since MXNet already uses NNVM as intermediate layer, and it would be more fun to try something different.

Although it is minimum. TinyFlow still comes with many advanced design concepts in Deep Learning system.

  • Automatic differentiation.
  • Shape/type inference.
  • Static memory allocation for graph for memory efficient training/inference.

The operator implementation is easy Thanks to Torch7. More fun demonstrations will be added to the project.

Dependencies

Most of TinyFlow's code is self-contained.

  • TinyFlow depend on Torch7 for operator supports with minimum code.
    • We use a lightweight lua bridge code from dmlc-core/dmlc/lua.h
  • NNVM is used for graph representation and optimizations

Build

  • Install Torch7
    • For OSX User, please install Torch with Lua 5.1 instead of LuaJIT, i.e. TORCH_LUA_VERSION=LUA51 ./install.sh
  • Set up environment variable TORCH_HOME to root of torch
  • Type make
  • Setup python path to include tinyflow and nnvm
export PYTHONPATH=${PYTHONPATH}:/path/to/tinyflow/python:/path/to/tinyflow/nnvm/python
  • Try example program python example/mnist_softmax.py

Enable Fusion in TinyFlow

  • Build NNVM with Fusion: uncomment fusion plugin part in config.mk, then make
  • Build TinyFlow: enable USE_FUSION in Makefile, then make
  • Try Example program example/mnist_lenet.py, change the config of session from tf.Session(config='gpu') to tf.Session(config='gpu fusion')

About

Tutorial code on how to build your own Deep Learning System in 2k Lines

Resources

Stars

122 stars

Watchers

8 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

TinyFlow: Build Your Own DL System in 2K Lines

TinyFlow is "example code" for NNVM.

It demonstrates how can we build a clean, minimum and powerful computational graph based deep learning system with same API as TensorFlow. The operator code are implemented with Torch7 to reduce the effort to write operators while still demonstrating the concepts of the system (and Embedding Lua in C++ is kinda of fun:).

TinyFlow is a real deep learning system that can run on GPU and CPUs. To support the examples, it takes.

  • 927 lines code for operators
  • 734 lines of code for execution runtime
  • 71 lines of code for API glue
  • 233 lines of code for front-end

Note that more code in operators can easily be added to make it as feature complete as most existing deep learning systems.

What is it for

As explained in the goal of NNVM, it is important to make modular and reusable components for to enable us to build customized learning system easily.

  • Course Material for teaching DL system. TinyFlow can be used to teach student the concepts in deep learning systems.
    • e.g. design homeworks on implementing symbolic differentiation, memory allocation, operator fusion.
  • Experiment bed for learning system researchers. TinyFlow allows easy addition with new system features with the modular design being portable to other system that reuses NNVM.
  • Showcase of intermediate representation usecase. It demonstrates how intermediate representation like NNVM to be able to target multiple front-ends(TF, MXNet) and backends(Torch7, MXNet) with common set of optimizations.
  • Test bed on common reusable modules for DL system. TinyFlow, together with other systems(e.g. MXNet) can be used as testbed on the common reusable modules in deep learning to encourage front-end, optimization module and backends that are shared across frameworks.
  • Just for fun :)

We believe the Unix Philosophy can building learning system more fun and everyone can be able to build and understand learning system better.

The Design

  • The graph construction API is automatically reused from NNVM
  • We choose Torch7 as the default operator execution backend.
    • So TinyFlow can also be called "TorchFlow" since it is literally TensorFlow on top of Torch:)
    • This allows us to quickly implement the operators and focus code on the system part.
  • We intentionally choose to avoid using MXNet as front or backend, since MXNet already uses NNVM as intermediate layer, and it would be more fun to try something different.

Although it is minimum. TinyFlow still comes with many advanced design concepts in Deep Learning system.

  • Automatic differentiation.
  • Shape/type inference.
  • Static memory allocation for graph for memory efficient training/inference.

The operator implementation is easy Thanks to Torch7. More fun demonstrations will be added to the project.

Dependencies

Most of TinyFlow's code is self-contained.

  • TinyFlow depend on Torch7 for operator supports with minimum code.
    • We use a lightweight lua bridge code from dmlc-core/dmlc/lua.h
  • NNVM is used for graph representation and optimizations

Build

  • Install Torch7
    • For OSX User, please install Torch with Lua 5.1 instead of LuaJIT, i.e. TORCH_LUA_VERSION=LUA51 ./install.sh
  • Set up environment variable TORCH_HOME to root of torch
  • Type make
  • Setup python path to include tinyflow and nnvm
export PYTHONPATH=${PYTHONPATH}:/path/to/tinyflow/python:/path/to/tinyflow/nnvm/python
  • Try example program python example/mnist_softmax.py

Enable Fusion in TinyFlow

  • Build NNVM with Fusion: uncomment fusion plugin part in config.mk, then make
  • Build TinyFlow: enable USE_FUSION in Makefile, then make
  • Try Example program example/mnist_lenet.py, change the config of session from tf.Session(config='gpu') to tf.Session(config='gpu fusion')

About

Tutorial code on how to build your own Deep Learning System in 2k Lines

Resources

Stars

122 stars

Watchers

8 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

TinyFlow: Build Your Own DL System in 2K Lines

TinyFlow is "example code" for NNVM.

It demonstrates how can we build a clean, minimum and powerful computational graph based deep learning system with same API as TensorFlow. The operator code are implemented with Torch7 to reduce the effort to write operators while still demonstrating the concepts of the system (and Embedding Lua in C++ is kinda of fun:).

TinyFlow is a real deep learning system that can run on GPU and CPUs. To support the examples, it takes.

  • 927 lines code for operators
  • 734 lines of code for execution runtime
  • 71 lines of code for API glue
  • 233 lines of code for front-end

Note that more code in operators can easily be added to make it as feature complete as most existing deep learning systems.

What is it for

As explained in the goal of NNVM, it is important to make modular and reusable components for to enable us to build customized learning system easily.

  • Course Material for teaching DL system. TinyFlow can be used to teach student the concepts in deep learning systems.
    • e.g. design homeworks on implementing symbolic differentiation, memory allocation, operator fusion.
  • Experiment bed for learning system researchers. TinyFlow allows easy addition with new system features with the modular design being portable to other system that reuses NNVM.
  • Showcase of intermediate representation usecase. It demonstrates how intermediate representation like NNVM to be able to target multiple front-ends(TF, MXNet) and backends(Torch7, MXNet) with common set of optimizations.
  • Test bed on common reusable modules for DL system. TinyFlow, together with other systems(e.g. MXNet) can be used as testbed on the common reusable modules in deep learning to encourage front-end, optimization module and backends that are shared across frameworks.
  • Just for fun :)

We believe the Unix Philosophy can building learning system more fun and everyone can be able to build and understand learning system better.

The Design

  • The graph construction API is automatically reused from NNVM
  • We choose Torch7 as the default operator execution backend.
    • So TinyFlow can also be called "TorchFlow" since it is literally TensorFlow on top of Torch:)
    • This allows us to quickly implement the operators and focus code on the system part.
  • We intentionally choose to avoid using MXNet as front or backend, since MXNet already uses NNVM as intermediate layer, and it would be more fun to try something different.

Although it is minimum. TinyFlow still comes with many advanced design concepts in Deep Learning system.

  • Automatic differentiation.
  • Shape/type inference.
  • Static memory allocation for graph for memory efficient training/inference.

The operator implementation is easy Thanks to Torch7. More fun demonstrations will be added to the project.

Dependencies

Most of TinyFlow's code is self-contained.

  • TinyFlow depend on Torch7 for operator supports with minimum code.
    • We use a lightweight lua bridge code from dmlc-core/dmlc/lua.h
  • NNVM is used for graph representation and optimizations

Build

  • Install Torch7
    • For OSX User, please install Torch with Lua 5.1 instead of LuaJIT, i.e. TORCH_LUA_VERSION=LUA51 ./install.sh
  • Set up environment variable TORCH_HOME to root of torch
  • Type make
  • Setup python path to include tinyflow and nnvm
export PYTHONPATH=${PYTHONPATH}:/path/to/tinyflow/python:/path/to/tinyflow/nnvm/python
  • Try example program python example/mnist_softmax.py

Enable Fusion in TinyFlow

  • Build NNVM with Fusion: uncomment fusion plugin part in config.mk, then make
  • Build TinyFlow: enable USE_FUSION in Makefile, then make
  • Try Example program example/mnist_lenet.py, change the config of session from tf.Session(config='gpu') to tf.Session(config='gpu fusion')

About

Tutorial code on how to build your own Deep Learning System in 2k Lines

Resources

Stars

122 stars

Watchers

8 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

TinyFlow: Build Your Own DL System in 2K Lines

TinyFlow is "example code" for NNVM.

It demonstrates how can we build a clean, minimum and powerful computational graph based deep learning system with same API as TensorFlow. The operator code are implemented with Torch7 to reduce the effort to write operators while still demonstrating the concepts of the system (and Embedding Lua in C++ is kinda of fun:).

TinyFlow is a real deep learning system that can run on GPU and CPUs. To support the examples, it takes.

  • 927 lines code for operators
  • 734 lines of code for execution runtime
  • 71 lines of code for API glue
  • 233 lines of code for front-end

Note that more code in operators can easily be added to make it as feature complete as most existing deep learning systems.

What is it for

As explained in the goal of NNVM, it is important to make modular and reusable components for to enable us to build customized learning system easily.

  • Course Material for teaching DL system. TinyFlow can be used to teach student the concepts in deep learning systems.
    • e.g. design homeworks on implementing symbolic differentiation, memory allocation, operator fusion.
  • Experiment bed for learning system researchers. TinyFlow allows easy addition with new system features with the modular design being portable to other system that reuses NNVM.
  • Showcase of intermediate representation usecase. It demonstrates how intermediate representation like NNVM to be able to target multiple front-ends(TF, MXNet) and backends(Torch7, MXNet) with common set of optimizations.
  • Test bed on common reusable modules for DL system. TinyFlow, together with other systems(e.g. MXNet) can be used as testbed on the common reusable modules in deep learning to encourage front-end, optimization module and backends that are shared across frameworks.
  • Just for fun :)

We believe the Unix Philosophy can building learning system more fun and everyone can be able to build and understand learning system better.

The Design

  • The graph construction API is automatically reused from NNVM
  • We choose Torch7 as the default operator execution backend.
    • So TinyFlow can also be called "TorchFlow" since it is literally TensorFlow on top of Torch:)
    • This allows us to quickly implement the operators and focus code on the system part.
  • We intentionally choose to avoid using MXNet as front or backend, since MXNet already uses NNVM as intermediate layer, and it would be more fun to try something different.

Although it is minimum. TinyFlow still comes with many advanced design concepts in Deep Learning system.

  • Automatic differentiation.
  • Shape/type inference.
  • Static memory allocation for graph for memory efficient training/inference.

The operator implementation is easy Thanks to Torch7. More fun demonstrations will be added to the project.

Dependencies

Most of TinyFlow's code is self-contained.

  • TinyFlow depend on Torch7 for operator supports with minimum code.
    • We use a lightweight lua bridge code from dmlc-core/dmlc/lua.h
  • NNVM is used for graph representation and optimizations

Build

  • Install Torch7
    • For OSX User, please install Torch with Lua 5.1 instead of LuaJIT, i.e. TORCH_LUA_VERSION=LUA51 ./install.sh
  • Set up environment variable TORCH_HOME to root of torch
  • Type make
  • Setup python path to include tinyflow and nnvm
export PYTHONPATH=${PYTHONPATH}:/path/to/tinyflow/python:/path/to/tinyflow/nnvm/python
  • Try example program python example/mnist_softmax.py

Enable Fusion in TinyFlow

  • Build NNVM with Fusion: uncomment fusion plugin part in config.mk, then make
  • Build TinyFlow: enable USE_FUSION in Makefile, then make
  • Try Example program example/mnist_lenet.py, change the config of session from tf.Session(config='gpu') to tf.Session(config='gpu fusion')

About

Tutorial code on how to build your own Deep Learning System in 2k Lines

Resources

Stars

122 stars

Watchers

8 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

TinyFlow: Build Your Own DL System in 2K Lines

TinyFlow is "example code" for NNVM.

It demonstrates how can we build a clean, minimum and powerful computational graph based deep learning system with same API as TensorFlow. The operator code are implemented with Torch7 to reduce the effort to write operators while still demonstrating the concepts of the system (and Embedding Lua in C++ is kinda of fun:).

TinyFlow is a real deep learning system that can run on GPU and CPUs. To support the examples, it takes.

  • 927 lines code for operators
  • 734 lines of code for execution runtime
  • 71 lines of code for API glue
  • 233 lines of code for front-end

Note that more code in operators can easily be added to make it as feature complete as most existing deep learning systems.

What is it for

As explained in the goal of NNVM, it is important to make modular and reusable components for to enable us to build customized learning system easily.

  • Course Material for teaching DL system. TinyFlow can be used to teach student the concepts in deep learning systems.
    • e.g. design homeworks on implementing symbolic differentiation, memory allocation, operator fusion.
  • Experiment bed for learning system researchers. TinyFlow allows easy addition with new system features with the modular design being portable to other system that reuses NNVM.
  • Showcase of intermediate representation usecase. It demonstrates how intermediate representation like NNVM to be able to target multiple front-ends(TF, MXNet) and backends(Torch7, MXNet) with common set of optimizations.
  • Test bed on common reusable modules for DL system. TinyFlow, together with other systems(e.g. MXNet) can be used as testbed on the common reusable modules in deep learning to encourage front-end, optimization module and backends that are shared across frameworks.
  • Just for fun :)

We believe the Unix Philosophy can building learning system more fun and everyone can be able to build and understand learning system better.

The Design

  • The graph construction API is automatically reused from NNVM
  • We choose Torch7 as the default operator execution backend.
    • So TinyFlow can also be called "TorchFlow" since it is literally TensorFlow on top of Torch:)
    • This allows us to quickly implement the operators and focus code on the system part.
  • We intentionally choose to avoid using MXNet as front or backend, since MXNet already uses NNVM as intermediate layer, and it would be more fun to try something different.

Although it is minimum. TinyFlow still comes with many advanced design concepts in Deep Learning system.

  • Automatic differentiation.
  • Shape/type inference.
  • Static memory allocation for graph for memory efficient training/inference.

The operator implementation is easy Thanks to Torch7. More fun demonstrations will be added to the project.

Dependencies

Most of TinyFlow's code is self-contained.

  • TinyFlow depend on Torch7 for operator supports with minimum code.
    • We use a lightweight lua bridge code from dmlc-core/dmlc/lua.h
  • NNVM is used for graph representation and optimizations

Build

  • Install Torch7
    • For OSX User, please install Torch with Lua 5.1 instead of LuaJIT, i.e. TORCH_LUA_VERSION=LUA51 ./install.sh
  • Set up environment variable TORCH_HOME to root of torch
  • Type make
  • Setup python path to include tinyflow and nnvm
export PYTHONPATH=${PYTHONPATH}:/path/to/tinyflow/python:/path/to/tinyflow/nnvm/python
  • Try example program python example/mnist_softmax.py

Enable Fusion in TinyFlow

  • Build NNVM with Fusion: uncomment fusion plugin part in config.mk, then make
  • Build TinyFlow: enable USE_FUSION in Makefile, then make
  • Try Example program example/mnist_lenet.py, change the config of session from tf.Session(config='gpu') to tf.Session(config='gpu fusion')

About

Tutorial code on how to build your own Deep Learning System in 2k Lines

Resources

Stars

122 stars

Watchers

8 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

TinyFlow: Build Your Own DL System in 2K Lines

TinyFlow is "example code" for NNVM.

It demonstrates how can we build a clean, minimum and powerful computational graph based deep learning system with same API as TensorFlow. The operator code are implemented with Torch7 to reduce the effort to write operators while still demonstrating the concepts of the system (and Embedding Lua in C++ is kinda of fun:).

TinyFlow is a real deep learning system that can run on GPU and CPUs. To support the examples, it takes.

  • 927 lines code for operators
  • 734 lines of code for execution runtime
  • 71 lines of code for API glue
  • 233 lines of code for front-end

Note that more code in operators can easily be added to make it as feature complete as most existing deep learning systems.

What is it for

As explained in the goal of NNVM, it is important to make modular and reusable components for to enable us to build customized learning system easily.

  • Course Material for teaching DL system. TinyFlow can be used to teach student the concepts in deep learning systems.
    • e.g. design homeworks on implementing symbolic differentiation, memory allocation, operator fusion.
  • Experiment bed for learning system researchers. TinyFlow allows easy addition with new system features with the modular design being portable to other system that reuses NNVM.
  • Showcase of intermediate representation usecase. It demonstrates how intermediate representation like NNVM to be able to target multiple front-ends(TF, MXNet) and backends(Torch7, MXNet) with common set of optimizations.
  • Test bed on common reusable modules for DL system. TinyFlow, together with other systems(e.g. MXNet) can be used as testbed on the common reusable modules in deep learning to encourage front-end, optimization module and backends that are shared across frameworks.
  • Just for fun :)

We believe the Unix Philosophy can building learning system more fun and everyone can be able to build and understand learning system better.

The Design

  • The graph construction API is automatically reused from NNVM
  • We choose Torch7 as the default operator execution backend.
    • So TinyFlow can also be called "TorchFlow" since it is literally TensorFlow on top of Torch:)
    • This allows us to quickly implement the operators and focus code on the system part.
  • We intentionally choose to avoid using MXNet as front or backend, since MXNet already uses NNVM as intermediate layer, and it would be more fun to try something different.

Although it is minimum. TinyFlow still comes with many advanced design concepts in Deep Learning system.

  • Automatic differentiation.
  • Shape/type inference.
  • Static memory allocation for graph for memory efficient training/inference.

The operator implementation is easy Thanks to Torch7. More fun demonstrations will be added to the project.

Dependencies

Most of TinyFlow's code is self-contained.

  • TinyFlow depend on Torch7 for operator supports with minimum code.
    • We use a lightweight lua bridge code from dmlc-core/dmlc/lua.h
  • NNVM is used for graph representation and optimizations

Build

  • Install Torch7
    • For OSX User, please install Torch with Lua 5.1 instead of LuaJIT, i.e. TORCH_LUA_VERSION=LUA51 ./install.sh
  • Set up environment variable TORCH_HOME to root of torch
  • Type make
  • Setup python path to include tinyflow and nnvm
export PYTHONPATH=${PYTHONPATH}:/path/to/tinyflow/python:/path/to/tinyflow/nnvm/python
  • Try example program python example/mnist_softmax.py

Enable Fusion in TinyFlow

  • Build NNVM with Fusion: uncomment fusion plugin part in config.mk, then make
  • Build TinyFlow: enable USE_FUSION in Makefile, then make
  • Try Example program example/mnist_lenet.py, change the config of session from tf.Session(config='gpu') to tf.Session(config='gpu fusion')

About

Tutorial code on how to build your own Deep Learning System in 2k Lines

Resources

Stars

122 stars

Watchers

8 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

TinyFlow: Build Your Own DL System in 2K Lines

TinyFlow is "example code" for NNVM.

It demonstrates how can we build a clean, minimum and powerful computational graph based deep learning system with same API as TensorFlow. The operator code are implemented with Torch7 to reduce the effort to write operators while still demonstrating the concepts of the system (and Embedding Lua in C++ is kinda of fun:).

TinyFlow is a real deep learning system that can run on GPU and CPUs. To support the examples, it takes.

  • 927 lines code for operators
  • 734 lines of code for execution runtime
  • 71 lines of code for API glue
  • 233 lines of code for front-end

Note that more code in operators can easily be added to make it as feature complete as most existing deep learning systems.

What is it for

As explained in the goal of NNVM, it is important to make modular and reusable components for to enable us to build customized learning system easily.

  • Course Material for teaching DL system. TinyFlow can be used to teach student the concepts in deep learning systems.
    • e.g. design homeworks on implementing symbolic differentiation, memory allocation, operator fusion.
  • Experiment bed for learning system researchers. TinyFlow allows easy addition with new system features with the modular design being portable to other system that reuses NNVM.
  • Showcase of intermediate representation usecase. It demonstrates how intermediate representation like NNVM to be able to target multiple front-ends(TF, MXNet) and backends(Torch7, MXNet) with common set of optimizations.
  • Test bed on common reusable modules for DL system. TinyFlow, together with other systems(e.g. MXNet) can be used as testbed on the common reusable modules in deep learning to encourage front-end, optimization module and backends that are shared across frameworks.
  • Just for fun :)

We believe the Unix Philosophy can building learning system more fun and everyone can be able to build and understand learning system better.

The Design

  • The graph construction API is automatically reused from NNVM
  • We choose Torch7 as the default operator execution backend.
    • So TinyFlow can also be called "TorchFlow" since it is literally TensorFlow on top of Torch:)
    • This allows us to quickly implement the operators and focus code on the system part.
  • We intentionally choose to avoid using MXNet as front or backend, since MXNet already uses NNVM as intermediate layer, and it would be more fun to try something different.

Although it is minimum. TinyFlow still comes with many advanced design concepts in Deep Learning system.

  • Automatic differentiation.
  • Shape/type inference.
  • Static memory allocation for graph for memory efficient training/inference.

The operator implementation is easy Thanks to Torch7. More fun demonstrations will be added to the project.

Dependencies

Most of TinyFlow's code is self-contained.

  • TinyFlow depend on Torch7 for operator supports with minimum code.
    • We use a lightweight lua bridge code from dmlc-core/dmlc/lua.h
  • NNVM is used for graph representation and optimizations

Build

  • Install Torch7
    • For OSX User, please install Torch with Lua 5.1 instead of LuaJIT, i.e. TORCH_LUA_VERSION=LUA51 ./install.sh
  • Set up environment variable TORCH_HOME to root of torch
  • Type make
  • Setup python path to include tinyflow and nnvm
export PYTHONPATH=${PYTHONPATH}:/path/to/tinyflow/python:/path/to/tinyflow/nnvm/python
  • Try example program python example/mnist_softmax.py

Enable Fusion in TinyFlow

  • Build NNVM with Fusion: uncomment fusion plugin part in config.mk, then make
  • Build TinyFlow: enable USE_FUSION in Makefile, then make
  • Try Example program example/mnist_lenet.py, change the config of session from tf.Session(config='gpu') to tf.Session(config='gpu fusion')

About

Tutorial code on how to build your own Deep Learning System in 2k Lines

Resources

Stars

122 stars

Watchers

8 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

TinyFlow: Build Your Own DL System in 2K Lines

TinyFlow is "example code" for NNVM.

It demonstrates how can we build a clean, minimum and powerful computational graph based deep learning system with same API as TensorFlow. The operator code are implemented with Torch7 to reduce the effort to write operators while still demonstrating the concepts of the system (and Embedding Lua in C++ is kinda of fun:).

TinyFlow is a real deep learning system that can run on GPU and CPUs. To support the examples, it takes.

  • 927 lines code for operators
  • 734 lines of code for execution runtime
  • 71 lines of code for API glue
  • 233 lines of code for front-end

Note that more code in operators can easily be added to make it as feature complete as most existing deep learning systems.

What is it for

As explained in the goal of NNVM, it is important to make modular and reusable components for to enable us to build customized learning system easily.

  • Course Material for teaching DL system. TinyFlow can be used to teach student the concepts in deep learning systems.
    • e.g. design homeworks on implementing symbolic differentiation, memory allocation, operator fusion.
  • Experiment bed for learning system researchers. TinyFlow allows easy addition with new system features with the modular design being portable to other system that reuses NNVM.
  • Showcase of intermediate representation usecase. It demonstrates how intermediate representation like NNVM to be able to target multiple front-ends(TF, MXNet) and backends(Torch7, MXNet) with common set of optimizations.
  • Test bed on common reusable modules for DL system. TinyFlow, together with other systems(e.g. MXNet) can be used as testbed on the common reusable modules in deep learning to encourage front-end, optimization module and backends that are shared across frameworks.
  • Just for fun :)

We believe the Unix Philosophy can building learning system more fun and everyone can be able to build and understand learning system better.

The Design

  • The graph construction API is automatically reused from NNVM
  • We choose Torch7 as the default operator execution backend.
    • So TinyFlow can also be called "TorchFlow" since it is literally TensorFlow on top of Torch:)
    • This allows us to quickly implement the operators and focus code on the system part.
  • We intentionally choose to avoid using MXNet as front or backend, since MXNet already uses NNVM as intermediate layer, and it would be more fun to try something different.

Although it is minimum. TinyFlow still comes with many advanced design concepts in Deep Learning system.

  • Automatic differentiation.
  • Shape/type inference.
  • Static memory allocation for graph for memory efficient training/inference.

The operator implementation is easy Thanks to Torch7. More fun demonstrations will be added to the project.

Dependencies

Most of TinyFlow's code is self-contained.

  • TinyFlow depend on Torch7 for operator supports with minimum code.
    • We use a lightweight lua bridge code from dmlc-core/dmlc/lua.h
  • NNVM is used for graph representation and optimizations

Build

  • Install Torch7
    • For OSX User, please install Torch with Lua 5.1 instead of LuaJIT, i.e. TORCH_LUA_VERSION=LUA51 ./install.sh
  • Set up environment variable TORCH_HOME to root of torch
  • Type make
  • Setup python path to include tinyflow and nnvm
export PYTHONPATH=${PYTHONPATH}:/path/to/tinyflow/python:/path/to/tinyflow/nnvm/python
  • Try example program python example/mnist_softmax.py

Enable Fusion in TinyFlow

  • Build NNVM with Fusion: uncomment fusion plugin part in config.mk, then make
  • Build TinyFlow: enable USE_FUSION in Makefile, then make
  • Try Example program example/mnist_lenet.py, change the config of session from tf.Session(config='gpu') to tf.Session(config='gpu fusion')

About

Tutorial code on how to build your own Deep Learning System in 2k Lines

Resources

Stars

122 stars

Watchers

8 watching

Forks

Releases

Packages

Contributors

Languages