1.Drools规则引擎
2.如何评价百度飞桨发布的推理推理paddlelite框架?
3.TFlite 源码分析(一) 转换与量化
4.神经网络量化入门--Add和Concat
5.ML system 入坑指南
6.LangChain:代码世界的魔法师,源码解读带你笑看技术黑洞
Drools规则引擎
规则引擎,引擎源码引擎源码用全称为业务规则管理系统,推理推理主要思想是引擎源码引擎源码用将业务决策分离出来,使用预定义语义模板编写,推理推理实现决策逻辑的引擎源码引擎源码用金牛出击主图源码灵活配置与管理。规则引擎从推理引擎发展而来,推理推理将业务决策从应用程序代码中分离,引擎源码引擎源码用接受数据输入,推理推理解释规则,引擎源码引擎源码用并根据规则做出决策。推理推理多数规则引擎支持规则顺序与冲突检测,引擎源码引擎源码用集成脚本语言与通用开发语言接口。推理推理
业内存在多种规则引擎,引擎源码引擎源码用包括开源与商业选项。推理推理开源代表如Drools,商业代表包括Visual Rules和iLog等。市面上规则引擎产品主要有Drools、VisualRules和iLog等。
Drools是一款基于Java语言的开源规则引擎,提供将复杂业务规则以脚本形式存储的能力,无需修改代码或重启服务器即可在线生效。其具有访问策略便捷、调整和管理简单,符合行业标准,速度快、效率高的特点。业务分析师或审核人员可轻松查看规则,确保编码规则执行所需业务逻辑。Drools的前身是Codehaus的开源项目Drools,后被整合进JBoss应用服务器,更名JBoss Rules。
Drools遵循RETE算法实现,为Java量身定制,具备面向对象接口,使得商业规则表达自然。官网为drools.org,中文网为Drools中文网。Drools源码可从GitHub下载。推广联盟系统网站源码
Drools主要由规则与规则执行两部分构成。规则通过Drools提供的API编译、收集和执行。API大致分为三类:规则编译、规则收集和规则执行。Drools作为BRMS解决方案,涉及规则文件、规则基础、规则会话与实体类的创建。
当前Drools最新版本为7.0.0.Final,未来版本迭代加速。从Drools6.x到7版本,发生重大变化。Drools7新功能包括规则引擎优化、性能提升与功能扩展。
在项目中使用Drools,既可独立使用也可与Spring整合。独立使用仅需导入Maven依赖。配置文件通常为resources/META-INF/kmodule.xml,定义规则基础、规则会话与实体类。
规则引擎在项目中通过规则文件定义业务逻辑,如案例中定义企业风险类别与分数计算。通过Drools API将数据传入,规则引擎匹配规则并返回结果。使用规则引擎的优势在于动态管理规则,业务人员可以像管理数据一样调整规则,无需重启服务。
如何评价百度飞桨发布的paddlelite框架?
评价百度飞桨发布的paddle-lite框架,我给出的评价是谨慎使用。
对于想要在终端部署AI能力的开发者来说,建议考虑一些一直在维护和更新的项目,这些项目API稳定,功能丰富,应用广泛,能避免遇到代码重写的困境。如果特别钟情于paddle-lite,可以先观察一段时间,网站授权源码是什么了解其代码和技术实现,再做决定。
开发新项目时,编写KPI和PR较为容易,而维护旧项目则较为困难,这可能会影响开发者的工作效率和心情。使用百度终端推理框架的用户,可能会遭遇需要重写底层代码的情况。
百度的开源项目开放源代码,用户需要自行承担使用风险和维护工作。在年9月底,百度发布了移动端深度学习框架MDL,年5月底发布了跨平台AI推理加速引擎anakin,同年5月底移动端深度学习框架被完全重构为paddle-mobile,同年8月发布了ARM移动端开发精简版anakin引擎anakin-lite,年8月中发布了纯自研的移动端框架paddle-lite。
作为底层库开源项目,百度频繁更换框架,且在短时间内更新API,这给用户带来了巨大的工作量,导致重写代码的情况频繁发生。没有稳定的ABI,用户体验极差。百度在终端推理框架的维护方面似乎不够尽心,对开发者造成了不稳定的使用环境。
对于使用老框架的用户,新模型结构不支持、遇到bug、速度慢需要优化等问题,百度通常不会将新功能和优化更新到老框架中,以推动用户使用新的框架。
综上所述,尽管paddle-lite在发布时被部分开发者视为最强的框架,但频繁更新和API变动,以及缺乏稳定的维护策略,使得其用户体验不佳。对于开发者而言,需要谨慎评估使用成本与风险。觅甜语音源码希望百度能加强框架的稳定性与兼容性,提升开发者使用体验。
TFlite 源码分析(一) 转换与量化
TensorFlow Lite 是 Google 推出的用于设备端推断的开源深度学习框架,其主要目的是将 TensorFlow 模型部署到手机、嵌入式设备或物联网设备上。它由两部分构成:模型转换工具和模型推理引擎。
TFLite 的核心组成部分是转换(Converter)和解析(interpreter)。转换主要负责将模型转换成 TFLite 模型,并完成优化和量化的过程。解析则专注于高效执行推理,在端侧设备上进行计算。
转换部分,主要功能是通过 TFLiteConverter 接口实现。转换过程涉及确定输入数据类型,如是否为 float、int8 或 uint8。优化和转换过程主要通过 Toco 完成,包括导入模型、模型优化、转换以及输出模型。
在导入模型时,`ImportTensorFlowGraphDef` 函数负责确定输入输出节点,并检查所有算子是否支持,同时内联图的节点进行转换。量化过程则涉及计算网络中单层计算的量化公式,通常针对 UINT8(范围为 0-)或 INT8(范围为 -~)。量化功能主要通过 `CheckIsReadyForQuantization`、`Quantize` 等函数实现,确保输入输出节点的最大最小值存在。
输出模型时,根据指定的输出格式(如 TensorFlow 或 TFLite)进行。TFLite 输出主要分为数据保存和创建 TFLite 模型文件两部分。
量化过程分为选择量化参数和计算量化参数两部分。选择量化参数包括为输入和权重选择合适的量化参数,这些参数在 `MakeInitialDequantizeOperator` 中计算。计算参数则使用 `ChooseQuantizationParamsForArrayAndQuantizedDataType` 函数,该函数基于模板类模板实现。
TFLite 支持的燕窝溯源码克数不同量化操作包括 Post-training quantization 方法,实现相关功能的代码位于 `tools\optimize\quantize_model.cc`。
神经网络量化入门--Add和Concat
本文旨在深入探讨神经网络量化中的关键操作:ElementwiseAdd(简称EltwiseAdd)和Concat。我们将逐步解析这两个运算在量化过程中的处理方式,以便为读者提供清晰、直观的理解。
EltwiseAdd量化:
在论文附录中,EltwiseAdd的量化流程被详尽阐述。了解量化基础原理后,可以轻松推导出其量化过程。量化公式如下:
\[Q(x) = \text{ scale} \times (x - \text{ offset})\]
假设两个输入张量的数值分别为 \(x\) 和 \(y\),其相加的结果为 \(z\),在全精度下的EltwiseAdd可以表示为:
\[z = x + y\]
将量化公式代入上述过程,可以得到:
\[Q(z) = \text{ scale} \times (Q(x) + Q(y))\]
简化后,我们可以观察到两个关键步骤:输出需要按照特定公式进行放缩,其中一个输入同样需要放缩,即论文中提及的rescale。尽管在PyTorch中实现这部分代码较为简单,主要工作集中在统计输入和输出的min-max值,推理引擎实现更为关键。在实际应用中,通常采用TFLite的实现方法来处理量化问题。
Concat量化:
Concat操作与EltwiseAdd类似,可以通过对其中一个输入进行rescale后再进行拼接,最后对输出进行调整。量化过程如下:
\[Q(concat(x, y)) = scale_{ output} \times (Q(x) + Q(y))\]
将量化公式代入,可以得到:
\[Q(concat(x, y)) = scale_{ output} \times (scale_x \times Q(x) + scale_y \times Q(y))\]
在实际量化过程中,为了避免精度损失,论文建议统一输入输出的scale值。尽管在没有rescale的情况下实现统一scale较为复杂,TFLite源码中提供了一种解决方案:当其中一个输入的范围覆盖整个输出范围时,将范围较小的输入进行重新量化,以匹配输出的scale和zeropoint。
总结:
EltwiseAdd和Concat量化操作在神经网络中具有重要意义。尽管量化可以减少计算资源需求,但可能引入精度损失。因此,在量化网络时,需关注输入范围的合理匹配,以避免精度损失过大。本文旨在提供这两个运算在量化过程中的直观解释,帮助读者深入理解其处理机制。
ML system 入坑指南
欢迎进入机器学习系统(ML system)的广阔领域。随着ChatGpt等大模型的兴起,人们愈发关注大模型的实际落地。然而,除了先进的算法,背后支撑的ML system——从分布式训练到高效推理的完整链路同样至关重要。优秀的基础设施是应用爆发的基石。对于刚刚踏入这个领域的“新手”以及对ML system感兴趣但并非该领域背景的其他领域人士,本文将分享个人的学习历程和指引,希望能为你们提供入门和进一步探索的指南。 让我们先从课程入手。学习路径的构建离不开坚实的知识基础。首先,掌握计算机基础,如数据结构,这是必不可少的。接下来,让我们深入探讨更专业性进阶课程: 南京大学JYY老师的操作系统课程:课程内容深入且作业繁重,质量与四大课程相当。 MIT的6.S操作系统课程:提供全面的资料、实验(lab)以及课程内容。 CMU的并行计算课程:介绍现代多处理器、CPU加速、分布式通讯协议、GPU加速(CUDA编程)、异构计算、同步和缓存等核心概念。 UCB的cs课程:专注于高性能计算(HPC)的原理和应用。 MIT的分布式系统课程:使用Go语言实现,了解传统分布式系统知识和历史对于现代分布式机器学习系统的学习具有一定的帮助,但并非必需。 在课程之外,还有专门针对机器学习系统的课程: CMU的深度学习系统课程:由陈天奇老师讲授,涵盖神经网络库实现、自动微分、GPU加速、模型部署和AI编译部分内容。课程内容全面,适合有一定基础的学习者阅读或作为参考。 Mini torch:一个用Python实现的简单版本torch,涉及自动微分、张量、GPU加速,适合新手入门。 MIT的Tiny ML课程:针对移动设备和嵌入式系统的课程,感谢@江湖骗子 @Lyken 学长的补充。 此外,还有华为Mindspore团队(我曾在此实习的团队)和一群专家联合推出的课程,涵盖了计算图、编译器前后端、分布式训练等内容,适合有一定基础的学习者阅读或作为工具书使用。微软发起的系统为AI工具书,正在快速迭代更新,补充基础知识。陈天奇老师的AI编译器课程以TVM为基础,是前沿领域的少数课程之一。对于大型模型的学习,理解最新的算法和模型架构变化是非常必要的,虽然很难有系统的课程,但通过阅读论文、官方网站、博客等资源,可以紧跟业界进展。可以参考李沐老师的论文精讲,关注影响力巨大的工作,如“多就是一切”(Muli is all you need)。
对于大规模分布式训练,目前没有非常系统的课程,但了解分布式训练的基本知识、并行策略和显存优化策略等对于学习者至关重要。这里简单总结了几个关键知识点和参考论文。
编程语言方面,Python是首选,但了解如何调用C(如Cpython、pybind)以及Python高级特性(如hook、装饰器)对于ML sys领域很有帮助。CUDA、OpenCL等并行计算技术也是非Nvidia芯片设备(如手机SoC)上进行异构加速的通用方案。
此外,还有一些工具和框架,如TensorRT、AI Template、Severing Triton-inference-server、clip-as-service、Mobile inference等,涵盖了推理引擎、模型服务等不同方面。对于分布式训练,ColossalAI、Megatron-LM、Deepspeed、huggingface accelerate、Bagua等框架提供了不同层次的支持,帮助解决大规模模型训练中的问题。
最后,对于学习者来说,探索源码、实际案例学习是深入理解ML sys领域知识的绝佳途径。此外,编程语言(如C++、Python)、CUDA、OpenCL等并行计算技术、分布式通讯技术以及大型深度学习框架(如TensorFlow、PyTorch)等都是学习的必备知识。同时,了解AI编译器、模型优化技术、系统设计和实现等方面的知识,对于构建高效、可扩展的机器学习系统至关重要。
LangChain:代码世界的魔法师,源码解读带你笑看技术黑洞
在探索代码世界的魔法世界中,LangChain如一颗璀璨的明星,引领我们穿越技术黑洞,揭示背后的奥秘。本文将深度解读LangChain的源码,为开发者揭示构建上下文感知推理应用的秘密。
LangChain的魔法源于其核心组件,每一部分都精心设计,旨在简化大语言模型的集成与应用。让我们一起揭开这些组件的神秘面纱。
1. 模型输入输出(Model IO)
在LangChain中,任何大语言模型的应用都离不开与模型的无缝交互。通过Model IO组件,开发者能够轻松适配不同模型平台,简化调用流程。提示词模板功能允许开发者根据需求动态管理输入内容,输出解析器则提取关键信息,确保模型输出的高效利用。
2. 数据连接(Data Connection)
面对用户特定数据,LangChain提供了从加载、转换到存储与检索的全面解决方案。文档加载器与转换器、矢量存储工具,共同构建起数据处理的坚实基石。
3. 链(Chain)
在复杂应用中,简单模型可能不再足够。通过链组件,LangChain允许开发者将多个模型或其他组件串联起来,构建出高度定制化的解决方案。
4. 记忆(Memory)
记忆功能在对话式应用中至关重要。通过灵活的存储与检索机制,开发者可以确保应用在每次运行中都具备上下文意识,提升用户体验。
5. Agent
在LangChain中,Agent代理将大语言模型作为推理引擎,自主决策执行操作的序列,推动应用向更高层次发展。
6. 回调处理器(Callback)
LangChain的回调系统提供了实时干预应用流程的能力,适用于日志记录、监控及流处理等场景,确保应用运行的透明与可控。
7. 索引
索引技术在LangChain中扮演关键角色,优化数据检索效率,为应用提供高效的数据访问路径。
8. 检索
检索组件让文档与语言模型紧密协作,通过简洁的接口实现高效信息检索,满足多样化应用需求。
9. 文本分割器
在处理长文本时,文本分割器成为不可或缺的工具,确保语义连续性的同时,适应不同应用场景的多样化需求。
. 向量存储
向量存储技术作为构建索引的核心,为LangChain提供高效、灵活的数据结构,支持大规模数据处理。
. 检索器接口(Retrievers)
检索器接口作为文档与语言模型之间的桥梁,确保信息检索操作的标准化与高效性,支持多样化的检索需求。
. 总结
通过深入解析LangChain的源码,我们不仅揭示了其构建上下文感知推理应用的奥秘,也看到了其在复杂应用集成与优化中的巨大潜力。在LangChain的魔法世界里,开发者能够解锁更多可能,创造令人惊叹的技术奇迹。