1.【自然语言处理】【大模型】BLOOM模型结构源码解析(张量并行版)
2.Docx4j 使用简单教程
【自然语言处理】【大模型】BLOOM模型结构源码解析(张量并行版)
BLOOM模型结构解析,采用Megatron-DeepSpeed框架进行训练,张量并行采用1D模式。基于BigScience开源代码仓库,本文将详细介绍张量并行版BLOOM的原理和结构。 单机版BLOOM解析见文章。自动解析HTML源码 模型结构实现依赖mpu模块,推荐系列文章深入理解mpu工具。 Megatron-DeepSpeed张量并行工具代码mpu详解,覆盖并行环境初始化、Collective通信封装、张量并行层实现、测试以及Embedding层、怎么查询网页源码交叉熵实现与测试。 Embedding层:Transformer Embedding层包含Word、Position、TokenType三类,分别将输入映射为稠密向量、注入位置信息、类别信息。通常,位置信息通过ALiBi注入,无需传统Position Embedding,TokenType Embedding为可选项。张量并行版BLOOM Embedding层代码在megatron/model/language_model.py,dw如何载入源码通过参数控制三类Embedding使用。 激活函数:位于megatron/model/utils.py,BLOOM激活函数采用近似公式实现。 掩码:张量并行版模型用于预训练,采用Causal Mask确保当前token仅见左侧token。掩码实现于megatron/model/fused_softmax.py,将缩放、mask、softmax融合。 ALiBi:位置信息注入机制,通过调整query-key点积中静态偏差实现。8个注意力头使用等比序列m计算斜率,超强股票源码个头则有不同序列。实现于megatron/model/transformer.py。 MLP层:全连接层结构,列并行第一层,行并行第二层,实现于megatron/model/transformer.py。 多头注意力层:基于标准多头注意力添加ALiBi,简化版代码位于megatron/model/transformer.py。 并行Transformer层:对应单机版BlookBlock,实现于megatron/model/transformer.py。 并行Transformer及语言模型:ParallelTransformer类堆叠多个ParallelTransformerLayer,TransformerLanguageModel类在开始添加Embedding层,yolo keras源码分析在末尾添加Pooler,逻辑简单,代码未详述。 相关文章系列覆盖大模型研究、RETRO、MPT、ChatGLM-6B、BLOOM、LoRA、推理工具测试、LaMDA、Chinchilla、GLM-B等。Docx4j 使用简单教程
在开发与word模板替换和占位符相关的内容时,我选择了使用Java和kotlin语言,进而接触到了docx4j这个用于处理docx、pptx和xlsx文件的库。
docx4j将docx文件解压,解析为一系列xml文件及其附属文件的zip格式,并通过JAXB将xml对象绑定为Java类实例表示其中的元素节点。这一库与docx4j能够处理docx文档的竞品具有相同功能。
要开始使用docx4j,可访问其GitHub源代码地址和官方英文PDF文档进行学习。
理解WordML概念是使用docx4j的基础。Word文档解压缩后,主要文字内容位于word/document.xml中。通过docx4j demo webapp,可以查看docx文件的各个结构。每个部分通常为XML格式,部分可能包含等非XML元素。主文档部分通常名为“/word/Document.xml”,并有关系部分声明包含的子部分,如页眉、等。
docx4j结构分为三层:Parts层解析为JaxbXmlPart子类,形成树状结构,关系部分标识子孙后代;org.docx4j.wml层包含大部分parts;org.docx4j.model层建立在较低层之上,提供额外功能,正在逐步开发。
序列化与反序列化在docx4j中由marshalling和unmarshalling实现。打开docx文档时,docx4j自动反序列化XML部分生成强类型Java对象树。若需手动序列化或反序列化,可使用org.docx4j.jaxb.Context类和XmlUtils.marshalToString方法。
docx4j包含方便访问常用部分的方法。在package层,有直接访问方法;在document part层中,有具体部分访问方法。关系部分列出指向其他部分的链接。
MainDocumentPart包含所有正文内容的文字信息,是zip文件解压后的word/document.xml。内部元素如段落、表格等分别由org.docx4j.wml.P和类似类表示。段落实现ContentAccessor接口,可添加内容;所有实现ContentAccessor的对象内容保存为Java List对象,便于操作。
打开现有文档的使用示例:替换docx中的占位符为"Hello World"。占位符在文本域中设置,使用docx4j库搜索并替换。更复杂的遍历操作可实现根据变量值控制显示与否,例如删除占位符所在单元格或一整块内容。