PredictionIO Docker provides Docker image for use in development and production environment.
You can choose storages for event/meta/model to select docker-compose.yml.
docker-compose -f docker-compose.yml -f ... up
Supported storages are as below:
| Type | Storage |
|---|---|
| Event | Postgresql, MySQL, Elasticsearch |
| Meta | Postgresql, MySQL, Elasticsearch |
| Model | Postgresql, MySQL, LocalFS |
If you run PredictionIO with Postgresql, run as below:
docker-compose -f docker-compose.yml \ -f pgsql/docker-compose.base.yml \ -f pgsql/docker-compose.meta.yml \ -f pgsql/docker-compose.event.yml \ -f pgsql/docker-compose.model.yml \ up
To use localfs as model storage, change as below:
docker-compose -f docker-compose.yml \ -f pgsql/docker-compose.base.yml \ -f pgsql/docker-compose.meta.yml \ -f pgsql/docker-compose.event.yml \ -f localfs/docker-compose.model.yml \ up
In this demo, we will show you how to build a recommendation template.
The following command starts PredictionIO with an event server. PredictionIO docker image mounts ./templates directory to /templates.
$ docker-compose -f docker-compose.yml \
-f pgsql/docker-compose.base.yml \
-f pgsql/docker-compose.meta.yml \
-f pgsql/docker-compose.event.yml \
-f pgsql/docker-compose.model.yml \
up
We provide pio-docker command as an utility for pio command. pio-docker invokes pio command in PredictionIO container.
$ export PATH=`pwd`/bin:$PATH $ pio-docker status ... [INFO] [Management$] Your system is all ready to go.
This demo uses predictionio-template-recommender.
$ cd templates $ git clone https://github.com/apache/predictionio-template-recommender.git MyRecommendation $ cd MyRecommendation
You need to register this application to PredictionIO:
$ pio-docker app new MyApp1 [INFO] [App$] Initialized Event Store for this app ID: 1. [INFO] [Pio$] Created a new app: [INFO] [Pio$] Name: MyApp1 [INFO] [Pio$] ID: 1 [INFO] [Pio$] Access Key: i-zc4EleEM577EJhx3CzQhZZ0NnjBKKdSbp3MiR5JDb2zdTKKzH9nF6KLqjlMnvl
Since an access key is required in subsequent steps, set it to ACCESS_KEY.
$ ACCESS_KEY=i-zc4EleEM577EJhx3CzQhZZ0NnjBKKdSbp3MiR5JDb2zdTKKzH9nF6KLqjlMnvl
engine.json contains an application name, so replace INVALID_APP_NAME with MyApp1.
...
"datasource": {
"params" : {
"appName": "MyApp1"
}
},
...
To import training data to Event server for PredictionIO, this template provides an import tool. The tool depends on PredictionIO Python SDK and install as below:
$ pip install predictionio
and then import data:
$ curl https://raw.githubusercontent.com/apache/spark/master/data/mllib/sample_movielens_data.txt --create-dirs -o data/sample_movielens_data.txt $ python data/import_eventserver.py --access_key $ACCESS_KEY
This is Scala based template. So, you need to build this template by pio command.
$ pio-docker build --verbose
To train a recommendation model, run train sub-command:
$ pio-docker train
If a recommendation model is created successfully, deploy it to Prediction server for PredictionIO.
$ pio-docker deploy
You can check predictions as below:
$ curl -H "Content-Type: application/json" \
-d '{ "user": "1", "num": 4 }' http://localhost:8000/queries.json
For Elasticsearch, Meta and Event storage are available. To start PredictionIO with Elasticsearch,
docker-compose -f docker-compose.yml \ -f elasticsearch/docker-compose.base.yml \ -f elasticsearch/docker-compose.meta.yml \ -f elasticsearch/docker-compose.event.yml \ -f localfs/docker-compose.model.yml \ up
Adding docker-compose.spark.yml, you can use Spark cluster on pio train.
docker-compose -f docker-compose.yml \ -f docker-compose.spark.yml \ -f elasticsearch/docker-compose.base.yml \ -f elasticsearch/docker-compose.meta.yml \ -f elasticsearch/docker-compose.event.yml \ -f localfs/docker-compose.model.yml \ up
To submit a training task to Spark Cluster, run pio-deploy train with --master option:
pio-docker train -- --master spark://spark-master:7077
See docker-compose.spark.yml if changing settings for Spark Cluster.
To deploy your engine and start an engine server, run Docker with docker-compose.deploy.yml.
docker-compose -f docker-compose.yml \ -f pgsql/docker-compose.base.yml \ -f pgsql/docker-compose.meta.yml \ -f pgsql/docker-compose.event.yml \ -f pgsql/docker-compose.model.yml \ -f docker-compose.deploy.yml \ up
See deploy/run.sh and docker-compose.deploy.yml if changing a deployment.
You can launch PredictionIO with Jupyter.
docker-compose -f docker-compose.jupyter.yml \ -f pgsql/docker-compose.base.yml \ -f pgsql/docker-compose.meta.yml \ -f pgsql/docker-compose.event.yml \ -f pgsql/docker-compose.model.yml \ up
For more information, see JUPYTER.md.
docker build -t predictionio/pio pio
docker build -t predictionio/pio-jupyter jupyter
docker push predictionio/pio:latest docker tag predictionio/pio:latest predictionio/pio:$PIO_VERSION docker push predictionio/pio:$PIO_VERSION