Таким образом, в руководстве TensorFlow по использованию графических процессоров есть часть об использовании нескольких графических процессоров «в режиме нескольких башен»:
...
for d in ['/device:GPU:2', '/device:GPU:3']:
with tf.device(d): # <---- manual device placement
...
Видя это, можно испытать желание использовать этот стиль для обучения нескольких графических процессоров в пользовательском Estimator
, чтобы указать модели, что он может эффективно распределяться между несколькими графическими процессорами.
Насколько мне известно, если ручное размещение устройства отсутствует, TensorFlow не имеет какой-либо формы оптимального сопоставления устройств (возможно, если у вас установлена версия для графического процессора и доступен графический процессор, используя его поверх центрального процессора). Так какой у тебя есть другой выбор?
В любом случае, вы продолжаете тренировку своего оценщика и экспортируете его в SavedModel
через estimator.export_savedmodel(...)
и хотите использовать этот SavedModel
позже ... возможно, на другой машине, на которой может быть не так много графических процессоров. как устройство, на котором обучалась модель (или, возможно, без графических процессоров)
поэтому при запуске
from tensorflow.contrib import predictor
predict_fn = predictor.from_saved_model(model_dir)
вы получите
Cannot assign a device for operation <OP-NAME>. Operation was
explicitly assigned to <DEVICE-NAME> but available devices are
[<AVAILABLE-DEVICE-0>,...]
старше С.О. Пост предполагает, что изменение размещения устройства было невозможно ... но, надеюсь, со временем все изменилось.
Таким образом, мой вопрос:
при загрузке SavedModel
можно ли изменить расположение устройства в соответствии с устройством, на котором оно загружено. Например. если я обучаю модель с 6 графическими процессорами, а друг хочет запустить ее дома со своим электронным графическим процессором, могут ли они установить '/device:GPU:1'
через '/device:GPU:5'
на '/device:GPU:0'
?
, если 1 не представляется возможным, есть ли для меня (безболезненный) способ в пользовательском Estimator
model_fn
указать, как в общем случае распределять график?
например.
with tf.device('available-gpu-3')
где available-gpu-3
- третий доступный графический процессор, если имеется три или более графических процессора, в противном случае второй или первый доступный графический процессор, а если графического процессора нет, то это процессор
Это имеет значение, потому что если есть общая машина, с которой обучается две модели, скажем, одна модель на '/device:GPU:0'
, то другая модель обучается явно на GPU 1 и 2 ... так что на другой машине с 2 GPU, GPU 2 будет недоступно ....