Files
cs249r_book/slides/tinyml-deploying.qmd
Vijay Janapa Reddi 17c233d71b fix(slides): repair the 6 unique broken tinyMLx/courseware URLs
Follow-up to #1424. The link-rot tracker reported 405 broken URLs on
the Slides site, dominated by `tinyMLx/courseware/raw/master/edX/...`
references. After de-duplicating, only 6 unique URLs were actually
broken — the other ~325 occurrences were references to those same
6 dead targets repeated across the deck inventory pages.

Cross-checking each broken path against the upstream repo's actual
contents (via the GitHub Contents API) revealed two categories:

CATEGORY A — file exists with extended title; URL needs encoding
  - readings/5-11-1.pdf → readings/5-11-1%20Responsible%20AI%20Intro.pdf
  - readings/5-11-3.pdf → readings/5-11-3%20Sustainable%20AI.pdf

  Both upstream files contain the title in the filename
  (e.g. "5-11-1 Responsible AI Intro.pdf"). The bare-number form in our
  source matched the upstream README, which is itself broken; the
  URL-encoded extended form returns 200.

CATEGORY B — file genuinely missing in upstream repo
  - other/2-1-14.pdf      ("Assignment Solution")
  - readings/4-7-11.pdf   ("Deploying a Multi-Tenant Application")
  - slides/3-1-6.pdf      ("What You'll Learn in This Course")
  - slides/5-6-X.pdf      ("Model Conversion") — `X` is a literal placeholder
                           in the upstream README too

  No correct URL exists; the upstream README references these as
  broken links. Replaced the entire `<a>` cell content with an em-dash
  (—), preserving the table layout and the topic name in the adjacent
  cell, but removing the broken link.

Files touched:
  slides/tinyml-mlops.qmd        (2 URL fixes + 1 em-dash)
  slides/tinyml-applications.qmd (1 em-dash)
  slides/tinyml-deploying.qmd    (1 em-dash)
  slides/tinyml-fundamentals.qmd (1 em-dash)

After this lands, the next nightly link-rot run should report Slides
site clean of `tinyMLx/courseware` failures.
2026-04-26 09:18:04 -04:00

412 lines
20 KiB
Plaintext

---
title: "Course 3: Deploying TinyML"
---
```{=html}
<div style="margin-bottom: 1.5rem;">
<a href="tinyml.html" class="btn-outline">← Back to TinyML Overview</a>
<a href="https://github.com/harvard-edge/cs249r_book/releases/download/slides-latest/MLSysBook-TinyML-All.zip" class="btn-accent" target="_blank">Download All (ZIP)</a>
<a href="https://www.edx.org/professional-certificate/harvardx-tiny-machine-learning" class="btn-outline" target="_blank">edX Course</a>
</div>
<!-- ================================================================ -->
<!-- CHAPTER 4: Deploying TinyML -->
<!-- ================================================================ -->
<div class="module-card">
<span class="tag">Chapter 4 · Course 3</span>
<h3>Deploying TinyML</h3>
<p class="module-desc">End-to-end deployment with TensorFlow Lite for Microcontrollers. Covers embedded hardware/software, TFLite Micro internals, and hands-on labs deploying keyword spotting, visual wake words, and gesture recognition on Arduino.</p>
<span class="companion">Textbook companion: <a href="https://mlsysbook.ai/vol1/">Vol I Ch 11, 13</a> · <a href="https://mlsysbook.ai/kits/">Arduino &amp; Seeed Kits</a></span>
</div>
<div class="module-card">
<h4 class="section-header-sm">§4.1 Welcome to Deploying TinyML</h4>
<table class="section-list">
<thead>
<tr><th>Topic</th><th class="dl-col">Type</th></tr>
</thead>
<tbody>
<tr>
<td>Welcome to TinyML3</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/readings/4-1-1.pdf" target="_blank" class="badge-reading">Reading</a></td>
</tr>
<tr>
<td>Welcome Message from VJ</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/slides/4-1-2.pdf" target="_blank" class="badge-slides">Slides</a></td>
</tr>
<tr>
<td>Course 1 and 2 Recap</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/readings/4-1-3.pdf" target="_blank" class="badge-reading">Reading</a></td>
</tr>
<tr>
<td>TinyML Application Deployment Preview</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/slides/4-1-6.pdf" target="_blank" class="badge-slides">Slides</a></td>
</tr>
<tr>
<td>The TinyML Kit</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/readings/4-1-7.pdf" target="_blank" class="badge-reading">Reading</a></td>
</tr>
<tr>
<td>TinyML Course Kit Overview</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/slides/4-1-8.pdf" target="_blank" class="badge-slides">Slides</a></td>
</tr>
<tr>
<td>How the Course is Structured</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/slides/4-1-11.pdf" target="_blank" class="badge-slides">Slides</a></td>
</tr>
</tbody>
</table>
</div>
<div class="module-card">
<h4 class="section-header-sm">§4.2 Getting Started</h4>
<table class="section-list">
<thead>
<tr><th>Topic</th><th class="dl-col">Type</th></tr>
</thead>
<tbody>
<tr>
<td>C++ for Python Users</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/readings/4-2-2.pdf" target="_blank" class="badge-reading">Reading</a></td>
</tr>
<tr>
<td>Setting up your Hardware</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/readings/4-2-3.pdf" target="_blank" class="badge-reading">Reading</a></td>
</tr>
<tr>
<td>Setting up your Software</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/readings/4-2-5.pdf" target="_blank" class="badge-reading">Reading</a></td>
</tr>
<tr>
<td>The Arduino Blink Example</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/readings/4-2-8.pdf" target="_blank" class="badge-reading">Reading</a></td>
</tr>
<tr>
<td>Testing the TensorFlow Install</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/readings/4-2-10.pdf" target="_blank" class="badge-reading">Reading</a></td>
</tr>
<tr>
<td>Testing the Sensors</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/readings/4-2-13.pdf" target="_blank" class="badge-reading">Reading</a></td>
</tr>
</tbody>
</table>
</div>
<div class="module-card">
<h4 class="section-header-sm">§4.3 Embedded Hardware and Software</h4>
<table class="section-list">
<thead>
<tr><th>Topic</th><th class="dl-col">Type</th></tr>
</thead>
<tbody>
<tr>
<td>Embedded System</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/slides/4-3-1.pdf" target="_blank" class="badge-slides">Slides</a></td>
</tr>
<tr>
<td>Diversity of Embedded Systems</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/readings/4-3-2.pdf" target="_blank" class="badge-reading">Reading</a></td>
</tr>
<tr>
<td>Embedded Computing Hardware</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/slides/4-3-3.pdf" target="_blank" class="badge-slides">Slides</a></td>
</tr>
<tr>
<td>Diversity of Embedded Microcontrollers</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/readings/4-3-4.pdf" target="_blank" class="badge-reading">Reading</a></td>
</tr>
<tr>
<td>Embedded I/O</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/slides/4-3-5.pdf" target="_blank" class="badge-slides">Slides</a></td>
</tr>
<tr>
<td>Transducer Modules and Wireless Communication</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/readings/4-3-6.pdf" target="_blank" class="badge-reading">Reading</a></td>
</tr>
<tr>
<td>Embedded System Software</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/slides/4-3-8.pdf" target="_blank" class="badge-slides">Slides</a></td>
</tr>
<tr>
<td>Arduino cores, frameworks, mbedOS, and 'bare metal'</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/readings/4-3-9.pdf" target="_blank" class="badge-reading">Reading</a></td>
</tr>
<tr>
<td>Embedded ML Software</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/slides/4-3-10.pdf" target="_blank" class="badge-slides">Slides</a></td>
</tr>
</tbody>
</table>
</div>
<div class="module-card">
<h4 class="section-header-sm">§4.4 TensorFlow Lite Micro</h4>
<table class="section-list">
<thead>
<tr><th>Topic</th><th class="dl-col">Type</th></tr>
</thead>
<tbody>
<tr>
<td>What is TensorFlow Lite for Microcontrollers?</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/readings/4-4-1.pdf" target="_blank" class="badge-reading">Reading</a></td>
</tr>
<tr>
<td>TFMicro: The Big Picture</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/slides/4-4-2.pdf" target="_blank" class="badge-slides">Slides</a></td>
</tr>
<tr>
<td>TFLite Micro: Interpreter</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/slides/4-4-5.pdf" target="_blank" class="badge-slides">Slides</a></td>
</tr>
<tr>
<td>MCU Memory Hierarchy</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/readings/4-4-6.pdf" target="_blank" class="badge-reading">Reading</a></td>
</tr>
<tr>
<td>TFLite Micro: Model Format / FlatBuffer</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/slides/4-4-7.pdf" target="_blank" class="badge-slides">Slides</a></td>
</tr>
<tr>
<td><a href="https://colab.research.google.com/github/tinyMLx/colabs/blob/master/4-4-8-Flatbuffers.ipynb" target="_blank">TensorFlow Lite Flatbuffer Manipulation Colab</a></td>
<td class="dl-col"><span class="badge-colab">Colab</span></td>
</tr>
<tr>
<td>TFLite Micro: Memory Allocation (Tensor Arena)</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/slides/4-4-10.pdf" target="_blank" class="badge-slides">Slides</a></td>
</tr>
<tr>
<td>TFLite Micro: NN Operator Support (OpsResolver)</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/slides/4-4-11.pdf" target="_blank" class="badge-slides">Slides</a></td>
</tr>
<tr>
<td>TFLite Micro Developer Design Principles</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/readings/4-4-12.pdf" target="_blank" class="badge-reading">Reading</a></td>
</tr>
</tbody>
</table>
</div>
<div class="module-card">
<h4 class="section-header-sm">§4.5 Keyword Spotting</h4>
<table class="section-list">
<thead>
<tr><th>Topic</th><th class="dl-col">Type</th></tr>
</thead>
<tbody>
<tr>
<td>TinyML "Keyword Spotting" Workflow</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/readings/4-5-1.pdf" target="_blank" class="badge-reading">Reading</a></td>
</tr>
<tr>
<td>KWS Application Architecture</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/slides/4-5-2.pdf" target="_blank" class="badge-slides">Slides</a></td>
</tr>
<tr>
<td>KWS Initialization</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/slides/4-5-3.pdf" target="_blank" class="badge-slides">Slides</a></td>
</tr>
<tr>
<td>KWS Pre-processing</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/slides/4-5-6.pdf" target="_blank" class="badge-slides">Slides</a></td>
</tr>
<tr>
<td>KWS Inference</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/slides/4-5-9.pdf" target="_blank" class="badge-slides">Slides</a></td>
</tr>
<tr>
<td>KWS Post-processing</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/slides/4-5-12.pdf" target="_blank" class="badge-slides">Slides</a></td>
</tr>
<tr>
<td>KWS Summary</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/slides/4-5-14.pdf" target="_blank" class="badge-slides">Slides</a></td>
</tr>
</tbody>
</table>
</div>
<div class="module-card">
<h4 class="section-header-sm">§4.6 Custom Dataset Engineering for Keyword Spotting</h4>
<table class="section-list">
<thead>
<tr><th>Topic</th><th class="dl-col">Type</th></tr>
</thead>
<tbody>
<tr>
<td>Recap Dataset Engineering</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/readings/4-6-1.pdf" target="_blank" class="badge-reading">Reading</a></td>
</tr>
<tr>
<td>Introducing Custom Dataset for KWS</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/slides/4-6-2.pdf" target="_blank" class="badge-slides">Slides</a></td>
</tr>
<tr>
<td>Things to Consider for Your Data Collection Plan</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/readings/4-6-3.pdf" target="_blank" class="badge-reading">Reading</a></td>
</tr>
<tr>
<td>Building a Custom Dataset</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/readings/4-6-6.pdf" target="_blank" class="badge-reading">Reading</a></td>
</tr>
<tr>
<td>Train and Deploy Your Custom Dataset KWS Model</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/readings/4-6-8.pdf" target="_blank" class="badge-reading">Reading</a></td>
</tr>
</tbody>
</table>
</div>
<div class="module-card">
<h4 class="section-header-sm">§4.7 Visual Wake Words</h4>
<table class="section-list">
<thead>
<tr><th>Topic</th><th class="dl-col">Type</th></tr>
</thead>
<tbody>
<tr>
<td>Recap: What are Visual Wake Words?</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/readings/4-7-1.pdf" target="_blank" class="badge-reading">Reading</a></td>
</tr>
<tr>
<td>Person Detection Application Architecture</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/slides/4-7-2.pdf" target="_blank" class="badge-slides">Slides</a></td>
</tr>
<tr>
<td>Person Detection with KWS: MultiModal</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/slides/4-7-5.pdf" target="_blank" class="badge-slides">Slides</a></td>
</tr>
<tr>
<td>Person Detection with KWS: MultiTenancy</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/slides/4-7-6.pdf" target="_blank" class="badge-slides">Slides</a></td>
</tr>
<tr>
<td>MultiTenancy in TensorFlow Lite Micro</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/slides/4-7-8.pdf" target="_blank" class="badge-slides">Slides</a></td>
</tr>
<tr>
<td>Deploying the Pretrained Person Detection Model</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/readings/4-7-9.pdf" target="_blank" class="badge-reading">Reading</a></td>
</tr>
<tr>
<td>Deploying a Multi-Tenant Application</td>
<td class="dl-col">—</td>
</tr>
</tbody>
</table>
</div>
<div class="module-card">
<h4 class="section-header-sm">§4.8 Gesture Recognition — Magic Wand</h4>
<table class="section-list">
<thead>
<tr><th>Topic</th><th class="dl-col">Type</th></tr>
</thead>
<tbody>
<tr>
<td>Recap: Time Series for Anomaly Detection</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/readings/4-8-1.pdf" target="_blank" class="badge-reading">Reading</a></td>
</tr>
<tr>
<td>TinyML Sensor Ecosystem</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/slides/4-8-2.pdf" target="_blank" class="badge-slides">Slides</a></td>
</tr>
<tr>
<td>Anatomy of an IMU</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/readings/4-8-3.pdf" target="_blank" class="badge-reading">Reading</a></td>
</tr>
<tr>
<td>Magic Wand Application</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/slides/4-8-4.pdf" target="_blank" class="badge-slides">Slides</a></td>
</tr>
<tr>
<td>Magic Wand Application Architecture</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/slides/4-8-5.pdf" target="_blank" class="badge-slides">Slides</a></td>
</tr>
<tr>
<td>Understanding the Magic Wand Application</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/readings/4-8-6.pdf" target="_blank" class="badge-reading">Reading</a></td>
</tr>
<tr>
<td>Deploying the Magic Wand</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/readings/4-8-8.pdf" target="_blank" class="badge-reading">Reading</a></td>
</tr>
<tr>
<td>Collecting Data for Your Custom Magic Wand Project</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/readings/4-8-10.pdf" target="_blank" class="badge-reading">Reading</a></td>
</tr>
<tr>
<td>Training and Deploying Your Custom Magic Wand Project</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/readings/4-8-12.pdf" target="_blank" class="badge-reading">Reading</a></td>
</tr>
</tbody>
</table>
</div>
<div class="module-card">
<h4 class="section-header-sm">§4.9 Responsible AI Deployment</h4>
<table class="section-list">
<thead>
<tr><th>Topic</th><th class="dl-col">Type</th></tr>
</thead>
<tbody>
<tr>
<td>Privacy</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/slides/4-9-1.pdf" target="_blank" class="badge-slides">Slides</a></td>
</tr>
<tr>
<td>Privacy</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/other/4-9-3.pdf" target="_blank" class="badge-reading">Reading</a></td>
</tr>
<tr>
<td>Security</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/slides/4-9-4.pdf" target="_blank" class="badge-slides">Slides</a></td>
</tr>
<tr>
<td><a href="https://colab.research.google.com/github/tinyMLx/colabs/blob/master/4-9-6-Attacking-KWSModel.ipynb" target="_blank">Attacking a KWS Model in Colab</a></td>
<td class="dl-col"><span class="badge-colab">Colab</span></td>
</tr>
<tr>
<td>Why do ML Models Fail after Deployment?</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/readings/4-9-8.pdf" target="_blank" class="badge-reading">Reading</a></td>
</tr>
<tr>
<td>Monitoring after Deployment</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/slides/4-9-9.pdf" target="_blank" class="badge-slides">Slides</a></td>
</tr>
</tbody>
</table>
</div>
<div class="module-card">
<h4 class="section-header-sm">§4.10 Summary</h4>
<table class="section-list">
<thead>
<tr><th>Topic</th><th class="dl-col">Type</th></tr>
</thead>
<tbody>
<tr>
<td>Congratulations! You Made it to the Finish Line!</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/slides/4-10-1.pdf" target="_blank" class="badge-slides">Slides</a></td>
</tr>
<tr>
<td>What Comes Next: Advanced Topics in TinyML</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/readings/4-10-2.pdf" target="_blank" class="badge-reading">Reading</a></td>
</tr>
<tr>
<td>What Do I Do Now?</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/slides/4-10-3.pdf" target="_blank" class="badge-slides">Slides</a></td>
</tr>
<tr>
<td>TinyMLx Project Extension (Optional)</td>
<td class="dl-col"><a href="https://github.com/tinyMLx/courseware/raw/master/edX/readings/4-10-4.pdf" target="_blank" class="badge-reading">Reading</a></td>
</tr>
</tbody>
</table>
</div>
```
::: {.callout-note}
These materials were originally developed for the [HarvardX Professional Certificate in Tiny Machine Learning](https://www.edx.org/professional-certificate/harvardx-tiny-machine-learning) on edX. See the [original curriculum](tinyml/README-edx-original.md) for the full item-by-item breakdown including forum prompts and quizzes not listed above.
:::