1.Angular测试
2.Ray 源码解析(一):任务的量化量化状态转移和组织形式
3.[fastllm]fastllm源码结构解析
4.量化交易Python实用功能函数(6)
5.TracedModule: 更友好的模型表示方案,模型训练到部署的源码源码桥梁
Angular测试
Angular单元测试
Angular测试包含多个测试分类,按开发阶段划分,主图指标按是公式否运行划分,按是量化量化否查看源代码划分。测试类型包括ATDD、源码源码溯源码链TDD、主图指标BDD、公式DDD等。量化量化ATDD是源码源码验收测试驱动开发,TDD是主图指标测试驱动开发,强调需求分析、公式设计、量化量化质量控制量化的源码源码过程。BDD是主图指标行为驱动开发,强调系统行为。DDD是领域驱动开发,关注Service层的设计和业务实现。单元测试(Unit Test)对项目进行测试是必要的,使用TDD方法能带来很多好处。
Karma是一个基于Node.js的JavaScript测试执行工具,可测试所有主流Web浏览器,集成到CI工具,layer2交易所源码与代码编辑器一起使用。它能监控文件变化,自动执行测试,并显示结果于控制台。Jasmine是一个用于编写JavaScript测试的框架,不依赖任何其他框架,也不需要对DOM。它有清晰的语法,易于编写测试代码。Jasmine的结构包括测试集、测试用例和断言,通过beforeEach和afterEach函数管理测试前和测试后的工作。使用Jasmine和Karma创建Angular项目时,通过Angular CLI来创建应用程序,安装依赖关系,包括测试所需的一切。运行测试时,使用命令“ng test”,测试执行为监视模式,当修改代码后,测试结果自动更新。
单元测试带来诸多好处,otc药是不是都有溯源码包括提高代码质量、减少错误解决时间、节省重构时的开发成本。创建Angular单元测试的例子涉及到使用Jasmine和Karma,修改app.component.ts、app.component.html和app.component.spec.ts文件来创建测试。使用ng test命令执行测试,结果显示于控制台和浏览器报告中。测试包括检查组件属性是否正确呈现、组件行为是否符合预期、服务是否正确工作等。单元测试代码使用Jasmine的describe、it、expect、beforeEach和afterEach函数编写,确保测试的组织和可读性。常见测试用例覆盖表单提交、服务依赖性等场景。
通过使用Jasmine和Karma,我们可以为Angular应用程序创建全面的单元测试,确保代码质量和功能正确性。这些工具简化了测试的开心农场花房H5源码创建和执行过程,有助于提高开发效率和代码可靠性。
Ray 源码解析(一):任务的状态转移和组织形式
Ray源码解析系列的第一篇着重于任务的状态管理和组织形式。Ray的核心设计在于其细粒度、高吞吐的任务调度,依赖于共享内存的Plasma存储输入和输出,以及Redis的GCS来管理所有状态,实现去中心化的调度。任务分为无状态的Task和有状态的Actor Method,后者包括Actor的构造函数和成员函数。
Ray支持显式指定任务的资源约束,通过ResourcesSet量化节点资源,用于分配和回收。在调度时,需找到满足任务资源要求的节点。由于Task输入在分布式存储中,调度后需要传输依赖。对于Actor Method,其与Actor绑定,会直接调度到对应的节点。
状态变化如任务状态转移、资源依赖等信息,都存储在GCS中。将官网下载的源码进行编译任务状态更改需更新GCS,失联或宕机时,根据GCS中的状态信息重试任务。通过GCS事件订阅驱动任务状态变化。
文章主要讲述了任务状态的组织方式,如任务队列(TaskQueue)和调度队列(SchedulingQueue)的运作,以及状态转移图和状态枚举类的定义。例如,TaskQueue负责任务的增删查改,其中ReadyQueue通过资源映射优化调度决策。此外,文中还解释了一些关键概念,如Task Required Resources、Task argument、Object、Object Store、Node/Machine等。
后续文章将深入探讨调度策略和资源管理。让我们期待下篇的精彩内容。
[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方法: 包括矩阵转置、通道转换、数据迁移、多线程乘法、激活函数等
量化交易Python实用功能函数(6)
量化交易的一大功能是“回测”,通过回测可以直观检验策略的有效性及存在问题。
上篇文章《大牛量化:量化双均线策略回测效果如何?》对双均线策略的回测分析,总结经验,量化交易不再迷茫,将不确定行情转化为可操作交易。
已介绍的代码功能包括:
获取股票上市时间(get_open_date())
判断回测模式(ContextInfo.do_back_test)
设置回测基准(ContextInfo.benchmark)
设定回测系统日志显示级别(ContextInfo.data_info_level)
获取特定记录(get_result_records())
接下来,将分享QMT量化平台的行情函数:
(一) 设置定时器(ContextInfo.run_time(funcName,period,startTime))
实现:设置定时器执行指定函数
参数:funcName回调函数名称,period执行周期,startTime开始时间
示例:ContextInfo.run_time('funcName', '1min', '--')
(二) 创建板块(create_sector(parent_node,sector_name,overwrite))
实现:在指定节点下创建板块
参数:parent_node根节点,sector_name板块名称,overwrite覆盖已有板块
示例:create_sector('root', 'my_sector', True)
(三) 创建板块目录节点(create_sector_folder(parent_node,folder_name,overwrite))
实现:在指定目录下创建节点
参数:parent_node根节点,folder_name节点名称,overwrite覆盖已有节点
示例:create_sector_folder('root_folder', 'my_subfolder', True)
(四) 获取板块目录信息(get_sector_list(node))
实现:获取指定节点下的所有板块信息
参数:node目标节点
示例:get_sector_list('root')
(五) 设置板块成分股(reset_sector_stock_list(sector,stock_list))
实现:更新板块内成分股
参数:sector板块名称,stock_list股票代码列表
示例:reset_sector_stock_list('my_sector', ['AAPL', 'GOOGL'])
TracedModule: 更友好的模型表示方案,模型训练到部署的桥梁
由曹文刚,旷视 MegEngine 架构师介绍的 TracedModule,作为模型训练到部署的关键桥梁,提供了一种更为友好的模型表示方案。它并非普通 Module 的简单替代,而是通过 TracedModule IR 描述模型运行过程,区别于通过用户实现的 forward 方法。IR 由基础数据类型和 Node、Expr 构成,其中,Expr 分类描述对 Tensor 或 Module 的操作,使得模型脱离源码后仍能有效表达。
TracedModule 的引入源于低级 IR 在表达模型时存在的问题,如复杂性和缺乏高层语义。为了解决这些问题,MegEngine 采用了类似 torch.fx 和 pnnx 的高阶 IR,使其结构更清晰,更符合算法工程师的视角,便于模型分析、优化和转换。TracedModule 的优势在于它基于 MegEngine 的 python 层 op 构造,使得模型表示更直观、易于理解,便于用户进行模型分析和调试。
比如,relu6 之类的函数在底层可能被拆分为多个算子,但在 TracedModule 中,其原始结构得以保留,便于模型作者跟踪。图手术方面,TracedModule 使得在不同框架间转换模型变得简单,只需理解基本组件,便能进行模型修改。在量化部署上,TracedModule 支持多种量化方法,包括自定义算法,简化了将 MegEngine 训练的模型部署到第三方平台的过程。
总结来说,TracedModule 通过提供用户友好的 op 粒度和便捷的工具,简化了模型表示、图手术和部署流程。MegEngine 团队将持续优化和扩展基于 TracedModule 的工具,期待大家的试用和反馈,共同提升模型开发和部署的效率。GitHub、Gitee 和 MegEngine 官网提供了更多资源,欢迎大家参与交流。