ดูบน TensorFlow.org | ทำงานใน Google Colab | ดูแหล่งที่มาบน GitHub | ดาวน์โหลดโน๊ตบุ๊ค |
คู่มือนี้สาธิตวิธีการโยกย้ายเวิร์กโฟลว์การฝึกอบรมแบบกระจายของผู้ปฏิบัติงานหลายคนจาก TensorFlow 1 เป็น TensorFlow 2
ในการดำเนินการฝึกอบรมผู้ปฏิบัติงานหลายคนด้วย CPU/GPU:
- ใน TensorFlow 1 คุณมักจะใช้
tf.estimator.train_and_evaluate
และtf.estimator.Estimator
API - ใน TensorFlow 2 ให้ใช้ Keras API เพื่อเขียนโมเดล ฟังก์ชันการสูญเสีย เครื่องมือเพิ่มประสิทธิภาพ และเมตริก จากนั้น แจกจ่ายการฝึกอบรมด้วย Keras
Model.fit
API หรือลูปการฝึกแบบกำหนดเอง (ด้วยtf.GradientTape
) ให้กับผู้ปฏิบัติงานหลายคนด้วยtf.distribute.experimental.ParameterServerStrategy
หรือtf.distribute.MultiWorkerMirroredStrategy
สำหรับรายละเอียดเพิ่มเติม โปรดดูบทช่วยสอนต่อไปนี้:
ติดตั้ง
เริ่มต้นด้วยการนำเข้าที่จำเป็นและชุดข้อมูลอย่างง่ายสำหรับการสาธิต:
# The notebook uses a dataset instance for `Model.fit` with
# `ParameterServerStrategy`, which depends on symbols in TF 2.7.
# Install a utility needed for this demonstration
!pip install portpicker
import tensorflow as tf
import tensorflow.compat.v1 as tf1
features = [[1., 1.5], [2., 2.5], [3., 3.5]]
labels = [[0.3], [0.5], [0.7]]
eval_features = [[4., 4.5], [5., 5.5], [6., 6.5]]
eval_labels = [[0.8], [0.9], [1.]]
คุณจะต้องใช้ตัวแปรสภาพแวดล้อมการกำหนดค่า 'TF_CONFIG'
สำหรับการฝึกอบรมบนเครื่องหลายเครื่องใน TensorFlow ใช้ 'TF_CONFIG'
เพื่อระบุที่อยู่ 'cluster'
และ 'task'
(เรียนรู้เพิ่มเติมในคู่มือ Distributed_training )
import json
import os
tf_config = {
'cluster': {
'chief': ['localhost:11111'],
'worker': ['localhost:12345', 'localhost:23456', 'localhost:21212'],
'ps': ['localhost:12121', 'localhost:13131'],
},
'task': {'type': 'chief', 'index': 0}
}
os.environ['TF_CONFIG'] = json.dumps(tf_config)
ใช้คำสั่ง del
เพื่อลบตัวแปร (แต่ในการฝึกอบรมผู้ปฏิบัติงานหลายคนในโลกแห่งความเป็นจริงใน TensorFlow 1 คุณจะไม่ต้องทำสิ่งนี้):
del os.environ['TF_CONFIG']
TensorFlow 1: Multi-worker กระจายการฝึกอบรมด้วย tf.estimator APIs
ข้อมูลโค้ดต่อไปนี้สาธิตเวิร์กโฟลว์ที่เป็นที่ยอมรับของการฝึกอบรมผู้ปฏิบัติงานหลายคนใน TF1: คุณจะใช้ tf.estimator.Estimator
, a tf.estimator.TrainSpec
, tf.estimator.EvalSpec
และ tf.estimator.train_and_evaluate
API เพื่อแจกจ่าย การฝึกอบรม:
def _input_fn():
return tf1.data.Dataset.from_tensor_slices((features, labels)).batch(1)
def _eval_input_fn():
return tf1.data.Dataset.from_tensor_slices(
(eval_features, eval_labels)).batch(1)
def _model_fn(features, labels, mode):
logits = tf1.layers.Dense(1)(features)
loss = tf1.losses.mean_squared_error(labels=labels, predictions=logits)
optimizer = tf1.train.AdagradOptimizer(0.05)
train_op = optimizer.minimize(loss, global_step=tf1.train.get_global_step())
return tf1.estimator.EstimatorSpec(mode, loss=loss, train_op=train_op)
estimator = tf1.estimator.Estimator(model_fn=_model_fn)
train_spec = tf1.estimator.TrainSpec(input_fn=_input_fn)
eval_spec = tf1.estimator.EvalSpec(input_fn=_eval_input_fn)
tf1.estimator.train_and_evaluate(estimator, train_spec, eval_spec)
INFO:tensorflow:Using default config. WARNING:tensorflow:Using temporary folder as model directory: /tmp/tmpvfb91q_5 INFO:tensorflow:Using config: {'_model_dir': '/tmp/tmpvfb91q_5', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': allow_soft_placement: true graph_options { rewrite_options { meta_optimizer_iterations: ONE } } , '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_train_distribute': None, '_device_fn': None, '_protocol': None, '_eval_distribute': None, '_experimental_distribute': None, '_experimental_max_worker_delay_secs': None, '_session_creation_timeout_secs': 7200, '_checkpoint_save_graph_def': True, '_service': None, '_cluster_spec': ClusterSpec({}), '_task_type': 'worker', '_task_id': 0, '_global_id_in_cluster': 0, '_master': '', '_evaluation_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1} INFO:tensorflow:Not using Distribute Coordinator. INFO:tensorflow:Running training and evaluation locally (non-distributed). INFO:tensorflow:Start train and evaluate loop. The evaluate will happen after every checkpoint. Checkpoint frequency is determined based on RunConfig arguments: save_checkpoints_steps None or save_checkpoints_secs 600. WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow/python/training/training_util.py:401: Variable.initialized_value (from tensorflow.python.ops.variables) is deprecated and will be removed in a future version. Instructions for updating: Use Variable.read_value. Variables in 2.X are initialized automatically both in eager and graph (inside tf.defun) contexts. INFO:tensorflow:Calling model_fn. WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow/python/training/adagrad.py:143: calling Constant.__init__ (from tensorflow.python.ops.init_ops) with dtype is deprecated and will be removed in a future version. Instructions for updating: Call initializer instance with the dtype argument instead of passing it to the constructor INFO:tensorflow:Done calling model_fn. INFO:tensorflow:Create CheckpointSaverHook. INFO:tensorflow:Graph was finalized. INFO:tensorflow:Running local_init_op. INFO:tensorflow:Done running local_init_op. INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 0... INFO:tensorflow:Saving checkpoints for 0 into /tmp/tmpvfb91q_5/model.ckpt. INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 0... INFO:tensorflow:loss = 0.038075272, step = 0 INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 3... INFO:tensorflow:Saving checkpoints for 3 into /tmp/tmpvfb91q_5/model.ckpt. INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 3... INFO:tensorflow:Calling model_fn. INFO:tensorflow:Done calling model_fn. INFO:tensorflow:Starting evaluation at 2021-11-13T02:31:06 INFO:tensorflow:Graph was finalized. INFO:tensorflow:Restoring parameters from /tmp/tmpvfb91q_5/model.ckpt-3 INFO:tensorflow:Running local_init_op. INFO:tensorflow:Done running local_init_op. INFO:tensorflow:Inference Time : 0.13630s INFO:tensorflow:Finished evaluation at 2021-11-13-02:31:06 INFO:tensorflow:Saving dict for global step 3: global_step = 3, loss = 0.005215075 INFO:tensorflow:Saving 'checkpoint_path' summary for global step 3: /tmp/tmpvfb91q_5/model.ckpt-3 INFO:tensorflow:Loss for final step: 0.061832994. ({'loss': 0.005215075, 'global_step': 3}, [])
TensorFlow 2: การฝึกอบรมพนักงานหลายคนพร้อมกลยุทธ์การจัดจำหน่าย
ใน TensorFlow 2 การฝึกอบรมแบบกระจายไปยังผู้ปฏิบัติงานหลายคนด้วย CPU, GPU และ TPU ทำได้ผ่าน tf.distribute.Strategy
s
ตัวอย่างต่อไปนี้สาธิตวิธีใช้กลยุทธ์สองแบบดังกล่าว: tf.distribute.experimental.ParameterServerStrategy
และ tf.distribute.MultiWorkerMirroredStrategy
ซึ่งทั้งสองวิธีนี้ได้รับการออกแบบมาสำหรับการฝึกอบรม CPU/GPU กับผู้ปฏิบัติงานหลายคน
ParameterServerStrategy
ใช้ผู้ ประสานงาน ( 'chief'
) ซึ่งทำให้เป็นมิตรกับสิ่งแวดล้อมในสมุดบันทึก Colab นี้มากขึ้น คุณจะใช้ยูทิลิตี้บางอย่างที่นี่เพื่อตั้งค่าองค์ประกอบสนับสนุนที่จำเป็นสำหรับประสบการณ์ที่รันได้ที่นี่: คุณจะสร้าง คลัสเตอร์ในกระบวนการ โดยที่เธรดใช้เพื่อจำลองเซิร์ฟเวอร์พารามิเตอร์ ( 'ps'
) และผู้ปฏิบัติงาน ( 'worker'
) . สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการฝึกเซิร์ฟเวอร์พารามิเตอร์ โปรดดูที่ การ ฝึกเซิร์ฟเวอร์พารามิเตอร์ด้วยบทช่วยสอน ParameterServerStrategy
ในตัวอย่างนี้ ขั้นแรกให้กำหนดตัวแปรสภาพแวดล้อม 'TF_CONFIG'
ด้วย tf.distribute.cluster_resolver.TFConfigClusterResolver
เพื่อจัดเตรียมข้อมูลคลัสเตอร์ หากคุณกำลังใช้ระบบการจัดการคลัสเตอร์สำหรับการฝึกอบรมแบบกระจาย ให้ตรวจสอบว่าระบบมี 'TF_CONFIG'
ให้คุณอยู่แล้วหรือไม่ ซึ่งในกรณีนี้ คุณไม่จำเป็นต้องตั้งค่าตัวแปรสภาพแวดล้อมนี้อย่างชัดเจน (เรียนรู้เพิ่มเติมในการ ตั้งค่าส่วนตัวแปรสภาพแวดล้อม 'TF_CONFIG'
ในคู่มือ การฝึกอบรมแบบกระจายด้วย TensorFlow )
# Find ports that are available for the `'chief'` (the coordinator),
# `'worker'`s, and `'ps'` (parameter servers).
import portpicker
chief_port = portpicker.pick_unused_port()
worker_ports = [portpicker.pick_unused_port() for _ in range(3)]
ps_ports = [portpicker.pick_unused_port() for _ in range(2)]
# Dump the cluster information to `'TF_CONFIG'`.
tf_config = {
'cluster': {
'chief': ["localhost:%s" % chief_port],
'worker': ["localhost:%s" % port for port in worker_ports],
'ps': ["localhost:%s" % port for port in ps_ports],
},
'task': {'type': 'chief', 'index': 0}
}
os.environ['TF_CONFIG'] = json.dumps(tf_config)
# Use a cluster resolver to bridge the information to the strategy created below.
cluster_resolver = tf.distribute.cluster_resolver.TFConfigClusterResolver()
จากนั้น สร้าง tf.distribute.Server
สำหรับผู้ปฏิบัติงานและเซิร์ฟเวอร์พารามิเตอร์ทีละรายการ:
# Workers need some inter_ops threads to work properly.
# This is only needed for this notebook to demo. Real servers
# should not need this.
worker_config = tf.compat.v1.ConfigProto()
worker_config.inter_op_parallelism_threads = 4
for i in range(3):
tf.distribute.Server(
cluster_resolver.cluster_spec(),
job_name="worker",
task_index=i,
config=worker_config)
for i in range(2):
tf.distribute.Server(
cluster_resolver.cluster_spec(),
job_name="ps",
task_index=i)
ในการฝึกอบรมแบบกระจายในโลกแห่งความเป็นจริง แทนที่จะเริ่ม tf.distribute.Server
ทั้งหมดบนผู้ประสานงาน คุณจะใช้หลายเครื่อง และแต่ละเครื่องที่กำหนดให้เป็น "worker"
และ "ps"
(เซิร์ฟเวอร์พารามิเตอร์) จะใช้แต่ละเครื่อง เรียกใช้ tf.distribute.Server
อ้างถึง Clusters ในส่วนโลกแห่งความจริง ในบทช่วยสอน การฝึกอบรมเซิร์ฟเวอร์ Parameter สำหรับรายละเอียดเพิ่มเติม
เมื่อพร้อมทุกอย่างแล้ว ให้สร้างวัตถุ ParameterServerStrategy
:
strategy = tf.distribute.experimental.ParameterServerStrategy(cluster_resolver)
INFO:tensorflow:`tf.distribute.experimental.ParameterServerStrategy` is initialized with cluster_spec: ClusterSpec({'chief': ['localhost:16660'], 'ps': ['localhost:15313', 'localhost:20369'], 'worker': ['localhost:21380', 'localhost:18699', 'localhost:19420']}) INFO:tensorflow:ParameterServerStrategyV2 is now connecting to cluster with cluster_spec: ClusterSpec({'chief': ['localhost:16660'], 'ps': ['localhost:15313', 'localhost:20369'], 'worker': ['localhost:21380', 'localhost:18699', 'localhost:19420']}) INFO:tensorflow:ParameterServerStrategy (CentralStorageStrategy if you are using a single machine) with compute_devices = ['/job:chief/replica:0/task:0/device:GPU:0'], variable_device = '/job:chief/replica:0/task:0/device:GPU:0' INFO:tensorflow:Number of GPUs on workers: 1
เมื่อคุณสร้างอ็อบเจ็กต์กลยุทธ์แล้ว ให้กำหนดโมเดล เครื่องมือเพิ่มประสิทธิภาพ และตัวแปรอื่นๆ และเรียก Keras Model.compile
ภายใน Strategy.scope
API เพื่อแจกจ่ายการฝึกอบรม (ดูเอกสาร API ของ Strategy.scope
สำหรับข้อมูลเพิ่มเติม)
หากคุณต้องการปรับแต่งการฝึกของคุณโดยกำหนดรูปแบบการส่งต่อและถอยหลัง ให้ดูที่หัวข้อ การฝึกด้วยลูปการฝึกแบบกำหนดเอง ในบทช่วยสอน การฝึกเซิร์ฟเวอร์พารามิเตอร์ สำหรับรายละเอียดเพิ่มเติม
dataset = tf.data.Dataset.from_tensor_slices(
(features, labels)).shuffle(10).repeat().batch(64)
eval_dataset = tf.data.Dataset.from_tensor_slices(
(eval_features, eval_labels)).repeat().batch(1)
with strategy.scope():
model = tf.keras.models.Sequential([tf.keras.layers.Dense(1)])
optimizer = tf.keras.optimizers.Adagrad(learning_rate=0.05)
model.compile(optimizer, "mse")
model.fit(dataset, epochs=5, steps_per_epoch=10)
Epoch 1/5 INFO:tensorflow:Reduce to /device:CPU:0 then broadcast to ('/replica:0/device:CPU:0',). INFO:tensorflow:Reduce to /device:CPU:0 then broadcast to ('/replica:0/device:CPU:0',). /tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow/python/data/ops/dataset_ops.py:453: UserWarning: To make it possible to preserve tf.data options across serialization boundaries, their implementation has moved to be part of the TensorFlow graph. As a consequence, the options value is in general no longer known at graph construction time. Invoking this method in graph mode retains the legacy behavior of the original implementation, but note that the returned value might not reflect the actual value of the options. warnings.warn("To make it possible to preserve tf.data options across " INFO:tensorflow:Reduce to /device:CPU:0 then broadcast to ('/replica:0/device:CPU:0',). INFO:tensorflow:Reduce to /device:CPU:0 then broadcast to ('/replica:0/device:CPU:0',). 2021-11-13 02:31:09.110074: W tensorflow/core/grappler/optimizers/data/auto_shard.cc:766] AUTO sharding policy will apply DATA sharding policy as it failed to apply FILE sharding policy because of the following reason: Found an unshardable source dataset: name: "TensorSliceDataset/_2" op: "TensorSliceDataset" input: "Placeholder/_0" input: "Placeholder/_1" attr { key: "Toutput_types" value { list { type: DT_FLOAT type: DT_FLOAT } } } attr { key: "_cardinality" value { i: 3 } } attr { key: "is_files" value { b: false } } attr { key: "metadata" value { s: "\n\024TensorSliceDataset:4" } } attr { key: "output_shapes" value { list { shape { dim { size: 2 } } shape { dim { size: 1 } } } } } 2021-11-13 02:31:09.115349: W tensorflow/core/grappler/optimizers/data/auto_shard.cc:766] AUTO sharding policy will apply DATA sharding policy as it failed to apply FILE sharding policy because of the following reason: Found an unshardable source dataset: name: "TensorSliceDataset/_2" op: "TensorSliceDataset" input: "Placeholder/_0" input: "Placeholder/_1" attr { key: "Toutput_types" value { list { type: DT_FLOAT type: DT_FLOAT } } } attr { key: "_cardinality" value { i: 3 } } attr { key: "is_files" value { b: false } } attr { key: "metadata" value { s: "\n\024TensorSliceDataset:4" } } attr { key: "output_shapes" value { list { shape { dim { size: 2 } } shape { dim { size: 1 } } } } } 2021-11-13 02:31:09.117963: W tensorflow/core/grappler/optimizers/data/auto_shard.cc:766] AUTO sharding policy will apply DATA sharding policy as it failed to apply FILE sharding policy because of the following reason: Found an unshardable source dataset: name: "TensorSliceDataset/_2" op: "TensorSliceDataset" input: "Placeholder/_0" input: "Placeholder/_1" attr { key: "Toutput_types" value { list { type: DT_FLOAT type: DT_FLOAT } } } attr { key: "_cardinality" value { i: 3 } } attr { key: "is_files" value { b: false } } attr { key: "metadata" value { s: "\n\024TensorSliceDataset:4" } } attr { key: "output_shapes" value { list { shape { dim { size: 2 } } shape { dim { size: 1 } } } } } 10/10 - 3s - loss: 7.4912 - 3s/epoch - 259ms/step Epoch 2/5 10/10 - 0s - loss: 3.3420 - 43ms/epoch - 4ms/step Epoch 3/5 10/10 - 0s - loss: 1.9022 - 44ms/epoch - 4ms/step Epoch 4/5 10/10 - 0s - loss: 1.1536 - 42ms/epoch - 4ms/step Epoch 5/5 10/10 - 0s - loss: 0.7208 - 43ms/epoch - 4ms/step <keras.callbacks.History at 0x7f45d83f3a50>
model.evaluate(eval_dataset, steps=10, return_dict=True)
1/10 [==>...........................] - ETA: 11s - loss: 2.4114 2021-11-13 02:31:10.757780: W tensorflow/core/grappler/optimizers/data/auto_shard.cc:766] AUTO sharding policy will apply DATA sharding policy as it failed to apply FILE sharding policy because of the following reason: Found an unshardable source dataset: name: "TensorSliceDataset/_2" op: "TensorSliceDataset" input: "Placeholder/_0" input: "Placeholder/_1" attr { key: "Toutput_types" value { list { type: DT_FLOAT type: DT_FLOAT } } } attr { key: "_cardinality" value { i: 3 } } attr { key: "is_files" value { b: false } } attr { key: "metadata" value { s: "\n\024TensorSliceDataset:8" } } attr { key: "output_shapes" value { list { shape { dim { size: 2 } } shape { dim { size: 1 } } } } } 2021-11-13 02:31:10.910985: W tensorflow/core/grappler/optimizers/data/auto_shard.cc:766] AUTO sharding policy will apply DATA sharding policy as it failed to apply FILE sharding policy because of the following reason: Found an unshardable source dataset: name: "TensorSliceDataset/_2" op: "TensorSliceDataset" input: "Placeholder/_0" input: "Placeholder/_1" attr { key: "Toutput_types" value { list { type: DT_FLOAT type: DT_FLOAT } } } attr { key: "_cardinality" value { i: 3 } } attr { key: "is_files" value { b: false } } attr { key: "metadata" value { s: "\n\024TensorSliceDataset:8" } } attr { key: "output_shapes" value { list { shape { dim { size: 2 } } shape { dim { size: 1 } } } } } 10/10 [==============================] - 2s 38ms/step - loss: 3.8431 2021-11-13 02:31:11.053772: W tensorflow/core/grappler/optimizers/data/auto_shard.cc:766] AUTO sharding policy will apply DATA sharding policy as it failed to apply FILE sharding policy because of the following reason: Found an unshardable source dataset: name: "TensorSliceDataset/_2" op: "TensorSliceDataset" input: "Placeholder/_0" input: "Placeholder/_1" attr { key: "Toutput_types" value { list { type: DT_FLOAT type: DT_FLOAT } } } attr { key: "_cardinality" value { i: 3 } } attr { key: "is_files" value { b: false } } attr { key: "metadata" value { s: "\n\024TensorSliceDataset:8" } } attr { key: "output_shapes" value { list { shape { dim { size: 2 } } shape { dim { size: 1 } } } } } {'loss': 3.843122}
พาร์ติชั่น (
tf.distribute.experimental.partitioners
)
ParameterServerStrategy
ใน TensorFlow 2 รองรับการแบ่งพาร์ติชันแบบแปรผันและเสนอตัวแบ่งพาร์ติชันแบบเดียวกับ TensorFlow 1 โดยมีชื่อที่สับสนน้อยกว่า: -tf.compat.v1.variable_axis_size_partitioner
->tf.distribute.experimental.partitioners.MaxSizePartitioner
: ตัวแบ่งพาร์ติชั่นที่ช่วยให้ชาร์ดมีขนาดสูงสุด) . -tf.compat.v1.min_max_variable_partitioner
->tf.distribute.experimental.partitioners.MinSizePartitioner
: ตัวแบ่งพาร์ติชั่นที่จัดสรรขนาดต่ำสุดต่อชาร์ด -tf.compat.v1.fixed_size_partitioner
->tf.distribute.experimental.partitioners.FixedShardsPartitioner
: ตัวแบ่งพาร์ติชันที่จัดสรรส่วนแบ่งข้อมูลจำนวนคงที่
หรือ คุณสามารถใช้วัตถุ MultiWorkerMirroredStrategy
:
# To clean up the `TF_CONFIG` used for `ParameterServerStrategy`.
del os.environ['TF_CONFIG']
strategy = tf.distribute.MultiWorkerMirroredStrategy()
WARNING:tensorflow:Collective ops is not configured at program startup. Some performance features may not be enabled. INFO:tensorflow:Single-worker MultiWorkerMirroredStrategy with local_devices = ('/device:GPU:0',), communication = CommunicationImplementation.AUTO
คุณสามารถแทนที่กลยุทธ์ที่ใช้ด้านบนด้วยวัตถุ MultiWorkerMirroredStrategy
เพื่อดำเนินการฝึกอบรมด้วยกลยุทธ์นี้
เช่นเดียวกับ tf.estimator
API เนื่องจาก MultiWorkerMirroredStrategy
เป็นกลยุทธ์แบบหลายลูกค้า จึงไม่มีวิธีง่าย ๆ ในการรันการฝึกอบรมแบบกระจายในสมุดบันทึก Colab นี้ ดังนั้น การแทนที่โค้ดด้านบนด้วยกลยุทธ์นี้จะจบลงด้วยการรันสิ่งต่าง ๆ ในเครื่อง การฝึกอบรมผู้ปฏิบัติงานหลายคน ด้วย Keras Model.fit / บทช่วยสอน การฝึกอบรมแบบกำหนดเองจะ สาธิตวิธีเรียกใช้การฝึกอบรมผู้ปฏิบัติงานหลายคนด้วยการตั้งค่าตัวแปร 'TF_CONFIG'
โดยมีพนักงานสองคนบนโฮสต์ในพื้นที่ใน Colab ในทางปฏิบัติ คุณจะต้องสร้างผู้ปฏิบัติงานหลายคนบนที่อยู่/พอร์ต IP ภายนอก และใช้ตัวแปร 'TF_CONFIG'
เพื่อระบุการกำหนดค่าคลัสเตอร์สำหรับผู้ปฏิบัติงานแต่ละคน
ขั้นตอนถัดไป
หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการฝึกอบรมแบบกระจายผู้ปฏิบัติงานหลายคนด้วย tf.distribute.experimental.ParameterServerStrategy
และ tf.distribute.MultiWorkerMirroredStrategy
ใน TensorFlow 2 ให้พิจารณาแหล่งข้อมูลต่อไปนี้:
- บทช่วยสอน: การฝึกเซิร์ฟเวอร์พารามิเตอร์ด้วย ParameterServerStrategy และ Keras Model.fit/a ลูปการฝึกแบบกำหนดเอง
- บทช่วยสอน: การฝึกอบรมผู้ปฏิบัติงานหลายคนด้วย MultiWorkerMirroredStrategy และ Keras Model.fit
- บทช่วยสอน: การฝึกอบรมหลายคนด้วย MultiWorkerMirroredStrategy และลูปการฝึกอบรมแบบกำหนดเอง
- คู่มือ: การฝึกอบรมแบบกระจายด้วย TensorFlow
- คำแนะนำ: เพิ่มประสิทธิภาพการทำงานของ TensorFlow GPU ด้วย TensorFlow Profiler
- คำแนะนำ: ใช้ GPU (ส่วน การใช้ GPU หลายตัว)