Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

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

Đang mở
#279 3 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

Chưa có ai nhận issue này.

Đánh giá

Độ khó
5/5
Thời gian dự kiến
Hơn một tuần
Mức phù hợp với người mới
35/100
Loại issue
Tính năng
Độ rõ ràng
Khá rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
python

Hướng nghiên cứu

Bắt đầu với cookbook/mm/fsdp2.py và pattern LatexOCRProcessor của nó, sau đó kiểm tra mã tokenizer của Qwen3-TTS để xác định các token multi-codebook được tổ chức như thế nào. Đọc community/norwegian-lora/train_lora.py trong repository MOSS-TTS để tham khảo về loss. Được xem là hoàn tất khi thiết kế của processor và loss đã được xác định, với các test kiểm tra shape của input và label cũng như việc masking bằng -100, trước khi bắt đầu công việc trên cookbook và tài liệu.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

背景

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 也能跑。

Ngôn ngữ chính
Python
Star
260
Fork
55
Merge trung bình
1 ngày 11 giờ
Pull request đã merge (30 ngày)
15

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của modelscope/twinkle

Tất cả issue của modelscope/twinkle

Issue tương tự

Thêm issue về Python

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.