changh95 commited on
Commit
3696119
·
verified ·
1 Parent(s): 8106c11

Add files using upload-large-folder tool

Browse files
Files changed (38) hide show
  1. README.md +106 -298
  2. image/blobs/sha256/05377a9e9bca6629850adb9f83b736bed1a337417a42f4fbc7939cb070e4103c +1 -0
  3. image/blobs/sha256/09a2b4b5da7d9c4dc9fcecdf9587d215738b5a001cc1f544754aa2471f17ccf4 +1 -0
  4. image/blobs/sha256/0b00322e10db8938039548659894c55192e2ed4bbc1305c1bb9db98646afb9ce +1 -0
  5. image/blobs/sha256/1045a45a3f55e192bbc825ed2ad291fa1c548e767860db71be78502aabb6971e +0 -0
  6. image/blobs/sha256/1992bd3360f71a1c0e629ec18d01db28cacf924d57da902ee8d53a87c4fdf077 +1 -0
  7. image/blobs/sha256/1a032fb77dbde7874914c0efd0a0560300938f33c3de47c86acc09a382af5ba1 +1 -0
  8. image/blobs/sha256/20fc3f63a37e2e97136281a7bea918f951867dcda5d6a8220cbb8c451842e2c6 +1 -0
  9. image/blobs/sha256/2913e7d4aae3b053b2337c0f74236067652783d528ac5e6d56a85f13b8e2be28 +0 -0
  10. image/blobs/sha256/297cc480b713b9d9e67d9705f6fb5083b1d0a71c3e00adb6d2fb544fd181bc90 +1 -0
  11. image/blobs/sha256/35c97e50ac6404ce6bb0bc653d1d7b75da4c727139f6ad4c2fb4349ab36ddf74 +0 -0
  12. image/blobs/sha256/473ec4813d862cfcaafff1d3b604c787be8aba9130a29d77aa6260545e33a204 +0 -0
  13. image/blobs/sha256/4846ed2c3340e69f871c5bb70dffde2e47cf3e2e29799264f1c6e5e3f487a655 +1 -0
  14. image/blobs/sha256/51bace3613cab52c178386031b223837c9eced816f3b74c2016f9355c343c3c7 +1 -0
  15. image/blobs/sha256/5628e13ce208b83d793af15fa41c28d1702e7a43e27c8c72944442d01e959a71 +1 -0
  16. image/blobs/sha256/5c5e6730f02ae4b11cd2835d46daea29c72eb09a77567aaf944d2d50288f2467 +1 -0
  17. image/blobs/sha256/5cf1af4a91c109c471f328139d54b01ecb2fc30e1d719163250fdc106e1bae19 +1 -0
  18. image/blobs/sha256/5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef +0 -0
  19. image/blobs/sha256/783bf7cca84ebcb9f4871153860aac9bf83c54d246bbdba3468c4ad19cc64814 +1 -0
  20. image/blobs/sha256/7f5224b468f7a4cf2e976cc3a9667b07c57b434f0d2949c376e5266dd636d8ba +1 -0
  21. image/blobs/sha256/82d59d07267825fcd4ef561fb9947c582b27c60dcd5422a27900b2087ba56e89 +1 -0
  22. image/blobs/sha256/8c27526b713a72bd442a649055f125a7642d8a9d81bec1aaeafd010d5e75f09b +1 -0
  23. image/blobs/sha256/90e294f7896d636a22eb471381c0541ec2583d6e4d87a3330ee603c712058373 +0 -0
  24. image/blobs/sha256/a3929a30463ca9f7e79676224374be8724d0e0b5971b6366028dad8abdd119b4 +1 -0
  25. image/blobs/sha256/b1e032b4456fa68570df12ada4bae732152fe690d883e20315312e9311e8aefb +1 -0
  26. image/blobs/sha256/b619284fc58a2511f0e2cf87c6407029e1912483daf54d9081ec13201367482b +0 -0
  27. image/blobs/sha256/bad2ac50381c951e4a06263ad41715f3eff03ac32a5c02b31546928a1b435ca8 +1 -0
  28. image/blobs/sha256/d289e67a5acf53049af3e14fd2a36d1afbfcafa54dc20de726fb06bb13ce2d23 +1 -0
  29. image/blobs/sha256/dcc7c4d7314823f2580f5dd1001063cd7574a7b6f1fdb1a7393b1b1578f93b89 +1 -0
  30. image/blobs/sha256/e4a3caad98453047bb9214acfacdd96b2e2a9f7f6848c3a9b996517022f57223 +1 -0
  31. image/blobs/sha256/eb5b37a32a219394704bc5e4f333758d38742ca4e247bcd28b5a44b42b97a327 +1 -0
  32. image/blobs/sha256/f22d2a87583a45d1c172ba963719a2ee0f27530e83acef41dc1680e6770e308a +1 -0
  33. image/index.json +1 -0
  34. image/manifest.json +1 -0
  35. image/oci-layout +1 -0
  36. image/repositories +1 -0
  37. requirements.lock +83 -0
  38. tt_kernel_manifest.json +111 -0
README.md CHANGED
@@ -1,342 +1,150 @@
1
  ---
2
- pipeline_tag: keypoint-detection
3
  tags:
4
- - tenstorrent
5
  - blackhole
6
  - p150
7
- - ttnn
8
- - tt-metal
9
- - tt-nn
10
- - keypoint-detection
11
- - superpoint
12
- base_model:
13
- - magic-leap-community/superpoint
14
- license: other
15
- license_name: magic-leap-superpoint
16
- license_link: https://huggingface.co/magic-leap-community/superpoint
17
  ---
18
 
19
- # SuperPoint on Tenstorrent Blackhole
20
 
21
- SuperPoint keypoint detection and description, running on a single Tenstorrent Blackhole p150 via tt-nn, with the NMS loop closed on device.
22
 
23
- **40.7 fps end-to-end (480x640, batch 1) with on-device NMS; PCC >= 0.997 vs the fp32 torch reference.**
24
 
25
- | | |
26
- |---|---|
27
- | Hardware | Tenstorrent Blackhole **p150a** (single chip) |
28
- | Runtime | [tt-metal](https://github.com/tenstorrent/tt-metal) / tt-nn |
29
- | Upstream model | [huggingface.co/magic-leap-community/superpoint](https://huggingface.co/magic-leap-community/superpoint) |
30
- | Port source | [github.com/changh95/tt-superpoint](https://github.com/changh95/tt-superpoint) |
31
 
32
- > [!IMPORTANT]
33
- > This repo holds **model code, not weights.** It is a tt-nn port that runs against a
34
- > built `tt-metal` checkout on a machine with a Blackhole card; weights are fetched
35
- > from the upstream repo above. See *Licensing* at the end for terms.
36
 
37
- ---
 
 
 
38
 
39
- ## Project README
40
 
41
- SuperPoint keypoint-detection inference on a single Tenstorrent Blackhole
42
- (p150a/p150b) accelerator, implemented with tt-nn.
43
 
44
- Reference: `magic-leap-community/superpoint` on Hugging Face.
45
- Input: single-image, 480×640, batch size 1.
 
 
46
 
47
- ## Running
 
 
48
 
49
- Prereqs:
50
- - A built `tt-metal` checkout (the `ttnn` runtime is loaded from there).
51
- - Python 3.12 venv with `torch`, `torchvision`, `transformers`, and
52
- `loguru` installed.
53
- - One visible Blackhole chip.
54
 
55
  ```bash
56
- TT_METAL_DIR=/absolute/path/to/tt-metal \
57
- DEVICE_ID=0 \
58
- SP_N_ITER=100 \
59
- SP_TRACE_NMS=1 \
60
- bash run_benchmark.sh
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
61
  ```
62
 
63
- `SP_TRACE_NMS=1` closes the NMS loop on device via the fused
64
- `ttnn.experimental.sp_eq_mul_mask` kernel — that's the fast e2e path
65
- (**40.7 fps** on a natural image vs 17 fps with host NMS). Omit the flag
66
- to run the pure-forward trace with host NMS.
 
 
 
 
 
67
 
68
- ## Sample output
 
69
 
70
- Top-500 tt-nn keypoints overlaid on the resized (480×640) sample image.
71
- Circle radius is proportional to keypoint score.
72
 
73
- ![tt-nn SuperPoint keypoints on the sample image](media/sample.png)
 
 
 
 
 
74
 
75
- Reproduce with:
76
 
77
- ```bash
78
- TT_METAL_DIR=/absolute/path/to/tt-metal \
79
- DEVICE_ID=0 \
80
- PYTHONPATH=.:$TT_METAL_DIR:$TT_METAL_DIR/ttnn \
81
- TT_METAL_HOME=$TT_METAL_DIR ARCH_NAME=blackhole \
82
- python models/visualize.py
83
- ```
84
 
85
- ## Final results (Blackhole p150b, 480×640, batch 1, natural image)
86
 
87
- ### PCC vs Hugging Face reference (fp32 CPU torch)
88
 
89
  | Tensor | PCC |
90
  |---|---:|
91
  | Pre-NMS score map | **0.9971** |
92
- | Descriptor map (pre grid-sample, post L2-norm) | **0.9991** |
93
-
94
- PCC ≥ 0.99 across both outputs — meets the project's hard accuracy floor.
95
-
96
- ### Keypoint-set evaluation (GT = Hugging Face reference on real image)
97
-
98
- Real photograph (`sample_data/house_in_field_1080p.jpg`), top-K = 500,
99
- matching radius = 2 pixels:
100
 
101
- | Metric | tt-nn vs torch reference |
102
- |---|---:|
103
- | Recall | **98.80%** |
104
- | Precision | **98.80%** |
105
- | **F1** | **98.80%** |
106
-
107
- For the synthetic `torch.rand` input (distribution the model was not
108
- trained on), F1 is 97.80% — included as a stability check, not an
109
- accuracy claim.
110
-
111
- ### Throughput
112
 
113
- Two traced inference paths are available; pick via the `SP_TRACE_NMS` env var.
 
114
 
115
- **Forward-only trace (`SP_TRACE_NMS=0`) — pure device compute, host-side NMS**
116
-
117
- | Metric | Random input | Natural image | Paper (Titan X, 2018 Caffe) |
118
  |---|---:|---:|---:|
119
- | **Device forward (input pre-resident)** | **355.26 fps** | **355.37 fps (2.81 ms)** | 90 fps (11.15 ms) |
120
- | Traced forward incl. per-frame H2D | 73.58 fps | 73.55 fps | — |
121
- | `fps_match_paper` (forward + descriptor sampling) | 41.95 fps | 42.66 fps | 70 fps (13 ms) |
122
- | Full e2e (incl. host NMS) | 17.50 fps | 17.00 fps | not reported |
123
 
124
- **Forward + device NMS (`SP_TRACE_NMS=1`) — fused `sp_eq_mul_mask` closes the NMS loop on device**
 
 
 
125
 
126
- | Metric | Random input | Natural image | Paper (Titan X, 2018 Caffe) |
127
- |---|---:|---:|---:|
128
- | Device forward + device NMS (pre-resident) | 85.59 fps | 85.60 fps (11.68 ms) | 90 fps (11.15 ms) |
129
- | Traced forward+NMS incl. per-frame H2D | 44.55 fps | 44.56 fps | — |
130
- | `fps_match_paper` (forward + descriptor sampling) | 28.46 fps | 29.18 fps | 70 fps (13 ms) |
131
- | **Full e2e (no host NMS)** | **40.69 fps** | **40.73 fps** | not reported |
132
-
133
- **E2E win**: moving NMS on-device via the fused `sp_eq_mul_mask` C++ kernel
134
- plus a stack of dispatch/host-side cleanups pushes end-to-end throughput from
135
- **17.0 → 40.73 fps** on the natural image (**+140%**) and
136
- **17.5 → 40.69 fps** on random (**+132%**). PCC and F1 are preserved to the
137
- last digit (0.9971 / 98.80% on natural).
138
-
139
- The device-NMS trace absorbs the 36 ms host simple_nms into ~7 ms of extra
140
- device-side work (fold + `max_pool2d` + `sp_eq_mul_mask` + row-major
141
- channel-0 slice) — that's why `compute_only` and `match_paper` look lower in
142
- the second table: the traced region now does strictly more work. Pure forward
143
- fps is unchanged.
144
-
145
- E2E per-phase breakdown (SP_TRACE_NMS=1, natural image, ms/iter):
146
-
147
- | Phase | ms |
148
- |---|---:|
149
- | Compute-phase (Python dispatch + event records; trace runs async) | 8.4 |
150
- | D2H (descriptor tile + single-channel NMS map, 2× `ttnn.to_torch`) | 14.3 |
151
- | Host post (keypoint extraction + grid_sample) | 1.8 |
152
-
153
- D2H is dominated by ttnn's per-call `from_device` dispatch cost (~6–9 ms per
154
- call even on a 614 KB tensor); it's the same runtime floor that caps H2D at
155
- ~10.7 ms. Input double-buffering to hide H2D behind trace was tried twice
156
- and regressed (see the Reverts table) — the fix would need a 1-channel NMS
157
- kernel to cut layout conversions out of the trace, or a batched D2H API.
158
-
159
- Measurement methodology: 10-iteration inner loop per metric, SP_N_ITER=100 for
160
- stable numbers. Compute-only uses `blocking=False` + a single final sync;
161
- traced forward adds per-frame `load_input_prepared` (H2D of the pre-cast bf16
162
- host tensor) on cq_id=1, overlapping the trace on cq_id=0. E2E uses the same
163
- dual-CQ pattern + a blocking D2H of the single-channel NMS output.
164
-
165
- ### Comparison read
166
-
167
- - **Device forward pass hits 353 fps on a natural image — 3.9× the 2018 Titan X
168
- baseline.** This is the SRAM-effective number: the traced forward replay
169
- fits entirely in on-chip L1 with only block 0/1's activations spilling to
170
- DRAM (per-slice, bounded by the 1.5 MB/core ceiling). Weights stay
171
- resident across invocations because trace owns the allocator.
172
- - `inference_speed` (per-frame H2D included) drops to ~72 fps because
173
- `ttnn.copy_host_to_device_tensor` carries a ~10.7 ms-per-call fixed Python
174
- dispatch cost independent of payload size. That's a ttnn runtime
175
- characteristic, not hardware — the PCIe 4.0×16 payload is 600 KB (~20 µs at
176
- line rate). Dual command queues hide compute behind H2D but not vice versa
177
- because H2D > compute.
178
- - `fps_match_paper` (the metric that lines up with the paper's 13 ms figure)
179
- is at **60%** of paper when paying the per-frame H2D cost each call, and
180
- exceeds the paper's 70 fps on pure compute (353 fps).
181
- - End-to-end incl. NMS is lower because the paper does not include NMS in
182
- its timing.
183
-
184
- ## Optimization trajectory
185
-
186
- Recorded experiment-by-experiment in `results.tsv`. The commits cited
187
- here are short hashes from the branch the work was developed on.
188
-
189
- ### Biggest wins (cumulative)
190
-
191
- | # | Change | Before → After (fps_traced) | Notes |
192
- |---|---|---:|---|
193
- | 1 | Initial port (LoFi, bfloat8 weights) | 0 → **5.85** | Score PCC 0.70 — below 99% floor |
194
- | 2 | HiFi2 + bfloat16 weights + fp32 accumulator (`b0ecf6a`) | 5.85 → **6.41** | PCC jumps to 0.997 — now meets spec |
195
- | 3 | Descriptor L2-norm moved to device (`1c2a582`) | 6.41 → **6.59** | +2.9% |
196
- | 4 | **`ttnn.trace` captures the device forward** (`5a705bd`) | 6.59 → **71.31** | **10.8×** — Python dispatch was 97% of wall-clock |
197
- | 5 | 2 command queues (H2D on CQ1 overlapped with compute) (`787eff6`) | 71.31 → **72.04** | +1% |
198
- | 6 | Single-pass NMS on host (replaces HF's 3-pass tie-expansion loop) | (e2e: 6.23 → **16.5 fps**) | Host NMS was 119 ms/iter; single pass ~36 ms; F1 98.8% preserved |
199
- | 7 | Device softmax (verified `ttnn.softmax` respects 65-dim logical shape) (`7d1c378`) | 73.60 | accuracy-neutral; unblocks future on-device post-proc |
200
- | 8 | **SRAM diagnostic + prebuild host bf16 input once** (`62f112d`) | 73.60 → **353.31** (compute-only) | Isolated ttnn's per-call Python H2D dispatch cost (~10.7 ms/call, payload-independent) from actual device compute (2.83 ms/iter) — hardware forward-pass fps is **3.9×** the paper on natural image |
201
- | 9 | **Fused `sp_eq_mul_mask` closes NMS loop on device** | (e2e: 17.00 → **24.11 fps**) | Replaces the 36 ms host simple_nms with `ttnn.max_pool2d` + the fused C++ kernel (`ttnn.experimental.sp_eq_mul_mask`) + an on-device channel-0 slice. 7 ms of extra trace work saves 36 ms of host work. F1 unchanged at 98.80%; PCC unchanged at 0.9971. |
202
- | 10 | **Drop redundant `synchronize_device` before D2H** | (e2e: 24.11 → **34.28 fps**, +40%) | The explicit full-device sync before the D2H phase was forcing CQ1's pipelined H2D to drain at the same time as CQ0's trace; the first `ttnn.to_torch` on CQ0 already blocks implicitly on trace completion, so the sync was pure serialization. One-line removal. |
203
- | 11 | Drop redundant `.contiguous()` before `.float()` on descriptor | (e2e: 34.28 → 38.11 fps, +6%) | `.float()` on a non-contiguous bf16 tensor already allocates a contiguous fp32 copy; the intermediate `.contiguous()` was doing a second 1.2 MB bf16→bf16 copy. Host post phase 4.5 → 2.3 ms. |
204
- | 12 | Skip `.float()` on `nms_scores`, keep bf16 | (e2e: 38.11 → 39.87 fps, +4.6%) | `torch.nonzero`, `torch.topk` and indexing all support bf16; only the keypoint coords need an fp32 cast at `grid_sample` call-site (`kp.float()[None]`). Saves a ~1 ms 614 KB bf16→fp32 host copy per iter. |
205
- | 13 | Consolidate intermediate reshapes in `_device_fold_and_nms` | (e2e: 39.87 → **40.73 fps**, +2.2%) | Two intermediate reshape views — `(b,enc_h,enc_w,64)` and `(b,H,W,1)` — were unnecessary. Reshape directly from row-major `(b,1,enc_h·enc_w,64)` to 5D `(b,enc_h,enc_w,8,8)` pre-permute, and from the permuted tensor to flat `(1,1,b·H·W,1)` post-permute. |
206
-
207
- ### Reverts (PCC fell below 99% or no wall-clock gain)
208
-
209
- | Change | Why reverted |
210
- |---|---|
211
- | bfloat8_b weights on encoder (whole) | score PCC dropped to 0.91 |
212
- | bfloat8_b weights on encoder block 0 only | score PCC 0.91 |
213
- | Encoder math fidelity LoFi (with bf16 weights + fp32 acc) | score PCC 0.91 |
214
- | DRAM slice counts `(2,1,1,1)` and `(2,2,1,1)` | block-0 L1 CB overflow 1.58 MB > 1.57 MB |
215
- | DRAM slice counts `(4,1,1,1)` | block-1 L1-full slower than 2-slice DRAM |
216
- | `enable_weights_double_buffer=True` on convs | slower (tighter CBs) |
217
- | `enable_act_double_buffer=True` | within noise |
218
- | `reallocate_halo_output=True` | no effect |
219
- | `full_inner_dim=True` | no effect |
220
- | `act_block_h_override=32` on block 0 | no improvement |
221
- | `BLOCK_SHARDED` on encoder block 3 | no benefit at 60×80 |
222
- | `deallocate_activation=True` on convs | marginal regression |
223
- | `WIDTH_SHARDED` on block 0 | OOM — 1-channel input can't distribute across banks |
224
- | Device NMS via standalone trace | per-op Python dispatch ate the savings (+6% for +code) |
225
- | Device fold+NMS Python-composed (pre-fused-kernel) (`36dc956`) | Used to be net-negative: 6 ms fold + host compare/mask cancelled the 36 ms host-NMS saving. **Superseded**: once `sp_eq_mul_mask` closes the compare+mask on device, the same fold chain becomes net-positive (+41% e2e, now the default via `SP_TRACE_NMS=1`). |
226
- | Pack descriptor + NMS into one tensor for a single D2H | Tile→row-major layout conversion on 1.2 MB descriptor + `ttnn.concat` added ~7 ms of trace work AND blew up D2H to 53.5 ms (likely the combined tensor broke amortization of trace-tail wait). e2e 34.28 → 14.07 — biggest regression of the whole project. |
227
- | `ThreadPoolExecutor` for host post-processing | Post is only 2–4 ms; the worker-thread submit/result barrier added ~0.6 ms and GIL contention with `ttnn.to_torch` pushed D2H up. Net flat within noise. |
228
- | Both D2Hs as `from_device(blocking=False)` + `synchronize_device` | CQ0 dispatch serializes internally regardless; flat (35.89 vs 35.94 baseline). |
229
- | Cast descriptor to `bfloat8_b` before D2H | Halves the device payload (1.2 MB → 614 KB) but the host-side bf8→fp32 unpack path was *slower* than bf16→fp32 — D2H grew 14.3 → 17.2 ms. Descriptor PCC held at 0.9991 so quality was fine; purely a ttnn host-unpack cost issue. |
230
- | Skip `to_memory_config(DRAM)` before `to_layout(TILE)` on `s_pooled` | CRASH: `ttnn.max_pool2d`'s sharded output has shard shape (2793, 32) which isn't tile-aligned; `to_layout(TILE)` rejects sharded input unless shards are tile-aligned. Must interleave to DRAM first. |
231
- | Input double-buffering (two `tt_in` buffers, two captured traces, alternating) | Tried twice — once with D2H split across CQs and once with D2H unchanged — BOTH regressed e2e to ~36 fps. Host post phase consistently jumped 1.8 → 4.4–4.7 ms even with identical post code; suspected DRAM contention between concurrent CQ1 H2D and CQ0 trace, or event-scheduling overhead with two tids. Requires tracy profiling to diagnose; not worth pursuing without profiler data. |
232
-
233
- ### What each run taught
234
-
235
- - **Precision is a cliff, not a slope.** Either encoder ran in `bfloat16 +
236
- HiFi2 + fp32 accumulator` and PCC stayed ≥ 0.997, or it didn't and PCC
237
- fell off to ~0.91 immediately. No halfway config worked.
238
- - **Trace is the biggest unlock by far.** Before trace, device compute was
239
- ~3% of wall. After trace it became the bulk of wall. Everything else is
240
- small-percentage tuning.
241
- - **Structural knobs (DRAM slicing, shard layout, act block) converged at
242
- the baseline.** On this tiny (~1.3 M-param) model, the auto-chosen
243
- configs are close enough to optimal that explicit overrides mostly turn
244
- into noise or CB overflow.
245
- - **NMS is the dominant host cost** once trace is on. The 9×9 max-pool at
246
- 480×640 is what gates end-to-end throughput. Single-pass instead of 3-pass
247
- eliminated a 119 ms/iter wall.
248
-
249
- ### Attempted but not completed
250
-
251
- - **Full fold + NMS inside the traced forward.** **LANDED and wins +41% e2e**
252
- (opt-in via `SP_TRACE_NMS=1`). The page-alignment error was fixed by
253
- pinning every reshape to `DRAM_MEMORY_CONFIG` and materialising the
254
- zero-padding tensor once (trace capture rejects in-trace `ttnn.zeros`
255
- writes). The previously-blocking overhead — a Python-composed
256
- eq + multiply that cost ~1.5 ms per extra op in the trace — is now
257
- replaced by the single-dispatch `ttnn.experimental.sp_eq_mul_mask`
258
- fused kernel. Host NMS (36 ms) is gone; device trace gains ~7 ms of
259
- fold + max_pool + fused mask. Net: e2e goes 17.0 → 24.1 fps on the
260
- natural image.
261
- - **Device-side `grid_sample`.** `ttnn.grid_sample` exists and is
262
- verified working. On a natural image with ~500 keypoints, the host
263
- `F.grid_sample` costs ~1.15 ms — not a meaningful target against
264
- the 9–14 ms D2H dispatch floor. Worth doing when D2H stops being
265
- dispatch-dominated.
266
- - **Input double-buffering to pipeline H2D with trace.** Two tt_in
267
- buffers, two captured traces, alternating per-iter so CQ1's H2D
268
- writes a *different* buffer than CQ0's current trace reads. Analysis
269
- suggested a ~25% ceiling uplift if D2H could also split across CQs.
270
- **Attempted and reverted twice** — both variants (D2H-split and
271
- D2H-unchanged) regressed the host post phase from 1.8 to ~4.5 ms,
272
- wiping out the expected device-side gains. The regression is
273
- reproducible but unexplained from Python alone; the most likely
274
- suspects are DRAM/NoC contention between the concurrent CQ1 H2D and
275
- CQ0 trace, or ttnn event-scheduling overhead when two tids alternate.
276
- Needs tracy profiling before re-attempting. Documented in `results.tsv`
277
- under commits `2f00f2b1` and `6d4fae39`.
278
- - **1-channel NMS kernel (C++).** The current NMS chain pads
279
- `s_flat` from 1 channel to 32 (via `ttnn.concat` with a persistent
280
- zero-pad tensor) so that `ttnn.max_pool2d` and `sp_eq_mul_mask` — both
281
- of which require tile-aligned channel dims (multiples of 32) — can
282
- run. The 31 zero channels contribute nothing semantically. A custom
283
- 1-channel `max_pool2d`-style Tensix kernel would eliminate the
284
- concat, one layout conversion, and the 32→1 slice at the end,
285
- cutting ~3 ms from the trace interior. Similar scope to the landed
286
- `sp_eq_mul_mask` kernel (~450 LoC).
287
- - **Custom fused C++ Tensix kernel `ttnn.experimental.sp_eq_mul_mask`** —
288
- **LANDED and on the critical path** (see `kernels/sp_eq_mul_mask/`).
289
- Fuses `eq + multiply` into a single JIT-compiled Tensix program that
290
- keeps the mask tile in a DST register between the SFPU
291
- `eq_binary_tile` and `mul_binary_tile` calls — no DRAM round-trip for
292
- the intermediate. ~450 LoC of C++.
293
- - **Accuracy**: byte-identical to torch reference across match rates
294
- 0 → 100% (max abs diff = 0.0, exact nonzero count).
295
- - **Throughput**: 0.184 ms/iter fused vs 0.276 ms/iter composed
296
- (`ttnn.eq` + `ttnn.multiply`) — **1.50×** on a 1×1×307 200×32 bf16 pair.
297
- - Closes one of the two remaining ops in the device-NMS chain (the
298
- other — a fold + max_pool + compare — would be a similar-sized custom
299
- op on top of this template).
300
- - **Reducing `ttnn.copy_host_to_device_tensor`'s ~10.7 ms-per-call
301
- dispatch floor.** Runtime-level work; not addressable from the model
302
- layer. Would take `inference_speed` (forward + per-frame H2D) from
303
- ~72 fps toward the 353 fps compute ceiling.
304
-
305
- ## Layout
306
 
307
- ```
308
- tt-superpoint/
309
- ├── README.md
310
- ├── run_benchmark.sh # Driver; requires TT_METAL_DIR
311
- ├── results.tsv # Full experiment log
312
- ├── sample_data/
313
- │ └── house_in_field_1080p.jpg # Natural-image validation input
314
- ├── media/
315
- │ └── sample.png # Rendered keypoint visualisation
316
- ├── kernels/
317
- │ └── sp_eq_mul_mask/ # Fused C++ Tensix kernel (eq + mul in one pass)
318
- │ ├── README.md # Install + measurements
319
- │ ├── test.py # Correctness vs torch reference
320
- │ ├── bench.py # Fused vs composed throughput
321
- │ ├── {hpp,cpp,nanobind} # Public API + Python binding
322
- │ └── device/ # Device op + program factory + 3 kernels
323
- └── models/
324
- ├── visualize.py # Keypoint visualisation script
325
- ├── reference/
326
- │ └── superpoint_reference.py # HF reference model loader + input helpers
327
- ├── tests/
328
- │ └── test_superpoint.py # Benchmark + PCC + keypoint-set test
329
- └── tt/
330
- └── superpoint_ttnn.py # tt-nn implementation
331
- ```
332
 
 
 
 
 
 
 
333
 
334
- ---
 
 
 
 
 
 
 
335
 
336
- ## Licensing
337
 
338
- The **upstream model** is licensed **`other`** (magic-leap-superpoint) - see [the licence](https://huggingface.co/magic-leap-community/superpoint).
339
 
340
- Upstream declares `license: other`. SuperPoint's original MagicLeap release is research-oriented; confirm terms with the upstream authors before commercial use.
 
 
 
 
341
 
342
- The **port code** here was written by [Hyunggi Chang](https://github.com/changh95) and is published under the same terms, since a port cannot grant more than its upstream does. The **weights are not redistributed** in this repository - they are fetched from the upstream repo, under whatever terms that repo sets.
 
1
  ---
 
2
  tags:
 
3
  - blackhole
4
  - p150
5
+ - tt-dit-server
6
+ - tt-model-cache
7
+ - tt-model-container
 
 
 
 
 
 
 
8
  ---
9
 
10
+ # superpoint-blackhole
11
 
12
+ SuperPoint (magic-leap-community/superpoint) keypoint detection and description on a single Tenstorrent Blackhole p150a via tt-nn: a base64 image in, keypoints in original pixel coordinates, scores and 256-d descriptors out, at a fixed 480x640 network input. Pre-NMS score-map PCC 0.9971 and descriptor PCC 0.9991 vs the fp32 torch reference, keypoint F1 98.8% (top-500, 2 px); this server runs the pure-ttnn untraced path with host NMS (roughly 6 fps; the README's 40.7 fps needs trace plus the fused C++ NMS kernel in kernels/, which is not built into this image). Weights are under the Magic Leap SuperPoint licence: academic or non-profit organisation NONCOMMERCIAL research use only. Port source: github.com/changh95/tt-superpoint @ e1eab66e29ff424bc9af6b1118671d9bc08e899e.
13
 
14
+ Runs on **p150** (mesh `P150`).
15
 
16
+ Packaged and published with [tt-model-manager](https://github.com/tenstorrent/tt-model-manager) 0.1.0 (manifest schema 5.1).
 
 
 
 
 
17
 
18
+ ## Quickstart
 
 
 
19
 
20
+ ```bash
21
+ tt-model pull changh95/superpoint-blackhole --with-weights
22
+ tt-model serve changh95/superpoint-blackhole
23
+ ```
24
 
25
+ `pull --with-weights` downloads the Docker image and the [`magic-leap-community/superpoint`](https://huggingface.co/magic-leap-community/superpoint) weights at `734450e9ffe229074f5998494ddc615475cdb20a` (into your HF cache; they are not in the image). `serve` starts the model's own HTTP server on port 20000 (or the next free port, if that one is busy); the first start compiles kernels for your device, which takes several minutes, and the server is ready when it logs `Application startup complete`.
26
 
27
+ ### With tt-cli
 
28
 
29
+ ```bash
30
+ tt serve changh95/superpoint-blackhole # pulls image + weights, boots, prints the port
31
+ tt model stop changh95/superpoint-blackhole
32
+ ```
33
 
34
+ The port is the one `serve` printed (20000, or the next free one). This is **not** an
35
+ OpenAI-style server: `tt-model curl` / chat clients do not apply. `GET /v1/models` exists
36
+ only so generic probes do not 404; the real routes are below.
37
 
38
+ ### Call it
 
 
 
 
39
 
40
  ```bash
41
+ PORT=20000 # the port serve printed
42
+ curl -s localhost:$PORT/health # {"status":"ok","model":"superpoint-blackhole","device":{...}}
43
+ curl -s localhost:$PORT/info # weights repo+revision, canonical input, defaults, limits, licence
44
+
45
+ # One image -> keypoints. Any PNG/JPEG; it is resized to 640x480 server-side and the
46
+ # keypoints come back in YOUR image's pixel coordinates (see "scale").
47
+ IMG=code/sample_data/house_in_field_1080p.jpg # 1600x900 natural image
48
+ python3 - "$IMG" "$PORT" <<'EOF'
49
+ import base64, json, sys, urllib.request
50
+ img, port = sys.argv[1], sys.argv[2]
51
+ req = {"image": base64.b64encode(open(img, "rb").read()).decode(),
52
+ "max_keypoints": 1024, # -1 = all above threshold
53
+ "keypoint_threshold": 0.005,
54
+ "nms_radius": 4,
55
+ "return_descriptors": True}
56
+ r = urllib.request.Request(f"http://127.0.0.1:{port}/predict", json.dumps(req).encode(),
57
+ {"Content-Type": "application/json"})
58
+ out = json.load(urllib.request.urlopen(r, timeout=300))
59
+ print(out["num_keypoints"], out["keypoints"][:3], out["scores"][:3], out["timing_ms"])
60
+ EOF
61
  ```
62
 
63
+ Response fields: `num_keypoints`; `keypoints` (N x [x, y] floats, original-image pixels);
64
+ `scores` (N, post-NMS softmax scores); `original_size`, `image_size` (480x640) and
65
+ `scale` (x = W/640, y = H/480; divide to get network-frame coordinates);
66
+ `params` echoed; `timing_ms` (`preprocess`, `device_forward`, `postprocess`, `total`);
67
+ when `return_descriptors` is true, `descriptors` = `{format: "npz", key: "descriptors",
68
+ dtype: "float16", shape: [N, 256], data: <base64 NPZ>}` -- decode with
69
+ `numpy.load(io.BytesIO(base64.b64decode(d["data"])))["descriptors"]`; rows are
70
+ L2-normalised. Errors: 400 undecodable image / bad field, 503 while starting, 500 with
71
+ the exception text. One image per request; requests are serialised on the chip.
72
 
73
+ A ready-made check: `python code/models/server/smoke_test.py --url http://127.0.0.1:$PORT`
74
+ prints one PASS/FAIL line with the keypoint count and timings.
75
 
76
+ ### First boot
 
77
 
78
+ Weights are 5 MB (`config.json`, `model.safetensors`, `preprocessor_config.json` at the
79
+ pinned revision) and land in your HF cache. The first start JIT-compiles the conv /
80
+ pool / softmax kernels (a few minutes, cached under
81
+ `~/.cache/tt-model/superpoint-blackhole/cache`); the server logs `Loading weights`,
82
+ `Warming up`, `Warmup complete` and is ready at uvicorn's `Application startup complete`.
83
+ Later boots reuse the kernel cache. The weights repo is public and ungated (no token).
84
 
85
+ ### What this server runs
86
 
87
+ Fixed 480x640 input (bilinear resize, /255, channel 0 -- the HF
88
+ `SuperPointImageProcessor` defaults), 8 encoder convs + 3 max-pools + score and
89
+ descriptor heads in bfloat16 activations / bfloat16 weights / HiFi2 / fp32 accumulate,
90
+ softmax and descriptor L2-norm on device, then host single-pass NMS, threshold, border
91
+ removal, top-k and bilinear descriptor sampling. Untraced, host NMS: this is the
92
+ port's `SP_TRACE_NMS=0`, `SP_NO_TRACE=1` configuration. The benchmark numbers below
93
+ that need trace or the fused `sp_eq_mul_mask` kernel are **not** what this server does.
94
 
95
+ ### Results from the port (Blackhole p150b, 480x640, batch 1, natural image)
96
 
97
+ PCC vs the Hugging Face fp32 reference:
98
 
99
  | Tensor | PCC |
100
  |---|---:|
101
  | Pre-NMS score map | **0.9971** |
102
+ | Descriptor map (post L2-norm) | **0.9991** |
 
 
 
 
 
 
 
103
 
104
+ Keypoint set vs the reference (`sample_data/house_in_field_1080p.jpg`, top-500, 2 px):
105
+ recall **98.80%**, precision **98.80%**, F1 **98.80%** (synthetic `torch.rand` input: F1 97.80%).
 
 
 
 
 
 
 
 
 
106
 
107
+ Throughput measured by `models/tests/test_superpoint.py` (needs a tt-metal checkout as
108
+ pytest rootdir for its `device` fixture):
109
 
110
+ | Path | Device forward (input resident) | Traced fwd incl. H2D | Full e2e |
 
 
111
  |---|---:|---:|---:|
112
+ | Forward-only trace, host NMS (`SP_TRACE_NMS=0`) | 355 fps (2.81 ms) | 73.6 fps | 17.0 fps |
113
+ | Forward + device NMS, fused kernel (`SP_TRACE_NMS=1`) | 85.6 fps | 44.6 fps | **40.7 fps** |
114
+ | Untraced, host NMS (**this server**) | ~6 fps | -- | ~5 fps |
 
115
 
116
+ The fused path needs `kernels/sp_eq_mul_mask/` compiled into tt-metal (see its README);
117
+ a pure-ttnn equivalent (`ttnn.eq` + `ttnn.multiply`) is measured in
118
+ `kernels/sp_eq_mul_mask/bench.py`. `code/results.tsv` is the full experiment log
119
+ (precision cliff: bfloat8/LoFi drop score PCC to 0.70-0.91; trace was a 10.8x unlock).
120
 
121
+ Sample output (top-500 keypoints on the resized frame): ![keypoints](media/sample.png)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
122
 
123
+ ### Layout of `code/`
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
124
 
125
+ `models/tt/superpoint_ttnn.py` (tt-nn model), `models/tt/postprocess.py` (validated host
126
+ post-processing), `models/server/app.py` + `smoke_test.py`, `models/reference/`
127
+ (HF reference loader, needs torchvision), `models/tests/test_superpoint.py` (benchmark +
128
+ PCC + F1), `models/visualize.py`, `kernels/sp_eq_mul_mask/` (fused C++ Tensix NMS
129
+ kernel, ~450 LoC), `sample_data/`, `results.tsv`, `run_benchmark.sh`.
130
+ `models/common/lightweightmodule.py` is a schema-required filler from tt-metal.
131
 
132
+ ### Licensing
133
+
134
+ The upstream **weights** (`magic-leap-community/superpoint`) carry the Magic Leap
135
+ SuperPoint licence: *academic or non-profit organisation noncommercial research use
136
+ only* -- see https://huggingface.co/magic-leap-community/superpoint. The port code
137
+ (Apache-2.0 headers, by Hyunggi Chang) is published under the same terms, since a port
138
+ cannot grant more than its upstream does. Weights are not redistributed here; they are
139
+ fetched from the upstream repo at the pinned revision.
140
 
141
+ ## Provenance
142
 
143
+ The exact sources the image was built from — `code/` in this repo is byte-identical to the model code inside the image:
144
 
145
+ | component | built from |
146
+ | --- | --- |
147
+ | tt-metal | [`8b98410e730bb504fea43a88609756e34821d91d`](https://github.com/tenstorrent/tt-metal/commit/8b98410e730bb504fea43a88609756e34821d91d) |
148
+ | `code/` digest | `416a56f5b5475d4c` (sha256, first 16 hex digits) |
149
+ | built | 2026-09-12T04:46:07+00:00 by tt-model 0.1.0 |
150
 
 
image/blobs/sha256/05377a9e9bca6629850adb9f83b736bed1a337417a42f4fbc7939cb070e4103c ADDED
@@ -0,0 +1 @@
 
 
1
+ {"id":"abde68188775eea758bedd339372fbb5829d7240e4e205f088291f59310c44d6","parent":"3b3b160d15f8be2befad1aa18496ff8e14ef0ffad2b5b53bd6b24b1d30349d3f","created":"1970-01-01T09:00:00+09:00","container_config":{"Hostname":"","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":null,"Cmd":null,"Image":"","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":null},"os":"linux"}
image/blobs/sha256/09a2b4b5da7d9c4dc9fcecdf9587d215738b5a001cc1f544754aa2471f17ccf4 ADDED
@@ -0,0 +1 @@
 
 
1
+ {"id":"b554b4bedaae729f02e1ce175da8bc9aff4a203a1438e1f5c6a69cf92557a21c","parent":"6d0be462b2b91580512733b8522fb79e4d5966d535413781402a2c65452a1ddd","created":"1970-01-01T09:00:00+09:00","container_config":{"Hostname":"","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":null,"Cmd":null,"Image":"","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":null},"os":"linux"}
image/blobs/sha256/0b00322e10db8938039548659894c55192e2ed4bbc1305c1bb9db98646afb9ce ADDED
@@ -0,0 +1 @@
 
 
1
+ {"id":"6a1ce844cd7f893452eea91eaa578b38bd7ee8e32133946fe9c8de6cc2a44eab","parent":"6eaca327d917fc860897422b86092500f7c33034027fd336a321170854797e19","created":"1970-01-01T09:00:00+09:00","container_config":{"Hostname":"","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":null,"Cmd":null,"Image":"","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":null},"os":"linux"}
image/blobs/sha256/1045a45a3f55e192bbc825ed2ad291fa1c548e767860db71be78502aabb6971e ADDED
Binary file (39.9 kB). View file
 
image/blobs/sha256/1992bd3360f71a1c0e629ec18d01db28cacf924d57da902ee8d53a87c4fdf077 ADDED
@@ -0,0 +1 @@
 
 
1
+ {"id":"2c74bb161e53d200ca35b25dc08ffaa65d3df8ca0250fd4f61f1dda9c9dafc83","parent":"b2323fd31f5630dcf950c3f9be6d3cc58b3592d0fa6559eee27f5b9896532516","created":"1970-01-01T09:00:00+09:00","container_config":{"Hostname":"","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":null,"Cmd":null,"Image":"","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":null},"os":"linux"}
image/blobs/sha256/1a032fb77dbde7874914c0efd0a0560300938f33c3de47c86acc09a382af5ba1 ADDED
@@ -0,0 +1 @@
 
 
1
+ {"id":"3b3b160d15f8be2befad1aa18496ff8e14ef0ffad2b5b53bd6b24b1d30349d3f","parent":"2c74bb161e53d200ca35b25dc08ffaa65d3df8ca0250fd4f61f1dda9c9dafc83","created":"1970-01-01T09:00:00+09:00","container_config":{"Hostname":"","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":null,"Cmd":null,"Image":"","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":null},"os":"linux"}
image/blobs/sha256/20fc3f63a37e2e97136281a7bea918f951867dcda5d6a8220cbb8c451842e2c6 ADDED
@@ -0,0 +1 @@
 
 
1
+ {"id":"fd698fc0ee060bdb1b97148554553dab869f4540ca68750e920f7e8a61220ff4","parent":"95f34142d5d03fc24e6d4e7018e92daacbcd0f0106a7d458d1bd16e8c427af70","created":"1970-01-01T09:00:00+09:00","container_config":{"Hostname":"","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":null,"Cmd":null,"Image":"","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":null},"os":"linux"}
image/blobs/sha256/2913e7d4aae3b053b2337c0f74236067652783d528ac5e6d56a85f13b8e2be28 ADDED
Binary file (2.05 kB). View file
 
image/blobs/sha256/297cc480b713b9d9e67d9705f6fb5083b1d0a71c3e00adb6d2fb544fd181bc90 ADDED
@@ -0,0 +1 @@
 
 
1
+ {"id":"801989d24ed51c518861bbeee5b5cabb58085d3f4083925d37e753b786a01a94","parent":"abde68188775eea758bedd339372fbb5829d7240e4e205f088291f59310c44d6","created":"1970-01-01T09:00:00+09:00","container_config":{"Hostname":"","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":null,"Cmd":null,"Image":"","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":null},"os":"linux"}
image/blobs/sha256/35c97e50ac6404ce6bb0bc653d1d7b75da4c727139f6ad4c2fb4349ab36ddf74 ADDED
Binary file (4.61 kB). View file
 
image/blobs/sha256/473ec4813d862cfcaafff1d3b604c787be8aba9130a29d77aa6260545e33a204 ADDED
Binary file (4.61 kB). View file
 
image/blobs/sha256/4846ed2c3340e69f871c5bb70dffde2e47cf3e2e29799264f1c6e5e3f487a655 ADDED
@@ -0,0 +1 @@
 
 
1
+ {"id":"b2323fd31f5630dcf950c3f9be6d3cc58b3592d0fa6559eee27f5b9896532516","parent":"e618d643825753f4550a54eacfd500e6e7652078cf4168c9ef3f869701db7fc5","created":"1970-01-01T09:00:00+09:00","container_config":{"Hostname":"","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":null,"Cmd":null,"Image":"","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":null},"os":"linux"}
image/blobs/sha256/51bace3613cab52c178386031b223837c9eced816f3b74c2016f9355c343c3c7 ADDED
@@ -0,0 +1 @@
 
 
1
+ {"id":"e54f1b59aa3ac4bbcc95ee295f98920ffc80c979ae845879da712814098dc9b5","parent":"801989d24ed51c518861bbeee5b5cabb58085d3f4083925d37e753b786a01a94","created":"1970-01-01T09:00:00+09:00","container_config":{"Hostname":"","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":null,"Cmd":null,"Image":"","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":null},"os":"linux"}
image/blobs/sha256/5628e13ce208b83d793af15fa41c28d1702e7a43e27c8c72944442d01e959a71 ADDED
@@ -0,0 +1 @@
 
 
1
+ {"id":"e618d643825753f4550a54eacfd500e6e7652078cf4168c9ef3f869701db7fc5","created":"1970-01-01T09:00:00+09:00","container_config":{"Hostname":"","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":null,"Cmd":null,"Image":"","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":null},"os":"linux"}
image/blobs/sha256/5c5e6730f02ae4b11cd2835d46daea29c72eb09a77567aaf944d2d50288f2467 ADDED
@@ -0,0 +1 @@
 
 
1
+ {"id":"7a5fb434279d3e82e002b9a9c662b4b8896666eabc499b5986c6af329dc20cb6","parent":"ae8fd9e43cdbf67c9e6a5fc09d1881c6fb95b6503feed80cf2b4eb6fa46c87fc","created":"1970-01-01T09:00:00+09:00","container_config":{"Hostname":"","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":null,"Cmd":null,"Image":"","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":null},"os":"linux"}
image/blobs/sha256/5cf1af4a91c109c471f328139d54b01ecb2fc30e1d719163250fdc106e1bae19 ADDED
@@ -0,0 +1 @@
 
 
1
+ {"id":"b58659e821d9d65dd71843b48ffec1f5c33a3419fb17d5847a8f460ad64a6ddb","parent":"e54f1b59aa3ac4bbcc95ee295f98920ffc80c979ae845879da712814098dc9b5","created":"1970-01-01T09:00:00+09:00","container_config":{"Hostname":"","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":null,"Cmd":null,"Image":"","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":null},"os":"linux"}
image/blobs/sha256/5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef ADDED
Binary file (1.02 kB). View file
 
image/blobs/sha256/783bf7cca84ebcb9f4871153860aac9bf83c54d246bbdba3468c4ad19cc64814 ADDED
@@ -0,0 +1 @@
 
 
1
+ {"id":"6eaca327d917fc860897422b86092500f7c33034027fd336a321170854797e19","parent":"7a5fb434279d3e82e002b9a9c662b4b8896666eabc499b5986c6af329dc20cb6","created":"1970-01-01T09:00:00+09:00","container_config":{"Hostname":"","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":null,"Cmd":null,"Image":"","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":null},"os":"linux"}
image/blobs/sha256/7f5224b468f7a4cf2e976cc3a9667b07c57b434f0d2949c376e5266dd636d8ba ADDED
@@ -0,0 +1 @@
 
 
1
+ {"id":"08bc59792250e4adc6c0b63882b3518d03ad51b206aed76fd229ff080a7fd698","parent":"17f47c44560478460f3531a92457382d16b86cd815a90caa0439296b6b8a2c33","created":"1970-01-01T09:00:00+09:00","container_config":{"Hostname":"","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":null,"Cmd":null,"Image":"","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":null},"os":"linux"}
image/blobs/sha256/82d59d07267825fcd4ef561fb9947c582b27c60dcd5422a27900b2087ba56e89 ADDED
@@ -0,0 +1 @@
 
 
1
+ {"id":"ced0935674ff862d765305d2d11aab0c87c58d079cb822defef9c2c0d0f3646d","parent":"08bc59792250e4adc6c0b63882b3518d03ad51b206aed76fd229ff080a7fd698","created":"2026-09-12T13:48:32.384416842+09:00","container_config":{"Hostname":"","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":null,"Cmd":null,"Image":"","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":null},"config":{"Hostname":"","Domainname":"","User":"tt","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":["PATH=/opt/tt-venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin","VENV=/opt/tt-venv","VIRTUAL_ENV=/opt/tt-venv","TT_METAL_RUNTIME_ROOT=/opt/tt-metal","TT_METAL_HOME=/opt/tt-metal","PYTHONPATH=/opt/tt-metal","LD_LIBRARY_PATH=/opt/tt-metal/build/lib:/opt/openmpi-v5.0.7-ulfm/lib","EXTRA_MODELS_DIR=","TT_VLLM_BUILTIN_MODELS=","TT_MODEL_KIND=tt-dit-server","HF_HOME=/hf","TT_METAL_CACHE=/cache","HOME=/home/tt","USER=tt","LOGNAME=tt"],"Cmd":["/usr/local/bin/serve-default.sh"],"ArgsEscaped":true,"Image":"","Volumes":null,"WorkingDir":"/home/tt/work","Entrypoint":["/usr/local/bin/entrypoint.sh"],"OnBuild":null,"Labels":{"org.opencontainers.image.revision":"8b98410e730bb504fea43a88609756e34821d91d","org.opencontainers.image.version":"22.04","org.tenstorrent.tt-model":"superpoint-blackhole","org.tenstorrent.tt-model.arch":"blackhole","org.tenstorrent.tt-model.kind":"tt-dit-server","org.tenstorrent.tt-model.plugin":"","org.tenstorrent.tt-model.profiles":"default","org.tenstorrent.tt-model.repo":"changh95/superpoint-blackhole","org.tenstorrent.tt-model.tt-metal":"v0.78.0-dev20260820-25-g8b98410e73","org.tenstorrent.tt-model.weights":"magic-leap-community/superpoint"}},"architecture":"amd64","os":"linux"}
image/blobs/sha256/8c27526b713a72bd442a649055f125a7642d8a9d81bec1aaeafd010d5e75f09b ADDED
@@ -0,0 +1 @@
 
 
1
+ {"id":"543cb6ba046da30ee5435cb2bc79b73555e14984133a8f411292e9fb4f60307e","parent":"3ab2222c0aaad50b807944c7d4d5356f548bad9b68ebbaf40ad31c715be20260","created":"1970-01-01T09:00:00+09:00","container_config":{"Hostname":"","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":null,"Cmd":null,"Image":"","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":null},"os":"linux"}
image/blobs/sha256/90e294f7896d636a22eb471381c0541ec2583d6e4d87a3330ee603c712058373 ADDED
Binary file (3.58 kB). View file
 
image/blobs/sha256/a3929a30463ca9f7e79676224374be8724d0e0b5971b6366028dad8abdd119b4 ADDED
@@ -0,0 +1 @@
 
 
1
+ {"id":"3ab2222c0aaad50b807944c7d4d5356f548bad9b68ebbaf40ad31c715be20260","parent":"b58659e821d9d65dd71843b48ffec1f5c33a3419fb17d5847a8f460ad64a6ddb","created":"1970-01-01T09:00:00+09:00","container_config":{"Hostname":"","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":null,"Cmd":null,"Image":"","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":null},"os":"linux"}
image/blobs/sha256/b1e032b4456fa68570df12ada4bae732152fe690d883e20315312e9311e8aefb ADDED
@@ -0,0 +1 @@
 
 
1
+ {"id":"17f47c44560478460f3531a92457382d16b86cd815a90caa0439296b6b8a2c33","parent":"6a1ce844cd7f893452eea91eaa578b38bd7ee8e32133946fe9c8de6cc2a44eab","created":"1970-01-01T09:00:00+09:00","container_config":{"Hostname":"","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":null,"Cmd":null,"Image":"","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":null},"os":"linux"}
image/blobs/sha256/b619284fc58a2511f0e2cf87c6407029e1912483daf54d9081ec13201367482b ADDED
Binary file (23 kB). View file
 
image/blobs/sha256/bad2ac50381c951e4a06263ad41715f3eff03ac32a5c02b31546928a1b435ca8 ADDED
@@ -0,0 +1 @@
 
 
1
+ {"id":"6d0be462b2b91580512733b8522fb79e4d5966d535413781402a2c65452a1ddd","parent":"543cb6ba046da30ee5435cb2bc79b73555e14984133a8f411292e9fb4f60307e","created":"1970-01-01T09:00:00+09:00","container_config":{"Hostname":"","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":null,"Cmd":null,"Image":"","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":null},"os":"linux"}
image/blobs/sha256/d289e67a5acf53049af3e14fd2a36d1afbfcafa54dc20de726fb06bb13ce2d23 ADDED
@@ -0,0 +1 @@
 
 
1
+ {"id":"95f34142d5d03fc24e6d4e7018e92daacbcd0f0106a7d458d1bd16e8c427af70","parent":"b554b4bedaae729f02e1ce175da8bc9aff4a203a1438e1f5c6a69cf92557a21c","created":"1970-01-01T09:00:00+09:00","container_config":{"Hostname":"","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":null,"Cmd":null,"Image":"","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":null},"os":"linux"}
image/blobs/sha256/dcc7c4d7314823f2580f5dd1001063cd7574a7b6f1fdb1a7393b1b1578f93b89 ADDED
@@ -0,0 +1 @@
 
 
1
+ {"id":"ae8fd9e43cdbf67c9e6a5fc09d1881c6fb95b6503feed80cf2b4eb6fa46c87fc","parent":"0426d842d0357450080930684cb42d7dad8602535c207490818f4d3566645497","created":"1970-01-01T09:00:00+09:00","container_config":{"Hostname":"","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":null,"Cmd":null,"Image":"","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":null},"os":"linux"}
image/blobs/sha256/e4a3caad98453047bb9214acfacdd96b2e2a9f7f6848c3a9b996517022f57223 ADDED
@@ -0,0 +1 @@
 
 
1
+ {"architecture":"amd64","config":{"User":"tt","Env":["PATH=/opt/tt-venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin","VENV=/opt/tt-venv","VIRTUAL_ENV=/opt/tt-venv","TT_METAL_RUNTIME_ROOT=/opt/tt-metal","TT_METAL_HOME=/opt/tt-metal","PYTHONPATH=/opt/tt-metal","LD_LIBRARY_PATH=/opt/tt-metal/build/lib:/opt/openmpi-v5.0.7-ulfm/lib","EXTRA_MODELS_DIR=","TT_VLLM_BUILTIN_MODELS=","TT_MODEL_KIND=tt-dit-server","HF_HOME=/hf","TT_METAL_CACHE=/cache","HOME=/home/tt","USER=tt","LOGNAME=tt"],"Entrypoint":["/usr/local/bin/entrypoint.sh"],"Cmd":["/usr/local/bin/serve-default.sh"],"WorkingDir":"/home/tt/work","Labels":{"org.opencontainers.image.revision":"8b98410e730bb504fea43a88609756e34821d91d","org.opencontainers.image.version":"22.04","org.tenstorrent.tt-model":"superpoint-blackhole","org.tenstorrent.tt-model.arch":"blackhole","org.tenstorrent.tt-model.kind":"tt-dit-server","org.tenstorrent.tt-model.plugin":"","org.tenstorrent.tt-model.profiles":"default","org.tenstorrent.tt-model.repo":"changh95/superpoint-blackhole","org.tenstorrent.tt-model.tt-metal":"v0.78.0-dev20260820-25-g8b98410e73","org.tenstorrent.tt-model.weights":"magic-leap-community/superpoint"},"ArgsEscaped":true},"created":"2026-09-12T13:48:32.384416842+09:00","history":[{"created":"2026-09-03T12:14:51.139348462Z","created_by":"/bin/sh -c #(nop) ARG RELEASE","empty_layer":true},{"created":"2026-09-03T12:14:51.170427469Z","created_by":"/bin/sh -c #(nop) ARG LAUNCHPAD_BUILD_ARCH","empty_layer":true},{"created":"2026-09-03T12:14:51.200307479Z","created_by":"/bin/sh -c #(nop) LABEL org.opencontainers.image.version=22.04","empty_layer":true},{"created":"2026-09-03T12:14:53.528689977Z","created_by":"/bin/sh -c #(nop) ADD file:81c01921c5f642ac2fcbfae682e489e8e64b347467d9fa1587707e310e64d790 in / "},{"created":"2026-09-03T12:14:54.045714841Z","created_by":"/bin/sh -c #(nop) CMD [\"/bin/bash\"]","empty_layer":true},{"created":"2026-09-12T13:46:30.808941093+09:00","created_by":"ARG OMPI_DIR=/opt/openmpi-v5.0.7-ulfm","comment":"buildkit.dockerfile.v0","empty_layer":true},{"created":"2026-09-12T13:46:30.808941093+09:00","created_by":"ARG EXTRA_MODELS_DIR=","comment":"buildkit.dockerfile.v0","empty_layer":true},{"created":"2026-09-12T13:46:30.808941093+09:00","created_by":"ARG TT_MODEL_KIND","comment":"buildkit.dockerfile.v0","empty_layer":true},{"created":"2026-09-12T13:46:30.808941093+09:00","created_by":"ARG MODEL_NAME","comment":"buildkit.dockerfile.v0","empty_layer":true},{"created":"2026-09-12T13:46:30.808941093+09:00","created_by":"ARG MODEL_REPO","comment":"buildkit.dockerfile.v0","empty_layer":true},{"created":"2026-09-12T13:46:30.808941093+09:00","created_by":"ARG MODEL_WEIGHTS","comment":"buildkit.dockerfile.v0","empty_layer":true},{"created":"2026-09-12T13:46:30.808941093+09:00","created_by":"ARG MODEL_ARCH","comment":"buildkit.dockerfile.v0","empty_layer":true},{"created":"2026-09-12T13:46:30.808941093+09:00","created_by":"ARG MODEL_PROFILES","comment":"buildkit.dockerfile.v0","empty_layer":true},{"created":"2026-09-12T13:46:30.808941093+09:00","created_by":"ARG MODEL_TT_METAL_SHA","comment":"buildkit.dockerfile.v0","empty_layer":true},{"created":"2026-09-12T13:46:30.808941093+09:00","created_by":"ARG MODEL_TT_METAL_DESCRIBE","comment":"buildkit.dockerfile.v0","empty_layer":true},{"created":"2026-09-12T13:46:30.808941093+09:00","created_by":"ARG MODEL_PLUGIN_SHA","comment":"buildkit.dockerfile.v0","empty_layer":true},{"created":"2026-09-12T13:46:30.808941093+09:00","created_by":"RUN |11 OMPI_DIR=/opt/openmpi-v5.0.7-ulfm EXTRA_MODELS_DIR= TT_MODEL_KIND=tt-dit-server MODEL_NAME=superpoint-blackhole MODEL_REPO=changh95/superpoint-blackhole MODEL_WEIGHTS=magic-leap-community/superpoint MODEL_ARCH=blackhole MODEL_PROFILES=default MODEL_TT_METAL_SHA=8b98410e730bb504fea43a88609756e34821d91d MODEL_TT_METAL_DESCRIBE=v0.78.0-dev20260820-25-g8b98410e73 MODEL_PLUGIN_SHA= /bin/sh -c apt-get update \u0026\u0026 apt-get install -y --no-install-recommends libhwloc15 libnuma1 libatomic1 libudev1 libcap2 zlib1g libmpc3 libmpfr6 libgmp10 libzstd1 libevent-core-2.1-7 libevent-pthreads-2.1-7 libgl1 libsndfile1 ca-certificates \u0026\u0026 apt-get clean \u0026\u0026 rm -rf /var/lib/apt/lists/* # buildkit","comment":"buildkit.dockerfile.v0"},{"created":"2026-09-12T13:46:31.121663516+09:00","created_by":"RUN |11 OMPI_DIR=/opt/openmpi-v5.0.7-ulfm EXTRA_MODELS_DIR= TT_MODEL_KIND=tt-dit-server MODEL_NAME=superpoint-blackhole MODEL_REPO=changh95/superpoint-blackhole MODEL_WEIGHTS=magic-leap-community/superpoint MODEL_ARCH=blackhole MODEL_PROFILES=default MODEL_TT_METAL_SHA=8b98410e730bb504fea43a88609756e34821d91d MODEL_TT_METAL_DESCRIBE=v0.78.0-dev20260820-25-g8b98410e73 MODEL_PLUGIN_SHA= /bin/sh -c existing=\"$(getent passwd 1000 | cut -d: -f1)\" \u0026\u0026 if [ -n \"$existing\" ]; then userdel -r \"$existing\" 2\u003e/dev/null || userdel \"$existing\"; fi \u0026\u0026 useradd --uid 1000 --create-home --home-dir /home/tt --shell /bin/bash tt \u0026\u0026 mkdir -p /home/tt/work/logs /cache /opt/tt-metal \u0026\u0026 chown -R tt:tt /home/tt /cache /opt/tt-metal \u0026\u0026 chmod 1777 /home/tt /home/tt/work /home/tt/work/logs /cache # buildkit","comment":"buildkit.dockerfile.v0"},{"created":"2026-09-12T13:48:10.11533099+09:00","created_by":"COPY /opt/openmpi-v5.0.7-ulfm /opt/openmpi-v5.0.7-ulfm # buildkit","comment":"buildkit.dockerfile.v0"},{"created":"2026-09-12T13:48:10.625100076+09:00","created_by":"COPY /opt/tenstorrent /opt/tenstorrent # buildkit","comment":"buildkit.dockerfile.v0"},{"created":"2026-09-12T13:48:11.416325027+09:00","created_by":"COPY /usr/local/share/uv /usr/local/share/uv # buildkit","comment":"buildkit.dockerfile.v0"},{"created":"2026-09-12T13:48:14.083325918+09:00","created_by":"COPY /opt/tt-venv /opt/tt-venv # buildkit","comment":"buildkit.dockerfile.v0"},{"created":"2026-09-12T13:48:14.178404441+09:00","created_by":"COPY /opt/vllm /opt/vllm # buildkit","comment":"buildkit.dockerfile.v0"},{"created":"2026-09-12T13:48:14.690918141+09:00","created_by":"COPY --chown=tt:tt /opt/tt-metal/runtime /opt/tt-metal/runtime # buildkit","comment":"buildkit.dockerfile.v0"},{"created":"2026-09-12T13:48:14.905981794+09:00","created_by":"COPY --chown=tt:tt /opt/tt-metal/build_Release /opt/tt-metal/build_Release # buildkit","comment":"buildkit.dockerfile.v0"},{"created":"2026-09-12T13:48:15.117241116+09:00","created_by":"COPY --chown=tt:tt /opt/tt-metal/build /opt/tt-metal/build # buildkit","comment":"buildkit.dockerfile.v0"},{"created":"2026-09-12T13:48:15.7341048+09:00","created_by":"COPY --chown=tt:tt /opt/tt-metal/tt_metal /opt/tt-metal/tt_metal # buildkit","comment":"buildkit.dockerfile.v0"},{"created":"2026-09-12T13:48:16.272801879+09:00","created_by":"COPY --chown=tt:tt /opt/tt-metal/ttnn /opt/tt-metal/ttnn # buildkit","comment":"buildkit.dockerfile.v0"},{"created":"2026-09-12T13:48:16.395101374+09:00","created_by":"COPY --chown=tt:tt /opt/tt-metal/tools /opt/tt-metal/tools # buildkit","comment":"buildkit.dockerfile.v0"},{"created":"2026-09-12T13:48:16.497667049+09:00","created_by":"COPY --chown=tt:tt /opt/tt-metal/setup.py /opt/tt-metal/pyproject.toml /opt/tt-metal/ # buildkit","comment":"buildkit.dockerfile.v0"},{"created":"2026-09-12T13:48:16.59428549+09:00","created_by":"COPY --chown=tt:tt code/ /opt/tt-metal/ # buildkit","comment":"buildkit.dockerfile.v0"},{"created":"2026-09-12T13:48:16.676694979+09:00","created_by":"COPY entrypoint.sh /usr/local/bin/entrypoint.sh # buildkit","comment":"buildkit.dockerfile.v0"},{"created":"2026-09-12T13:48:16.760865964+09:00","created_by":"COPY --chmod=0755 serve-default.sh /usr/local/bin/serve-default.sh # buildkit","comment":"buildkit.dockerfile.v0"},{"created":"2026-09-12T13:48:16.760865964+09:00","created_by":"ENV VENV=/opt/tt-venv","comment":"buildkit.dockerfile.v0","empty_layer":true},{"created":"2026-09-12T13:48:16.760865964+09:00","created_by":"ENV VIRTUAL_ENV=/opt/tt-venv","comment":"buildkit.dockerfile.v0","empty_layer":true},{"created":"2026-09-12T13:48:16.760865964+09:00","created_by":"ENV PATH=/opt/tt-venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin","comment":"buildkit.dockerfile.v0","empty_layer":true},{"created":"2026-09-12T13:48:16.760865964+09:00","created_by":"ENV TT_METAL_RUNTIME_ROOT=/opt/tt-metal","comment":"buildkit.dockerfile.v0","empty_layer":true},{"created":"2026-09-12T13:48:16.760865964+09:00","created_by":"ENV TT_METAL_HOME=/opt/tt-metal","comment":"buildkit.dockerfile.v0","empty_layer":true},{"created":"2026-09-12T13:48:16.760865964+09:00","created_by":"ENV PYTHONPATH=/opt/tt-metal","comment":"buildkit.dockerfile.v0","empty_layer":true},{"created":"2026-09-12T13:48:16.760865964+09:00","created_by":"ENV LD_LIBRARY_PATH=/opt/tt-metal/build/lib:/opt/openmpi-v5.0.7-ulfm/lib","comment":"buildkit.dockerfile.v0","empty_layer":true},{"created":"2026-09-12T13:48:16.760865964+09:00","created_by":"ENV EXTRA_MODELS_DIR=","comment":"buildkit.dockerfile.v0","empty_layer":true},{"created":"2026-09-12T13:48:16.760865964+09:00","created_by":"ARG TT_VLLM_BUILTIN_MODELS=","comment":"buildkit.dockerfile.v0","empty_layer":true},{"created":"2026-09-12T13:48:16.760865964+09:00","created_by":"ENV TT_VLLM_BUILTIN_MODELS=","comment":"buildkit.dockerfile.v0","empty_layer":true},{"created":"2026-09-12T13:48:16.760865964+09:00","created_by":"ENV TT_MODEL_KIND=tt-dit-server","comment":"buildkit.dockerfile.v0","empty_layer":true},{"created":"2026-09-12T13:48:16.760865964+09:00","created_by":"ENV HF_HOME=/hf","comment":"buildkit.dockerfile.v0","empty_layer":true},{"created":"2026-09-12T13:48:16.760865964+09:00","created_by":"ENV TT_METAL_CACHE=/cache","comment":"buildkit.dockerfile.v0","empty_layer":true},{"created":"2026-09-12T13:48:16.760865964+09:00","created_by":"ENV HOME=/home/tt","comment":"buildkit.dockerfile.v0","empty_layer":true},{"created":"2026-09-12T13:48:16.760865964+09:00","created_by":"ENV USER=tt","comment":"buildkit.dockerfile.v0","empty_layer":true},{"created":"2026-09-12T13:48:16.760865964+09:00","created_by":"ENV LOGNAME=tt","comment":"buildkit.dockerfile.v0","empty_layer":true},{"created":"2026-09-12T13:48:16.760865964+09:00","created_by":"USER tt","comment":"buildkit.dockerfile.v0","empty_layer":true},{"created":"2026-09-12T13:48:16.854552347+09:00","created_by":"WORKDIR /home/tt/work","comment":"buildkit.dockerfile.v0"},{"created":"2026-09-12T13:48:16.937835561+09:00","created_by":"COPY verify.sh /ctx/verify.sh # buildkit","comment":"buildkit.dockerfile.v0"},{"created":"2026-09-12T13:48:32.16099536+09:00","created_by":"RUN |12 OMPI_DIR=/opt/openmpi-v5.0.7-ulfm EXTRA_MODELS_DIR= TT_MODEL_KIND=tt-dit-server MODEL_NAME=superpoint-blackhole MODEL_REPO=changh95/superpoint-blackhole MODEL_WEIGHTS=magic-leap-community/superpoint MODEL_ARCH=blackhole MODEL_PROFILES=default MODEL_TT_METAL_SHA=8b98410e730bb504fea43a88609756e34821d91d MODEL_TT_METAL_DESCRIBE=v0.78.0-dev20260820-25-g8b98410e73 MODEL_PLUGIN_SHA= TT_VLLM_BUILTIN_MODELS= /bin/sh -c bash /ctx/verify.sh # buildkit","comment":"buildkit.dockerfile.v0"},{"created":"2026-09-12T13:48:32.16099536+09:00","created_by":"USER root","comment":"buildkit.dockerfile.v0","empty_layer":true},{"created":"2026-09-12T13:48:32.384416842+09:00","created_by":"RUN |12 OMPI_DIR=/opt/openmpi-v5.0.7-ulfm EXTRA_MODELS_DIR= TT_MODEL_KIND=tt-dit-server MODEL_NAME=superpoint-blackhole MODEL_REPO=changh95/superpoint-blackhole MODEL_WEIGHTS=magic-leap-community/superpoint MODEL_ARCH=blackhole MODEL_PROFILES=default MODEL_TT_METAL_SHA=8b98410e730bb504fea43a88609756e34821d91d MODEL_TT_METAL_DESCRIBE=v0.78.0-dev20260820-25-g8b98410e73 MODEL_PLUGIN_SHA= TT_VLLM_BUILTIN_MODELS= /bin/sh -c chmod -R a+rwX /home/tt # buildkit","comment":"buildkit.dockerfile.v0"},{"created":"2026-09-12T13:48:32.384416842+09:00","created_by":"USER tt","comment":"buildkit.dockerfile.v0","empty_layer":true},{"created":"2026-09-12T13:48:32.384416842+09:00","created_by":"LABEL org.tenstorrent.tt-model=superpoint-blackhole org.tenstorrent.tt-model.repo=changh95/superpoint-blackhole org.tenstorrent.tt-model.weights=magic-leap-community/superpoint org.tenstorrent.tt-model.arch=blackhole org.tenstorrent.tt-model.kind=tt-dit-server org.tenstorrent.tt-model.profiles=default org.opencontainers.image.revision=8b98410e730bb504fea43a88609756e34821d91d org.tenstorrent.tt-model.tt-metal=v0.78.0-dev20260820-25-g8b98410e73 org.tenstorrent.tt-model.plugin=","comment":"buildkit.dockerfile.v0","empty_layer":true},{"created":"2026-09-12T13:48:32.384416842+09:00","created_by":"ENTRYPOINT [\"/usr/local/bin/entrypoint.sh\"]","comment":"buildkit.dockerfile.v0","empty_layer":true},{"created":"2026-09-12T13:48:32.384416842+09:00","created_by":"CMD [\"/usr/local/bin/serve-default.sh\"]","comment":"buildkit.dockerfile.v0","empty_layer":true}],"os":"linux","rootfs":{"type":"layers","diff_ids":["sha256:ea16cace89338c84eb6bcb91a7efdfcae6838fff359efe951858227436486c34","sha256:6c408d42e47696ba1e15286920342148bc1abe126e0f99360e4c326353902e1e","sha256:736ec30ae64bb61262359a95a91043c01e7d0758a49009446d1215db5543c242","sha256:51ef7c71a2866da3f5d6688562490a79f40394816b667620c43cb3872171d0fb","sha256:94ad5f8b1ea8e4688c7c8a400fde84d9e20b2b767b0310c63bd811e790969c6d","sha256:23880bbd4b23fd061f5a477fc7146557d6930ebe5c4d4fa77397bc4db408ebed","sha256:424a2d1656007a555e088bc76aa22c344f96d50f99de20375a122f02f4f09615","sha256:2913e7d4aae3b053b2337c0f74236067652783d528ac5e6d56a85f13b8e2be28","sha256:a14941fe4a862fbf3aa39678a3135484e668589914f29b93cc7a7c6ca24b75fe","sha256:6808c251a29fd58130fb52a75a2f26e7a1798f95e2d6e95ae4980d08b302f329","sha256:a86a2eee05f32c5e45e23503e2f4682c1a5c7abd5764ce0706e2d8f7638d2f20","sha256:e92e614de15e5ce50ba21380c2740a1c9f0bd7a1291cce0be238c21f6ec36581","sha256:44f1dfd79fe45a08396131615fbdc4f0c7a09fd5b3988fe9dbc33ea7613ae80e","sha256:b4de8174cd132e6b54956ea091d24c6cf6a15179cb5f634d8aafc41dd5a5a79d","sha256:b619284fc58a2511f0e2cf87c6407029e1912483daf54d9081ec13201367482b","sha256:2977e66e9f580875472b63878f7926b448957c7ff312984cfa6fde4e09a830ae","sha256:35c97e50ac6404ce6bb0bc653d1d7b75da4c727139f6ad4c2fb4349ab36ddf74","sha256:473ec4813d862cfcaafff1d3b604c787be8aba9130a29d77aa6260545e33a204","sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef","sha256:90e294f7896d636a22eb471381c0541ec2583d6e4d87a3330ee603c712058373","sha256:ecd2c5179680324160b0205b222cb6bcf971272540e9ca6b0c7899473946b168","sha256:1045a45a3f55e192bbc825ed2ad291fa1c548e767860db71be78502aabb6971e"]}}
image/blobs/sha256/eb5b37a32a219394704bc5e4f333758d38742ca4e247bcd28b5a44b42b97a327 ADDED
@@ -0,0 +1 @@
 
 
1
+ {"id":"0426d842d0357450080930684cb42d7dad8602535c207490818f4d3566645497","parent":"fd698fc0ee060bdb1b97148554553dab869f4540ca68750e920f7e8a61220ff4","created":"1970-01-01T09:00:00+09:00","container_config":{"Hostname":"","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":null,"Cmd":null,"Image":"","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":null},"os":"linux"}
image/blobs/sha256/f22d2a87583a45d1c172ba963719a2ee0f27530e83acef41dc1680e6770e308a ADDED
@@ -0,0 +1 @@
 
 
1
+ {"schemaVersion":2,"mediaType":"application/vnd.oci.image.manifest.v1+json","config":{"mediaType":"application/vnd.oci.image.config.v1+json","digest":"sha256:e4a3caad98453047bb9214acfacdd96b2e2a9f7f6848c3a9b996517022f57223","size":14536},"layers":[{"mediaType":"application/vnd.oci.image.layer.v1.tar","digest":"sha256:ea16cace89338c84eb6bcb91a7efdfcae6838fff359efe951858227436486c34","size":80641024},{"mediaType":"application/vnd.oci.image.layer.v1.tar","digest":"sha256:6c408d42e47696ba1e15286920342148bc1abe126e0f99360e4c326353902e1e","size":204086784},{"mediaType":"application/vnd.oci.image.layer.v1.tar","digest":"sha256:736ec30ae64bb61262359a95a91043c01e7d0758a49009446d1215db5543c242","size":352256},{"mediaType":"application/vnd.oci.image.layer.v1.tar","digest":"sha256:51ef7c71a2866da3f5d6688562490a79f40394816b667620c43cb3872171d0fb","size":33464832},{"mediaType":"application/vnd.oci.image.layer.v1.tar","digest":"sha256:94ad5f8b1ea8e4688c7c8a400fde84d9e20b2b767b0310c63bd811e790969c6d","size":454126592},{"mediaType":"application/vnd.oci.image.layer.v1.tar","digest":"sha256:23880bbd4b23fd061f5a477fc7146557d6930ebe5c4d4fa77397bc4db408ebed","size":187652608},{"mediaType":"application/vnd.oci.image.layer.v1.tar","digest":"sha256:424a2d1656007a555e088bc76aa22c344f96d50f99de20375a122f02f4f09615","size":1103582720},{"mediaType":"application/vnd.oci.image.layer.v1.tar","digest":"sha256:2913e7d4aae3b053b2337c0f74236067652783d528ac5e6d56a85f13b8e2be28","size":2048},{"mediaType":"application/vnd.oci.image.layer.v1.tar","digest":"sha256:a14941fe4a862fbf3aa39678a3135484e668589914f29b93cc7a7c6ca24b75fe","size":454599168},{"mediaType":"application/vnd.oci.image.layer.v1.tar","digest":"sha256:6808c251a29fd58130fb52a75a2f26e7a1798f95e2d6e95ae4980d08b302f329","size":130853888},{"mediaType":"application/vnd.oci.image.layer.v1.tar","digest":"sha256:a86a2eee05f32c5e45e23503e2f4682c1a5c7abd5764ce0706e2d8f7638d2f20","size":130853888},{"mediaType":"application/vnd.oci.image.layer.v1.tar","digest":"sha256:e92e614de15e5ce50ba21380c2740a1c9f0bd7a1291cce0be238c21f6ec36581","size":191707136},{"mediaType":"application/vnd.oci.image.layer.v1.tar","digest":"sha256:44f1dfd79fe45a08396131615fbdc4f0c7a09fd5b3988fe9dbc33ea7613ae80e","size":65318400},{"mediaType":"application/vnd.oci.image.layer.v1.tar","digest":"sha256:b4de8174cd132e6b54956ea091d24c6cf6a15179cb5f634d8aafc41dd5a5a79d","size":4678144},{"mediaType":"application/vnd.oci.image.layer.v1.tar","digest":"sha256:b619284fc58a2511f0e2cf87c6407029e1912483daf54d9081ec13201367482b","size":23040},{"mediaType":"application/vnd.oci.image.layer.v1.tar","digest":"sha256:2977e66e9f580875472b63878f7926b448957c7ff312984cfa6fde4e09a830ae","size":432640},{"mediaType":"application/vnd.oci.image.layer.v1.tar","digest":"sha256:35c97e50ac6404ce6bb0bc653d1d7b75da4c727139f6ad4c2fb4349ab36ddf74","size":4608},{"mediaType":"application/vnd.oci.image.layer.v1.tar","digest":"sha256:473ec4813d862cfcaafff1d3b604c787be8aba9130a29d77aa6260545e33a204","size":4608},{"mediaType":"application/vnd.oci.image.layer.v1.tar","digest":"sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef","size":1024},{"mediaType":"application/vnd.oci.image.layer.v1.tar","digest":"sha256:90e294f7896d636a22eb471381c0541ec2583d6e4d87a3330ee603c712058373","size":3584},{"mediaType":"application/vnd.oci.image.layer.v1.tar","digest":"sha256:ecd2c5179680324160b0205b222cb6bcf971272540e9ca6b0c7899473946b168","size":102400},{"mediaType":"application/vnd.oci.image.layer.v1.tar","digest":"sha256:1045a45a3f55e192bbc825ed2ad291fa1c548e767860db71be78502aabb6971e","size":39936}]}
image/index.json ADDED
@@ -0,0 +1 @@
 
 
1
+ {"schemaVersion":2,"mediaType":"application/vnd.oci.image.index.v1+json","manifests":[{"mediaType":"application/vnd.oci.image.manifest.v1+json","digest":"sha256:f22d2a87583a45d1c172ba963719a2ee0f27530e83acef41dc1680e6770e308a","size":3613,"annotations":{"io.containerd.image.name":"docker.io/tt-model/superpoint-blackhole:e4a3caad9845","org.opencontainers.image.ref.name":"e4a3caad9845"}}]}
image/manifest.json ADDED
@@ -0,0 +1 @@
 
 
1
+ [{"Config":"blobs/sha256/e4a3caad98453047bb9214acfacdd96b2e2a9f7f6848c3a9b996517022f57223","RepoTags":["tt-model/superpoint-blackhole:e4a3caad9845"],"Layers":["blobs/sha256/ea16cace89338c84eb6bcb91a7efdfcae6838fff359efe951858227436486c34","blobs/sha256/6c408d42e47696ba1e15286920342148bc1abe126e0f99360e4c326353902e1e","blobs/sha256/736ec30ae64bb61262359a95a91043c01e7d0758a49009446d1215db5543c242","blobs/sha256/51ef7c71a2866da3f5d6688562490a79f40394816b667620c43cb3872171d0fb","blobs/sha256/94ad5f8b1ea8e4688c7c8a400fde84d9e20b2b767b0310c63bd811e790969c6d","blobs/sha256/23880bbd4b23fd061f5a477fc7146557d6930ebe5c4d4fa77397bc4db408ebed","blobs/sha256/424a2d1656007a555e088bc76aa22c344f96d50f99de20375a122f02f4f09615","blobs/sha256/2913e7d4aae3b053b2337c0f74236067652783d528ac5e6d56a85f13b8e2be28","blobs/sha256/a14941fe4a862fbf3aa39678a3135484e668589914f29b93cc7a7c6ca24b75fe","blobs/sha256/6808c251a29fd58130fb52a75a2f26e7a1798f95e2d6e95ae4980d08b302f329","blobs/sha256/a86a2eee05f32c5e45e23503e2f4682c1a5c7abd5764ce0706e2d8f7638d2f20","blobs/sha256/e92e614de15e5ce50ba21380c2740a1c9f0bd7a1291cce0be238c21f6ec36581","blobs/sha256/44f1dfd79fe45a08396131615fbdc4f0c7a09fd5b3988fe9dbc33ea7613ae80e","blobs/sha256/b4de8174cd132e6b54956ea091d24c6cf6a15179cb5f634d8aafc41dd5a5a79d","blobs/sha256/b619284fc58a2511f0e2cf87c6407029e1912483daf54d9081ec13201367482b","blobs/sha256/2977e66e9f580875472b63878f7926b448957c7ff312984cfa6fde4e09a830ae","blobs/sha256/35c97e50ac6404ce6bb0bc653d1d7b75da4c727139f6ad4c2fb4349ab36ddf74","blobs/sha256/473ec4813d862cfcaafff1d3b604c787be8aba9130a29d77aa6260545e33a204","blobs/sha256/5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef","blobs/sha256/90e294f7896d636a22eb471381c0541ec2583d6e4d87a3330ee603c712058373","blobs/sha256/ecd2c5179680324160b0205b222cb6bcf971272540e9ca6b0c7899473946b168","blobs/sha256/1045a45a3f55e192bbc825ed2ad291fa1c548e767860db71be78502aabb6971e"],"LayerSources":{"sha256:1045a45a3f55e192bbc825ed2ad291fa1c548e767860db71be78502aabb6971e":{"mediaType":"application/vnd.oci.image.layer.v1.tar","size":39936,"digest":"sha256:1045a45a3f55e192bbc825ed2ad291fa1c548e767860db71be78502aabb6971e"},"sha256:23880bbd4b23fd061f5a477fc7146557d6930ebe5c4d4fa77397bc4db408ebed":{"mediaType":"application/vnd.oci.image.layer.v1.tar","size":187652608,"digest":"sha256:23880bbd4b23fd061f5a477fc7146557d6930ebe5c4d4fa77397bc4db408ebed"},"sha256:2913e7d4aae3b053b2337c0f74236067652783d528ac5e6d56a85f13b8e2be28":{"mediaType":"application/vnd.oci.image.layer.v1.tar","size":2048,"digest":"sha256:2913e7d4aae3b053b2337c0f74236067652783d528ac5e6d56a85f13b8e2be28"},"sha256:2977e66e9f580875472b63878f7926b448957c7ff312984cfa6fde4e09a830ae":{"mediaType":"application/vnd.oci.image.layer.v1.tar","size":432640,"digest":"sha256:2977e66e9f580875472b63878f7926b448957c7ff312984cfa6fde4e09a830ae"},"sha256:35c97e50ac6404ce6bb0bc653d1d7b75da4c727139f6ad4c2fb4349ab36ddf74":{"mediaType":"application/vnd.oci.image.layer.v1.tar","size":4608,"digest":"sha256:35c97e50ac6404ce6bb0bc653d1d7b75da4c727139f6ad4c2fb4349ab36ddf74"},"sha256:424a2d1656007a555e088bc76aa22c344f96d50f99de20375a122f02f4f09615":{"mediaType":"application/vnd.oci.image.layer.v1.tar","size":1103582720,"digest":"sha256:424a2d1656007a555e088bc76aa22c344f96d50f99de20375a122f02f4f09615"},"sha256:44f1dfd79fe45a08396131615fbdc4f0c7a09fd5b3988fe9dbc33ea7613ae80e":{"mediaType":"application/vnd.oci.image.layer.v1.tar","size":65318400,"digest":"sha256:44f1dfd79fe45a08396131615fbdc4f0c7a09fd5b3988fe9dbc33ea7613ae80e"},"sha256:473ec4813d862cfcaafff1d3b604c787be8aba9130a29d77aa6260545e33a204":{"mediaType":"application/vnd.oci.image.layer.v1.tar","size":4608,"digest":"sha256:473ec4813d862cfcaafff1d3b604c787be8aba9130a29d77aa6260545e33a204"},"sha256:51ef7c71a2866da3f5d6688562490a79f40394816b667620c43cb3872171d0fb":{"mediaType":"application/vnd.oci.image.layer.v1.tar","size":33464832,"digest":"sha256:51ef7c71a2866da3f5d6688562490a79f40394816b667620c43cb3872171d0fb"},"sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef":{"mediaType":"application/vnd.oci.image.layer.v1.tar","size":1024,"digest":"sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef"},"sha256:6808c251a29fd58130fb52a75a2f26e7a1798f95e2d6e95ae4980d08b302f329":{"mediaType":"application/vnd.oci.image.layer.v1.tar","size":130853888,"digest":"sha256:6808c251a29fd58130fb52a75a2f26e7a1798f95e2d6e95ae4980d08b302f329"},"sha256:6c408d42e47696ba1e15286920342148bc1abe126e0f99360e4c326353902e1e":{"mediaType":"application/vnd.oci.image.layer.v1.tar","size":204086784,"digest":"sha256:6c408d42e47696ba1e15286920342148bc1abe126e0f99360e4c326353902e1e"},"sha256:736ec30ae64bb61262359a95a91043c01e7d0758a49009446d1215db5543c242":{"mediaType":"application/vnd.oci.image.layer.v1.tar","size":352256,"digest":"sha256:736ec30ae64bb61262359a95a91043c01e7d0758a49009446d1215db5543c242"},"sha256:90e294f7896d636a22eb471381c0541ec2583d6e4d87a3330ee603c712058373":{"mediaType":"application/vnd.oci.image.layer.v1.tar","size":3584,"digest":"sha256:90e294f7896d636a22eb471381c0541ec2583d6e4d87a3330ee603c712058373"},"sha256:94ad5f8b1ea8e4688c7c8a400fde84d9e20b2b767b0310c63bd811e790969c6d":{"mediaType":"application/vnd.oci.image.layer.v1.tar","size":454126592,"digest":"sha256:94ad5f8b1ea8e4688c7c8a400fde84d9e20b2b767b0310c63bd811e790969c6d"},"sha256:a14941fe4a862fbf3aa39678a3135484e668589914f29b93cc7a7c6ca24b75fe":{"mediaType":"application/vnd.oci.image.layer.v1.tar","size":454599168,"digest":"sha256:a14941fe4a862fbf3aa39678a3135484e668589914f29b93cc7a7c6ca24b75fe"},"sha256:a86a2eee05f32c5e45e23503e2f4682c1a5c7abd5764ce0706e2d8f7638d2f20":{"mediaType":"application/vnd.oci.image.layer.v1.tar","size":130853888,"digest":"sha256:a86a2eee05f32c5e45e23503e2f4682c1a5c7abd5764ce0706e2d8f7638d2f20"},"sha256:b4de8174cd132e6b54956ea091d24c6cf6a15179cb5f634d8aafc41dd5a5a79d":{"mediaType":"application/vnd.oci.image.layer.v1.tar","size":4678144,"digest":"sha256:b4de8174cd132e6b54956ea091d24c6cf6a15179cb5f634d8aafc41dd5a5a79d"},"sha256:b619284fc58a2511f0e2cf87c6407029e1912483daf54d9081ec13201367482b":{"mediaType":"application/vnd.oci.image.layer.v1.tar","size":23040,"digest":"sha256:b619284fc58a2511f0e2cf87c6407029e1912483daf54d9081ec13201367482b"},"sha256:e92e614de15e5ce50ba21380c2740a1c9f0bd7a1291cce0be238c21f6ec36581":{"mediaType":"application/vnd.oci.image.layer.v1.tar","size":191707136,"digest":"sha256:e92e614de15e5ce50ba21380c2740a1c9f0bd7a1291cce0be238c21f6ec36581"},"sha256:ea16cace89338c84eb6bcb91a7efdfcae6838fff359efe951858227436486c34":{"mediaType":"application/vnd.oci.image.layer.v1.tar","size":80641024,"digest":"sha256:ea16cace89338c84eb6bcb91a7efdfcae6838fff359efe951858227436486c34"},"sha256:ecd2c5179680324160b0205b222cb6bcf971272540e9ca6b0c7899473946b168":{"mediaType":"application/vnd.oci.image.layer.v1.tar","size":102400,"digest":"sha256:ecd2c5179680324160b0205b222cb6bcf971272540e9ca6b0c7899473946b168"}}}]
image/oci-layout ADDED
@@ -0,0 +1 @@
 
 
1
+ {"imageLayoutVersion": "1.0.0"}
image/repositories ADDED
@@ -0,0 +1 @@
 
 
1
+ {"tt-model/superpoint-blackhole":{"e4a3caad9845":"1045a45a3f55e192bbc825ed2ad291fa1c548e767860db71be78502aabb6971e"}}
requirements.lock ADDED
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ annotated-doc==0.0.5
2
+ annotated-types==0.8.0
3
+ anyio==4.15.1
4
+ certifi==2026.7.22
5
+ cfgv==3.5.0
6
+ charset-normalizer==3.5.1
7
+ click==8.5.0
8
+ contourpy==1.3.3
9
+ cycler==0.12.1
10
+ distlib==0.4.3
11
+ distro==1.9.0
12
+ elastic-transport==9.4.2
13
+ elasticsearch==9.5.1
14
+ fastapi==0.141.1
15
+ filelock==3.32.6
16
+ fonttools==4.65.0
17
+ fsspec==2026.7.0
18
+ graphviz==0.21
19
+ h11==0.16.0
20
+ hf-xet==1.6.0
21
+ httpcore==1.0.9
22
+ httpx==0.28.1
23
+ huggingface_hub==1.31.0
24
+ identify==2.6.19
25
+ idna==3.19
26
+ Jinja2==3.1.6
27
+ kiwisolver==1.5.1
28
+ linkify-it-py==2.2.0
29
+ loguru==0.7.3
30
+ markdown-it-py==4.2.0
31
+ MarkupSafe==3.0.3
32
+ matplotlib==3.11.2
33
+ mdit-py-plugins==0.6.1
34
+ mdurl==0.1.2
35
+ ml_dtypes==0.5.4
36
+ mpmath==1.3.0
37
+ networkx==3.6.1
38
+ nodeenv==1.10.0
39
+ numpy==1.26.4
40
+ packaging==26.3
41
+ pandas==3.0.5
42
+ pillow==12.3.0
43
+ platformdirs==4.11.8
44
+ pre_commit==4.6.2
45
+ psutil==7.2.2
46
+ pydantic==2.13.5
47
+ pydantic_core==2.46.5
48
+ Pygments==2.21.0
49
+ pyluwen==0.9.0
50
+ pyparsing==3.3.2
51
+ python-dateutil==2.9.0.post0
52
+ python-discovery==1.6.0
53
+ PyYAML==6.0.3
54
+ regex==2026.9.10
55
+ requests==2.34.2
56
+ rich==15.0.0
57
+ safetensors==0.8.0
58
+ seaborn==0.13.2
59
+ setuptools==80.10.2
60
+ setuptools-scm==8.1.0
61
+ shellingham==1.5.4
62
+ six==1.17.0
63
+ sniffio==1.3.1
64
+ starlette==1.6.0
65
+ sympy==1.14.0
66
+ textual==8.2.8
67
+ tokenizers==0.23.2
68
+ tomli==2.4.1
69
+ torch==2.11.0+cpu
70
+ tqdm==4.70.1
71
+ transformers==5.17.0
72
+ tt-smi==6.5.0
73
+ tt-tools-common==1.6.0
74
+ tt-umd==0.9.10
75
+ ttnn==0.65.2.dev9100
76
+ ttnn==0.75.0rc10.dev657+g8b98410e730
77
+ typer==0.27.2
78
+ typing-inspection==0.4.4
79
+ typing_extensions==4.16.0
80
+ urllib3==2.7.0
81
+ uvicorn==0.52.4
82
+ virtualenv==21.7.9
83
+ wheel==0.48.0
tt_kernel_manifest.json ADDED
@@ -0,0 +1,111 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "schema_version": "5.1",
3
+ "name": "superpoint-blackhole",
4
+ "tt_metal_version": "0.65.2.dev9100",
5
+ "arch": "blackhole",
6
+ "device_count": 1,
7
+ "producer": {
8
+ "tt_kernel_version": "0.1.0",
9
+ "created_at": "2026-09-12T04:48:43.859389+00:00",
10
+ "hostname": "deepgadget"
11
+ },
12
+ "weights": {
13
+ "repo_id": "magic-leap-community/superpoint",
14
+ "revision": "734450e9ffe229074f5998494ddc615475cdb20a",
15
+ "allow_patterns": [
16
+ "config.json",
17
+ "model.safetensors",
18
+ "preprocessor_config.json"
19
+ ],
20
+ "ignore_patterns": null,
21
+ "repo_type": "model"
22
+ },
23
+ "mesh": null,
24
+ "entrypoint": null,
25
+ "resources": null,
26
+ "capabilities": null,
27
+ "env": {},
28
+ "bundled": null,
29
+ "deps": null,
30
+ "container": {
31
+ "image": {
32
+ "registry": "hf",
33
+ "repository": "superpoint-blackhole",
34
+ "tag": "tt-model/superpoint-blackhole:e4a3caad9845",
35
+ "digest": "sha256:e4a3caad98453047bb9214acfacdd96b2e2a9f7f6848c3a9b996517022f57223"
36
+ },
37
+ "kind": "tt-dit-server",
38
+ "runtime": {
39
+ "app": "models.server.app:app",
40
+ "mesh_shape_env": "TT_MESH_SHAPE",
41
+ "packages": [
42
+ "numpy>=1.24.4,<2",
43
+ "transformers>=4.53,<6",
44
+ "huggingface_hub",
45
+ "safetensors"
46
+ ],
47
+ "lock": "requirements.lock"
48
+ },
49
+ "serve": {
50
+ "hardware": "p150",
51
+ "mesh_device": "P150",
52
+ "port": 20000,
53
+ "max_model_len": null,
54
+ "max_num_seqs": null,
55
+ "block_size": null,
56
+ "server_timeout": null,
57
+ "capabilities": null,
58
+ "additional_config": {},
59
+ "args": [],
60
+ "env": {
61
+ "TT_WEIGHTS_REVISION": "734450e9ffe229074f5998494ddc615475cdb20a",
62
+ "TT_METAL_VISIBLE_DEVICES": "0"
63
+ }
64
+ },
65
+ "serve_profiles": [
66
+ {
67
+ "hardware": null,
68
+ "mesh_device": null,
69
+ "port": null,
70
+ "max_model_len": null,
71
+ "max_num_seqs": null,
72
+ "block_size": null,
73
+ "server_timeout": null,
74
+ "capabilities": null,
75
+ "additional_config": {},
76
+ "args": [],
77
+ "env": {},
78
+ "name": "default",
79
+ "description": null
80
+ }
81
+ ],
82
+ "default_profile": null,
83
+ "code_dir": "code",
84
+ "verify": [
85
+ "import models.server.app as a; assert a.app",
86
+ "from models.tt.superpoint_ttnn import TtSuperPoint, device_outputs_to_host; assert TtSuperPoint",
87
+ "from models.tt.postprocess import postprocess_keypoints; assert postprocess_keypoints",
88
+ "import transformers, huggingface_hub, safetensors; from transformers import SuperPointForKeypointDetection; assert SuperPointForKeypointDetection",
89
+ "import numpy; assert numpy.__version__.startswith('1.'), numpy.__version__",
90
+ "from pathlib import Path; assert Path('/opt/tt-metal/sample_data/house_in_field_1080p.jpg').is_file()"
91
+ ],
92
+ "built": {
93
+ "image": "tt-model/superpoint-blackhole:e4a3caad9845",
94
+ "repo": "changh95/superpoint-blackhole",
95
+ "tt_model_version": "0.1.0",
96
+ "created_at": "2026-09-12T04:46:07+00:00",
97
+ "tt_metal": {
98
+ "sha": "8b98410e730bb504fea43a88609756e34821d91d",
99
+ "describe": "v0.78.0-dev20260820-25-g8b98410e73",
100
+ "dirty": false,
101
+ "scm_version": "0.65.2.dev9100",
102
+ "mode": "local",
103
+ "remote": "https://github.com/tenstorrent/tt-metal.git",
104
+ "branch": "main",
105
+ "pushed": true
106
+ },
107
+ "code_sha256": "416a56f5b5475d4c66a44e99b56c32ae74bb417e65771f21b436d10481c01fe9",
108
+ "image_digest": "sha256:e4a3caad98453047bb9214acfacdd96b2e2a9f7f6848c3a9b996517022f57223"
109
+ }
110
+ }
111
+ }