资讯详情

资讯详情

AnandaSky 自定义加载机制详解:trust_remote_code、auto_map 与 AnandaProcessor 完整工作流

【免费下载链接】AnandaSky项目地址https://ai.gitcode.com/hf_mirrors/badianeai/AnandaSky点击查看免费下载AnandaSky是一个面向历史汉语文档逐行转写的视觉语言模型ViT 编码器 Qwen3 解码器约 6.26 亿参数。由于它没有内置在transformers的官方模型列表中加载时必须开启trust_remote_code并依赖config.json里的auto_map字段把AutoModelForCausalLM、AutoProcessor等入口路由到仓库自带的 modeling_anandasky.py 与 inference_processor.py。本文完整拆解这套自定义模型加载机制trust_remote_code为什么必需、auto_map如何工作、以及AnandaProcessor从图片到文本的完整推理流程。一、为什么 AnandaSky 必须开启 trust_remote_code大多数开源模型如Qwen2、Llama的建模代码直接由transformers库内置AutoModelForCausalLM.from_pretrained(...)能认得它们。但 AnandaSky 的架构是全新的自定义结构视觉侧AnandaEncoderViTAnandaVisionPrefixAdapter文本侧基于 Qwen3 的自回归解码器Qwen3Model顶层模型类AnandaForCausalLM见 modeling_anandasky.py这些代码全部写在仓库内的modeling_anandasky.py里transformers官方并不认识它们。因此⚠️ 加载时必须传入trust_remote_codeTrue让transformers允许从模型仓库下载并执行自定义 Python 代码。from transformers import AutoModelForCausalLM model AutoModelForCausalLM.from_pretrained( badianeai/AnandaSky, trust_remote_codeTrue, # 关键启用仓库内置的自定义建模代码 torch_dtypeauto, device_mapauto, )小提示trust_remote_codeTrue会执行模型仓库内的代码请只对你信任的仓库开启本模型由 BnF DataLab 发布见 README.md。二、auto_map自定义加载的路由表auto_map是transformers提供的类名映射表——它告诉Auto*系列工厂类遇到这个仓库时请使用仓库里的这些自定义类而不是内置实现。在 AnandaSky 的 config.json 中auto_map: { AutoConfig: modeling_anandasky.AnandaHFConfig, AutoModelForCausalLM: modeling_anandasky.AnandaForCausalLM, AutoProcessor: inference_processor.AnandaProcessor }三个入口一一对应auto_map 键路由到的自定义类所在文件AutoConfigAnandaHFConfigmodeling_anandasky.pyAutoModelForCausalLMAnandaForCausalLMmodeling_anandasky.pyAutoProcessorAnandaProcessorinference_processor.py工作机制非常直观你调用AutoModelForCausalLM.from_pretrained(...)transformers读取仓库的config.json发现architectures是未知的AnandaForCausalLM再查auto_map按modeling_anandasky.AnandaForCausalLM的定位规则动态 import 仓库中的modeling_anandasky.py并实例化该类。 这正是自定义模型与内置模型加载路径的分水岭没有auto_mapAuto*类根本不知道该用哪个实现。同样的映射也出现在 processor_config.json 中用于AutoProcessor的解析processor_class: AnandaProcessor, auto_map: { AutoProcessor: inference_processor.AnandaProcessor }三、AnandaProcessor从古籍行图到文本的完整工作流AnandaProcessor 是一个ProcessorMixin把两件事粘合在一起AnandaImageProcessor图像预处理AutoTokenizerQwen3 词表分词支持纯文本输入1. 图像预处理流水线AnandaImageProcessorinference_processor.py对每一张文档行图片依次执行 6 步转 RGB 3 通道灰度图自动扩展为 3 通道转为 CHW 格式的 float32 张量归一化到[0, 1]用训练时的均值/标准差标准化image_mean≈ [0.5218, 0.5218, 0.5235]image_std≈ [0.3383, 0.3394, 0.3391]见 processor_config.json将 H/W 补齐到patch_size10的整数倍再补齐到patch_size × merge_factor的整数倍同时生成patch_attention_mask标记哪些 patch 是真实内容、哪些是填充输出pixel_valuespatch_attention_maskpatch_attention_mask很关键AnandaSky 依赖 FlashAttention 的 varlen 接口做变长注意力该掩码告诉模型哪些 patch 位置是填充从而保证不同尺寸的行图可以组成一个 batch。2. 文本侧只给一个开始提示做纯转写时通常不传text此时AnandaProcessor.__call__会自动为每张图构造一个仅含BOS tokenbos_token_id151645的input_ids表示从这里开始生成见 inference_processor.py。3. 最终输出processor(imagesimage, return_tensorspt)返回一个BatchFeature包含 4 个字段正好对应模型需要的全部输入input_ids, attention_mask, pixel_values, patch_attention_mask四、快速上手最小推理流程把前面三节串起来完整跑通 AnandaSky 只需四步完整示例见 README.md 的 Minimal Inference Examplefrom PIL import Image import torch from transformers import AutoModelForCausalLM, AutoProcessor DEVICE torch.device(cuda) DTYPE torch.bfloat16 # 1. 加载模型trust_remote_code 触发 auto_map 路由 model AutoModelForCausalLM.from_pretrained( badianeai/AnandaSky, trust_remote_codeTrue, torch_dtypeDTYPE ).to(DEVICE) # 2. 加载自定义 Processor同样走 auto_map processor AutoProcessor.from_pretrained( badianeai/AnandaSky, trust_remote_codeTrue ) # 3. 图像 → 4 个输入张量 image Image.open(line_image.png) inputs processor(imagesimage, return_tensorspt) # 4. 生成并解码 with torch.no_grad(): output model.generate(**inputs, use_cacheTrue) text processor.decode(output[0, 1:], skip_special_tokensTrue).strip() print(text)其中processor.decode(...)会透传到内部 tokenizerinference_processor.pyskip_special_tokensTrue去掉特殊标记得到干净的转写文本。五、常见问题与最佳实践问题原因与解决加载报KeyError/ 找不到架构忘记加trust_remote_codeTrueauto_map未生效报flash_attn相关导入错误AnandaSky硬依赖 FlashAttention需先执行pip install flash-attn --no-build-isolation详见 README.md结果中混入特殊符号解码时忘记skip_special_tokensTruebatch 推理时尺寸报错不同图尺寸的 patch 对齐已由patch_attention_mask处理直接使用processor输出即可无需手工 pad 新手记忆口诀config.json里的auto_map 路由表决定Auto*用哪个自定义类trust_remote_codeTrue 开关允许transformers执行仓库内代码AnandaProcessor 胶水层把图片标准化/切 patch 补齐、把文本转 token产出模型generate()需要的全部张量。掌握这三点你不仅可以加载 AnandaSky也具备了理解和迁移任何基于trust_remote_code机制发布的自定义视觉语言模型的能力。赞分享【免费下载链接】AnandaSky项目地址https://ai.gitcode.com/hf_mirrors/badianeai/AnandaSky点击查看免费下载相关推荐openJiuwen WorkflowAgent 详解基于多工作流控制器的预定义工作流执行机制openJiuwen WorkflowAgent 详解基于多工作流控制器的预定义工作流执行机制 本文围绕 openJiuwen agent core 仓库中人工智能AI AgentAgent 框架大模型工具调用RAG提示工程强化学习Scrapy 扩展机制Extensions详解加载流程、自定义扩展编写与内置扩展全解Scrapy 扩展机制Extensions详解加载流程、自定义扩展编写与内置扩展全解 本文基于 Scrapy 官方文档 docs/topics/exten网页爬虫后端Layui流加载组件自定义加载更多按钮样式详解Layui流加载组件自定义加载更多按钮样式详解 Layui作为一款经典的前端UI框架其流加载 flow 组件在实现无限滚动加载功能时非常实用。在实际开发中前端UI组件创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →