Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

TensorCraft

Build Status tensorcraft

The TensorCraft is a HTTP server that serves Keras models using TensorFlow runtime.

Currently TensorCraft is in beta, client and server API may change in the future versions.

This server solves such problems as:

  • Versioning of models.
  • Warehousing of models.
  • Enabling CI/CD for machine-learning models.

Installation

Installation Using Snap

This is the recommended way to install tensorcraft. Simply run the following command:

snap install tensorcraft --devmode --edge
snap start tensorcraft

Installation Using Docker

TensorCraft can be used as a Docker container. The major note on this approach is that tensorflow library that is installed into the Docker image is not compiled with support of AVX instructions or GPU.

docker pull netrack/tensorcraft:latest

In order to start the container, run the following command:

docker run -it -p 5678:5678/tcp netrack/tensorcraft

You can optinally specify volume to persist models between restarts of conatiner:

docker run -it -p 5678:5678/tcp -v tensorcraft:/var/run/tensorcraft netrack/tensorcraft

Installation Using PyPi

Install latest version from pypi repository.

pip install tensorcraft

Using TensorCraft

Keras Requirements

One of the possible ways of using tensorcraft is publising model snapshots to the server on each epoch end.

from keras.models import Sequential
from keras.layers import Dense, Activation
from tensorcraft.callbacks import ModelCheckpoint

model = keras.Sequential()
model.add(Dense(32, input_dim=784))
model.add(Activation('relu'))

model.compile(optimizer='sgd', loss='binary_crossentropy')
model.fit(x_train, y_train, callbacks=[ModelCheckpoint(verbose=1)], epochs=100)

Currently, tensorcraft supports only models in the TensorFlow Saved Model, therefore in order to publish Keras model, it must be saved as Saved Model at first.

Considering the following Keras model:

from tensorflow import keras
from tensorflow.keras import layers

inputs = keras.Input(shape=(8,), name='digits')
x = layers.Dense(4, activation='relu', name='dense_1')(inputs)
x = layers.Dense(4, activation='relu', name='dense_2')(x)
outputs = layers.Dense(2, activation='softmax', name='predictions')(x)

model = keras.Model(inputs=inputs, outputs=outputs, name='3_layer_mlp')

Save it using the export_saved_model function from the 2.0 TensorFlow API:

keras.experimental.export_saved_model(model, "3_layer_mlp")

Starting Server

To start server run server command:

sudo tensorcraft server

By default it starts listening unsecured port on localhost at http://localhost:5678.

Default configuration saves models to /var/lib/tensorcraft directory. Apart of that server requires access to /var/run directory in order to save pid file there.

Pushing New Model

Note, both client and server of tensorcraft application share the same code base. This implies the need to install a lot of server dependencies for a client. This will be improved in uncoming versions.

Once model saved in directory, pack it using tar utility. For instance, this is how it will look like for 3_layer_mlp model from the previous example:

tar -cf 3_layer_mlp.tar 3_layer_mlp

Now the model packed into the archive can be pushed to the server under the arbitrary tag:

tensorcraft push --name 3_layer_mlp --tag 0.0.1 3_layer_mlp.tar

Listing Available Models

You can list all available models on the server using the following command:

tensorcraft list

After the execution of list command you'll see to available models:

3_layer_mlp:0.0.1
3_layer_mlp:latest

This is the features of tensorcraft server, each published model name results in creation of model group. Each model group has it's latest tag, that references the latest pushed model.

Removing Model

Remove of the unused model can be performed in using remove command:

tensorcraft remove --name 3_layer_mlp --tag 0.0.1

Execution of remove commands results in the remove of the model itself, and the model group, when is is the last model in the group.

Using Model

In order to use the pushed model, tensorcraft exposes REST API. An example query to the server looks like this:

curl -X POST https://localhost:5678/models/3_layer_mlp/0.0.1/predict -d \
    '{"x": [[1.0, 2.1, 1.43, 4.43, 12.1, 3.2, 1.44, 2.3]]}'

License

The code and docs are released under the Apache 2.0 license.

Release files for tensorcraft 0.0.1b5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for tensorcraft 0.0.1b5
File Size Uploaded
tensorcraft-0.0.1b5.tar.gz 19.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for tensorcraft 0.0.1b5
File Interpreter ABI Platform
tensorcraft-0.0.1b5-py2.py3-none-any.whl Python 2, Python 3 none any Details

Total release size: 46.5 kB

Release files / tensorcraft-0.0.1b5.tar.gz

Download URL tensorcraft-0.0.1b5.tar.gz
Size 19.0 kB
Tags Source
SHA-256 checksum
How to use checksums
686c6512aec9b7c97ef46bbf895f86f51223de1a4a666aeb72ca0caa3271359e
BLAKE2b-256 checksum
How to use checksums
89252f2b4e98059946233652f6178ddf2b92b8c9fd3fb3e77c5c68895c33f26d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.6.5

Release files / tensorcraft-0.0.1b5-py2.py3-none-any.whl

Download URL tensorcraft-0.0.1b5-py2.py3-none-any.whl
Size 27.4 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
b84bdc820ae03b18667ae439f168139011ac996a3e92ce571b6f6f471899028f
BLAKE2b-256 checksum
How to use checksums
34572b0079f2b6a92555d4b15d3906983ed72d12aee7b3977c133c8d6a5d70b6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.6.5
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page