Open holub008 opened 4 years ago
worth noting that (currently, at least) tensorflow needs to be version 2.2 or higher to run on python 3.8 (via pypi distribution)
After a bit of hacking around, I am not tensorflow-capable. Here are the things I tried:
tf.compat
functions not performing the same actions as their v1 counterparts.SavedModel
in v1, then reading into v2
import tensorflow as tf
import os
from ml.ner.ner_model import NERModel
from ml.ner.ner_config import Config
import data as rpd
config = Config()
m = NERModel(config)
m.build()
m.restore_session(os.path.join(rpd.DATA_ROOT, "pico_spans/model.weights/"))
inputs = {
"word_ids": m.word_ids,
"sequence_lengths": m.sequence_lengths,
"char_ids": m.char_ids,
"word_lengths": m.word_lengths,
"dropout": m.dropout,
}
outputs = {
"logits": m.logits,
"trans_params": m.trans_params,
}
tf.compat.v1.enable_resource_variables()
tf.compat.v1.saved_model.simple_save(m.sess, '/Users/kholub/robopico_savedmodel', inputs, outputs)
Then, when I m = tf.saved_model.load('/Users/kholub/robopico_savedmodel')
in v2, got the following:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/kholub/rp2/.venv/lib/python3.7/site-packages/tensorflow/python/saved_model/load.py", line 578, in load
return load_internal(export_dir, tags)
File "/Users/kholub/rp2/.venv/lib/python3.7/site-packages/tensorflow/python/saved_model/load.py", line 613, in load_internal
root = load_v1_in_v2.load(export_dir, tags)
File "/Users/kholub/rp2/.venv/lib/python3.7/site-packages/tensorflow/python/saved_model/load_v1_in_v2.py", line 263, in load
return loader.load(tags=tags)
File "/Users/kholub/rp2/.venv/lib/python3.7/site-packages/tensorflow/python/saved_model/load_v1_in_v2.py", line 246, in load
signature_functions = self._extract_signatures(wrapped, meta_graph_def)
File "/Users/kholub/rp2/.venv/lib/python3.7/site-packages/tensorflow/python/saved_model/load_v1_in_v2.py", line 158, in _extract_signatures
signature_fn = wrapped.prune(feeds=feeds, fetches=fetches)
File "/Users/kholub/rp2/.venv/lib/python3.7/site-packages/tensorflow/python/eager/wrap_function.py", line 358, in prune
pruned_graph, variable_holder=self._variable_holder)
File "/Users/kholub/rp2/.venv/lib/python3.7/site-packages/tensorflow/python/eager/wrap_function.py", line 230, in __init__
fn_graph, attrs=attrs, signature=signature)
File "/Users/kholub/rp2/.venv/lib/python3.7/site-packages/tensorflow/python/eager/function.py", line 1565, in __init__
func_graph, self._attrs, self._garbage_collector)
File "/Users/kholub/rp2/.venv/lib/python3.7/site-packages/tensorflow/python/eager/function.py", line 654, in __init__
self._func_graph.inputs, self._func_graph.outputs, attrs)
File "/Users/kholub/rp2/.venv/lib/python3.7/site-packages/tensorflow/python/eager/function.py", line 496, in __init__
compat.as_str(""))
tensorflow.python.framework.errors_impl.InvalidArgumentError: Output 0 of node 'transitions' has a reference type float_ref
Encountered while creating function '__inference_pruned_2293'
Without actually digging into tf, I can't do much more here. I will see about adding a dockerfile to at least make deploys with older version easier.
I've added a python 3.7 version requirement back. This is the latest version of python which tensorflow v1 is supported for. Note that continued support for both of these versions has an expiry (and may already be expired for tf).
Unclear if tensorflow will support v1 as python versions progress, but best not to find out.