
示例工程人工智能【免费下载链接】mlx-examplesExamples in the MLX framework项目地址https://gitcode.com/GitHub_Trending/ml/mlx-examples点击查看免费下载T5Text-to-Text Transfer Transformer是一类以文本到文本统一建模的编码器-解码器 Transformer通过在输入前拼接任务前缀如translate English to German: …、summarize: …即可在不改模型结构的情况下完成翻译、摘要、问答等多种任务。本指南以 t5 示例目录 为核心带你掌握如何在 MLX 框架下加载 T5 / FLAN-T5 权重、执行自回归生成并深入理解其源码级架构实现与关键推理参数。T5 是什么统一建模的多任务模型T5 模型是在无监督任务 监督任务的混合语料上预训练得到的编码器-解码器模型。与专用模型不同T5 把所有 NLP 任务统一表达为输入文本 → 输出文本的序列转换问题任务语义完全由**任务前缀task prefix**表达。在 t5/README.md 中给出了两个典型示例翻译translate English to German: …摘要summarize: ….同目录下的示例还额外支持FLAN-T5系列变体。FLAN-T5 在 T5 基础上经过了指令微调instruction tuning对指令式输入例如 translate the following sentence to German: …的响应能力更强在本示例中可直接以google/flan-t5-*的命名加载。环境准备与依赖在运行示例前请先安装依赖。仓库中 t5/requirements.txt 声明了mlx0.8.0MLX 框架本体MLX 是 Apple Silicon 上的数组计算与深度学习框架numpy数值计算依赖用于位置分桶等标量运算transformersHugging Face Transformers用于加载 T5/FLAN-T5 的 tokenizer分词器。安装命令pip install -r t5/requirements.txt注意模型权重与分词器需要联网从 Hugging Face Hub 下载首次运行时自动完成下载路径由huggingface_hub缓存管理详见下文权重加载一节。快速开始一行命令生成文本直接运行 t5/t5.py 即可体验完整的前缀指令 → 自回归生成流程python t5.py --model t5-small --prompt translate English to German: A tasty apple按 t5/README.md 的说明上述命令应输出德语译文Ein leckerer Apfel。若不加任何参数脚本也有合理的默认行为默认模型为t5-small默认提示词为translate English to German: That is good.默认最多生成 100 个 token见 t5/t5.py 中argparse参数定义。想要查看全部可用选项运行python t5.py --help命令行参数详解根据 t5/t5.py 底部的ArgumentParser定义脚本支持以下参数参数类型/取值默认值说明--modelstrt5-smallT5 模型名称可填 Hugging Face 上的 T5 或 FLAN-T5 仓库名--promptstrtranslate English to German: That is good.输入提示词通常携带任务前缀--encode-only开关False只运行编码器输出输入序列的最后一层编码向量后退出--max-tokens/-mint100最大生成 token 数防止无限生成--tempfloat0.0采样温度0.0为贪心解码argmax0时为温度采样--dtypefloat16/bfloat16/float32bfloat16模型权重与计算的数据类型--seedint0随机数种子保证可复现性通过mx.random.seed生效几个值得注意的细节--temp 0.0默认在 generate 函数 中temp 0时直接取mx.argmax(logits, axis-1)即贪心解码否则使用mx.random.categorical(logits * (1 / temp))按概率采样。温度越低输出越确定越高越多样化。--encode-only跳过解码循环仅打印model.encode(...)输出的编码向量shape 为[batch, seq_len, d_model]可用于提取句向量或为其他模型提供文本编码特征。--dtype默认bfloat16在 Apple Silicon 上兼顾精度与内存占用如需更高精度可切换float32或为追求速度使用float16。加载时所有权重都会通过.astype(dtype)转换见 t5.py 的 from_pretrained。生成结束时脚本会打印耗时与吞吐Time: X.XX seconds, tokens/s: X.XX便于横向评估不同模型规格在 MLX 上的推理速度。支持的模型与 FLAN 变体t5/README.md 给出了可直接使用的 T5 模型规格表模型名称模型参数量t5-small6000 万60 milliont5-base2.2 亿220 milliont5-large7.7 亿770 milliont5-3b30 亿3 billiont5-11b110 亿11 billionFLAN-T5 变体通过 Hugging Face 命名指定例如google/flan-t5-smallgoogle/flan-t5-basegoogle/flan-t5-large以此类推完整的 FLAN-T5 模型列表可在 Hugging Face Transformers 的 flan-t5 模型文档页中查询t5/README.md 中引用了该页面。模型越大生成的英文/翻译质量通常越好但相应地加载时间、内存占用与单 token 延迟也会上升建议在 Apple Silicon 设备上从小模型开始验证流程再按需升级。源码级架构解析从源码结构看t5/t5.py 在 MLX 中完整复刻了 T5 的编码器-解码器架构主要模块如下1. 顶层T5模型T5 类self.wte nn.Embedding(config.vocab_size, config.d_model) self.encoder TransformerEncoder(config) self.decoder TransformerDecoder(config)wte共享的词嵌入表word token embeddingencode(inputs)self.encoder(self.wte(inputs))一次性编码全部输入 token产出记忆memory供解码器交叉注意力使用decode(inputs, memory, cache)若输入长度大于 1使用nn.MultiHeadAttention.create_additive_causal_mask(T)构造因果掩码mask None表示当前步只输入 1 个 token无需掩码权重绑定tied embeddings默认tie_word_embeddingsTrue输出 logits 通过y y self.wte.weight.T直接与嵌入矩阵相乘得到并乘以self.model_dim ** -0.5缩放只有tie_word_embeddingsFalse时才构造独立的OutputHead线性层。2. 编码器与解码器TransformerEncoder / TransformerDecoder编码器由多层TransformerEncoderLayer堆叠RMSNorm→ 多头自注意力 → 残差 →RMSNorm→ 前馈Dense→ 残差最后接一个RMSNorm解码器每层包含自注意力 交叉注意力 前馈三部分self_attention、cross_attention、dense并支持KV cache自注意力层把历史上文的 keys/values 拼接进缓存mx.concatenate([key_cache, keys], axis3)这样生成第 N 个 token 时无需重新计算前 N-1 个 token 的注意力是自回归生成提速的关键层数由config.num_layers决定解码器层数可独立指定为num_decoder_layers缺省时回退到num_layers。3. 相对位置偏置RelativePositionBiasT5 不使用绝对位置编码而是使用分桶的相对位置偏置binned relative position bias。_relative_position_bucket将相对位置memory_position - query_position映射到有限个桶小距离落在精确增量桶大距离按对数缩放落桶超过max_distance的极端距离统一归入边界桶从而对超出训练长度的序列有更好的泛化。编码器使用bidirectionalTrue双向注意力解码器使用bidirectionalFalse仅单向。4. 前馈网络DenseActivation根据config.feed_forward_proj自动选择激活函数与结构经典 T5relu单路wi → act → woFLAN-T5gated-*前缀如gated-gelu、gated-silu采用门控前馈wi_0输出经激活函数后与wi_1线性输出逐元素相乘再经wo投影支持relu/gelu/silu三种激活函数未知激活会抛出ValueError。权重加载从 Hugging Face 到 MLXT5.from_pretrained 负责把 Hugging Face 权重转换为 MLX 可加载格式若path_or_repo不是本地路径则调用huggingface_hub.snapshot_download下载仓库只保留*.json、*.safetensors、*.model三类文件配置、权重、分词器读取config.json生成SimpleNamespace配置对象用mx.load读取model.safetensors调用sanitize把 HF 的权重命名如encoder.block.0.layer.0.SelfAttention.q映射为本实现的命名如encoder.layers.0.attention.query_proj并删除解码器交叉注意力中冗余的相对位置偏置权重见 sanitize 方法统一转为目标dtype后load_weights。分词器封装在 Tokenizer 类 中内部使用AutoTokenizer.from_pretrained(model_name, legacyFalse)暴露eos_id、decoder_start_id来自config.decoder_start_token_iddecode时会把 T5 词表特有的▁空格标记还原为空格。与 Hugging Face 参考实现对照验证仓库还附带 hf_t5.py它用官方 Hugging Face Transformers 运行同样的 T5 模型作为 MLX 实现的对照基准# 对照生成使用官方实现 python hf_t5.py --model t5-small # 仅编码打印句向量 python hf_t5.py --encode-only --model t5-smallhf_t5.py的generate使用AutoModelForSeq2SeqLM.generate(do_sampleFalse, max_length512)执行贪心解码embed则用T5EncoderModel提取last_hidden_state。通过比对两者对同一提示词的输出可以验证 MLX 实现与官方参考实现的数值一致性。在仓库中的复用作为其他模型的文本编码器t5.py并非孤立示例——它还被 musicgen 示例复用为文本编码器。在 musicgen/musicgen.py 的TextEncoder中from t5 import T5 # 直接复用 t5/t5.py 中的实现 self._t5, self.tokenizer T5.from_pretrained(t5_name) ... x self.tokenizer.encode(text) x self._t5.encode(x)即通过T5.from_pretrained加载 T5 权重后用encode提取文本语义特征供 MusicGen 的文本条件音频生成使用musicgen/musicgen.py 中根据配置的text_encoder._name_or_path指定 T5 模型名。这说明本示例的 T5 实现是可独立复用、接口清晰的组件。生成流程小结综合 generate 函数 与__main__主流程一次完整生成包含以下步骤设置随机种子mx.random.seed(args.seed)按--dtype加载模型与 tokenizer若--encode-only直接打印编码向量并退出否则将提示词编码为 token以decoder_start_id作为解码起始输入循环model.decode得到 logits → 按--temp采样得到下一个 token → 更新 KV cache → 若命中eos_id或达到--max-tokens则终止打印译文与耗时/吞吐统计。从仓库顶层 README.md 看T5 示例被列为 Text-to-text multi-task Transformers with T5属于该仓库文本模型示例的重要组成。建议动手实践的顺序是先跑通t5-small的默认生成再依次尝试 FLAN-T5 变体、--encode-only特征提取最后阅读 t5/t5.py 的编码器/解码器实现理解相对位置偏置、门控前馈与 KV cache 是如何在 MLX 中原生实现的。赞分享示例工程人工智能【免费下载链接】mlx-examplesExamples in the MLX framework项目地址https://gitcode.com/GitHub_Trending/ml/mlx-examples点击查看免费下载相关推荐3大技术突破国产AI硬件生态下的实时语音合成架构演进3大技术突破国产AI硬件生态下的实时语音合成架构演进 在人工智能技术快速发展的今天国产AI硬件生态正经历着从可用到好用的范式转变。语音合成作为AI应语音/音频AI 应用后端TrackWeight将MacBook触控板压力传感器转化为高精度数字秤的技术实现TrackWeight将MacBook触控板压力传感器转化为高精度数字秤的技术实现 TrackWeight是一个创新的macOS应用程序它通过软件创新重新定桌面应用vscode-drawio与Webpack集成自定义构建流程配置指南vscode drawio与Webpack集成自定义构建流程配置指南 想要在Visual Studio Code中高效绘制流程图、架构图和技术图表吗vsco开发工具上一篇Deep-Live-Cam 一张照片实时换脸10 分钟跑出第一支成片下一篇Excalidraw虚拟白板从零到精通的完整实战指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考