More than 1 year has passed since last update.

はじめに

PredictionIOの勉強会に参加したので、とりあえず動かしてみようと思いました。
環境は何となく楽そうなDockerを選択。(楽じゃなかった。。)

前提:私の環境

Windows 10 Pro (64bit)
Git for Windows (Git Bash)

VMの準備

Hyper-Vの無効化

VirtualBoxを利用していきますが、Hyper-Vと共存できないので
こちらの記事を参考にbatファイルを作成して無効化しておきます。
Hyper-VとVMware/VirtualBoxは共存不可!?

VirtualBoxのインストール

まずはVirtualBoxをインストールします。
今回インストールしたのは VirtualBox 5.1.14 です。
Download VirtualBox

Vagrantのインストール

次にvagrantをインストールします。
今回インストールしたのは Vagrant 1.9.1 です。
DOWNLOAD VAGRANT

ディレクトリの作成

VM用のディレクトリを用意します。
適宜好きな場所に。

$ cd /c/opt
$ mkdir -p vagrant/machines/predictionio
$ cd vagrant/machiens/predictionio

Vagrantfileの生成

構成ファイルを生成します。
boxはubuntu/trusty64をベースとしてDockerを導入をするより
16.04 LTSでDockerも入っているboxがVagrantbox.esに公開されているのでこちらを利用します。
vagrant box addに結構時間が掛かります。

$ vagrant box add ubuntu/docker https://github.com/jose-lpa/packer-ubuntu_lts/releases/download/v3.1/ubuntu-16.04.box
$ vagrant init --minimal ubuntu/docker

ポートフォワーディングの設定

Vagrantfileに、あとでpredictionioで利用するポートをforwarded_portで追記しておきます。

Vagrantfile
Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/docker"
+ config.vm.network "forwarded_port", guest: 8000, host: 8000, auto_correct: true
end

メモリの設定

後述のDockerイメージのビルド時にメモリ不足にならないように
VagrantfileにVMのメモリ設定をします。

Vagrantfile
Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/docker"
  config.vm.network "forwarded_port", guest: 8000, host: 8000, auto_correct: true
+ config.vm.provider "virtualbox" do |vb|
+  vb.memory = "2048"
+ end
end

起動してログイン

VMを起動、ログインします。

$ vagrant up
$ vagrant ssh

DNSの設定

Dockerイメージのビルドの為にDNSを設定しておきます。
(参考:Ubuntuでのresolv.confの扱い)

$ sudo vim /etc/network/interfaces
/etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet dhcp
pre-up sleep 2

+dns-nameservers 8.8.8.8

設定反映

$ sudo service networking restart

Dockerの準備

Dockerファイルの取得

Docker Installation for PredictionIOにある通り、v0.10.0を利用しているsteveny2k/docker-predictionioのリポジトリをcloneしてきます。
*なお、Docker Hubにも色々とイメージが転がっていますが、PredictionIOのバージョンが古いと後で詰まるので要注意(このイメージならいけるかも?)

$ git clone https://github.com/steveny2k/docker-predictionio.git
$ cd docker-predictionio

Dockerイメージのビルドと起動

REDMEに従ってビルド・起動してみます。
Dockerイメージのビルドはかなり時間が掛かります。

$ docker build -t predictionio .
$ docker run -p 8000:8000 --name predictionio_instance -it predictionio /bin/bash

PredictionIOを動かす

関連ライブラリのインストール

Dockerのコンテナ環境にログインしたら、以下の関連ライブラリをインストールします。
また、設定ファイルの編集用にvimもインストールしておきます。

# apt-get update
# apt-get install sudo
# apt-get install vim

# pip install --upgrade pip
# pip install setuptools
# pip install predictionio

PredictionIOサーバの起動

起動に成功すると「Your system is all ready to go.」と表示されます。

# pio-start-all
# pio status

Engineの取得・起動

Engineを取得

# mkdir ~/MySimilarProduct
# pio template get apache/incubator-predictionio-template-similar-product ~/MySimilarProduct
# cd ~/MySimilarProduct/

AppNameを登録してAccessKeyを取得

# pio app new MyApp1

AppNameをengine.jsonに設定

engine.json
---  
  "datasource": {
    "params" : {
-     "appName": "INVALID_APP_NAME"
+     "appName": "MyApp1"
    }
---

学習データの投入

# python data/import_eventserver.py --access_key [取得したキー]

Engine Templateのビルドとトレーニング

# pio build --verbose
# pio train

trainがStackoverflowでこける場合には、とりあえずengine.jsonの修正で逃げる

engine.json
---  
  "algorithms": [
    {
      "name": "als",
      "params": {
        "rank": 10,
-       "numIterations": 20,
+       "numIterations": 10,
        "lambda": 0.01,
        "seed": 3
      }
    }
  ]
---

起動確認

以下にアクセスして起動を確認します。
http://localhost:8000

Todo

とりあえずここまで。
あとは、実際に色々なEngineを試してみたい。

参考

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.