文档指南
TVM 文档大致遵循 Divio 技术文档写作指南。之所以选择该指南,是因为它是一个“简单、全面且几乎普遍适用的方案,且已在广泛的领域和应用中证明”。
本文档描述了 TVM 文档的组织结构,以及如何撰写新文档。参阅 docs/README.md 来了解如何构建文档。
四种文档类型
入门教程
这是引导新用户加入项目的分步指南。入门教程只需要让用户学会使用软件即可,无需让他们知道底层原理。底层原理将在其他类型的文档中讲解。入门教程侧重于成功的初体验,它是将新手转变为新用户和开发人员的最重要文档。
完整的端到端教程——从安装 TVM 和支持 ML 软件,到创建和训练模型,再到编译到不同的架构——将让新用户以尽可能最有效的方式来使用 TVM。它让初学者知道那些必备知识,这与操作指南形成鲜明对比,操作指南旨在回答有一定经验的用户会提出的问题。
教程必须是可复现且可靠的,因为不成功的体验会让用户寻找其他解决方案。
操作指南
这是有关如何解决特定问题的分步指南。用户可以提出有意义的问题,然后文档给出答案。这类文档举例来说大概是这样的:“如何为 ARM 架构编译一个优化模型?”或“如何编译和优化 TensorFlow 模型?”这些文档应该足够开放,以便用户可以看到如何将其应用于新的用例。实用性比完整性更重要。标题应该能让用户看出这个操作指南解决的是什么问题。
教程与操作指南有何不同?教程面向刚接触 TVM 的开发者,重点是成功地将他们引导到软件和社区之中。而操作指南则侧重于,在对它有基本理解的前提下,完成特定任务。教程假定用户没有任何先备知识,帮助他快速上手。操作指南则假设用户具备最基本的知识,旨在指导他完成特定任务。
参考
参考文档描述了软件的配置和操作方式。 API、关键函数、命令和接口都是参考文档的候选对象。它是让用户构建自己的界面和程序的技术手册。它以信息为导向,注重列表和描述。可以假设读者已经掌握了软件的工作原理,并且正在寻找特定问题的特定答案。理想情况下,参考文档应该和代码库具有相同的结构,并且尽可能是自动生成的。
架构指南
架构指南是关于某个主题的解释和背景材料。这些文档帮助用户理解应用环境。为什么事情是这样的?设计决策是什么,考虑了哪些替代方案,描述现有系统的 RFC 是什么?它包括了学术论文和软件相关出版物的链接。在这些文档中,你可以探索到矛盾点在哪里,并帮助读者理解软件是如何、以及为什么按照现在的方式构建的。
它既不是操作指南,也不是如何完成任务的描述。相反,这些文档聚焦能够帮助用户理解项目的更高级的概念。通常,这些是由项目的架构师和开发人员编写的,有助于帮助用户和开发人员更深入地了解为什么软件是这样工作的,以及如何以与底层设计原则一致的方式,来对它做出贡献。
TVM 的特殊考量
TVM 社区有一些特殊考量,偏离了 Divio 的简单文档风格的原则。第一点就是用户和开发者社区之间经常存在重叠。很多项目用不同的系统记录开发者和用户的体验,但 TVM 将这两者放在一起,只在合适的时候做一些区分。因此,教程和操作指南将分为关注用户体验的“用户手册”和关注开发者体验的“开发手册”。
下一个考量是 TVM 社区中存在一些特殊主题,值得投入较多的关注。这些主题包括但不限于 microTVM 和 VTA。可以创建特殊的“主题指南”来索引现有材料,并提供相关超链接。
为方便新手,将制作一个特殊的“入门”部分,其中包含安装说明、为什么使用 TVM 以及其他初体验文档。
技术细节
我们将 Sphinx 作为主要文档。 Sphinx 支持 reStructuredText 和 markdown。我们鼓励使用功能更丰富的 reStructuredText。注意,Python 文档字符串和教程允许嵌入 reStructuredText 语法。
构建文档的指导请参阅 docs/README.md。
Python 参考文档
使用 numpydoc 格式来记录函数和类。以下代码段提供了一个文档字符串示例。记录所有公共函数,必要时提供支持功能的使用示例(如下所示)。
def myfunction(arg1, arg2, arg3=3):
"""简单描述我的函数。
Parameters
----------
arg1 : Type1
arg1 的描述
arg2 : Type2
arg2 的描述
arg3 : Type3, 可选
arg3 的描述
Returns
-------
rv1 : RType1
返回类型 1 的描述
Examples
--------
.. code:: python
# myfunction 的使用示例
x = myfunction(1, 2)
"""
return rv1
注意在文档的各个部分之间留空行。在上例中,Parameters
、Returns
和 Examples
前面必须有一个空行,以便正确构建文档。要往文档里添加新功能时,需要将 sphinx.autodoc 规则添加到 docs/reference/api/python 中)。可以参考该文件夹下的已有的文件来了解如何添加功能。