- TensorFlow के लिए:
TensorFlow GPUs का उपयोग करना
यहां बताया गया है कि कैसे उपयोग किया जाता है पर नमूना कोड है, इसलिए प्रत्येक कार्य के लिए उपकरणों / डिवाइस के साथ सूची निर्दिष्ट की गई है:
# Creates a graph.
c = []
for d in ['/gpu:2', '/gpu:3']:
with tf.device(d):
a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3])
b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2])
c.append(tf.matmul(a, b))
with tf.device('/cpu:0'):
sum = tf.add_n(c)
# Creates a session with log_device_placement set to True.
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
# Runs the op.
print(sess.run(sum))
tf CPU के लिए डिफ़ॉल्ट रूप से कम्प्यूटेशन के लिए उपयोग करेगा भले ही वह CPU के लिए हो (यदि वर्तमान में समर्थित GPU है)। तो आप बस एक लूप के लिए कर सकते हैं: "डी के लिए ['/ gpu: 1', '/ gpu: 2', '/ gpu: 3' ... '/ gpu: 8',]:" और में "tf.device (d)" में आपके सभी उदाहरण GPU संसाधन शामिल होने चाहिए। तो tf.device () वास्तव में इस्तेमाल किया जाएगा।
मल्टीपल जीपीयू को स्केलिंग केरस मॉडल ट्रेनिंग
- Keras
Args.num_gpus की तुलना में Mxnet का उपयोग करके Keras के लिए , जहाँ num_gpus आपके GPU GPU की सूची है।
def backend_agnostic_compile(model, loss, optimizer, metrics, args):
if keras.backend._backend == 'mxnet':
gpu_list = ["gpu(%d)" % i for i in range(args.num_gpus)]
model.compile(loss=loss,
optimizer=optimizer,
metrics=metrics,
context = gpu_list)
else:
if args.num_gpus > 1:
print("Warning: num_gpus > 1 but not using MxNet backend")
model.compile(loss=loss,
optimizer=optimizer,
metrics=metrics)
- horovod.tensorflow
हाल ही में खुले उबेर होरोवोड के सभी शीर्ष पर और मुझे लगता है कि यह बहुत अच्छा है:
horovod
import tensorflow as tf
import horovod.tensorflow as hvd
# Initialize Horovod
hvd.init()
# Pin GPU to be used to process local rank (one GPU per process)
config = tf.ConfigProto()
config.gpu_options.visible_device_list = str(hvd.local_rank())
# Build model…
loss = …
opt = tf.train.AdagradOptimizer(0.01)
# Add Horovod Distributed Optimizer
opt = hvd.DistributedOptimizer(opt)
# Add hook to broadcast variables from rank 0 to all other processes during
# initialization.
hooks = [hvd.BroadcastGlobalVariablesHook(0)]
# Make training operation
train_op = opt.minimize(loss)
# The MonitoredTrainingSession takes care of session initialization,
# restoring from a checkpoint, saving to a checkpoint, and closing when done
# or an error occurs.
with tf.train.MonitoredTrainingSession(checkpoint_dir=“/tmp/train_logs”,
config=config,
hooks=hooks) as mon_sess:
while not mon_sess.should_stop():
# Perform synchronous training.
mon_sess.run(train_op)