支持 TPU 的估算器。
警告:不建議將估算器用於新代碼。估算器運行tf.compat.v1.Session-style 代碼更難正確編寫,並且可能出現意外行為,尤其是與 TF 2 代碼結合使用時。估算器確實屬於我們的兼容性保證,但不會收到除安全漏洞以外的任何修複。見遷移指南詳情。
繼承自:Estimator
用法
tf.compat.v1.estimator.tpu.TPUEstimator(
model_fn=None, model_dir=None, config=None, params=None, use_tpu=True,
train_batch_size=None, eval_batch_size=None, predict_batch_size=None,
batch_axis=None, eval_on_tpu=True, export_to_tpu=True, export_to_cpu=True,
warm_start_from=None, embedding_config_spec=None,
export_saved_model_api_version=ExportSavedModelApiVersion.V1
)
參數
-
model_fn
Estimator
要求的模型函數,它返回 EstimatorSpec 或 TPUEstimatorSpec。training_hooks
、'evaluation_hooks' 和prediction_hooks
不得在 model_fn 內捕獲任何 TPU 張量。 -
model_dir
保存模型參數、圖形等的目錄。這也可用於將檢查點從目錄加載到估計器中,以繼續訓練先前保存的模型。如果None
,如果設置,將使用config
中的 model_dir。如果兩者都設置,則它們必須相同。如果兩者都是None
,將使用臨時目錄。 -
config
tpu_config.RunConfig
配置對象。不能是None
。 -
params
超參數的可選dict
將被傳遞到input_fn
和model_fn
。鍵是參數的名稱,值是基本的 Python 類型。TPUEstimator
有保留鍵,包括'batch_size'。 -
use_tpu
一個布爾值,指示是否啟用 TPU 支持。目前,-TPU 訓練和評估尊重這一位,但 eval_on_tpu 可以覆蓋 eval 的執行。見下文。 -
train_batch_size
一個表示全局訓練批量大小的 int。當調用input_fn
和model_fn
時,TPUEstimator 將此全局批量大小轉換為 per-shard 批量大小,作為參數 ['batch_size']。如果use_tpu
是True
,則不能是None
。必須能被副本總數整除。 -
eval_batch_size
表示評估批量大小的 int。必須能被副本總數整除。 -
predict_batch_size
表示預測批量大小的 int。必須能被副本總數整除。 -
batch_axis
一個 int 值的 Python 元組,說明了 Estimatorinput_fn
生成的每個張量應如何在 TPU 計算分片中拆分。例如,如果您的 input_fn 生成(圖像、標簽),其中圖像張量為HWCN
格式,則您的分片尺寸將為 [3, 0],其中 3 對應於圖像張量的N
尺寸, 0 對應於分割標簽以匹配相應圖像的維度。如果提供 None 並且 per_host_input_for_training 為 True,則將根據主要維度對批次進行分片。如果 tpu_config.per_host_input_for_training 為 False 或PER_HOST_V2
,則忽略 batch_axis。 -
eval_on_tpu
如果為 False,則評估在 CPU 或 GPU 上運行。在這種情況下,當mode
作為EVAL
調用時,model_fn 必須返回EstimatorSpec
。 -
export_to_tpu
如果為 True,export_saved_model()
會導出一個元圖以在 TPU 上提供服務。請注意,不支持的導出模式(例如 EVAL)將被忽略。對於這些模式,隻會導出一個 CPU 模型。目前,export_to_tpu 僅支持 PREDICT。 -
export_to_cpu
如果為 True,export_saved_model()
會導出一個元圖以在 CPU 上提供服務。 -
warm_start_from
檢查點或 SavedModel 的可選字符串文件路徑以進行熱啟動,或tf.estimator.WarmStartSettings
對象以完全配置熱啟動。如果提供了字符串文件路徑而不是WarmStartSettings
,則所有變量都是熱啟動的,並且假定詞匯表和張量名稱未更改。 -
embedding_config_spec
可選的 EmbeddingConfigSpec 實例以支持使用 TPU 嵌入。 -
export_saved_model_api_version
整數:1 或 2。1 對應 V1,2 對應 V2。 (默認為 V1)。在 V1 中,export_saved_model()
為用戶添加了rewrite() 和TPUPartitionedCallOp();而在 v2 中,用戶應在其model_fn 中添加rewrite()、TPUPartitionedCallOp() 等。
拋出
-
ValueError
params
已保留 key 。
屬性
-
config
-
model_dir
-
model_fn
返回綁定到self.params
的model_fn
。 -
params
遷移到 TF2
警告:這個 API 是為 TensorFlow v1 設計的。繼續閱讀有關如何從該 API 遷移到本機 TensorFlow v2 等效項的詳細信息。見TensorFlow v1 到 TensorFlow v2 遷移指南有關如何遷移其餘代碼的說明。
TPU Estimator 管理自己的 TensorFlow 圖和會話,因此與 TF2 行為不兼容。我們建議您遷移到較新的 tf.distribute.TPUStrategy
。有關詳細信息,請參閱 TPU 指南。
TPUEstimator 還支持在 CPU 和 GPU 上進行訓練。您無需定義單獨的 tf.estimator.Estimator
。
TPUEstimator 處理在 TPU 設備上運行的許多細節,例如為每個內核複製輸入和模型,以及定期返回主機以運行掛鉤。
TPUEstimator 在調用 input_fn
和 model_fn
時將參數中的全局批量大小轉換為 per-shard 批量大小。用戶需要在構造函數中指定全局batch size,然後通過params['batch_size']
獲取input_fn
和model_fn
中每個shard的batch size。
對於訓練,
model_fn
得到 per-core 批量大小;input_fn
可能會得到 per-core 或 per-host 批量大小,具體取決於TPUConfig
中的per_host_input_for_training
(有關詳細信息,請參閱 TPUConfig 的文檔字符串)。對於評估和預測,
model_fn
獲取 per-core 批量大小,input_fn
獲取 per-host 批量大小。
評估
model_fn
應該返回 TPUEstimatorSpec
,它需要 eval_metrics
用於 TPU 評估。如果eval_on_tpu 為 False,評估將在 CPU 或 GPU 上執行;在這種情況下,以下關於 TPU 評估的討論不適用。
TPUEstimatorSpec.eval_metrics
是 metric_fn
和 tensors
的元組,其中 tensors
可以是 Tensor
的任何嵌套結構的列表(有關詳細信息,請參見 TPUEstimatorSpec
)。 metric_fn
接受 tensors
並將度量字符串名稱中的 dict 返回到調用度量函數的結果,即 (metric_tensor, update_op)
元組。
可以將use_tpu
設置為False
進行測試。所有訓練、評估和預測都將在 CPU 上執行。 input_fn
和 model_fn
將收到 train_batch_size
或 eval_batch_size
未修改為 params['batch_size']
。
當前限製:
TPU 評估僅適用於單個主機(一個 TPU 工作器),廣播模式除外。
用於評估的
input_fn
不應引發end-of-input 異常(OutOfRangeError
或StopIteration
)。並且所有評估步驟和所有批次都應該具有相同的大小。
示例(MNIST):
# The metric Fn which runs on CPU.
def metric_fn(labels, logits):
predictions = tf.argmax(logits, 1)
return {
'accuracy':tf.compat.v1.metrics.precision(
labels=labels, predictions=predictions),
}
# Your model Fn which runs on TPU (eval_metrics is list in this example)
def model_fn(features, labels, mode, config, params):
...
logits = ...
if mode = tf.estimator.ModeKeys.EVAL:
return tpu_estimator.TPUEstimatorSpec(
mode=mode,
loss=loss,
eval_metrics=(metric_fn, [labels, logits]))
# or specify the eval_metrics tensors as dict.
def model_fn(features, labels, mode, config, params):
...
final_layer_output = ...
if mode = tf.estimator.ModeKeys.EVAL:
return tpu_estimator.TPUEstimatorSpec(
mode=mode,
loss=loss,
eval_metrics=(metric_fn, {
'labels':labels,
'logits':final_layer_output,
}))
預測
TPU 上的預測是支持大批量推理的實驗性函數。它不是為latency-critical 係統設計的。此外,由於一些可用性問題,對於小數據集的預測,CPU .predict
,即使用 use_tpu=False
創建一個新的 TPUEstimator
實例可能更方便。
注意:與 TPU 訓練/評估相比,input_fn
用於預測應該引發 end-of-input 異常(OutOfRangeError
或者StopIteration
),作為停止信號TPUEstimator
.準確地說,由input_fn
產生一批數據。這predict()
API 一次處理一批。當到達數據源的末尾時,這些操作之一應引發end-of-input 異常。用戶通常不需要手動執行此操作。隻要數據集不會永遠重複,tf.data
API 將在生產最後一批後自動引發 end-of-input 異常。
注意:Estimator.predict 返回一個 Python 生成器。請消耗來自生成器的所有數據,以便 TPUEstimator 可以為用戶正確關閉 TPU 係統。
當前限製:
TPU 預測僅適用於單個主機(一個 TPU 工作器)。
input_fn
必須返回Dataset
實例而不是features
。事實上,.train() 和 .evaluate() 也支持 Dataset 作為返回值。
示例(MNIST):
height = 32
width = 32
total_examples = 100
def predict_input_fn(params):
batch_size = params['batch_size']
images = tf.random.uniform(
[total_examples, height, width, 3], minval=-1, maxval=1)
dataset = tf.data.Dataset.from_tensor_slices(images)
dataset = dataset.map(lambda images:{'image':images})
dataset = dataset.batch(batch_size)
return dataset
def model_fn(features, labels, params, mode):
# Generate predictions, called 'output', from features['image']
if mode == tf.estimator.ModeKeys.PREDICT:
return tf.contrib.tpu.TPUEstimatorSpec(
mode=mode,
predictions={
'predictions':output,
'is_padding':features['is_padding']
})
tpu_est = TPUEstimator(
model_fn=model_fn,
...,
predict_batch_size=16)
# Fully consume the generator so that TPUEstimator can shutdown the TPU
# system.
for item in tpu_est.predict(input_fn=input_fn):
# Filter out item if the `is_padding` is 1.
# Process the 'predictions'
導出
export_saved_model
導出 2 個元圖,一個帶有 saved_model.SERVING
,另一個帶有 saved_model.SERVING
和 saved_model.TPU
標簽。在服務時,這些標簽用於選擇要加載的適當元圖。
在 TPU 上運行圖之前,需要初始化 TPU 係統。如果使用 TensorFlow Serving model-server,則會自動完成。如果沒有,請使用 session.run(tpu.initialize_system())
。
API 有兩個版本:1 或 2。
在 V1 中,導出的 CPU 圖表原樣為model_fn
。導出的 TPU 圖將 tpu.rewrite()
和 TPUPartitionedCallOp
包在 model_fn
周圍,因此默認情況下 model_fn
在 TPU 上。要將操作放在 CPU 上,可以使用tpu.outside_compilation(host_call, logits)
。
例子:
def model_fn(features, labels, mode, config, params):
...
logits = ...
export_outputs = {
'logits':export_output_lib.PredictOutput(
{'logits':logits})
}
def host_call(logits):
class_ids = math_ops.argmax(logits)
classes = string_ops.as_string(class_ids)
export_outputs['classes'] =
export_output_lib.ClassificationOutput(classes=classes)
tpu.outside_compilation(host_call, logits)
...
在 V2 中,export_saved_model()
設置 params['use_tpu']
標誌以讓用戶知道代碼是否正在導出到 TPU(或沒有)。當 params['use_tpu']
為 True
時,用戶需要調用 tpu.rewrite()
, TPUPartitionedCallOp
和/或 batch_function()
。
提示:推薦使用 V2,因為它更靈活(例如:批處理等)。
相關用法
- Python tf.compat.v1.estimator.tpu.RunConfig用法及代碼示例
- Python tf.compat.v1.estimator.tpu.experimental.EmbeddingConfigSpec用法及代碼示例
- Python tf.compat.v1.estimator.DNNEstimator用法及代碼示例
- Python tf.compat.v1.estimator.experimental.KMeans用法及代碼示例
- Python tf.compat.v1.estimator.regressor_parse_example_spec用法及代碼示例
- Python tf.compat.v1.estimator.BaselineRegressor用法及代碼示例
- Python tf.compat.v1.estimator.inputs.numpy_input_fn用法及代碼示例
- Python tf.compat.v1.estimator.LinearRegressor用法及代碼示例
- Python tf.compat.v1.estimator.BaselineEstimator用法及代碼示例
- Python tf.compat.v1.estimator.BaselineClassifier用法及代碼示例
- Python tf.compat.v1.estimator.LinearClassifier用法及代碼示例
- Python tf.compat.v1.estimator.DNNLinearCombinedRegressor用法及代碼示例
- Python tf.compat.v1.estimator.DNNClassifier用法及代碼示例
- Python tf.compat.v1.estimator.DNNRegressor用法及代碼示例
- Python tf.compat.v1.estimator.DNNLinearCombinedEstimator用法及代碼示例
- Python tf.compat.v1.estimator.Estimator用法及代碼示例
- Python tf.compat.v1.estimator.LinearEstimator用法及代碼示例
- Python tf.compat.v1.estimator.classifier_parse_example_spec用法及代碼示例
- Python tf.compat.v1.estimator.DNNLinearCombinedClassifier用法及代碼示例
- Python tf.compat.v1.enable_eager_execution用法及代碼示例
注:本文由純淨天空篩選整理自tensorflow.org大神的英文原創作品 tf.compat.v1.estimator.tpu.TPUEstimator。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。