十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

在 MLX 上运行 KugelAudio:24 种欧洲语言的 7B 混合自回归 + 扩散 TTS 实战指南

在 MLX 上运行 KugelAudio:24 种欧洲语言的 7B 混合自回归 + 扩散 TTS 实战指南 在 MLX 上运行 KugelAudio24 种欧洲语言的 7B 混合自回归 扩散 TTS 实战指南【免费下载链接】mlx-audioA text-to-speech (TTS), speech-to-text (STT) and speech-to-speech (STS) library built on Apples MLX framework, providing efficient speech analysis on Apple Silicon.项目地址: https://gitcode.com/GitHub_Trending/ml/mlx-audioKugelAudio 是一个面向 24 种欧洲语言的开源 7B 参数文本转语音TTS模型本仓库mlx-audio直接加载其原始 bfloat16 权重并通过统一的generate()接口在 Apple Silicon 上运行。读完本文你将掌握在 MLX 环境中通过 CLI 与 Python API 完成 KugelAudio 语音合成、调优cfg_scale与ddpm_steps参数、理解其混合 AR Diffusion 架构与内存占用的完整实战方案。KugelAudio 模型概览KugelAudio 是一个开放权重的 7B 参数 TTS 模型专注于 24 种欧洲语言的语音合成。mlx-audio 的集成直接运行官方原始权重不做任何权重格式转换并对外暴露了与其他 TTS 模型一致的标准generate()接口因此可以无缝接入仓库统一的加载、推理与音频输出流程。ModelPrecision说明kugelaudio/kugelaudio-0-openbfloat16官方原始权重直接在 MLX 中加载运行从 模型实现源码 的类注释可知该模型基于 Microsoft VibeVoice在约 200K 小时的语音数据上微调得到覆盖 24 种欧洲语言。它采用混合自回归AR 扩散Diffusion架构一个 Qwen2.5 语言模型7B自回归地生成语音 token 序列每当生成speech_diffusion特殊 token 时触发一次 SDE-DPM-Solver 扩散采样输出一个声学 latent所有 latent 收集完成后由卷积 VAE 解码器一次性批量解码为 24 kHz 音频。环境准备与模型加载通过load()加载模型与仓库中其他 TTS 模型一致KugelAudio 通过mlx_audio.tts.load统一入口加载底层会自动识别模型类型并初始化对应的模型类见 加载工具源码 中的MODEL_REMAPPING与load_modelfrom mlx_audio.tts import load model load(kugelaudio/kugelaudio-0-open)加载过程中模型会通过post_load_hook依据解码器词表大小自动从 Qwen/Qwen2.5 系列仓库派生并加载分词器kugelaudio.py 中post_load_hook无需手动指定分词器。内存需求模型约 70 亿参数并以 bfloat16 精度加载仓库内 模型 README 明确标注约需 17 GB 统一内存并已在 M4 Max 36GB 设备上完成测试验证。运行前请确认你的设备可用统一内存足够例如 M 系列 Mac 至少 32GB 起步更稳妥。快速开始生成你的第一段语音CLI 方式通过mlx_audio.tts.generate模块直接运行python -m mlx_audio.tts.generate \ --model kugelaudio/kugelaudio-0-open \ --text Hello, this is KugelAudio. \ --cfg_scale 3.0 \ --ddpm_steps 10命令结束后会在当前目录生成audio_000.wav等音频文件默认文件名前缀为audio。CLI 还支持--output_path、--file_prefix、--audio_format、--play、--join_audio等通用参数完整参数表见 生成入口源码。Python 方式from mlx_audio.tts import load model load(kugelaudio/kugelaudio-0-open) result next( model.generate( textHello, this is KugelAudio running on Apple Silicon., cfg_scale3.0, ddpm_steps10, ) ) audio result.audio # mlx.core.array采样率 24 kHzgenerate()是一个生成器每次yield一个GenerationResult对象定义见 base.py其中包含audio一维mx.array音频数据采样率由model.sample_rate给出KugelAudio 为 24000 Hzaudio_duration格式化时长字符串如00:00:03.214real_time_factor实时率RTF小于 1 表示生成快于实时peak_memory_usage峰值内存GBtoken_count/audio_samplestoken 与音频采样统计信息。拿到audio后可以直接使用仓库的 audio_io 写入工具 保存为 WAV 文件例如from mlx_audio.audio_io import write write(output.wav, audio, sample_ratemodel.sample_rate)核心生成参数详解ParameterDefaultDescriptioncfg_scale3.0无分类器引导Classifier-free guidance强度ddpm_steps10扩散采样步数用于权衡质量与速度max_tokens2048最大可生成的语音 token 数cfg_scale无分类器引导强度默认值3.0数值越大越贴合条件文本语义语音更清晰设为1.0表示关闭 CFG生成更快但质量下降从源码看kugelaudio.py 中sample_speech_tokens当cfg_scale 1.0时模型会额外维护一条无条件negative分支将条件与无条件输入拼接后一次批量前向再按公式guided_eps uncond_eps cfg_scale * (cond_eps - uncond_eps)合成引导噪声。ddpm_steps扩散步数与质量-速度权衡默认10步为平衡档5步更快但质量略降20步接近最高质量该值会覆盖模型配置中ddpm_num_inference_steps的默认值见 config.py默认推理步数 10训练步数 1000cosine beta schedulev_prediction预测类型。max_tokens生成上限最多生成 2048 个语音 token作为生成循环的硬性上限防止长文本导致的无限生成。支持的 24 种语言KugelAudio 支持以下 24 种欧洲语言English, German, French, Spanish, Italian, Portuguese, Dutch, Polish, Russian, Ukrainian, Czech, Romanian, Hungarian, Swedish, Danish, Finnish, Norwegian, Greek, Bulgarian, Slovak, Croatian, Serbian, and Turkish.质量提示仓库内 模型 README 明确指出不同语言的数据覆盖度不同其中英语、德语、法语、西班牙语的训练数据覆盖最强合成质量最好。架构原理从源码看混合 AR Diffusion 流水线KugelAudio 的推理实现完整位于 kugelaudio.py其中复用了 VibeVoice 的若干模块AcousticTokenizer、DiffusionHead、Qwen2Model、SpeechConnector见 vibevoice 模块。特殊 token 与解码约束模型复用了 Qwen2.5 的视觉 token 作为语音专用 token源码中的VALID_SPEECH_TOKENSSPEECH_START_ID 151652语音起始SPEECH_END_ID 151653语音结束SPEECH_DIFFUSION_ID 151654触发扩散采样EOS_TOKEN_ID 151643句子结束。生成时每个 token 的 logits 会被约束掩码限制为仅在这 4 个合法 token 上取值constraint_mask保证采样过程符合模型设计。提示词模板_build_prompt_tokens会自动将输入文本包装为对话式提示Transform the text provided by various speakers into speech output, utilizing the distinct voice of each respective speaker. Text input: Speaker 0: {你的文本} Speech output:如果文本本身已以 Speaker 开头则不再重复添加前缀。随后追加SPEECH_START_ID作为生成起点。生成主循环语言模型对整个提示做首次前向得到 hidden states 与 KV cache当cfg_scale 1.0时额外以SPEECH_START_ID初始化一条无条件分支neg_cache/neg_hidden循环采样下一个 token若为SPEECH_DIFFUSION_ID则调用sample_speech_tokens执行扩散采样获得声学 latent通过SpeechConnectorvae_dim 64 → hidden_size 3584映射回语言模型隐空间后继续自回归遇到SPEECH_END_ID/EOS_TOKEN_ID时若SPEECH_DIFFUSION_ID的 logit 与结束 token 差距小于FINAL_LATENT_LOGIT_MARGIN5.0会额外生成一个 latent避免最后一个音节被截断所有 latent 收集完毕后一次性批量解码而非逐块解码源码注释明确说明这是为了避免分块独立解码产生的咔嗒伪音click artifacts。扩散调度器扩散部分使用仓库自定义的 SDE-DPM-Solver 随机变体调度器它在每个求解步注入随机噪声相比确定性 DPM-Solver 能产生更高质量的语音。调度器支持一阶/二阶更新配合v_prediction类型输出完成从噪声到声学 latent 的反向采样。权重映射与量化转换模型直接加载官方 PyTorch safetensorssanitize()负责完成权重重映射剔除推理不需要的语义编码器权重、处理 model. 前缀、修正扩散头 Sequential 层索引、按维度转置 Linear/Conv1d/ConvTranspose1d 权重等。如需预转换或量化保存可使用仓库通用转换命令python -m mlx_audio.convert \ --hf-path kugelaudio/kugelaudio-0-open \ --mlx-path ./kugelaudio-0-open-bf16 \ --dtype bfloat16转换后的本地目录同样可以直接传给load()/--model使用。性能与注意事项实时率RTF仓库 README 记录在 M4 Max 上以cfg_scale3.0、ddpm_steps10配置运行时 RTF 约为5-7x即生成 1 秒音频约需 5~7 秒计算时间属于偏慢但可用的离线合成场景。默认音色上游发布版本未提供预编码的音色预设voice presets模型使用默认音色路径生成generate()中的voice参数当前被忽略源码中标注pylint: disableunused-argument。内存峰值7B bfloat16 权重约需 17 GB 统一内存推理过程中的中间激活与 KV cache 会进一步抬高峰值建议预留充足内存。采样率输出音频统一为 24 kHz。相关资源模型实现kugelaudio.py模型配置config.py扩散调度器scheduler.py仓库内 READMEmlx_audio/tts/models/kugelaudio/README.mdTTS 统一加载入口mlx_audio/tts/utils.pyCLI 生成入口mlx_audio/tts/generate.py【免费下载链接】mlx-audioA text-to-speech (TTS), speech-to-text (STT) and speech-to-speech (STS) library built on Apples MLX framework, providing efficient speech analysis on Apple Silicon.项目地址: https://gitcode.com/GitHub_Trending/ml/mlx-audio创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表