当前位置: 首页 > 编程日记 > 正文

腾讯Angel升级:加入图算法,支持十亿节点、千亿边规模!中国首个毕业于Linux AI基金会的开源项目...

出品 | AI科技大本营(ID:rgznai100)

【导语】Angel 是腾讯的首个AI开源项目,于 2016 年底推出、2017年开源。近日,快速发展的 Angel 完成了从  2.0 版本到 3.0 版本的跨越,从一个单纯的模型训练系统进化成包含从自动特征工程到模型服务的全栈机器学习平台。作为面向机器学习的第三代高性能计算平台,Angel 致力于解决稀疏数据大模型训练以及大规模图数据分析问题。

近日,Linux基金会旗下面向AI领域的顶级基金会——LF AI基金会(Linux Foundation Artificial Intelligence Foundation)正式宣布,腾讯开源项目 Angel 从LF AI基金会毕业,是中国首个从LF AI基金会毕业的开源项目。接下来,我们就从 Angel 3.0 的系统架构出发,从 Angel 在开源方面取得的成绩、新加入的图机器学习功能等新特性、使用情况及 Angel 的落地案例等方面,对 Angel 全方位的学习与了解。


概述

Angel是腾讯开源的大规模分布式机器学习平台,专注于稀疏数据高维模型的训练。目前Angel是Linux深度学习基金会孵化项目,相比于TensorFlow, PyTorch和Spark等业界同类平台,她有如下特点:

  • Angel是一个基于Parameter Server(PS)理念开发的高性能分布式机器学习平台,它具有灵活的可定制函数PS Function(PSF),可以将部分计算下推至PS端。PS架构良好的横向扩展能力让Angel能高效处理千亿级别的模型。

  • Angel具有专门为处理高维稀疏特征特别优化的数学库,性能可达breeze数学库的10倍以上。Angel的PS和内置的算法内核均构建在该数学库之上。

  • Angel擅长推荐模型和图网络模型相关领域(如社交网络分析)。图1是Angel和几个业界主流平台在稀疏数据,模型维度,性能表现,深度模型和生态建设几个维度的对比。Tensorflow和PyTouch在深度学习领域和生态建设方面优势明显,但在稀疏数据和高维模型方面的处理能力相对不足,而Angel正好与它们形成互补,3.0版本推出的PyTorch On Angel尝试将PyTorch和Angel的优势结合在一起。

       图 1 Angel与业界主流平台的对比

一、Angel系统架构

Angel 3.0系统架构如图2所示。

图 2 Angel 3.0架构

Angel 自研的高性能数学库是整个系统的基础,Angel的PS功能和内置的算法内核均是在这个数学库基础之上实现的。

Angel PS提供了高效,稳定和灵活的参数存储和交换服务。在3.0版本中,我们对Angel PS功能进行了扩展,使得它可以存储任意类型的对象,一个典型的例子是在图算法的实现过程中,我们使用Angel PS来存储了大量复杂的对象。

MLcore是Angel自研的一套算法内核,它支持自动求导,可以使用JSON配置文件定义和运行算法。除此之外,在3.0版本中,Angel还集成了PyTorch作为计算引擎。在计算引擎层之上是计算框架,它们可以看作计算引擎的容器,目前支持3种计算框架:原生的Angel,Spark On Angel(SONA)和PyTorch On Angel(PyTONA),这些计算框架可以使得Spark和PyTorch用户可以无缝切换到Angel平台。最上层是两个公共组件:AutoML和模型服务。

二、Angel开源

2018年,腾讯受邀作为Linux基金会旗下面向AI领域的顶级基金会——LF AI基金会(Linux Foundation Artificial Intelligence Foundation)的初始白金会员加入,拥有董事会和技术咨询委员会席位,并于同年向基金会捐赠高性能分布式机器学习平台Angel。

北京时间12月20日,LF AI基金会正式宣布,腾讯开源项目Angel从LF AI基金会毕业,也是中国首个从LF AI基金会毕业的开源项目。这意味着,Angel得到全球技术专家的认可,成为世界最顶级的AI开源项目之一。

LF AI基金会执行总监Ibrahim Haddad表示:“在Angel从孵化到毕业的过程中,我们能看到Angel在新功能完善和应用场景落地方面惊人的速度。随着3.0版本的发布,Angel在功能、适用性和对社区的贡献等都有了非常优秀的表现。这也是整个AI开源社区在走向成熟并具备工业级生产能力的方向上迈出了一大步。”

腾讯云副总裁、腾讯数据平台部总经理蒋杰表示:“腾讯致力于通过开源代码,与开发者共建开源生态、实现成果共享,已成为大数据领域开源最为全面的公司。我们很高兴看到Angel从LF AI基金会成功毕业,在基金会的指导和开发者的共建下,完成从单一的模型训练平台到全栈机器学习平台的技术跨越,这也与腾讯大数据批流融合、ABC融合的未来发展方向紧密契合。毕业是Angel新的开始,未来我们将进一步开放Angel在图计算和联邦学习领域的核心能力。”

据LF AI 基金会董事、腾讯AI专家肖涵介绍,LF AI基金会对开源项目的毕业流程有非常严格的规定,基于项目的技术含量、开源生态、社区互动等维度,严格评估项目的成熟度,最终由董事会投票决定能否准予毕业。能够从LF AI毕业,意味着项目已经得到全球技术专家的认可,成为最顶级的AI开源项目。

开源协同是当前腾讯最重要的技术战略之一。在今年的重庆智博会上,腾讯公司董事会主席兼首席执行官马化腾专门提及了对开源的重视,他表示,腾讯希望在科研领域投入更多力量,将通过内外部开源等方式,积极参与“全球科技共同体”的共建。

截止2019年11月,仅在Github上,腾讯就开源了91个项目,有超过1000个贡献者参与,获得超过26万个Star数,在Github全球公司贡献榜上居于前列。腾讯还加入了Linux、Apache等9大开源基金会,并成为最高级别会员。其中LF AI基金会是由Linux基金会发起的人工智能领域的专项开源基金会,旨在倡导和组织AI开源平台和工具共同参与建设,共同享有IP知识产权,创建可持续发展的开源AI生态系统。

       图 3 GitHub上Angel的统计信息以及Angel发表的论文

三、Angel 3.0新特性

从1.0到3.0,Angel发生了巨大的变化,它从一个单一的模型训练平台发展到涵盖机器学习各个流程,包含自己生态的通用计算平台,代码量也超过了50万行。为了后续维护和使用的方便,Angel拆分成8个子项目,统一放在Angel-ML目录下:angel,PyTorch On Angel,sona,serving,automl,mlcore,math2和format,这些子项目会在下文详细介绍。

     图 4 Angel 3.0概览(红色的表示新增特性,白色的表示已有的但在持续改进的特性)

图4提供了一个Angel 3.0特性的整体视图。Angel 3.0试图打造一个全栈的机器学习平台,它的功能特性涵盖了机器学习的各个阶段:特征工程,模型训练,超参数调节和模型服务。

Angel的特征工程模块基于Spark开发,增强了Spark的特征选择功能,同时使用特征交叉和重索引实现了自动特征生成。这些组件可以无缝地整合进Spark的流水线。为了让整个系统更加的智能,Angel 3.0新增了超参数调节的功能,目前支持3种算法:随机搜索,网格搜索和贝叶斯优化。在模型服务方面,Angel 3.0提供了一个跨平台的组件Angel Serving, Angel Serving不仅可以满足Angel自身的需求,还可以为其他平台提供模型服务。

在生态方面,Angel也尝试将PS能力赋能给其他的计算平台,目前已经完成了Spark On Angel和PyTorch On Angel两个平台的建设。这两个平台各有优势和侧重, Spark On Angel使用的是Angel内置的算法核心,主要负责常见推荐领域的机器学习算法和基础图算法。PyToch On Angel使用PyTorch作为计算核心,主要负责推荐领域深度学习算法和图深度学习算法。

1、自动特征工程

特征工程,例如特征交叉和选择,对于工业界的机器学习应用具有重要意义。Spark提供了一些特征选择算子,但是仍有一些局限性。Angel基于Spark提供了更多的特征选择算子:

  • 基于统计的运算符,包括VarianceSelector和FtestSelector

  • 基于模型的运算符,包括LassoSelector和RandomForestSelector

大多数在线推荐系统经常选择线性算法,例如逻辑回归作为机器学习模型,但逻辑回归需要复杂的特征工程才能实现较高的精度,这使得自动特征合成至关重要。但是,现有的自动化的高阶特征合成方法带来了维度灾难。为了解决这个问题,Angel实现了一种迭代生成高阶合成特征的方法。每次迭代由两个阶段组成:

  • 扩增阶段:任意特征的笛卡尔积

  • 缩约阶段:特征选择和特征重索引

以下是迭代步骤:

  • 首先任意的输入特征之间通过笛卡尔积生成合成特征。该步骤后,特征数量将以二次方式增加

  • 接下来,从合成特征中选择最重要的特征子集(使用例如VarianceSelector和RandomForestSelector)

  • 然后,重新索引所选择的特征以减少特征空间

  • 最后,合成特征与原始特征拼接在一起

图 5 自动特征工程流程

如图5所示,这种特征合成方法线性地增加特征数量,避免了维度灾难。在Higgs数据集上的实验表明合成的特征能有效地提高模型精度(如表1所示)。


LR

FM

Ours

AUC

0.68

0.69

0.70

表 1 特征合成效果

2、Spark On Angel (SONA)

在Angel 3.0中,我们对Spark On Angel做了大幅度的优化,添加了下面这些新的特性:

  • Spark On Angel中集成了特征工程。在集成的过程中并不是简单地借用Spark的特征工程,我们为所有的运算支持了长整型索引的向量使其能够训练高维稀疏模型

  • 与自动调参无缝连接

  • Spark用户能够通过Spark-fashion API毫不费力的将Spark转换成Angel

  • 支持两种新的数据格式:LibFFM 和Dummy

       图 6 Spark On Angel架构

除了这些大的特征,我们也在持续完善Spark On Angel的算法库:添加了一些新的算法,如:Deep & Cross Network (DCN) 和 Attention Factorization Machines (AFM)等;同时对已有的算法做了大量的优化,例如对LINE和K-Core算法进行了重构,重构后的算法性能和稳定性都有大幅度提升。

从图7中可以看出,Spark On Angel中的算法与Spark中的算法存在显著的不同,如:基于Spark On Angel的算法主要是针对推荐和图领域,然而Spark中的算法更通用。

       图 7 Spark与Spark On Angel算法比较

     图 8 Spark On Angel算法示例

图8提供了一个基于Spark On Angel的分布式算法示例,主要包含以下步骤:

  • 在程序开始时启动参数服务器,程序结束时关闭参数服务器

  • 将训练集和测试集以Spark DataFrame形式加载

  • 定义一个Angel模型并以Spark的参数设置方式为其设置参数。在这个示例中,算法是一个通过JSON定义的计算图

  • 使用“fit”方法来训练模型

  • 使用“evaluate”方法来评估已训练的模型

在训练完成后,Spark On Angel将会展示多种模型指标,如:准确率, ROC 曲线, AUC等。用户可以保存训练好的模型以便下次使用。

       图 9 Spark On Angel和TensorFlow性能比较

我们在两种流行的推荐算法Deep & Wide 和 DeepFM上使用了相同的资源和数据集比较了Spark On Angel和Tensorflow的性能。如图11所示,在Deep & Wide算法上Spark On Angel比Tensorflow快3倍,而在DeepFM算法上Tensorflow运行稍快一些。

3、PyTorch On Angel(PyTONA)

PyTorch On Angel是Angel 3.0新增的特性,它主要是为了解决大规模图表示学习和深度学习模型训练问题。

在过去几年时间,图卷积神经网络(GNN)快速发展,一系列的研究论文以及相关的算法问世:例如GCN,GraphSAGE和GAT等,研究和测试结果表明,它们能够比传统图表示学习更好的抽取图特征。腾讯拥有庞大的社交网络(QQ和微信),同时拥有大量对图数据进行分析的需求,而图表示学习正是这些分析的基础,因此腾讯内部对GNN有着强烈的需求,这也是我们开发PyTorch On Angel的主要原因之一。

大规模图的表示学习面临着两个主要的挑战:第一个挑战来自于超大规模图结构的存储以及访问,这要求系统不仅能存得下,还需要提供高效的访问接口,例如需要提供高效的访问任意节点的两跳邻居的接口;第二个挑战来自于GNN计算过程,它需要有高效的自动求导模块。

通过对Angel自身状况以及对业界已有系统的分析,我们得到如下结论:

  • TensorFlow和PyTorch拥有高效的自动求导模块,但是它们不擅长处理高维度模型和稀疏数据

  • Angel擅长处理高维度模型和稀疏数据,虽然Angel自研的计算图框架(MLcore)也可以自动求导,但是在效率和功能完整性上却不及TensorFlow和PyTorch,无法满足GNN的要求

为了将两者的优势结合起来,我们基于Angel PS开发了PyTorch On Angel平台,基本思路是使用Angel PS来存储大模型,使用Spark来作为PyTorch的分布式调度平台,也就是在在Spark的Executor中调用PyTorch来完成计算。

PyTorch On Angel的架构如图10所示:

       图 10 PyTorch On Angel系统架构

PyTorch On Angel拥有3个主要的组件:

  • Angel PS:存储模型参数,图结构信息和节点特征等,并且提供模型参数和图相关数据结构的访问接口,例如需要提供两跳邻接访问接口

  • Spark Driver:中央控制节点,负责计算任务的调度和一些全局的控制功能,例如发起创建矩阵,初始化模型,保存模型,写checkpoint以及恢复模型命令

  • Spark Worker:读取计算数据,同时从PS上拉取模型参数和网络结构等信息,然后将这些训练数据参数和网络结构传给PyTorch,PyTorch负责具体的计算并且返回梯度,最后Spark Worker将梯度推送到PS更新模型

当然,这些细节都是封装好的,算法开发人员和用户并不需要了解。在PyTorch On Angel平台上开发新算法,只需要关注算法逻辑即可,与开发单机的PyTorch算法并没有太大区别。下面给出一个2层GCN算法的实现例子:

       图 11 在PyTorch On Angel上实现GCN的例子

算法开发完成后,将代码保存为pt文件,然后将pt文件提交给PyTorch On Angel平台就可以实现分布式训练了。

我们已经在PyTorch On Angel上实现了许多算法:包括推荐领域常见的算法(FM,DeepFM,Wide & Deep,xDeepFM,AttentionFM, DCN和PNN等)和GNN算法(GCN和GraphSAGE)。在后续的版本迭代中,我们将会进一步丰富PyTorch On Angel的算法库。

由于结合了PyTorch和Angel的优点,PyTorch On Angel在算法性能方面有很大的优势:对于推荐领域常见的深度学习算法,性能可以达到TensorFlow的4倍以上;对于GNN算法,性能也远好于目前业界开源的同类型平台(具体的性能数据会在开源社区陆续公开)。下图是在公开的数据集criteo kaggle2014(4500万训练样本,100w特征)上做的对比测试:

       图 12 PyTorch On Angel和TensorFlow性能对比测试

除了性能方面的优势,PyTorch On Angel还有一个比较大的优势就是易用性好。如图12所示:PyTorch运行在Spark的Executor中,可以实现Spark图数据预处理和PyTorch模型训练的无缝对接,在一个程序中完成整个计算过程。

4、自动超参数调节

传统超参数调节的方式有两种(如图15所示):

  • 网格搜索:网格搜索将整个搜索空间切分为网格,假设超参数是同等重要的。这种方式虽然直观,但有两个明显的缺点:1)计算代价随参数数量的增长而呈指数增长;2)超参数的重要程度常常是不同的,网格搜索可能会花费太多精力来优化不太重要的超参数

  • 随机搜索:随机采样超参数组合,并评估抽样组合。虽然这种方法有可能关注更重要的超参数,但是仍无法保证找到最佳组合

       图 13 网格搜索和随机搜索

贝叶斯优化与传统的无模型方法不同,使用计算成本较低的代理函数(surrogate function)来近似原始目标函数。在贝叶斯优化中,代理函数生成超参数组合的概率均值和方差。然后,效用函数(acquisition function)将评估超参数组合的预期损失或改进。这样的概率解释方法使贝叶斯优化能够使用少得多的开销找到目标函数的较优解。

Angel 3.0包括传统的两种方法和贝叶斯算法优化。对贝叶斯优化,Angel实现了以下的功能:

  • 代理函数。除了常用的两种模型(高斯过程和随机森林),也实现了EM + LBFGS优化高斯过程内核函数中的超参数

  • 效用函数:实现了PI(Probability of improvement),EI(Expected Improvement)和UCB(Upper Confidence Bound)

由于每次评估目标函数的计算开销可能较大,如果观察到候选的超参数组合在开始的若干轮迭代中表现不佳,可以提前停止这些候选超参数组合。Angel 3.0版本中实现了这种早停策略。

表2是在逻辑回归算法的实验,调节的超参数是学习速度和学习速度衰减率,结果显示贝叶斯优化的性能优于随机搜索和网格搜索,而随机搜索的结果略优于网格搜索


Random

Grid

GP

AUC

0.926

0.924

0.933

表 2 不同超参数自动条件方法的效果对比

5、Angel Serving

为了满足在生产环境中高效地进行模型服务的需求,我们在Angel 3.0中实现了Angel Serving子系统,它是一个可拓展性强、高性能的机器学习模型服务系统,是全栈式机器学习平台Angel的上层服务入口,使Angel生态能够形成闭环。图16展示了Angel Serving的架构设计。

       图 14 Angel Serving架构

Angel Serving主要特征包括:1)支持多种类型的API访问服务,包括gRPC和Restful 接口;2)Angel Serving是一个通用的机器学习服务框架,可插拔机制设计使得来自其他第三方机器学习平台的模型可以很容易使用Angel Serving来服务,目前已经支持三种平台的模型:Angel,PyTorch和支持PMML模型格式的平台(Spark、XGBoost等);3)受TensorFlow Serving的启发,Angel Serving还提供细粒度版本控制策略:包括使用模型的最早,最新以及指定版本进行服务;4)Angel Serving还提供丰富的的模型服务监控指标,包括:

  • QPS: 每秒请求数

  • 总的请求数以及成功请求总数

  • 请求的响应时间分布

  • 平均响应时间



Angel Serving

TensorFlow Serving

总耗时(s)


56

59

最小响应时间(ms)


1

1

平均响应时间(ms)


2

2

99% 分位响应时间(ms)


2

3

QPS


1900

1800

表 3 Angel Serving和Tensorflow Serving性能对比

表3展示了Angel Serving和TensorFlow Serving性能对比结果,我们使用具有100万个特征的DeepFM模型,向服务发送100,000个预测请求。Angel Serving和TensorFlow Serving的总耗时分别为56秒和59秒。两个服务系统的平均响应时间都为2毫秒。Angel Serving的QPS是1,900,而TensorFlow Serving的QPS是1,800。上述结果表明Angel Serving与TensorFlow Serving性能相当,甚至更好。

Angel Serving 不仅可以满足Angel自身的需求,还可以为其他平台提供模型服务。在生态方面,Angel也尝试将参数服务器(PS)能力共享给其他的计算平台,目前已经完成了Spark On Angel和PyTorch On Angel两个平台的建设。

     图15  图计算体系架构

在3.0版本中,Angel重点研发了图机器学习功能,包括图表示和图神经网络学习模型,同时提供预处理、图挖掘等端到端数据处理能力,具有丰富的算法库,提供了同构图、异构图多种图计算范式和不同种类的图算法。经过腾讯内部业务的大规模实践,Angel在图算法性能上同样表现出众,例如十亿节点、千亿边规模的图结构,运行算法时能以Spark GraphX三分之一的计算资源,达到十倍处理性能。

    图16   图计算性能对比

除了技术功能上的完善,Angel在社区生态上也日趋成熟。据了解,在全行业Angel拥有超过 100家公司和机构用户,其中包括微博、华为、微众银行、小米、滴滴等大型互联网企业。基于Angel构建的一站式机器学习应用平台智能钛TI,支持了包括微信支付、腾讯广告、微视等在内的诸多腾讯内部产品,同时也通过腾讯云对外开放为更多行业企业提供服务。

截止目前,Angel在GitHub上已经获得了5500 Star,1400 Fork,在技术、应用、生态等方面的优秀表现均得到了开源社区的认可。此前在腾讯2019 Techo开发者大会上,蒋杰还宣布了资源管理平台核心TKE和分布式数据库TBase的正式开源。腾讯正在成为大数据领域开源最全面的公司。

四、Angel使用情况

如图3所示,在过去12个月,Angel在腾讯内部的任务数量有了非常明显的增长,增幅达到150%。值得一提的是,Spark On Angel的任务数增长了10倍,为了让Spark On Angel更加的易用,3.0版本对Spark On Angel做了大幅度升级。在腾讯内部,使用Angel的业务包括腾讯视频,腾讯新闻和微信等。

       图 17 腾讯内部Angel任务数

Angel官方维护了一个QQ群与外部开发者进行交流,对群用户的统计表明:

  • Angel的绝大部分用户来自中国,主要分布在北京,上海,杭州,成都和深圳等互联网行业比较发达的城市。

  • 有超过100家的公司和科研机构在使用或测试Angel,其中包括了中国最顶级的IT公司:微博,华为和百度等。

       图 18 Angel开源用户

五、案例

1、腾讯短视频推荐

       图 19 短视频推荐数据处理流程

上图所示是腾讯短视频部门的一个使用案例。用户的视频播放日志和上下文信息被实时转发给Kafka,流数据引擎Storm订阅Kafka的数据。Storm是一个实时的特征生成器,它从一个离线的key-value存储中获得用户画像和视频信息,将两者拼接起来生成特征。生成的特征被传输到在线训练系统中来更新在线模型;同时,这些特征也被转存到HDFS作为离线训练的输入。离线模型通常用来初始化在线训练系统,当出现异常时,离线模型还可以用来重置在线系统。本案例用到的推荐算法是FM,训练样本24亿条,特征维度为63611,在Spark上训练耗时10多个小时,应用Angel后减少至1小时。

2、金融反欺诈

       图 19 金融反欺诈数据处理流程

金融欺诈检测是大规模图学习的常见案例,其网络数据是异构的,包含几种不同类型的边:

  • 交易关系: 用户A和用户B之间如存在交易关系表明他们之间曾出现过交易行为

  • 设备关系:用户A和用户B之间如存在设备关系表明他们曾共享过同一个设备

  • Wi-Fi关系:用户A和用户B之间如存在Wi-Fi关系表明他们曾通过一个Wi-Fi连接到互联网

金融诈骗者通常共享设备和Wi-Fi,通过扩展边缘关系生成社区。Angel上的fast unfolding算法可以有效地发现这些社区。下游的欺诈风险模型可以将这些社区的用户画像和网络特征作为输入来学习和推到反欺诈策略。该图数据包含15亿个节点和200亿条边,基于Spark GraphX的实现耗时20小时,而Angel仅需5小时。

小结

本文主要介绍了Angel在腾讯内外的使用情况和3.0版本的新特性。

Angel在腾讯内外的使用情况:

  • 腾讯内部:用户数和任务数增加1.5倍

  • 腾讯外部:超过100多家公司和机构使用Angel

  • 开源贡献:4200多个star, 8个子项目,1100多个fork,2000多次commits

Angel 3.0新特性:

  • 自动特征工程:新增特征选择和组合方法,将特征合成、选择和重新索引以pipeline的形式呈现,用来迭代生成高阶合成特征

  • 新的计算引擎:

  • SONA(加强):特征工程支持索引为Long类型的向量;所有的算法被封装成Spark风格的APIs;SONA上的算法可以作为Spark的补充

  • PyTONA(新):PyTONA作为图学习算法的引擎被引入,目前支持GCN和GraphSage,同时也支持推荐领域的算法。PyTONA采用Python作为交互,因此是用户友好的

  • 自动机器学习:Angel3.0引入了3种超参数调节算法:网格搜索、随机搜索和贝叶斯优化

  • Angel模型服务:Angel提供一个跨平台的模型服务框架,支持Angel、PyTorch和Spark的模型,性能上与TensorFlow Serving相当

  • 支持Kubernetes:Angel3.0支持Kubernetes,从而可以在云上运行

(*本文为AI科技大本营整理文章,转载微信联系 1092722531)

精彩公开课

推荐阅读

  • 大四学生发明文言文编程语言,设计思路清奇

  • 芬兰开放“线上AI速成班”课程,全球网民均可免费观看

  • 超模脸、网红脸、萌娃脸...换头像不重样?我开源了5款人脸生成器

  • 解读 | 2019年10篇计算机视觉精选论文(上)

  • 高通:2 亿像素手机 2020 年诞生!

  • 英特尔首推异构编程神器 oneAPI,可让程序员少加班!

  • VS Code 成主宰、Vue 备受热捧!2019 前端开发趋势必读

  • 我在华为做外包的真实经历

  • 2019 区块链大事记 | Libra 横空出世,莱特币减产,美国放行 Bakkt……这一年太精彩!

  • 互联网诞生记: 浪成于微澜之间

  • 你点的每个“在看”,我都认真当成了AI

相关文章:

如何在JSP页面中获取当前系统时间转

出自:http://hi.baidu.com/itfuck_/item/803662469cdf7baa61d7b945 1: import java.util.*; int y,m,d,h,mm; Calendar c Calendar.getInstance(); y c.get(Calendar.YEAR); //年 m c.get(Calendar.MONTH) 1; //月 d c.get(Calendar.DAY_OF_MONTH); //日 …

如何用Python实现超级玛丽的界面和状态机?

作者 | marble_xu编辑 | 郭芮来源 | CSDN博客小时候的经典游戏,代码参考了github上的项目Mario-Level-1(https://github.com/justinmeister/Mario-Level-1),使用pygame来实现,从中学习到了横版过关游戏实现中的一些处理…

一种注册表沙箱的思路、实现——研究Reactos中注册表函数的实现4

今天为了KPI,搞了一天的PPT,搞得恶心想吐。最后还是回到这儿,这儿才是我的净土,可以写写我的研究。 这儿讲一些Reactos中一些明显的错误。(转载请指明出处) 在Reactos的RegQueryInfoKeyW中有段这样的实现 i…

Netscaler 认证,访问报http 5000 内部错误

在VDI项目中,Netscaler经常与AD不在同一网络,有时在icaprofile中写的SF或WI的FQDN,访问VDI,会报http 5000 内部错误;解决办法如下:1.NS无法解析Storefont或WI的主机名,需要修改icaprofile 中SF或…

解读 | 2019年10篇计算机视觉精选论文(中)

导读:2019 年转眼已经接近尾声,我们看到,这一年计算机视觉(CV)领域又诞生了大量出色的论文,提出了许多新颖的架构和方法,进一步提高了视觉系统的感知和生成能力。因此,我们精选了 20…

PE文件和COFF文件格式分析--概述

刚工作的时候,我听说某某大牛在做病毒分析时,只是用notepad打开病毒文件,就能大致猜到病毒的工作原理。当时我是佩服的很啊,同时我也在心中埋下了一个种子:我也得有这天。随着后来的工作进行,一些任务的和这…

2015第22周六Java反射、泛型、容器简介

Java的反射非常强大,传递class, 可以动态的生成该类、取得这个类的所有信息,包括里面的属性、方法以及构造函数等,甚至可以取得其父类或父接口里面的内容。 obj.getClass().getDeclaredMethods();//取得obj类中自己定义的方法&…

中服公司企业信息化的ERP系统选择

中服公司企业信息化的ERP系统选择一、 中服公司概况 1. 组织概况 中服公司创建于1950年9月,是国家120家企业集团试点单位之一,主要经营各类纺织原料、半成品、服装、针棉毛织品以及其他商品的进出口业务,同时通过合资、联营等方…

PE文件和COFF文件格式分析--MS-DOS 2.0兼容Exe文件段

MS 2.0节是PE文件格式中第一个“节”。其大致结构如下:(转载请指明来源于breaksoftware的csdn博客) 在VC\PlatformSDK\Include\WinNT.h文件中有对MS-DOS 2.0兼容EXE文件头的完整定义 typedef struct _IMAGE_DOS_HEADER { // DOS .EXE h…

时间可以是二维的?基于二维时间图的视频内容片段检测 | AAAI 2020

作者 | 彭厚文、傅建龙来源 | 微软研究院AI头条(ID: MSRAsia)编者按:当时间从一维走向二维,时序信息处理问题中一种全新的建模思路由此产生。根据这种新思路及其产生的二维时间图概念,微软亚洲研究院提出一种新的解决时…

《燃烧的岁月》

温含着优美的文句中,字里行间,透过一层薄薄的纸,牵挂起往事如烟,曾经的努力和成长,透过那以视频同时走过的路,默默无闻,牵挂着的是一句句唯美的文笔,留下情感的诗句文笔,…

PE文件和COFF文件格式分析——签名、COFF文件头和可选文件头1

本文将讨论PE文件中非常重要的一部分信息。(转载请指明来源于breakSoftware的CSDN博客) 首先说一下VC中对应的数据结构。“签名、COFF文件头和可选文件头”这三部分信息组合在一起是一个叫IMAGE_NT_HEADERS的结构体。 typedef struct _IMAGE_NT_HEADERS6…

遇到bug心寒了?用Enter键即可解决!

本文图片来自网络做程序员难不难?很难!做个程序员压力大不大?超级大!!测试bug时(图片来自网络)当找到Bug,开始修改的你……(图片来自网络)那怎么办&#xff1…

8月第1周安全回顾 0Day漏洞成企业最大威胁 应重视网络监听

文章同时发表在:[url]http://netsecurity.51cto.com/art/200708/52822.htm[/url]本周(0730至0805)安全方面值得关注的新闻集中在安全管理、安全威胁和安全产品方面。安全管理:0Day漏洞***成为企业信息安全的最大威胁新闻&#xff…

最大匹配、最小顶点覆盖、最大独立集、最小路径覆盖(转)

在讲述这两个算法之前,首先有几个概念需要明白: 二分图: 二分图又称二部图,是图论中的一种特殊模型。设G(V,E)是一个无向图,如果顶点V可以分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个…

一种在注入进程中使用WTL创建无焦点不在任务栏出现“吸附”窗口的方法和思路

最近一直在做沙箱项目,在项目快接近结尾的时候,我想给在我们沙箱中运行的程序界面打上一个标记——标识其在我们沙箱中运行的。我大致想法是:在被注入程序的顶层窗口上方显示一个“标题性”窗口,顶层窗口外框外显示一个“异形”的…

转:ASP.NET状态保存方法

ASP.NET状态保存分为客户端保存和服务器端保存两种:使用客户端选项存储页信息而不使用服务器资源的这些选项往往具有最低的安全性但具有最快 的服务器性能,因为对服务器资源的要求是适度的。但是,由于必须将信息发送到客户端来进行存储&#…

时至今日,NLP怎么还这么难!

作者 | 刘知远在微博和知乎上关注自然语言处理(NLP)技术的朋友,应该都对#NLP太难了#、#自然语言理解太难了#两个话题标签不陌生,其下汇集了各种不仅难煞计算机、甚至让人也发懵的费解句子或歧义引起的笑话。然而,这些例…

Quartz定时任务学习(四)调度器

org.quartz.Scheduler 类层次 作为一个 Quartz 用户,你要与实现了 org.quartz.Scheduler 接口的类交互。在你调用它的任何 API 之前,你需要知道如何创建一个 Scheduler 的实例。取而代之的是用了某个工厂方法来确保了构造出 Sheduler 实例并正确的得到初…

反汇编算法介绍和应用——线性扫描算法分析

做过逆向的朋友应该会很熟悉IDA和Windbg这类的软件。IDA的强项在于静态反汇编,Windbg的强项在于动态调试。往往将这两款软件结合使用会达到事半功倍的效果。可能经常玩这个的朋友会发现IDA反汇编的代码准确度要高于Windbg,深究其原因,是因为I…

项目计划书的内容

1.引言 1.1计划的目的 1.2项目的范围和目标 1.2.1范围描述 1.2.2主要功能 1.2.3性能 1.2.4管理和技术约束 2.项目估算 2.1使用的历史数据 2.2使用的评估技术 2.3工作量、成本、时间估算 3.风险管理战略 3.1风险识别 3.2有关风险的讨论 3.3风险管理计划 3.3.1风险计划 3.3.2风险…

不用写代码就能学用Pandas,适合新老程序员的神器Bamboolib

作者 | Rahul Agarwal译者 | 陆离编辑 | Jane出品 | AI科技大本营(ID:rgznai100)曾经,你有没有因为学习与使用 Pandas 进行数据检索等操作而感到厌烦过?实现同样的功能,Pandas 给用户提供了很多种方法&…

后海日记(8)

来深圳已经这么长时间了,深圳给我的感觉总体很好,天那么蓝,空气也很清新,总的来说很不错。 努力学习,早日成才。 加油!版权声明:本文为博主原创文章,未经博主允许不得转载。 转载于:…

反汇编算法介绍和应用——递归下降算法分析

上一篇博文我介绍了Windbg使用的线性扫描(linear sweep)反汇编算法。本文我将介绍IDA使用的递归下降(recursive descent)反汇编算法。(转载请指明来源于breaksoftware的csdn博客) 递归(recursiv…

如何快速get到AI工程师面试重点,这12道题必备!

作者 | JP Tech译者 | 刘畅编辑 | Jane出品 | AI科技大本营(ID:rgznai100)【导读】2020 年的三月春招要来了,现在想要 Get 一个算法工程师的实习或全职机会,已经不是一件易事了。如果现在着手复习,茫茫题海…

金邦黑金刚4G内存 VS Vista系统

我的机器配置是 Intel Core 2 4320CPU 金邦黑金刚2G DDR2 800*2 P965P-DS3主板 N 8600GTS 为什么在Vista中 只识别了3.5G 我升级了主版BIOS 主版最高支持8G,哎结果网上一看,才明白。。。现在的系统不是很好的支持4G的内存。…

程序员的量化交易之路(25)--Cointrader之MarketData市场数据实体(12)

转载需注明出处:http://blog.csdn.net/minimicall,http://cloudtrade.top/ 前面一节我们说到了远端事件。其中,市场数据就属于远端事件。市场数据有什么?我们通过代码来回答这个问题: package org.cryptocoinpartners.…

滴滴开源在2019:十大重点项目盘点,DoKit客户端研发助手首破1万Star

整理 | Jane出品 | AI科技大本营(ID;rgznai100)2018 年,科技企业纷纷布局开源战略后迎来的第一个“丰收年”。但对滴滴来说,2019 年才迎来其第一波开源小高潮。自2017年滴滴零星开源数个项目后,滴滴开源项目…

PE文件和COFF文件格式分析——签名、COFF文件头和可选文件头2

之前的博文中介绍了IMAGE_FILE_HEADER结构,现在来讨论比较复杂的“可选文件头”结构体。(转载请指明来自breaksoftware的csdn博客)先看下其声明 typedef struct _IMAGE_OPTIONAL_HEADER {//// Standard fields.//WORD Magic;...DWORD BaseOfData; // not e…

9月第1周安全回顾 IM安全威胁严重 企业增加无线安全投入

本文同时发表在:[url]http://netsecurity.51cto.com/art/200709/55180.htm[/url]本周(0827至0902)安全方面值得关注的新闻集中在安全产品、即时通信安全、无线安全和安全市场。安全产品:Intel vPro技术逐渐升温,关注指…