TensorFlow v1.10 + carregar o SavedModel com posicionamento de dispositivo diferente ou definir manualmente o posicionamento dinâmico do dispositivo?

Então, no guia do TensorFlow para usar GPUs existe uma parte sobre o uso de várias GPUs de uma forma "multi-torre":

...
for d in ['/device:GPU:2', '/device:GPU:3']:
  with tf.device(d): # <---- manual device placement
...

Vendo isso, pode-se tentar usar esse estilo para o treinamento múltiplo de GPU em umEstimator para indicar ao modelo que ele pode ser distribuído por várias GPUs com eficiênci

Pelo que sei, se o posicionamento manual do dispositivo estiver ausente, o TensorFlow não possui uma forma de mapeamento ideal do dispositivo (talvez exista se você tiver a versão da GPU instalada e uma GPU estiver disponível, usando-a na CPU). Então, que outra opção você tem?

e qualquer forma, você continua treinando seu estimador e o exporta para umSavedModel através daestimator.export_savedmodel(...) e deseja usar esteSavedModel depois ... talvez em uma máquina diferente, uma que possa não ter tantas GPUs quanto o dispositivo em que o modelo foi treinado (ou talvez nenhuma GPU)

so quando você executa

from tensorflow.contrib import predictor
predict_fn = predictor.from_saved_model(model_dir)

you get

Cannot assign a device for operation <OP-NAME>. Operation was 
explicitly assigned to <DEVICE-NAME> but available devices are 
[<AVAILABLE-DEVICE-0>,...]

An oldENTÃO. Posta sugere que não foi possível alterar o posicionamento do dispositivo ... mas, com o tempo, as coisas mudara

A minha pergunta é:

ao carregar umSavedModel posso alterar a localização do dispositivo para que seja apropriado para o dispositivo em que está carregado? Por exemplo. se eu treinar um modelo com 6 GPUs e um amigo quiser executá-lo em casa com a e-GPU, eles podem definir'/device:GPU:1' através'/device:GPU:5' para'/device:GPU:0'?

E se1 não é possível, existe uma maneira (indolor) para mim, no costumeEstimator 'smodel_fn, para especificar como distribuir genericamente um gráfic

por exemplo

with tf.device('available-gpu-3')

Ondeavailable-gpu-3 é a terceira GPU disponível se houver três ou mais GPUs, caso contrário, a segunda ou a primeira GPU disponível e, se nenhuma GPU, for CPU

Isso é importante, porque se houver uma máquina compartilhada treinando dois modelos, digamos um modelo em'/device:GPU:0' então o outro modelo é treinado explicitamente nas GPUs 1 e 2 ... então, em outra máquina com 2 GPUs, a GPU 2 não estará disponível ....

questionAnswers(1)

yourAnswerToTheQuestion