Skip to content

Instantly share code, notes, and snippets.

@stsievert
Last active August 17, 2018 15:15
Show Gist options
  • Save stsievert/7389acd62eb6f6d151286214cb51c392 to your computer and use it in GitHub Desktop.
Save stsievert/7389acd62eb6f6d151286214cb51c392 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'1.22.0+64.ge5792a34.dirty'"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from distributed import Client\n",
"from distributed.protocol import register_generic\n",
"import distributed\n",
"client = Client()\n",
"distributed.__version__"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"def setup(return_x_y=False):\n",
" from keras.datasets import mnist\n",
" from keras.models import Sequential\n",
" from keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPooling2D\n",
" from keras import backend as K\n",
" import keras\n",
" img_rows, img_cols = 28, 28\n",
" (x_train, y_train), (x_test, y_test) = mnist.load_data()\n",
"\n",
" x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 1)\n",
" x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, 1)\n",
" input_shape = (img_rows, img_cols, 1)\n",
"\n",
" x_train = x_train.astype('float32') / 255\n",
" x_test = x_test.astype('float32') / 255\n",
" y_train = keras.utils.to_categorical(y_train, 10)\n",
" y_test = keras.utils.to_categorical(y_test, 10)\n",
" if return_x_y:\n",
" return x_train, y_train\n",
"\n",
" model = Sequential()\n",
" model.add(Conv2D(32, kernel_size=(3, 3),\n",
" activation='relu',\n",
" input_shape=input_shape))\n",
" model.add(Conv2D(64, (3, 3), activation='relu'))\n",
" model.add(MaxPooling2D(pool_size=(2, 2)))\n",
" model.add(Dropout(0.25))\n",
" model.add(Flatten())\n",
" model.add(Dense(128, activation='relu'))\n",
" model.add(Dropout(0.5))\n",
" model.add(Dense(10, activation='softmax'))\n",
" return model, x_train, y_train"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Using TensorFlow backend.\n"
]
}
],
"source": [
"from distributed.protocol import serialize, deserialize\n",
"model, _, _ = setup()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[keras.engine.sequential.Sequential,\n",
" keras.engine.training.Model,\n",
" keras.engine.network.Network,\n",
" keras.engine.base_layer.Layer,\n",
" object]"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"type(model).mro()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"ename": "TypeError",
"evalue": "Could not serialize object of type Sequential\nTraceback (most recent call last):\n File \"/Users/ssievert/Developer/mrocklin/distributed/distributed/protocol/pickle.py\", line 38, in dumps\n result = pickle.dumps(x, protocol=pickle.HIGHEST_PROTOCOL)\nTypeError: can't pickle _thread.RLock objects\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File \"/Users/ssievert/Developer/mrocklin/distributed/distributed/protocol/serialize.py\", line 133, in serialize\n header, frames = dumps(x, context=context) if wants_context else dumps(x)\n File \"/Users/ssievert/Developer/mrocklin/distributed/distributed/protocol/serialize.py\", line 53, in pickle_dumps\n return {'serializer': 'pickle'}, [pickle.dumps(x)]\n File \"/Users/ssievert/Developer/mrocklin/distributed/distributed/protocol/pickle.py\", line 51, in dumps\n return cloudpickle.dumps(x, protocol=pickle.HIGHEST_PROTOCOL)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/site-packages/cloudpickle/cloudpickle.py\", line 895, in dumps\n cp.dump(obj)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/site-packages/cloudpickle/cloudpickle.py\", line 268, in dump\n return Pickler.dump(self, obj)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 409, in dump\n self.save(obj)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 521, in save\n self.save_reduce(obj=obj, *rv)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 634, in save_reduce\n save(state)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 476, in save\n f(self, obj) # Call unbound method with explicit self\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 821, in save_dict\n self._batch_setitems(obj.items())\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 847, in _batch_setitems\n save(v)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 476, in save\n f(self, obj) # Call unbound method with explicit self\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 781, in save_list\n self._batch_appends(obj)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 805, in _batch_appends\n save(x)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 521, in save\n self.save_reduce(obj=obj, *rv)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 634, in save_reduce\n save(state)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 476, in save\n f(self, obj) # Call unbound method with explicit self\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 821, in save_dict\n self._batch_setitems(obj.items())\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 847, in _batch_setitems\n save(v)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 476, in save\n f(self, obj) # Call unbound method with explicit self\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 781, in save_list\n self._batch_appends(obj)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 808, in _batch_appends\n save(tmp[0])\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 521, in save\n self.save_reduce(obj=obj, *rv)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 634, in save_reduce\n save(state)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 476, in save\n f(self, obj) # Call unbound method with explicit self\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 821, in save_dict\n self._batch_setitems(obj.items())\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 847, in _batch_setitems\n save(v)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 476, in save\n f(self, obj) # Call unbound method with explicit self\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 781, in save_list\n self._batch_appends(obj)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 808, in _batch_appends\n save(tmp[0])\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 521, in save\n self.save_reduce(obj=obj, *rv)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 634, in save_reduce\n save(state)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 476, in save\n f(self, obj) # Call unbound method with explicit self\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 821, in save_dict\n self._batch_setitems(obj.items())\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 847, in _batch_setitems\n save(v)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 521, in save\n self.save_reduce(obj=obj, *rv)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 634, in save_reduce\n save(state)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 476, in save\n f(self, obj) # Call unbound method with explicit self\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 821, in save_dict\n self._batch_setitems(obj.items())\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 847, in _batch_setitems\n save(v)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 521, in save\n self.save_reduce(obj=obj, *rv)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 634, in save_reduce\n save(state)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 476, in save\n f(self, obj) # Call unbound method with explicit self\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 821, in save_dict\n self._batch_setitems(obj.items())\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 847, in _batch_setitems\n save(v)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 496, in save\n rv = reduce(self.proto)\nTypeError: can't pickle _thread.RLock objects\n",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-5-87fa8af57c2d>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mheader\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mframes\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mserialize\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodel\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mmodel2\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdeserialize\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mheader\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mframes\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;32m/Users/ssievert/Developer/mrocklin/distributed/distributed/protocol/serialize.py\u001b[0m in \u001b[0;36mdeserialize\u001b[0;34m(header, frames, deserializers)\u001b[0m\n\u001b[1;32m 171\u001b[0m \"data with %s\" % (name, str(list(deserializers))))\n\u001b[1;32m 172\u001b[0m \u001b[0mdumps\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mloads\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mwants_context\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfamilies\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 173\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mloads\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mheader\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mframes\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 174\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 175\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/ssievert/Developer/mrocklin/distributed/distributed/protocol/serialize.py\u001b[0m in \u001b[0;36mserialization_error_loads\u001b[0;34m(header, frames)\u001b[0m\n\u001b[1;32m 68\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mserialization_error_loads\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mheader\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mframes\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 69\u001b[0m \u001b[0mmsg\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'\\n'\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mjoin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mframe\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdecode\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'utf8'\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mframe\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mframes\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 70\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmsg\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 71\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 72\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mTypeError\u001b[0m: Could not serialize object of type Sequential\nTraceback (most recent call last):\n File \"/Users/ssievert/Developer/mrocklin/distributed/distributed/protocol/pickle.py\", line 38, in dumps\n result = pickle.dumps(x, protocol=pickle.HIGHEST_PROTOCOL)\nTypeError: can't pickle _thread.RLock objects\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File \"/Users/ssievert/Developer/mrocklin/distributed/distributed/protocol/serialize.py\", line 133, in serialize\n header, frames = dumps(x, context=context) if wants_context else dumps(x)\n File \"/Users/ssievert/Developer/mrocklin/distributed/distributed/protocol/serialize.py\", line 53, in pickle_dumps\n return {'serializer': 'pickle'}, [pickle.dumps(x)]\n File \"/Users/ssievert/Developer/mrocklin/distributed/distributed/protocol/pickle.py\", line 51, in dumps\n return cloudpickle.dumps(x, protocol=pickle.HIGHEST_PROTOCOL)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/site-packages/cloudpickle/cloudpickle.py\", line 895, in dumps\n cp.dump(obj)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/site-packages/cloudpickle/cloudpickle.py\", line 268, in dump\n return Pickler.dump(self, obj)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 409, in dump\n self.save(obj)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 521, in save\n self.save_reduce(obj=obj, *rv)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 634, in save_reduce\n save(state)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 476, in save\n f(self, obj) # Call unbound method with explicit self\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 821, in save_dict\n self._batch_setitems(obj.items())\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 847, in _batch_setitems\n save(v)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 476, in save\n f(self, obj) # Call unbound method with explicit self\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 781, in save_list\n self._batch_appends(obj)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 805, in _batch_appends\n save(x)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 521, in save\n self.save_reduce(obj=obj, *rv)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 634, in save_reduce\n save(state)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 476, in save\n f(self, obj) # Call unbound method with explicit self\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 821, in save_dict\n self._batch_setitems(obj.items())\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 847, in _batch_setitems\n save(v)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 476, in save\n f(self, obj) # Call unbound method with explicit self\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 781, in save_list\n self._batch_appends(obj)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 808, in _batch_appends\n save(tmp[0])\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 521, in save\n self.save_reduce(obj=obj, *rv)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 634, in save_reduce\n save(state)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 476, in save\n f(self, obj) # Call unbound method with explicit self\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 821, in save_dict\n self._batch_setitems(obj.items())\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 847, in _batch_setitems\n save(v)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 476, in save\n f(self, obj) # Call unbound method with explicit self\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 781, in save_list\n self._batch_appends(obj)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 808, in _batch_appends\n save(tmp[0])\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 521, in save\n self.save_reduce(obj=obj, *rv)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 634, in save_reduce\n save(state)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 476, in save\n f(self, obj) # Call unbound method with explicit self\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 821, in save_dict\n self._batch_setitems(obj.items())\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 847, in _batch_setitems\n save(v)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 521, in save\n self.save_reduce(obj=obj, *rv)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 634, in save_reduce\n save(state)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 476, in save\n f(self, obj) # Call unbound method with explicit self\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 821, in save_dict\n self._batch_setitems(obj.items())\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 847, in _batch_setitems\n save(v)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 521, in save\n self.save_reduce(obj=obj, *rv)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 634, in save_reduce\n save(state)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 476, in save\n f(self, obj) # Call unbound method with explicit self\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 821, in save_dict\n self._batch_setitems(obj.items())\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 847, in _batch_setitems\n save(v)\n File \"/Users/ssievert/anaconda3/envs/dask-master/lib/python3.6/pickle.py\", line 496, in save\n rv = reduce(self.proto)\nTypeError: can't pickle _thread.RLock objects\n"
]
}
],
"source": [
"header, frames = serialize(model)\n",
"model2 = deserialize(header, frames)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
@stsievert
Copy link
Author

stsievert commented Aug 15, 2018

I think this gist is with modifying the decorator at https://github.com/dask/distributed/blob/4e36660e84b0eb20c1bc4127ba07a1876aefd5c5/distributed/protocol/keras.py#L8 to be

@dask_serialize.register(
    (
        keras.Model,
        keras.engine.training.Model,
        keras.models.Model,
        keras.model.Sequential

    )
)

and likewise for serialization.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment