如何安装tensorflow-gpu,安装gpu版本的tensorflow需要什么操作

  如何安装tensorflow-gpu,安装gpu版本的tensorflow需要什么操作

  本文面向需要TensorFlow不同版本之间向后兼容(针对代码或数据)的用户,以及希望修改TensorFlow同时保持兼容性的开发人员。

  语义版本控制2.0

  TensorFlow的公共API遵循语义版本控制2.0 (semver)。TensorFlow的每个版本都采用MAJOR的形式。小补丁.比如tensor flow 1 . 2 . 3版本有主版本1,次版本2,补丁版本3。每个数字的变化有以下含义:

  主要:可能向后不兼容的更改。与以前主要版本兼容的代码和数据不一定与新版本兼容。但是,在某些情况下,现有的张量流图和检查点可以迁移到新版本;有关数据兼容性的更多信息,请参考计算图表和检查点的兼容性。

  次要:向后兼容特性,速度提升等。与以前的次要版本兼容且仅依赖于非实验性公共API的代码和数据将继续兼容。有关公开API的更多信息,请参见兼容性范围。

  补丁:向后兼容的错误修复。

  例如,与0.12.1版本相比,1.0.0版本引入了向后不兼容的更改。但是,1.1.1版向后兼容1.0.0版。

  兼容范围

  只有TensorFlow的公共API在次要版本和补丁版本上是向后兼容的。公共API包括以下项目:

  tensorflow模块及其子模块中所有记录的Python函数和类,以下符号除外:

  私有符号:任何函数、类等。谁的名字以_

  实验和tf.contrib符号,详见下文。

  请注意,示例/和工具/目录中的代码无法通过tensorflow Python模块访问,因此它们不在兼容性保证范围内。

  如果符号可以通过tensorflow Python模块或其子模块到达,但没有被记录,那么它就不属于公共API。

  兼容性API(在Python,tf.compat模块中)。在主要版本中,我们可能会发布实用程序和其他端点来帮助用户过渡到新的主要版本。这些API符号已被弃用且不受支持(即,我们不会添加任何功能,也不会修复除某些漏洞之外的错误),但它们在我们的兼容性保证范围内。

  不兼容范围

  TensorFlow的某些部分可能会以向后不兼容的方式随时更改。包括以下几个部分:

  实验API:为了开发方便,我们将一些明确标注为实验的API符号排除在兼容性保证范围之外。特别是,以下符号不在任何兼容性保证的范围内:

  TF。contrib模块或其子模块中的任何符号;

  名称包含实验性或实验性的任何符号(模块、函数、参数、属性、类或常数);或者

  完全限定名包含模块或类的任何符号(这本身是实验性的)。这种符号包括被称为实验的任何协议缓冲区的字段和子消息。

  其他语言:除Python和C之外的语言中的TensorFlow API,例如:

  复合运算的细节:Python中的很多公共函数会在计算图中展开成多个原语运算,这些细节会成为任何计算图的一部分(以GraphDef的形式保存到磁盘)。对于次要版本,这些细节可能会有所变化。特别是,在次要版本中,检查计算图表之间精确匹配的回归测试可能会中断,即使计算图表的行为应该保持不变并且现有检查点仍然有效。

  浮点细节:运算计算出的具体浮点值可能随时变化。用户应该只依赖近似的准确性和数值稳定性,而不是计算出的具体位数。次要版本和补丁版本中数值公式的变化应产生同等或更高的精度。需要注意的是,机器学习中特定公式准确度的提高,可能会导致整个系统准确度的降低。

  随机数:计算出的具体随机数可能随时变化。用户应该只依赖近似正确的分布和统计强度,而不是计算出的具体位数。详情请参考随机数生成指南。

  分布式Tensorflow中的版本偏差:不支持在群集中运行两个不同版本的TensorFlow。不能保证线路协议的向后兼容性。

  错误:如果当前实现明显中断(即,如果当前实现与文档冲突或由于错误导致已知且明确定义的预期行为没有正确实现),我们保留实施向后不兼容行为(即使不是API)更改的权利。例如,如果优化器声明实现一个已知的优化算法,但由于错误而与该算法不匹配,我们将修复优化器。修复可能会损坏依赖错误行为来实现收敛的代码。我们将在发行说明中注明这些变化。

  未使用的API:我们保留对未找到使用记录的API进行向后不兼容更改的权利(通过GitHub搜索查看TensorFlow使用情况)。在实施任何此类更改之前,我们将在announcement @邮件列表上宣布@更改意图,提供如何解决任何中断问题的说明(如果适用),并等待两周,以便给我们的社区一个分享反馈的机会。

  行为:我们将用非错误行为替换错误。例如,我们将改变函数来计算结果,而不是抛出一个错误,即使错误已经被记录。我们也保留更改错误信息文本的权利。此外,错误类型可能会改变,除非在文档中指定了特定错误条件的异常类型。

  SavedModel(计算图表和检查点)的兼容性

  SavedModel是TensorFlow程序中使用的首选序列化格式。SavedModel由两部分组成:一个或多个编码为GraphDefs的计算图和一个检查点。计算图说明了要运行的操作的数据流,检查点包含了计算图中变量的保存的张量值。

  许多TensorFlow用户创建保存的模型,并使用新版本的TensorFlow加载和执行这些保存的模型。根据semver的说法,用一个版本的TensorFlow编写的SavedModel可以用相同主版本的新版本TensorFlow加载和评估。

  我们还为受支持的SavedModel提供其他保证。我们将TensorFlow主版本N中创建的SavedModel称为仅使用非废弃的、非实验性的、不兼容的API作为版本N中支持的SavedModel,TensorFlow主版本N中支持的任何SavedModel都可以使用TensorFlow主版本N 1加载和执行。但是,可能不再提供构建或修改此类模型所需的功能,因此此保证仅适用于未修改的SavedModel。

  我们将尽可能地保持向后兼容性,以使序列化文件长期可用。

  GraphDef兼容性

  图形由GraphDef协议缓冲区序列化。为了对计算图表进行向后不兼容的更改,每个GraphDef都有一个独立于TensorFlow版本的版本号。例如,GraphDef版本17已经放弃了inv操作而支持倒数。语义是:

  TensorFlow每个版本都支持GraphDef版本的区间。修补程序版本之间的时间间隔是一致的,只有次要版本之间的时间间隔会增加。只有TensorFlow的主版本(并且只有SavedModel支持的版本)才会停止支持GraphDef版本。

  新创建的计算图表将被分配最新的GraphDef版本号。

  如果TensorFlow的给定版本支持GraphDef版本的计算图,其在加载和求值过程中的行为将与用于生成它的TensorFlow版本一致(除了上面提到的浮点数值细节和随机数),并且不受TensorFlow主要版本的影响。特别是,与TensorFlow的一个版本中的检查点文件兼容的GraphDef(如SavedModel)将在后续版本中与该检查点保持兼容,前提是支持GraphDef。

  请注意,这只适用于GraphDef(和SavedModel)中的序列化计算图:读取检查点的代码可能无法读取运行不同版本TensorFlow的相同代码生成的检查点。

  如果在(次要)版本中将GraphDef上限提高到X,那么下限提高到X至少需要6个月的时间,例如(我们这里使用一个假想的版本号):

  TensorFlow 1.2可能支持GraphDef版本4到7。

  TensorFlow 1.3可以增加GraphDef版本8,支持版本4到8。

  至少6个月后,TensorFlow 2.0.0可以停止支持版本4到7,只支持版本8。

  请注意,由于TensorFlow主要版本的发布周期通常相隔6个月以上,因此上面详述的受支持的SavedModel的保证将比6个月的GraphDef保证更稳定。

  最后,当我们停止支持GraphDef版本时,我们将尝试提供工具来自动将计算的图形转换为更新的支持GraphDef版本。

  扩展TensorFlow时计算图表和检查点的兼容性

  本节仅涉及对GraphDef格式进行不兼容的更改,如添加操作、删除操作或更改现有操作的功能。上半部分应该能满足大部分用户的需求。

  以及向后和部分向前兼容性。

  我们的版本管理方案有三个要求:

  向后兼容,支持加载旧版本TensorFlow创建的计算图表和检查点。

  向前兼容,支持计算图表或检查点的生产者先于消费者升级到TensorFlow新版本的情况。

  以不兼容的方式支持TensorFlow的演进,如移除操作、添加特征和移除特征。

  请注意,GraphDef版本机制独立于TensorFlow版本,GraphDef格式的后向不兼容更改仍然受到语义版本控制的限制。这意味着只能在TensorFlow的主要版本(如1.7到2.0)之间删除或更改功能。此外,在修补程序版本(例如,1.x.1到1.x.2)之间实施向前兼容。

  为了实现向后和向前兼容性,并了解何时强制进行格式更改,计算图表和检查点包含指示其生成时间的元数据。以下部分详细说明了TensorFlow实施和GraphDef版本发展的指南。

  基于的独立数据版本方案

  计算和检查点有不同的数据版本。这两种数据格式以不同的速度从TensorFlow发展而来。core/public/version.h中定义了两个版本控制系统.每次添加新版本时,都会在标题上添加一段描述,详细说明更改的内容和日期。

  数据生产者和用户

  我们将数据版本信息分为以下几类:

  生产者:生成数据的二进制文件。生产者有一个版本(生产者)及其兼容的最低消费者版本(min_consumer)。

  用户:使用数据的二进制文件。一个消费者有一个版本(消费者)及其兼容的最低生产者版本(最小生产者)。

  每个版本化数据都有一个VersionDef版本字段,记录生成数据的生产者、兼容min_consumer和禁止bad_consumers版本的列表。

  默认情况下,当生成器生成一些数据时,这些数据将继承生成器的producer和min_consumer版本。如果已知特定的用户版本包含错误并且必须避免,则可以设置bad_consumers。如果满足以下所有条件,用户可以接受一条数据:

  消费者=最小数据消费者

  数据生产者=最小_消费者生产者

  消费者不在bad_consumers数据范围内。

  由于生产者和消费者来自同一个TensorFlow代码库,core/public/version.h中包含的主数据版本将被视为生产者或消费者,这取决于上下文以及min_consumer和min_producer(生产者和消费者分别需要)。具体来说,

  对于GraphDef版本,我们有TF_GRAPH_DEF_VERSION、TF _ GRAPH _ DEF _ VERSION _ min _ consumer和TF _ GRAPH _ DEF _ VERSION _ min _ producer。

  对于检查点版本,我们有TF_CHECKPOINT_VERSION、TF _ check point _ VERSION _ min _ consumer和TF _ check point _ VERSION _ min _ producer。

  向现有操作添加具有默认值的新要素。

  如果操作集没有改变,请按照以下说明为您提供向前兼容性:

  如果需要向前兼容,请将strip_default_attrs设置为True,使用tf.saved _ model。SavedModelBuilder类的savedmodelbuilder . add _ meta _ graph _ and _ variables和TF . saved _ model . save modelbuilder . add _ meta _ graph方法或TF . estimator . estimator . export _ saved _ model导出模型。

  这不包括生成/导出模型时使用默认值的特征。这有助于确保当使用默认值时,导出的tf。MetaGraphDef不包含新的操作功能。

  通过这种控制,过期的用户(例如,在训练二进制文件后面提供二进制文件)可以继续加载模型,并防止模型供应的中断。

  演进的GraphDef版本

  本节将描述如何使用这种版本控制机制对GraphDef格式进行不同类型的更改。

  添加操作

  同时向消费者和生产者添加新的操作,并且不更改任何GraphDef版本。这种类型的更改将自动向后兼容,并且不会影响向前兼容计划,因为现有的producer脚本不会突然使用新功能。

  添加一个操作并切换现有的Python包装器来使用它。

  实现新的用户函数并增加GraphDef版本。

  如果您可以让包装器只在新函数以前不起作用时才使用它,那么现在就可以更新包装器了。

  更改Python包装器以使用新功能。请不要增加min_consumer,因为不使用此操作的模型不应被中断。

  移除或限制操作的功能。

  修复所有生成器脚本(不是TensorFlow本身),使它们不使用禁止的操作或函数。

  增加GraphDef的版本,并为新的和更高版本的GraphDef实现新的用户函数,以禁止删除的操作或函数。如果可能,让TensorFlow停止使用禁止的函数来生成GraphDefs。为此,请添加register _ op(.).已弃用(已弃用_ at _ version,消息)。

  等待主版本实现向后兼容。

  从(2)中增加GraphDef版本的min_producer,并完全删除该函数。

  操作功能改变

  添加一个名为SomethingV2或类似名称的类似新操作,然后添加新操作并切换现有Python包装器以使用它。为了确保向前兼容性,在更改Python包装器时,请使用compat.py中建议的检查。

  删除旧操作(由于向后兼容,此操作只能在重大版本更改时执行)。

  增加min_consumer排除使用旧操作的用户,重新添加旧操作作为SomethingV2的别名,然后切换现有Python包装器使用该操作。

  移除某物V2。

  禁止单个不安全的用户版本。

  增加所有新GraphDef的GraphDef版本,并将差版本添加到bad_consumers。如果可以,只针对包含特定操作或类似操作的GraphDef,将差版本添加到bad_consumers。

  如果现有用户有不良版本,请尽快删除。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: