Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

提案:为 Twinkle 新增 TTS 训练支持(多码本 Preprocessor + Loss)

Aperta
#279 3 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
5/5
Tempo stimato
Più di una settimana
Idoneità per principianti
35/100
Tipo di issue
Funzionalità
Chiarezza
Abbastanza chiara
Stato di attività
Attiva
Stack tecnologico
python

Direzione di ricerca

Inizia da cookbook/mm/fsdp2.py e dal relativo pattern LatexOCRProcessor, poi esamina il codice del tokenizer di Qwen3-TTS per determinare come sono organizzati i token multi-codebook. Leggi community/norwegian-lora/train_lora.py nel repository MOSS-TTS come riferimento per la loss. Il lavoro è completato quando il design del processor e della loss è definito, con test che verificano le shape degli input e delle label e il masking con -100, prima di iniziare il lavoro sul cookbook e sulla documentazione.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

背景

Twinkle 现在支持文本 LLM 和多模态,但没有 TTS 训练支持(cookbook 里没 TTS 示例,模型支持表也没列 TTS 变体)。我想给它加上 TTS 的 LoRA SFT 能力,先发个方案对一下,如果没问题我会按工作项实现并提交PR。

目标

让 Twinkle 能跑这两类 TTS 模型的 LoRA SFT:

  1. 多码本 AR-LM(如 Qwen3-TTS-12Hz-1.7B-Base):输入"文本+参考音频",输出"目标音频的多码本 token"
  2. 非 AR 局部 Transformer(如 MOSS-TTS-Local-Transformer-v1.5)

两类架构不同,但 LoRA 都挂在 q/k/v 这些线性层,组件能复用。

设计

仿 cookbook/mm/fsdp2.py 里 LatexOCRProcessor 的范式(自定义 Preprocessor 子类 + Trajectory/Message),加两个组件:

TTSMultiCodebookProcessor(Preprocessor 子类)

把 manifest 里的多码本 audio_codes 组织成训练样本:

  • 文本 + 参考音频部分:label 置 -100(不学)
  • 目标音频部分:保留多码本 label(学)
  • 输出形如 Trajectory(messages=[Message(role='user', content=text, audio=ref_codes), Message(role='assistant', audio_codes=target_codes)])
TTSMultiCodebookLoss(Loss 子类)

多码本 next-token 交叉熵:每个位置对每个码本算 CE 再求和,只在 label != -100 的位置算。多码本 loss 的写法参考 OpenMOSS 官方 MOSS-TTS 仓库 community/norwegian-lora/train_lora.py。

工作项拆解

  • W1 调研多码本 token 在序列里怎么组织(多头输出 / flatten / 残差量化),看 Qwen3-TTS 官方 tokenizer 代码确认。这决定 Preprocessor 的 encode 逻辑。
  • W2 设计 TTSMultiCodebookProcessor 接口:仿 LatexOCRProcessor,定 preprocess(row) -> Trajectory 的字段(Message 要不要加 audio_codes 字段、参考音频怎么放)。
  • W3 实现 TTSMultiCodebookProcessor + 单测:用极小 manifest 跑通 encode,断言 input_ids/labels 的 shape 和 -100 位置正确。
  • W4 设计+实现 TTSMultiCodebookLoss:多码本 CE,仿现成 causal_lm 的接口风格,加 task='multi_codebook_lm'。
  • W5 加 cookbook 示例 cookbook/tts/qwen3_tts_lora.py:单卡 + LoRA + bf16,仿 cookbook/transformers/fsdp2.py 结构。
  • W6 MOSS-TTS-Local-Transformer 适配:非 AR 局部 Transformer 训练格式不同,可能要再写个 Preprocessor 变体(W1-W5 跑通后再碰)。
  • W7 文档:README 教程表加 TTS 行、docs 加一节"TTS 训练"。

不在范围内

  • vocoder / codec 本身训练(冻结用官方训好的)
  • 全量 SFT(先做 LoRA,全量以后再说)

想确认的几点

  1. Message 类要不要扩展支持 audio_codes 字段?还是复用现成的 images 之类?
  2. 多码本 loss 是写个新 Loss 类,还是给现成 CE 加个 multi-codebook 模式?
  3. task='multi_codebook_lm' 这个 task 名合不合适?要不要走现成 task 机制?
  4. cookbook 放 cookbook/tts/ 还是 cookbook/transformers/ 下?

硬件

我在昇腾 NPU 单卡上做(bf16 LoRA),但组件本身不绑死硬件,CUDA 也能跑。

Lingua principale
Python
Stelle
260
Fork
55
Merge medio
1g 11h
PR unite (30g)
15

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di modelscope/twinkle

Tutte le issue di modelscope/twinkle

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.