尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Transformers 中的 FLAN-UL2:20B 编码器-解码器模型的加载、量化推理与实战指南

Transformers 中的 FLAN-UL2:20B 编码器-解码器模型的加载、量化推理与实战指南 Transformers 中的 FLAN-UL220B 编码器-解码器模型的加载、量化推理与实战指南【免费下载链接】transformers Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and multimodal models, for both inference and training.项目地址: https://gitcode.com/GitHub_Trending/tra/transformersFLAN-UL2 是基于 T5 架构、沿用 UL2 配置的 20B 级编码器-解码器大模型可直接用于零样本与少样本in-context learning推理。本文以仓库文档 docs/source/en/model_doc/flan-ul2.md 为骨架结合transformers仓库中 T5/UL2 的实现、配置与测试源码讲解 FLAN-UL2 相比原始 UL2 的关键改进、在低资源设备上运行 40GB 权重模型的完整方案8-bit 量化 device_mapauto以及其与 T5 代码路径之间的关系。读完后你可以在自己的 GPU/CPU 环境中直接跑通 FLAN-UL2 的文本生成流程。模型概述从 UL2 到 FLAN-UL2根据官方模型文档FLAN-UL2 是一个基于 T5 架构的编码器-解码器encoder-decoder模型采用与更早发布的 UL2 相同的配置。它通过 Flan 提示微调prompt tuning与 Flan 数据集集合进行指令微调得到。整个家族的关系可以这样理解UL2由 Google Research 于 2022 年提出论文Unifying Language Learning Paradigms是一个基于 T5v1.1 架构、以 Mixture-of-DenoisersMoD预训练目标训练出来的 20B 模型。它在 SuperGLUE 零样本、单样本摘要等场景表现出了很强的 in-context learning 能力。FLAN-UL2在 UL2 20B 基础上先做了额外训练遗忘模式切换 token再使用 Flan 指令微调数据集合训练得到的指令跟随版本。它不需要微调即可直接使用权重进行推理这与Flan-T5的用法一致。值得注意的一点是这两个模型在transformers中并没有各自独立的源码模块——src/transformers/models下没有ul2/flan_ul2目录而是与 T5 共享实现。这一点在官方文档中也有明确指引FLAN-UL2 的 API 参考、使用技巧、代码示例与 notebook 都直接参见 T5 的文档页 docs/source/en/model_doc/t5.md其底层由 modeling_t5.py 中的T5ForConditionalGeneration类承担。FLAN-UL2 相对原始 UL2 的关键改进根据原始文档转述的官方博客说明FLAN-UL2 相比原始 UL2 有以下三点重要改进1. 感受野从 512 提升到 2048原始 UL2 模型仅以512的接收域receptive field训练导致它在 N 值较大few-shot 样本较多的 N-shot prompting 场景下表现不理想。FLAN-UL2 检查点将接收域扩展到2048使上下文窗口能容纳更多演示样本更适合少样本 in-context learning——这正是 Flan 系列把任务说明与若干示例拼进提示词的典型用法所急需的能力。2. 移除模式切换 tokenmode switch tokens原始 UL2 模型带有模式切换 token对应不同的去噪/预训练范式虽然能提升性能但使用起来相当繁琐在推理或微调阶段经常需要针对性地改写输入。FLAN-UL2 的解决方式是在应用 Flan 指令微调之前先以较小的 batch 对 UL2 20B额外继续训练 100k 步目的是让模型遗忘模式 token。因此FLAN-UL2 检查点不再需要任何模式 token直接输入自然语言提示即可获得良好效果。3. 开箱即用、无需微调与Flan-T5一致FLAN-UL2 权重可以直接用于推理无需针对下游任务再次微调。官方发布的原始检查点对应的是 Google Research 的 UL2 项目见原文档中的外部链接而在transformers生态中则可以直接通过google/flan-ul2标识从 Hub 加载。在低资源设备上运行8-bit 量化加载FLAN-UL2 是一个 20B 参数的大模型官方文档明确指出该模型在半精度fp16/bf16下约占用 40GB 显存非常重。因此如果只是想跑通模型做推理文档给出的建议是以8-bit 量化加载权重使用device_mapauto让框架自动把各层分配到可用设备可跨 GPU必要时 CPU offload从而避免 OOMOut of Memory。官方文档中的完整最小示例代码如下from transformers import AutoModelForSeq2SeqLM, AutoTokenizer, BitsAndBytesConfig model AutoModelForSeq2SeqLM.from_pretrained( google/flan-ul2, quantization_configBitsAndBytesConfig(load_in_8bitTrue), device_mapauto, ) tokenizer AutoTokenizer.from_pretrained(google/flan-ul2) inputs tokenizer(A step by step recipe to make bolognese pasta:, return_tensorspt).to(model.device) outputs model.generate(**inputs) print(tokenizer.batch_decode(outputs, skip_special_tokensTrue)) # [In a large skillet, brown the ground beef and onion over medium heat. Add the garlic]关键要点逐行拆解AutoModelForSeq2SeqLM因为 FLAN-UL2 是编码器-解码器架构所以要选用 seq2seq 前缀的自动类而不是AutoModelForCausalLM。它会依据检查点的 config 自动解析出正确的模型类T5 家族实现。BitsAndBytesConfig(load_in_8bitTrue)来自transformers与 bitsandbytes 的量化集成负责在加载权重阶段把参数压缩到 8-bit显著降低显存占用文档提示半精度需约 40GB8-bit 后占用大体减半量级。如果你的机器对显存更敏感也可按需研究 quantizers 下其它量化配置但文档给出的标准做法是 8-bit。device_mapauto配合量化使用让框架自动执行设备放置。模型较重时即便量化也可能超过单卡显存此时auto会把不同的模块分片到多个 GPU或在必要时 offload 到 CPU 内存避免 OOM。.to(model.device)输入需要放到模型所在的设备上而量化 device_map场景下设备由框架分配因此用model.device取回实际设备最稳妥。skip_special_tokensTrue解码时跳过pad等特殊 token保证输出是干净的纯文本。上面的例子输出一段博洛尼亚意面食谱的起始句说明模型已按提示完成了指令式续写。让推理结果更可控在实际使用中可以在model.generate中追加常用解码参数来控制输出质量。这些参数由 T5 模型类继承的GenerationMixin见 modeling_t5.py 的类定义与 generation 模块统一支持例如outputs model.generate( **inputs, max_new_tokens256, # 限制新生成 token 数量 do_sampleFalse, # 贪心解码结果更稳定 num_beams4, # 束搜索质量更高但更慢 no_repeat_ngram_size3, # 抑制 3-gram 重复 )从源码看 FLAN-UL2 背后的 T5 实现虽然 FLAN-UL2 使用 UL2 的配置但其实现路径完全落在 T5 模型代码上。仓库中与其直接相关、可用来深入学习的文件包括文件作用model_doc/flan-ul2.md本文所依据的模型文档概述、改进点、低资源运行示例model_doc/ul2.mdUL2 模型文档说明 UL2 与 T5v1.1 同构、采用 Gated 激活model_doc/t5.mdFLAN-UL2 的 API 参考文档含类签名、示例代码与 notebookmodeling_t5.pyT5ForConditionalGeneration等模型实现configuration_t5.pyT5Config配置类定义 d_model、num_layers、feed_forward_proj 等字段tests/models/t5T5 架构的模型与分词器测试套件1. 配置层T5ConfigT5Config定义于 configuration_t5.py承载了模型的所有结构超参数其字段恰好覆盖了 FLAN-UL2 这类深宽大模型会用到的大量参数例如vocab_size默认 32128、d_model默认 512、d_ff默认 2048num_layers默认 6与可独立设置的num_decoder_layers默认取num_layers保证编码器/解码器对称num_heads默认 8、d_kv默认 64relative_attention_num_buckets默认 32与relative_attention_max_distance默认 128——这组参数控制 T5 系模型的相对位置注意力分桶feed_forward_proj默认relu可配置为gated-gelu等门控激活形式T5v1.1/UL2 家族使用门控变体is_encoder_decoderTrue、use_cacheTrue、pad_token_id0、eos_token_id1等推理相关默认值。对于 FLAN-UL2 这类 20B 检查点实际的d_model、num_layers等数值都远大于默认值由 Hub 上的config.json在from_pretrained时自动注入无需手工指定。2. 模型层T5ForConditionalGenerationT5ForConditionalGeneration见 modeling_t5.py是 seq2seq 生成的实际入口其结构特点包括编码器与解码器分别由T5Stack构建编码器侧is_decoderFalse、use_cacheFalse解码器侧is_decoderTrue通过_tied_weights_keys声明了lm_head、编码器/解码器embed_tokens与shared词嵌入之间的权重共享tied weights这也是 T5 系共享嵌入 相对位置编码设计的一部分类同时继承GenerationMixin因此直接获得generate、beam_search、greedy_search等一整套生成能力。3. 测试层T5 测试套件虽然 FLAN-UL2 检查点体量过大、不会出现在普通单元测试中但其底层架构由 test_modeling_t5.py 与 test_tokenization_t5.py 覆盖前者的 integration 测试会加载小型 T5 系模型验证前向、生成与加载逻辑。如果你想基于 FLAN-UL2 做二次开发如 PEFT 微调、量化对比直接复用 T5 家族的测试基类与工具函数即可。运行时的注意事项与前提基于上述文档与源码信息实际运行 FLAN-UL2 时有几个前提需要说明显存与量化半精度权重约 40GB请务必开启 8-bit 量化必要时研究 4-bit 等更低比特方案并配合device_mapauto即便量化超大权重加载也需要足够的 GPU 显存与 CPU RAM 作为缓冲。分词器FLAN-UL2 使用与 T5 家族一致的 SentencePiece 分词器AutoTokenizer会解析为 T5 系列 tokenizer对应源码 tokenization_t5.py因此输入文本的拼写/预处理规则与 T5 保持一致。无需模式 token这是与原始 UL2 最大的使用差异——直接写自然语言提示即可不需要在输入中拼接任何控制符号。少样本友好由于接收域提升到 2048提示词中可以放入更多示例对demonstrations这一点在构造 few-shot 提示时要充分利用。小结FLAN-UL2 是 T5/UL2 家族在指令跟随 大规模 in-context learning方向上的一个 20B 落地检查点它以 UL2 20B 为起点通过额外的 100k 步继续训练摆脱模式 token 依赖再经 Flan 数据集合做指令微调并把接收域从 512 扩大到 2048。在transformers中它的使用完全落在 T5 的实现与 API 路径上官方文档给出的 8-bit 量化 device_mapauto方案是让这块约 40GB半精度的重模型在普通单卡/多卡设备上顺利运行的关键技巧。掌握了本文的加载代码与背后原理你就能直接复用 model_doc/t5.md 中的完整 API 参考将 FLAN-UL2 接入自己的生成、评估或微调流水线。【免费下载链接】transformers Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and multimodal models, for both inference and training.项目地址: https://gitcode.com/GitHub_Trending/tra/transformers创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表