Morkon commited on
Commit
a4d5ae7
·
verified ·
1 Parent(s): bcf270c

Upload fp32 HolosTTS bundle (official onnx/, vocab truncated to 181)

Browse files
holos-onnx/README.md CHANGED
@@ -1,9 +1,9 @@
1
- # HolosTTS → Promin ONNX bundle (`holos-onnx`)
2
 
3
  Багатоетапний ONNX-бандл для рушія
4
  [Promin TTS](https://github.com/Karnemorkon/promin-tts) (`format_version: 2`).
5
  Це не один граф, а набір сесій: Rust рахує вирівнювання кадрів між ними й
6
- передає `f0`/`energy`, тому довжина тексту не фіксується в графі.
7
 
8
  > **Голоси та згода дикторів.** `voices.npz` містить 27 пресетів із HolosTTS.
9
  > Автор HolosTTS зазначає, що диктори не надавали згоди на синтез їхніх голосів
@@ -13,27 +13,65 @@
13
  > людини. Не використовуйте ці пресети для публікації або монетизації
14
  > синтезованого мовлення без окремого дозволу диктора.
15
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
  ## Вміст
17
 
18
  | Файл | Розмір | Призначення |
19
  |---|---|---|
20
- | `holos_onnx.json` | 2.2 KB | маніфест: вокабуляр, частота, етапи, ліміти |
21
- | `encoder.onnx` | 265 MB | `tokens[1,T]`, `voice[1,256]`, `speed[1]` → `acoustic_tokens[1,512,T]`, `prosodic_tokens[1,T,512]`, `durations[1,T]` |
22
  | `prosody.onnx` | 68 MB | `prosodic_tokens`, `frame_to_token[F]`, `voice` → `f0[1,2F]`, `energy[1,2F]` |
23
- | `decoder.onnx` | 210 MB | exact-декодер на всю репліку → `audio[1,600F]` |
24
- | `source.onnx` | 13 KB | `f0[1,2F]` → збудження `source[1,600F]` для стрімінгу |
25
  | `decoder_window.onnx` | 210 MB | віконний декодер, споживає готовий `source` |
26
- | `voices.npz` | 29 KB | 27 пресетів голосів (`names`, `values[27,256]`) |
 
 
 
 
 
27
 
28
- 24 кГц, 600 семплів на кадр (25 мс), `max_frames: 20000` (≈8.3 хв на
29
- репліку). Стрімінг: чанк 10 кадрів (250 мс), контекст 2 кадри.
 
 
 
 
 
 
 
 
 
 
 
 
30
 
31
  ## Використання
32
 
33
  ```bash
34
  pip install huggingface_hub
35
  python -c "from huggingface_hub import snapshot_download; \
36
- snapshot_download('Morkon/holos-native-models', allow_patterns=['holos-onnx/*'], \
 
37
  local_dir='models')"
38
  ```
39
 
@@ -41,32 +79,39 @@ python -c "from huggingface_hub import snapshot_download; \
41
  `holos-onnx/holos_onnx.json` і підніме всі етапи. Якщо каталогу моделей
42
  немає зовсім, Promin завантажує бандл автоматично з цього репозиторію.
43
 
44
- Маніфест можна читати як контракт: імена файлів, вокабуляр (181 запис),
45
- частота й розмірності беруться з нього, а не з коду.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46
 
47
  ## Походження та ліцензія
48
 
49
  - Ваги й архітектура: [patriotyk/HolosTTS](https://github.com/patriotyk/HolosTTS),
50
  модель [`patriotyk/HolosTTS`](https://huggingface.co/patriotyk/HolosTTS)
51
- (MIT, © автор HolosTTS). Експорт виконано з `holos.pt` і `voices.pt` без
52
- донавчання.
53
- - ONNX-обгортки й експортер: [Promin TTS](https://github.com/Karnemorkon/promin-tts),
54
- MIT.
55
  - **Голосові пресети (`voices.npz`) не покриваються MIT як дозволом на
56
  використання голосу.** Згода дикторів не підтверджена; див. попередження
57
  вище та [discussion #5](https://huggingface.co/patriotyk/HolosTTS/discussions/5).
58
  - Репозиторій загалом має окрему ліцензію через Gemma-вербалізатор.
59
-
60
- ## Перевірка
61
-
62
- Експорт звірено з PyTorch на трьох фразах:
63
-
64
- - `encoder` — `allclose` з точністю ~2e-6, `durations` збігаються точно;
65
- - `prosody` — `f0`/`energy` з точністю ~5e-5;
66
- - `decoder` — довжина `600·F` семплів, RMS-відношення ≈1.000, косинус 0.995+;
67
- - `decoder_window` — максимальна різниця ~4e-6 (детермінований `source`);
68
- - довільні довжини 1, 2, 7, 37, 101 кадр — коректна довжина й скінченні
69
- значення.
70
-
71
- Скрипт експорту й перевірки: `tools/export_holos_bundle.py` у репозиторії
72
- Promin TTS. Контрольні суми — у `SHA256SUMS`.
 
1
+ # HolosTTS → Promin ONNX bundle (`holos-onnx`, fp32)
2
 
3
  Багатоетапний ONNX-бандл для рушія
4
  [Promin TTS](https://github.com/Karnemorkon/promin-tts) (`format_version: 2`).
5
  Це не один граф, а набір сесій: Rust рахує вирівнювання кадрів між ними й
6
+ передає `f0`/`energy`.
7
 
8
  > **Голоси та згода дикторів.** `voices.npz` містить 27 пресетів із HolosTTS.
9
  > Автор HolosTTS зазначає, що диктори не надавали згоди на синтез їхніх голосів
 
13
  > людини. Не використовуйте ці пресети для публікації або монетизації
14
  > синтезованого мовлення без окремого дозволу диктора.
15
 
16
+ ## Джерело та версія
17
+
18
+ Це **офіційний fp32-бандл** із релізу
19
+ [`patriotyk/HolosTTS`](https://huggingface.co/patriotyk/HolosTTS) від
20
+ 2026-11-01, зазеркалений без донавчання. Використано `onnx/` та нові
21
+ `holos.pt` / `voices.pt` / `voice_encoder.pt`:
22
+
23
+ | Файл | SHA-256 |
24
+ |---|---|
25
+ | `holos.pt` | `ecb427ea9dce0ec5d3587e36016cfd25f447581eb1eb9579d35d28cef5d7dda6` |
26
+ | `voices.pt` | `58033c9bedfed0a34d581310f89e1053a091c80356e23ab18baec2881c861ef8` |
27
+ | `voice_encoder.pt` | `81d6134dbfe105131d908333f5132a01c471e80d9070f5f381745eabdd48fe74` |
28
+
29
+ Маніфест змінено лише в одному місці: `vocab` обрізано з 184 до **181**
30
+ записів. Офіційний список має 184 символи, але лише 181 унікальний, тоді як
31
+ таблиці ембедінгів мають 181 рядок. Зайві три записи — дублікати апострофа та
32
+ рідкісні `̩`/`ᵻ`, яких немає в таблиці; без обрізання токенізатор міг би
33
+ видати id ≥ 181 і зламати граф. Перші 181 запис збігаються з попереднім
34
+ опублікованим вокабуляром.
35
+
36
  ## Вміст
37
 
38
  | Файл | Розмір | Призначення |
39
  |---|---|---|
40
+ | `holos_onnx.json` | 2.5 KB | маніфест: вокабуляр, частота, етапи, ліміти |
41
+ | `encoder.onnx` | 266 MB | `tokens[1,T]`, `voice[1,256]`, `speed[1]` → `acoustic_tokens[1,512,T]`, `prosodic_tokens[1,T,512]`, `durations[1,T]` |
42
  | `prosody.onnx` | 68 MB | `prosodic_tokens`, `frame_to_token[F]`, `voice` → `f0[1,2F]`, `energy[1,2F]` |
43
+ | `decoder.onnx` | 212 MB | exact-декодер на всю репліку → `audio[1,600F]` |
44
+ | `source.onnx` | 2.5 MB | `f0[1,2F]` → збудження `source[1,600F]` для стрімінгу |
45
  | `decoder_window.onnx` | 210 MB | віконний декодер, споживає готовий `source` |
46
+ | `voices.npz` | 26 KB | 27 пресетів голосів (`names`, `values[27,256]`) |
47
+ | `../tts/voice_encoder.onnx` | 195 MB | **окремо**: wave `[1,N]` @24 кГц → voice `[1,256]` для клонування |
48
+
49
+ 24 кГц, 600 семплів на кадр (25 мс).
50
+
51
+ ## Ліміт 1000 кадрів
52
 
53
+ `max_frames: 1000` — це **жорсткий ліміт усередині графів**, а не порада.
54
+ Офіційний експорт робить `seq_length = 1000` статичним; 987 кадрів
55
+ працюють, а 1125 падають в ONNX Runtime з помилкою broadcast
56
+ (`600000 by 675000`). 1000 кадрів — це ≈25 с аудіо на один виклик моделі.
57
+
58
+ Promin TTS v0.19+ ріже занадто довгі фонемні частини по пробілах/межах слів,
59
+ а якщо передбачена довжина все одно перевищує ліміт — ділить шматок навпіл і
60
+ повторює. Інші клієнти мають робити так само або відхиляти задовгі входи.
61
+
62
+ ## Стрімінг
63
+
64
+ `chunk_frames: 40` (1 с), `context_frames: 20` (0.5 с), вікно 80 кадрів
65
+ (2 с). Для fp32 exact- і віконний декодер дають **біт-у-біт однакове**
66
+ аудіо на тестових фразах.
67
 
68
  ## Використання
69
 
70
  ```bash
71
  pip install huggingface_hub
72
  python -c "from huggingface_hub import snapshot_download; \
73
+ snapshot_download('Morkon/holos-native-models', \
74
+ allow_patterns=['holos-onnx/*', 'tts/voice_encoder.onnx'], \
75
  local_dir='models')"
76
  ```
77
 
 
79
  `holos-onnx/holos_onnx.json` і підніме всі етапи. Якщо каталогу моделей
80
  немає зовсім, Promin завантажує бандл автоматично з цього репозиторію.
81
 
82
+ `voice_encoder.onnx` лежить у `models/tts/voice_encoder.onnx` (або плоско в
83
+ `models/voice_encoder.onnx`). Без нього клонування вимкнено.
84
+
85
+ **Старі клони несумісні.** Новий `voice_encoder.pt` дає інший 256-вимірний
86
+ простір, ніж попередній: ембеддінги з `speakers/*.npy`, зроблені старим
87
+ енкодером, не можна використовувати з новими вагами. Перезапишіть кожен
88
+ клонований голос із референсного WAV (енролмент заново).
89
+
90
+ ## Перевірка
91
+
92
+ - ONNX Runtime 1.31.0, IR 10 / opset 20 — графи завантажуються.
93
+ - Офіційний fp32: exact і streaming біт-у-біт; 987 кадрів — OK, 1125 —
94
+ очікувана помилка broadcast.
95
+ - Новий `voice_encoder.onnx` звірено з PyTorch `VoiceEncoder`: maxdiff
96
+ ≈1e-5, cosine 1.000000.
97
+ - Синтезоване мовлення `Speaker_0`, закодоване новим енкодером, найближче до
98
+ пресета `Speaker_0` (cosine 0.55–0.64; наступний пресет ≈0.33).
99
+ - INT8-бандл (окремо, `holos-onnx-int8/`) має log-spectrogram correlation
100
+ ≈0.88–0.95 з fp32; streaming vs exact ≈0.71. Для максимальної якості
101
+ використовуйте fp32.
102
+
103
+ Скрипт експорту/перевірки: `tools/export_holos_bundle.py` у репозиторії
104
+ Promin TTS. Контрольні суми — у `SHA256SUMS`.
105
 
106
  ## Походження та ліцензія
107
 
108
  - Ваги й архітектура: [patriotyk/HolosTTS](https://github.com/patriotyk/HolosTTS),
109
  модель [`patriotyk/HolosTTS`](https://huggingface.co/patriotyk/HolosTTS)
110
+ (MIT, © автор HolosTTS). Це офіційний ONNX-експорт, без донавчання.
111
+ - `voice_encoder.onnx` експортовано з офіційного `voice_encoder.pt`
112
+ (PyTorch → ONNX, opset 20) у Promin TTS; інтерфейс
113
+ `wave[1,N] → voice[1,256]` збережено.
114
  - **Голосові пресети (`voices.npz`) не покриваються MIT як дозволом на
115
  використання голосу.** Згода дикторів не підтверджена; див. попередження
116
  вище та [discussion #5](https://huggingface.co/patriotyk/HolosTTS/discussions/5).
117
  - Репозиторій загалом має окрему ліцензію через Gemma-вербалізатор.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
holos-onnx/SHA256SUMS CHANGED
@@ -1,7 +1,7 @@
1
- 2f1d44f9baeedf7a554bdbe5005a63feefbba0e2a51bba1b8b6e23aabff0134c decoder.onnx
2
- 47f946460121dd614d0d3ec79ea4dcef84a6cafdac9fb30a72d9082d1d915192 decoder_window.onnx
3
- 8119a7ea027b9fbf555589e3170c42a90c046280ef31abd6fc2585386f5d5bfb encoder.onnx
4
- 455a9e2fd704cf5d1608008252e7b0b11bae61c6ef6247b108c1cd723f21b575 holos_onnx.json
5
- 493b4425e61736777cbb685c89fa5f92dc45abee1d1016ce54ec2e44b0153f97 prosody.onnx
6
- 4d2056202c9d3bb31648d98ba13de92c02cacefccf4e7e6ff26a9a7eac909726 source.onnx
7
- 9f096dc8b9559b29f538bc398104713fe4a1ee065a073789c49232bd55d62c94 voices.npz
 
1
+ 948e4ebcc0fac1c8a31f5804d65459275a841cffff78e75d11b4fb14ae183060 encoder.onnx
2
+ ac5ca06e46b4e4c44670ecb94744e4f5d4214931bfb070b1c63e9f50dbe5e901 prosody.onnx
3
+ 8de4592bea18d15398a949a60ea794c3affec31845623179f5245d48e301c800 decoder.onnx
4
+ d75b9820a694a8bd6468aa6925817603f0853e2f906afd34cb3723772f65ee64 decoder_window.onnx
5
+ ced5242be197382289663f8a0b2760c92593b7c8a4dfedb976e43b0420aeac6b source.onnx
6
+ 5124ef2311e03c89228cc62ffdf8cefd88f8c07f0d8161063a03538af8f1b436 voices.npz
7
+ c244c21c8e2d888cc540fed98a5eaaf4d110a5ee56bde290468d55c9d54e24b8 holos_onnx.json
holos-onnx/decoder.onnx CHANGED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:2f1d44f9baeedf7a554bdbe5005a63feefbba0e2a51bba1b8b6e23aabff0134c
3
- size 209537078
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:8de4592bea18d15398a949a60ea794c3affec31845623179f5245d48e301c800
3
+ size 212379551
holos-onnx/decoder_window.onnx CHANGED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:47f946460121dd614d0d3ec79ea4dcef84a6cafdac9fb30a72d9082d1d915192
3
- size 209523994
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d75b9820a694a8bd6468aa6925817603f0853e2f906afd34cb3723772f65ee64
3
+ size 209942803
holos-onnx/encoder.onnx CHANGED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:8119a7ea027b9fbf555589e3170c42a90c046280ef31abd6fc2585386f5d5bfb
3
- size 264753169
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:948e4ebcc0fac1c8a31f5804d65459275a841cffff78e75d11b4fb14ae183060
3
+ size 266448569
holos-onnx/holos_onnx.json CHANGED
@@ -190,13 +190,25 @@
190
  ],
191
  "sample_rate": 24000,
192
  "samples_per_frame": 600,
193
- "max_frames": 20000,
194
  "decoder_mode": "exact",
195
  "alignment_format": "gather",
 
 
 
 
 
 
 
 
 
 
 
196
  "streaming": {
197
- "source": "source.onnx",
198
  "decoder": "decoder_window.onnx",
199
- "chunk_frames": 10,
200
- "context_frames": 2
 
 
201
  }
202
  }
 
190
  ],
191
  "sample_rate": 24000,
192
  "samples_per_frame": 600,
193
+ "max_frames": 1000,
194
  "decoder_mode": "exact",
195
  "alignment_format": "gather",
196
+ "attention_format": "tensorrt_fused_bmm",
197
+ "projection_format": "fused_qkv_swiglu",
198
+ "shape_inference_format": "onnx_standard",
199
+ "tensorrt_profile": {
200
+ "min_text_length": 2,
201
+ "opt_text_length": 128,
202
+ "max_text_length": 512,
203
+ "min_frames": 2,
204
+ "opt_frames": 256,
205
+ "max_frames": 1000
206
+ },
207
  "streaming": {
 
208
  "decoder": "decoder_window.onnx",
209
+ "source": "source.onnx",
210
+ "chunk_frames": 40,
211
+ "context_frames": 20,
212
+ "window_frames": 80
213
  }
214
  }
holos-onnx/prosody.onnx CHANGED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:493b4425e61736777cbb685c89fa5f92dc45abee1d1016ce54ec2e44b0153f97
3
- size 68178145
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ac5ca06e46b4e4c44670ecb94744e4f5d4214931bfb070b1c63e9f50dbe5e901
3
+ size 68411510
holos-onnx/source.onnx CHANGED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:4d2056202c9d3bb31648d98ba13de92c02cacefccf4e7e6ff26a9a7eac909726
3
- size 13161
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ced5242be197382289663f8a0b2760c92593b7c8a4dfedb976e43b0420aeac6b
3
+ size 2467810
holos-onnx/voices.npz CHANGED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:9f096dc8b9559b29f538bc398104713fe4a1ee065a073789c49232bd55d62c94
3
- size 29344
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:5124ef2311e03c89228cc62ffdf8cefd88f8c07f0d8161063a03538af8f1b436
3
+ size 26289