1.清华大学通用预训练模型:GLM
2.CMake搭建OpenGL开发环境
3.chatGLM-6B安装与部署
4.大模型实战:用Langchain-ChatGLM解析小说《天龙八部》
5.P-tuning V2论文和代码实现解析
6.(聆心智能)CharacterGLM 超拟人大模型 API 已全面开放!码分
清华大学通用预训练模型:GLM
清华大学的码分GLM:通用语言模型预训练的创新之作 随着OpenAI的ChatGPT引领大语言模型热潮,清华大学的码分GLM模型以其卓越的性能脱颖而出,特别是码分ChatGLM-6B和GLM-B,它们的码分开源引起了业界的广泛关注。截至5月日,码分html访问源码ChatGLM-6B在全球范围内已收获万次下载,码分备受联想、码分民航信息网络、码分和美团等企业的码分青睐。在科技部的码分报告中,ChatGLM-6B凭借其开源影响力位居榜首,码分而GLM-B等模型也跻身前十。码分 GLM的码分创新与技术细节 GLM与GPT的差异在于其处理NLP任务的全面性,包括自然语言理解(NLU)、码分有条件和无条件生成。GLM采用自回归模型架构,这种设计使其适用于各种任务,无论是理解还是生成。其核心技术在于自回归空白填充,这种创新方法使得GLM在处理长文本和双向依赖时更具优势。 实际应用与实例 ChatGLM-6B的开源不仅引发了下载热潮,还促成了与多家企业的合作。GLM凭借其强大的长文本生成能力,已经在诸如智能对话、文本补全等任务中展示了其实际价值。 GLM的独特特点与架构 GLM的独特之处在于其自编码与自回归的结合,以及二维编码的使用,这使得它在NLU和生成任务上表现出色。GLM通过自回归填充,同时考虑上下文的依赖,使用二维位置编码来表示位置关系,确保信息的有效交互。这种设计使得GLM在处理长度不确定的任务时表现出色,比如NLU中的填空生成。 与其他模型的共享养殖软件源码比较 与RoBERTa、XLNet、BERT、XLNet、T5和UniLM等模型相比,GLM在适应空白填充任务和处理长度不确定的NLU任务上显示出优势。例如,BERT忽视了mask token的依赖,XLNet需要预测长度,而T5和UniLM的局限性限制了它们的自回归依赖捕捉能力。 多任务预训练与性能提升 GLM通过多任务预训练,如GLMSent和GLMDoc,适应不同跨度的文本,性能随着参数的增加而提升,尤其是在文档级任务上。在序列到序列任务中,GLM在BookCorpus和Wikipedia预训练后与BART相当,而在大型语料库上,GLMRoBERTa与BART和T5/UniLMv2竞争。 总结与未来研究 总体而言,GLM是一个通用且强大的模型,它在理解和生成任务上的表现超越了BERT、T5和GPT。通过消融实验,我们了解到模型的空白填充目标、顺序设计和表示方式对其性能具有显著影响。GLM的开放源代码不仅提供了研究者一个宝贵的资源,也为推动语言模型的进一步发展奠定了坚实的基础。 深入探索与未来趋势 进一步的研究将继续探讨GLM的组件如何影响模型在SuperGLUE等基准上的表现,以及如何通过优化设计来提升其在特定任务中的性能。GLM的潜力和创新预示着一个更加开放和高效的预训练语言模型新时代的来临。CMake搭建OpenGL开发环境
在Ubuntu.环境中搭建OpenGL开发环境,主要采用GLFW和GLAD。
首先,编译GLFW,遵循GLFW官网提供的智能名片软件源码编译指南,利用CMake进行编译。
Ubuntu用户可以直接安装libglfw3-dev依赖。
确认所使用的环境为X系统,并安装相应依赖。
访问GLAD官网,下载zip压缩包,解压后将include文件夹移动到/usr/local/include目录,并将glad.c文件放置在工程目录中。
创建测试工程,包含CMakeLists.txt文件和main.cpp。
欲深入了解OpenGL,可参考LearnOpenGL CN主页。
加入glm库,获取链接:github.com/g-truc/glm。
步骤如下:直接将glm源码下载到thirdparty目录;
修改CMakeLists.txt文件,加入相关配置。
调整顶点着色器,添加模型常量句柄,以便与shader program链接。
使用glm库旋转度,实现特定效果。
最终结果如下所示。
chatGLM-6B安装与部署
ChatGLM-6B, 一个开源的双语对话语言模型,基于亿参数的GLM架构,特别适合消费级显卡部署(在INT4量化下,6GB显存即可)。然而,我使用GB显存的RTX Ti时,只能选择INT8量化级别运行。首先,确保硬件(如Python、显卡驱动、Git等)和Pytorch环境的准备,可以参考之前的文章。
安装过程中,暴风影音列表源码国内用户可选sjtu.edu镜像源下载ChatGLM要求。官方建议安装Git LFS,但新版本Git通常已包含。默认加载模型时需要GB显存,我的显存受限,因此尝试量化加载,通过以下代码实现:
尽管初始量化加载时间较长,但后续对话回复速度较快。此外,还展示了如何通过gradio部署网页版demo,只需修改web_demo.py中的部分代码。
尽管环境条件有限,下一篇文章将探索P-tuning。ChatGLM-6B的详细信息和源代码可在GitHub项目THUDM/ChatGLM-6B中找到。
大模型实战:用Langchain-ChatGLM解析小说《天龙八部》
在探讨大模型实战时,如何用Langchain-ChatGLM解析小说《天龙八部》是一个引人入胜的话题。大模型,尤其是GPT系列,虽然在对话和咨询方面表现出色,但其知识库的局限性使得它在处理未知内容时难以提供准确答案。通过引入Langchain,我们能够使GPT模型能够理解并分析文章内容,显著扩展了其应用范围。
具体地,Langchain实现本地知识库问答的过程包括多个步骤。首先,通过阅读langchain-ChatGLM源码,我们可以了解其基本框架,这涉及到本地知识库的构建、文本嵌入的向量化存储、以及对用户输入的查询处理。通过流程图可视化,我们可以清晰地理解这一流程。
为了实践这一框架,我们构建了简单的优美的项目源码代码示例(tlbb.py),以《天龙八部》为输入,尝试对小说内容进行问答。测试结果显示,模型能够回答一些相关问题,展现出一定的应用价值。
在代码实现中,模型加载是一个关键环节,其方法在前文中已有详细介绍。此外,通过文本嵌入向量化存储,我们使用text2vec-large-chinese模型对输入文本进行处理,进一步提升问答准确度。在组装prompt阶段,我们向预训练模型提问,获取与输入文本相关的问题答案。
总结而言,使用Langchain-ChatGLM框架进行本地知识库问答,为GPT模型处理特定主题和领域的问题提供了有效途径。在实际应用中,它能够理解并回答与《天龙八部》等文章相关的问题,显著弥补了原生模型在未知领域的不足。当然,框架性能受文本质量和内容影响,对于更复杂或专业的问题,可能需要更细致的文本分割和知识库构建来提升回答质量。
此外,为了促进技术交流与学习,我们已组建了技术讨论群,欢迎感兴趣的朋友加入,共同探讨最新学术资讯、技术细节、以及实际应用案例。同时,关注机器学习社区的知乎账号与公众号,能够快速获取高质量的文章,推动学习与研究的深入发展。
推荐一系列文章,涵盖最新研究进展、技术方法、开源项目等,以满足不同领域开发者的需求。这些资源不仅提供深度学习领域的最新见解,还覆盖了论文润色、代码解释、报告生成等实用技能,为学术和工业实践提供了宝贵支持。
P-tuning V2论文和代码实现解析
经过对清华开源的ChatGLM-6B微调,我进一步探索了P-tuning v2,并对其源码进行了深入研究,以解决其实现方式的疑问。P-tuning v2,作为Deep Prompt Tuning的优化与适应版本,旨在为生成和知识探索提供解决方案。其关键改进在于,通过在预训练模型的每一层引入连续提示,而不仅仅是局限于输入层,从而显著提升了性能,尤其针对小型模型与复杂任务。
基于作者的优化与实现细节,P-tuning v2能够实现与Fine-tuning相媲美的性能,显著扩大了其适用范围。值得注意的是,相较于Prefix tuning,P-tuning v2更侧重于提升对NLU任务的适应性。
在代码层面,P-tuning v2的核心在于巧妙地利用`past_key_value`参数,实现连续prompt的融入。通过在`RobertaPrefixForTokenClassification`类的`forward`函数中进行初始化,以及`RobertaModel`到`RobertaEncoder`,再到`self.layer`(`nn.ModuleList([RobertaLayer(config) for _ in range(config.num_hidden_layers)])`)的路径追踪,实现连续提示的高效传递。
为了简化理解,我编写了仿真代码,直接展示了P-tuning v2连续prompt实现的核心过程。通过这一代码示例,读者可以直观地了解P-tuning v2如何通过`past_key_value`参数实现连续prompt的融入,从而达到提升模型性能的目的。
总结而言,P-tuning v2通过引入连续prompt并优化其实现细节,显著提升了预训练模型在生成和知识探索任务中的性能,特别适用于小型模型与复杂任务场景。其关键在于巧妙利用`past_key_value`参数实现连续prompt的高效融入,并通过仿真代码直观展示了这一实现过程,为读者提供了深入理解P-tuning v2实现方式的途径。
(聆心智能)CharacterGLM 超拟人大模型 API 已全面开放!
聆心智能的CharacterGLM超拟人大模型API已经全面开放,这款由清华大学计算机系孵化的公司研发的模型旨在创造类人智能体,实现AGI时代的智能化陪伴。智谱AI持有聆心智能股份,两方在业务上深度合作,提供了SDK和HTTP原生调用方式,以优化用户体验。以下是关于如何使用CharacterGLM API的详细指南:
1. 安装SDK:支持Python和Java,可通过GitHub获取源代码。
2. 调用方式:
- 同步调用:一次性获取结果。
- 异步调用:返回任务ID,后续查询结果,通常需等待-秒。
- SSE调用:实时流式获取结果。
3. 接口调用示例:
- 鉴权:使用API Key,或通过JWT方法生成鉴权token。
- Python示例:展示了如何组装鉴权token并进行模型调用,包括异步、同步和SSE调用。
4. CharacterGLM应用广泛,支持人设对话、记忆和多轮交互,适用于情感陪伴、游戏NPC、数字人等领域。
5. 要尝试使用SSE接口,提供了Python示例,展示如何构造请求参数并接收响应。
6. 异步调用包括请求、参数和查询结果接口示例,展示了如何发起并跟踪异步任务。
7. 同步调用同样提供请求参数和响应示例,直接返回结果。
总之,聆心智能的CharacterGLM API为开发者提供了一个强大且灵活的工具,让超拟人技术在各种应用场景中得以实现。
深入 Dify 源码,定位知识库检索的大模型调用异常
深入分析Dify源码:大模型调用异常定位
在使用Dify服务与Xinference的THUDM/glm-4-9b-chat模型部署时,遇到了知识库检索节点执行时报错大模型GPT3.5不存在的问题。异常出乎意料,因为没有额外信息可供进一步定位。 通过源码和服务API调用链路的分析,我们发现问题的关键在于知识库检索的实现。该功能在api/core/rag/datasource/retrieval_service.py中,其中混合检索由向量检索和全文检索组成。我们关注了关键词检索、向量检索和全文检索这三个基础检索方式:关键词检索:仅使用jieba进行关键词提取,无大模型介入。
向量检索:通过向量库直接搜索,如Milvus,无大模型调用。
全文检索:使用BM,大部分向量库不支持,实际操作中返回空列表。
问题出现在知识库检索节点的多知识库召回判断中,N选1召回模式会调用大模型以决定知识库。在配置环节,前端HTTP请求显示配置错误,使用了不存在的GPT3.5模型。 经测试,手工创建的知识库检索节点使用了正确的glm-4-9b-chat模型,问题出在默认模板的配置上,即N选1召回模式默认选择了GPT3.5。本地部署时,如果没有配置相应模型,会导致错误出现。 总结来说,解决方法是修改默认模板,将知识库检索的默认模式改为多路召回,这样可以避免新手在本地部署时遇到困扰。建议Dify官方在模板中改进这一设置,以简化用户部署流程。[fastllm]fastllm源码结构解析
fastllm源码结构解析 主要文件结构和继承关系如下: main包含factoryllm工厂,用于生成各种llm模型实例,basellm作为基类,包含通用方法和参数,所有模型使用相同的命名空间,fastllm为基本类,定义数据格式、权重映射和基础算子操作。 fastllm类属性解析:SetThreads(int t): 设置线程数
SetLowMemMode(bool m): 设置低内存模式
LowBitConfig: 包含量化参数,提供量化与反量化方法
DataType: 包括浮点、int8、int4等数据类型
DataDevice: 包含CPU与CUDA
WeightType: 包括LINEAR、EMBEDDING和None
Data: 包括形状、大小、扩容信息,量化配置等,提供复制、分配、预扩容等功能
Tokenizer: 包含TrieNode链表和token-to-string字典,提供插入、编码和解码函数
WeightMap: 存储模型名称与数据内存,支持从文件加载和保存低位量化权重
core类操作分析:Embedding: 根据输入与权重计算输出
RMSNorm: L2归一化后乘以权重
LayerNorm: 使用gamma、beta进行层归一化
Linear: 线性变换
Split: 按轴分割数据
Cat: 按轴拼接数据
MatMulTransB: 多线程下矩阵转置乘法
Softmax: 激活函数
Silu: SiLU激活函数
GeluNew: 新型Gelu激活函数
Mul: 矩阵与浮点数乘法
MulTo: 点乘
AddTo: 点加操作(带alpha和不带alpha)
AttentionMask: 根据mask值替换
Permute: 数据通道转换
ToDevice: 数据迁移至GPU
basellm作为抽象类,继承自fastllm,包含纯虚函数如加载权重、模型推理、保存低比特模型、热身等。 chatglm、moss和vicuna继承自basellm,实现具体模型,函数与basellm类似。 fastllm结构体与属性解析:FileBuffer: 文件读写操作,包括读取各种类型数据和文件写操作
Data操作: 包括数据拷贝、统计、扩容、转置、计算权重和等
Tokenizer方法: 包括初始化、清空、插入、编码和解码
WeightMap方法: 包括从文件加载和保存低位量化权重
fastllm方法: 包括矩阵转置、通道转换、数据迁移、多线程乘法、激活函数等