昨天,谷歌在 GitHub 上正式發布了 TensorFlow 的最新版本 1.5.0,並開源了其代碼。支持 CUDA 9 和 cuDNN 7 被認為是本次更新的最重要部分。機器之心對這次更新的重大改變以及主要功能和提升進行了編譯介紹,原文請見文中連結。
GitHub 地址:https://github.com/tensorflow/tensorflow/releases/tag/v1.5.0原始碼(zip):https://github.com/tensorflow/tensorflow/archive/v1.5.0.zip原始碼(tar.gz):https://github.com/tensorflow/tensorflow/archive/v1.5.0.tar.gz
1.5.0 正式版
重大更新
預構建的二進位文件現在是針對 CUDA 9 和 cuDNN 7 構建的。從版本 1.6 開始,我們的預構建二進位文件將使用 AVX 指令。這也許會破壞較舊 CPUs 上的 TF。
主要功能和提升
Eager execution:預覽版現在可用。TensorFlow Lite:dev 預覽版現在可用。支持 CUDA 9 和 cuDNN 7加速線性代數(XLA):
添加 complex64 支持到 XLA 編譯器。bfloat 支持現已添加到 XLA 架構。使 XLA 和 XLA 一起工作。通過決定性執行程序來生成 XLA 圖。
tf.contrib:
tf.contrib.distributions:
添加 tf.contrib.distributions.Autoregressive。使 tf.contrib.distributions QuadratureCompound 類支持批處理。從參數中推斷 tf.contrib.distributions.RelaxedOneHotCategorical dtype。通過 quadrature_grid_and_prob vs quadrature_degree 使 tf.contrib.distributions 正交族參數化。添加 auto_correlation 到 tf.contrib.distributions。
添加 tf.contrib.bayesflow.layers,一個概率(神經)層的集合。添加 tf.contrib.bayesflow.halton_sequence。添加 tf.contrib.data.make_saveable_from_iterator。添加 tf.contrib.data.shuffle_and_repeat。添加新的自定義轉換: tf.contrib.data.scan()。tf.contrib.distributions.bijectors:
添加 tf.contrib.distributions.bijectors.MaskedAutoregressiveFlow。添加 tf.contrib.distributions.bijectors.Permute。添加 tf.contrib.distributions.bijectors.Gumbel。添加 tf.contrib.distributions.bijectors.Reshape。支持 Reshape bijector 中的 shape 推理(即,包含-1 的 shape)。
添加 streaming_precision_recall_at_equal_thresholds,一種計算流式精確度和時間、空間複雜度為 O(num_thresholds + size of predictions) 的調用的方法。更改 RunConfig 默認行為,不設置隨機種子,使隨機行為在分布式工作器上獨立地隨機。我們期待這可以普遍提高訓練表現。依賴決定論的模型應明確設置一個隨機種子。通過 absl.flags 替換 tf.flags 的實現。在 fp16 GEMM 中為 CUBLAS_TENSOR_OP_MATH 添加支持。在 NVIDIA Tegra 計算卡上為 CUDA 添加支持。
Bug 修復與其他更新
文檔更新:
明確你只能在 64 位機上安裝 TensorFlow。添加一個短文件解釋 Estimators 如何保存檢查點。為由 tf2xla 橋支持的操作添加文檔。修改 SpaceToDepth 和 DepthToSpace 文件中的小的書寫錯誤。更新 mfcc_mel_filterbank.h 和 mfcc.h 中的文檔命令,說明輸入域是幅度譜的平方,權重是在線性幅度譜(輸入的 sqrt)上完成的。修復 tf.distributions.bijectors.Bijector 中的文檔字符串書寫錯誤。tf.assert_equal 不再引發 ValueError。它現在引發 InvalidArgumentError,如文檔所述。更新「開始」文件和 API 介紹。
谷歌雲存儲 (GCS):
為 GCS 客戶端添加用戶空間 DNS 緩存。為 GCS 文件系統自定義請求超時。優化 GCS 的文件系統緩存。
Bug 修復
修復之前出現的整數變量分區後變成錯誤的 shape 的 bug。修復 Adadelta 的 CPU 和 GPU 實現的準確度 bug。修復當導入到 scope 時,import_meta_graph 處理分區變量時出現的 bug。警告:在以非空 import_scope 變量應用 import_meta_graph 之後,這可能會破壞帶已保存分區變量圖的加載中的檢查點。修復離線 debugger 中阻止查看事件的 bug。添加 WorkerService.DeleteWorkerSession 方法到 gRPC 接口,修復內存洩漏。確保你的主伺服器和輔助伺服器在相同版本的 TensorFlow 上運行,以避免兼容性問題。修復 BlockLSTM cell 的 peephole 實現中的 bug。通過重寫 log_det_jacobian 的 dtype 以在 TransformedDistribution 中匹配 log_prob。確保 tf.distributions.Multinomial 不會在 log_prob 中下溢。在此之前,一個整數變量的所有分區會以非分區變量的 shape 進行初始化;經過修復之後,可以正確地初始化。
其它
添加必要的 shape 直到支持 bfloat16。添加一種運行 ops 的方式,在 MonitoredSession 中使用階躍函數。添加 DenseFlipout 概率層(probabilistic layer)。添加一種新的 flag:ignore_live_threads,可用於訓練過程。如果將其設為 True,在成功完成訓練之後,它會在拆除基礎建設時忽略仍在運行的線程,而不會返回 RuntimeError。重新標準化 DenseVariational,以作為其它概率層的更簡化模板。tf.data 現在在數據集元素中支持 tf.SparseTensor。可以進行遍歷 Tensor 的計算。允許 SparseSegmentReduction ops 擁有丟失的 segment IDs。修改自定義導出策略以包含多維稀疏浮點數分裂(multidimensional sparse floatsplits)。由於 GPU 和 cuDNNv6 的支持,Conv2D、Conv2DBackpropInput、Conv2DBackpropFilter 現在支持任意的擴張。Estimator 現在支持 Dataset:input_fn 可以返回 Dataset 而不是 Tensors。添加 Revblock,一個可逆殘差層的節省內存的實現。減少 BFCAllocator 的內部碎片。添加 cross_entropy 和 kl_divergence 到 tf.distributions.Distribution 中。添加 tf.nn.softmax_cross_entropy_with_logits_v2,以允許標籤的反向傳播。GPU 後端現在使用 ptxas 以編譯生成的 PTX。BufferAssignment 的協議緩存轉儲(protocol buffer dump)現在已確定。改變 embedding op 以利用 DynamicStitch 的並行版本。添加對稀疏多維特徵列(sparse multidimensional feature columns)的支持。加速僅有一個值的稀疏浮點數列(sparse float columns)的案例。允許稀疏浮點數分裂(sparse float splits)以支持多價特徵列(multivalent feature columns)。添加 quantile 到 tf.distributions.TransformedDistribution。在 GPU 上添加對 tf.depth_to_space 的 NCHW_VECT_C 支持。在 GPU 上添加對 tf.space_to_depth 的 NCHW_VECT_C 支持。
API 變化
將 SqueezeDims 屬性在 C++ API 中重命名為 Axis,作為 Squeeze op。Stream::BlockHostUntilDone 返回 Status,而不是布爾值。Minor refactor:將 stats 文件從 stochastic 移動到 common 並刪除 stochastic。