源码先锋

源码先锋

Keras 3.0一统江湖!更新整合PyTorch、JAX,全球250万开发者在用

admin 51 2

刚刚,正式发布!

经过5个月的公开Beta测试,深度学习框架终于面向所有开发者推出。

全新的Keras3对Keras代码库进行了完全重写,可以在JAX、TensorFlow和PyTorch上运行,能够解锁全新大模型训练和部署的新功能。

「Keras之父」FrançoisChollet在最新版本发布之前,也是做了多次预告。目前,有250+万的开发者都在使用Keras框架。

开发者甚至可以将Keras用作低级跨框架语言,以开发自定义组件,例如层、模型或指标。

只需一个代码库,这些组件便可用在JAX、TensorFlow、PyTorch中的原生工作流。

再次让Keras成为多后端

最初的Keras可以在Theano、TensorFlow、CNTK,甚至MXNet上运行。

2018年,由于Theano和CNTK已停止开发,TensorFlow似乎成为了唯一可行的选择,于是,Keras将开发重点放在了TensorFlow上。

而到了今年,情况发生了变化。

根据2023年StackOverflow开发者调查,和2022年Kaggle机器学习和数据科学调查等显示,

TensorFlow拥有55%到60%的市场份额,是ML在生产领域的首选。

而PyTorch拥有40%到45%的市场份额,是ML在研究领域的首选。

与此同时,JAX虽然市场份额要小得多,但已被GoogleDeepMind、Midjourney、Cohere等生成式AI领域的顶级参与者所接受。

于是,开发团队对Keras代码库进行了完全重写,新诞生的基于模块化后端架构进行了重构,有能力在任意框架上运行。

同时新的Keras也保证了兼容性,比如在使用TensorFlow后端时,你可以简单地使用importkeras_coreaskeras来替换fromtensorflowimportkeras

——现有的代码将毫无问题地运行,而且由于XLA编译,通常性能略有提高。

小编在这里给大家举一个例子,说明如何从TensorFlow的代码转换成Keras的形式。

TensorFlowCoreImplementation

Kerasimplementation

相比之下,我们可以清楚地看到Keras带来的简洁性。

TensorFlow可以对每个变量进行更精细的控制,而Keras提供了易用性和快速原型设计的能力。

对于一些开发者来说,Keras省去了开发中的一些麻烦,降低了编程复杂性,节省了时间成本。

新特性

Keras最大的优势在于,通过出色的UX、API设计和可调试性可实现高速开发。

而且,它还是一个经过实战考验的框架,并为世界上一些最复杂、最大规模的ML系统提供支持,比如Waymo自动驾驶车、YouTube推荐引擎。

那么,使用新的多后端Keras3还有哪些额外的优势呢?

-始终为模型获得最佳性能。

在基准测试中,发现JAX通常在GPU、TPU和CPU上提供最佳的训练和推理性能,但结果因模型而异,因为非XLATensorFlow在GPU上偶尔会更快。

它能够动态选择为模型提供最佳性能的后端,而无需对代码进行任何更改,这意味着开发者可以以最高效率进行训练和服务。

-为模型解锁生态系统可选性。

任何Keras3模型都可以作为PyTorch模块实例化,可以作为TensorFlowSavedModel导出,也可以作为无状态JAX函数实例化。

这意味着开发者可以将Keras3模型与PyTorch生态系统包,全系列TensorFlow部署和生产工具(如TF-Serving,和TFLite)以及JAX大规模TPU训练基础架构一起使用。使用Keras3API编写一个,即可访问ML世界提供的一切。

-利用JAX的大规模模型并行性和数据并行性。

Keras3包含一个全新的分布式API,即命名空间,目前已在JAX后端实现(即将在TensorFlow和PyTorch后端实现)。

通过它,可以在任意模型尺度和聚类尺度上轻松实现模型并行、数据并行以及两者的组合。由于它能将模型定义、训练逻辑和分片配置相互分离,因此使分发工作流易于开发和维护。

-最大限度地扩大开源模型版本的覆盖面。

想要发布预训练模型?想让尽可能多的人能够使用它吗?如果你在纯TensorFlow或PyTorch中实现它,它将被大约一半的社区使用。

如果你在Keras3中实现了它,那么任何人都可以立即使用它,无论他们选择的框架是什么(即使他们自己不是Keras用户)。在不增加开发成本的情况下实现2倍的影响。

Keras3/fit()/evaluate()predict()例程与对象、PyTorchDataLoader对象、NumPy数组、Pandas数据帧兼容——无论你使用什么后端。你可以在PyTorchDataLoader上训练Keras3+TensorFlow模型,也可以在上训练Keras3+PyTorch模型。

预训练模型

现在,开发者即可开始使用Keras3的各种预训练模型。

所有40个Keras应用程序模型(命名空间)在所有后端都可用。KerasCV和KerasNLP中的大量预训练模型也适用于所有后端。

其中包括:

跨框架开发

Keras3能够让开发者创建在任何框架中都相同的组件(如任意自定义层或预训练模型),它允许访问适用于所有后端的命名空间。

Keras3包含NumPyAPI的完整实现,——不是「类似NumPy」,而是真正意义上的NumPyAPI,具有相同的函数和参数。比如、、、等函数。

Keras3还包含NumPy中没有的,一组特定于神经网络的函数,例如,_crossentropy,等。

另外,只要开发者使用的运算,全部来自于,那么自定义的层、损失函数、优化器就可以跨越JAX、PyTorch和TensorFlow,使用相同的代码。

开发者只需要维护一个组件实现,就可以在所有框架中使用它。

Keras架构

下面,我们来稍稍理解一下Keras的机制和架构。

在Keras中,Sequential和Model类是模型构建的核心,为组装层和定义计算图提供了一个框架。

Sequential是层的线性堆栈。它是Model的子类,专为简单情况而设计,模型由具有一个输入和一个输出的线性层堆栈组成。

Sequential类有以下一些主要特点:

Model类与函数式API一起使用,提供了比Sequential更大的灵活性。它专为更复杂的架构而设计,包括具有多个输入或输出、共享层和非线性拓扑的模型。

Model类的主要特点有:

Model类和Sequential类都依赖于以下机制:

从本质上讲,Keras中的Model和Sequential类抽象掉了定义和管理计算图所涉及的大部分复杂性,使用户能够专注于神经网络的架构,而不是底层的计算机制。

Keras自动处理各层如何相互连接、数据如何在网络中流动以及如何进行训练和推理操作等错综复杂的细节。

虽然小编也不知道为什么要炸TensorFlow。

还有网友表示刚好可以用上:

另一位网友发来贺电,「在PyTorch之上使用Keras是一项了不起的成就!」

当然也有网友唱反调,「我想知道为什么有人会使用Keras+Torch而不是普通的Torch,因为Torch与Tensorflow不同,它有一组很好的API」。

此时Tensorflow的内心:啊对对对,你们说得都对。

参考资料: