Bonjour, je suis nouveau dans Tensorflow et on m'a assigné une tâche pour changer le "Demo.py" dans un projet Github "tf-faster-rcnn" pour atteindre l'inferencing multi-GPU.
Et c'est généralement ce que je prévois de faire (supposons que le nombre d'images que j'ai est le même que le nombre de GPU, et que j'utiliserai une file d'attente qui n'est pas illustrée ici pour des raisons de simplicité) :
for id, gpu in gpu_dict:
with tf.device(gpu):
im_detect(images[id])
La fonction "im_detect" est fournie dans le fichier source (je peux l'appeler directement) et elle contient du code non-GPU (comme les conditions et la préparation des données).
def im_detect(sess, net, im):
blobs, im_scales = _get_blobs(im)
assert len(im_scales) == 1, "Only single-image batch implemented"
im_blob = blobs['data']
blobs['im_info'] = np.array([im_blob.shape[1], im_blob.shape[2], im_scales[0]], dtype=np.float32)
_, scores, bbox_pred, rois = net.test_image(sess, blobs['data'], blobs['im_info'])
boxes = rois[:, 1:5] / im_scales[0]
scores = np.reshape(scores, [scores.shape[0], -1])
bbox_pred = np.reshape(bbox_pred, [bbox_pred.shape[0], -1])
if cfg.TEST.BBOX_REG:
# Apply bounding-box regression deltas
box_deltas = bbox_pred
pred_boxes = bbox_transform_inv(boxes, box_deltas)
pred_boxes = _clip_boxes(pred_boxes, im.shape)
else:
# Simply repeat the boxes, once for each class
pred_boxes = np.tile(boxes, (1, scores.shape[1]))
return scores, pred_boxes
Comme je n'ai jamais joué avec les GPU et que je suis un débutant en Tensorflow, j'aimerais savoir s'il est possible d'assigner à chaque GPU un tel appel de fonction dans Tensorflow ?
----------------ceci est mis à jour------------------------
Je sais qu'il y a une option "alow_soft_placement" dans Tensorflow et que cela assigne ces codes non-GPU au CPU, mais quand il y a plusieurs GPU, comment un CPU peut-il gérer ces demandes de tous les GPU ? Dois-je créer un thread CPU pour chaque GPU ?