Как действовать после квантования модели для развертывания - PullRequest
0 голосов
/ 11 июня 2019

Резюме

Недавно я работаю над моделью размером примерно 500 МБ, которая оказалась довольно вычислительно дорогой. Таким образом, я решил уменьшить размер путем обрезки и тому подобного, как упомянуто здесь . Но оказалось, что размер модели изменился лишь на несколько мегабайт.

Однако, когда я квантовал его, используя код здесь (из того же блога). Я смог уменьшить размер примерно до 1/4 исходного размера. Однако, когда я пытался использовать эту уменьшенную модель, я получаю сообщение об ошибке

InvalidArgumentError (see above for traceback): No OpKernel was registered to support Op 'Dequantize' used by node model/h0/mlp/c_proj/w (defined at app.py:25) with these attrs: [T=DT_QUINT8, mode="MIN_FIRST"]

Registered devices: [CPU]
Registered kernels:
<no registered kernels>
         [[node model/h0/mlp/c_proj/w (defined at app.py:25) ]]

Немного изучив, я пришел к выводу, что мне нужно добавить тензорные операции в граф и переучить его с нуля. Это тот случай? Я действительно предпочитаю не делать этого, потому что я потратил довольно много времени на обучение модели, поэтому, если кто-то может дать некоторое представление, пожалуйста, скажите мне! Я пытался исследовать, но я не мог найти людей с похожими проблемами (или, возможно, я скучал по ним) Код ниже.

Код

Код для оптимизации

def optimize_graph(model_dir, graph_filename, output_node, input_nodes):
 transforms = [
   "remove_nodes(op=Identity)",
   "merge_duplicate_nodes",
   "strip_unused_nodes",
   "quantize_nodes",
   "quantize_weights"
]
input_names = input_nodes
  output_names = [output_node]
  if graph_filename is None:
    graph_def = get_graph_def_from_saved_model(model_dir)
  else:
    graph_def = get_graph_def_from_file(os.path.join(model_dir, graph_filename))
  optimized_graph_def = TransformGraph(
      graph_def,
      input_names,
      output_names,
      transforms)
  tf.train.write_graph(optimized_graph_def,
                      logdir=model_dir,
                      as_text=False,
                      name='optimized_model.pb')
  print('Graph optimized!')

для оптимизации. Для развертывания я следил за блогом здесь . И в основном загрузил файл optimized_model.pb, используя флягу, например

app = Flask(__name__)
def load_graph(trained_model):   
    with tf.gfile.GFile(trained_model, "rb") as f:
        graph_def = tf.GraphDef()
        graph_def.ParseFromString(f.read())

    with tf.Graph().as_default() as graph:
        tf.import_graph_def(
            graph_def,
            input_map=None,
            return_elements=None,
            name=""
            )
    return graph
app.graph = load_graph('optimized_model.pb')

и вызов графа с получением тензоров

context = app.graph.get_tensor_by_name("Placeholder:0")
    temperature = app.graph.get_tensor_by_name("sample_sequence/while/ToFloat/x:0")
    output = app.graph.get_tensor_by_name("sample_sequence/while/Exit_3:0")

и вызов их через сеанс

feed_dict = {temperature: temperature_input, context: context_tokens}
result = sess.run(output, feed_dict=feed_dict)
sess.close()

но при этом возникает вышеупомянутая ошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...