Views
No views yet
speakerkit crate of the coremlit
workspace (Rust, sync, sans-I/O), feeding the dia diarization pipeline's clustering.2^-24). When a graph runs on the ANE (which computes in fp16 regardless of
the declared dtype), those guards round to zero:softmax → log(eps≈0) tail saturates log(0) to ≈ −45440,
which in the downstream pipeline collapsed an 8-speaker recording to 5 detected speakers
(16.6% DER, 100% confusion) while the ONNX reference was frame-perfect;real_div guards (1e-8) vanish the same way.torch.log_softmax still lowers to the
decomposed softmax → log(eps=0) under coremltools 9.0. These conversions use an
explicitly fused x − logsumexp(x) tail and raise every guard constant to 0x1p-24.| artifact | form | what it is |
|---|---|---|
pyannote_segmentation.{mlpackage,mlmodelc} | fp16 | pyannote segmentation-3.0 (PyanNet), fused log-probability tail |
wespeaker.{mlpackage,mlmodelc} | fp32 weights | WeSpeaker ResNet34-LM speaker embedder, pooling guards raised to 0x1p-24 (otherwise bit-identical numerics to the stock conversion) |
wespeaker_int8.{mlpackage,mlmodelc} | 8-bit palettized | same fixed embedder, k-means per-tensor palettization (~3.7× smaller, the production default) |
.mlpackage is the canonical distributable; .mlmodelc is the compiled form the test
suite consumes directly. CHECKSUMS.sha256 covers every file.2^-24, constants followed through cast, unresolvable guards fail the audit).| component | upstream | license |
|---|---|---|
| segmentation | pyannote/segmentation-3.0 (weights via its ONNX export) | MIT (upstream repo is access-gated; the MIT license permits redistribution with attribution — please also respect pyannote's usage conditions and cite their papers) |
| embedder | WeSpeaker ResNet34-LM (voxceleb) | Apache-2.0 (WeSpeaker project) |