菜单

框架架构

相关源文件

本文档概述了实现d2l-zh代码库跨框架兼容性的技术框架架构。它解释了该系统如何通过统一的API抽象层支持多种深度学习框架(PyTorch、MXNet、TensorFlow 和 PaddlePaddle),从而使得相同的教学内容可以在不同框架下实现。

目的与范围

框架架构的目的是提供跨多个深度学习框架的统一编程接口,使读者能够使用自己偏好的框架学习深度学习概念,同时使用相同的教学内容。本文档侧重于实现跨框架兼容性的技术组件。有关生成文档的构建系统信息,请参阅 构建系统

高层架构概述

d2l-zh 仓库实现了一个与框架无关的 API,允许代码示例编写一次后即可在任何支持的深度学习框架中执行。这是通过一个具有特定框架实现的模块化包结构来实现的。

来源: d2l/__init__.py1-13 config.ini126-208

软件包结构

d2l包组织结构模块化,支持多种框架

__init__.py 文件作为入口点,并提供使用不同框架导入包的说明。每个特定于框架的文件都包含相同的 API 函数实现,但使用相应的框架的语法和结构。

来源: d2l/__init__.py1-13 d2l/torch.py1-10 d2l/mxnet.py1-10 d2l/tensorflow.py1-10 d2l/paddle.py1-38

函数映射系统

框架架构的关键组件之一是函数映射系统,它将与框架无关的 API 调用映射到特定于框架的实现。这在 config.ini 文件中通过几种类型的映射进行配置:

  1. 简单别名:从d2l函数到框架函数的直接映射
  2. 流畅别名:对象方法的映射
  3. 自定义别名:可能需要 lambda 函数或更详细转换的复杂映射

简单别名示例

d2l函数PyTorchMXNetTensorFlowPaddlePaddle
onestorch.onesnp.onestf.onespaddle.ones
zerostorch.zerosnp.zerostf.zerospaddle.zeros
tensortorch.tensornp.arraytf.constantpaddle.to_tensor
concattorch.catnp.concatenatetf.concatpaddle.concat

来源: config.ini126-145 config.ini152-170 config.ini172-190 config.ini192-208

特定框架实现

每个特定于框架的文件(torch.pymxnet.pytensorflow.pypaddle.py)都使用特定框架实现了相同的 API 函数。让我们看一下这些文件的结构。

每个特定于框架的文件都遵循相似的结构,实现相同的函数,但使用适合特定框架的语法。

来源: d2l/torch.py1-1000 d2l/mxnet.py1-1000 d2l/tensorflow.py1-1000 d2l/paddle.py1-1000

nn_Module 抽象

跨框架抽象的一个关键示例是 `nn_Module` 变量,它为不同框架的神经网络模块提供了通用基类。

这使得代码示例可以将 `d2l.nn_Module` 用作基类,该类将被映射到相应的特定于框架的类。

来源: d2l/torch.py13 d2l/mxnet.py12 d2l/tensorflow.py7 d2l/paddle.py38 config.ini166 config.ini184 config.ini204

配置系统

config.ini 中的配置系统控制着框架架构的各个方面。

  1. 项目设置:关于项目的基本元数据
  2. 库设置:特定于框架的配置
  3. 函数映射:d2l函数如何映射到框架函数
  4. 构建选项:如何生成文档和示例

这种配置驱动的方法允许构建一个灵活且易于维护的架构,可以轻松支持新框架或更新现有框架。

PyTorch 库配置示例

来源: config.ini1-22 config.ini126-145 config.ini152-170 config.ini172-190 config.ini192-208

框架选择机制

d2l 包使用 Python 的导入系统,允许用户选择他们偏好的框架。这通过导入语句来实现。

__init__.py 文件处理这些导入,并将它们定向到相应的特定框架实现。

来源: d2l/__init__.py1-13

依赖项和框架版本

框架架构依赖于每个深度学习框架的特定版本,以确保兼容性。

这些依赖项在 setup.pystatic/build.yml 文件中指定。

来源: setup.py4-11 static/build.yml1-17

结论

d2l-zh 存储库的框架架构通过结合模块化的包结构、函数映射系统和由配置驱动的设计,实现了跨多个深度学习框架的统一教育体验。它允许代码示例编写一次,即可在任何支持的框架下执行。该架构支持了教授深度学习概念的教育目标,无论读者选择哪个特定框架。

来源: d2l/__init__.py1-13 config.ini1-250 d2l/torch.py1-50 d2l/mxnet.py1-50 d2l/tensorflow.py1-50 d2l/paddle.py1-50