vaex のアルファ版を docker image にインストールする

vaex のデータフレームを csv に出力したくなったが、vaex-core の core-v2.0.0でないとサポートされていない。そこで、GitHubにあるvaex のアルファ版をdockerにインストールした。

vaex と xgboostを使いたかったので、 https://hub.docker.com/r/rapidsai/rapidsai/ の docker image を用いた。それにvaexをインストールした。

いろいろと手間取ったので備忘録として残しておく。

経緯

最初 https://docs.vaex.io/en/0.3.10/installing.html に従ってインストールを始めてしまった。いろいろと不足しているライブラリなどがみつかって手間取った。

その後、最新の https://docs.vaex.io/en/latest/installing.html に従ってインストールをしたが、最後に python setup.py install を実行すると不足が見つかったので、まず、不足しているコマンドやライブラリをインストールしてから、vaex のディレクトリで python setup.py install を実行した。

Docker Imageの起動

Docker Image には、 RAPIDS のGet Started のページ( https://rapids.ai/start.html )の RAPIDS Release Selector で次の設定をした際に得られるイメージを利用した。

  • Method: Docker+Examples
  • Release: Stable (0.13)
  • Packages: All packages
  • Linux: Ubuntu 18.04
  • Python: Python 3.6
  • Cuda: CUDA 10.0

Dockerのレジストリからイメージをダウンロードする。

docker pull rapidsai/rapidsai:cuda10.0-runtime-ubuntu18.04-py3.6

Get Started のページに示された以下のようなコマンドを実行した場合の例を示すが、環境に合わせて修正する必要がある。port 8888 は JupyterLab のポート番号である。

docker run --gpus all --rm -it -p 8888:8888 -p 8787:8787 -p 8786:8786 \
                  rapidsai/rapidsai:cuda10.0-runtime-ubuntu18.04-py3.6

docker ps -a で起動されたことを確認した。

$ docker ps -a
CONTAINER ID        IMAGE                                                  COMMAND                  CREATED             STATUS              PORTS                                                      NAMES
b78b000b0ccd        rapidsai/rapidsai:cuda10.0-runtime-ubuntu18.04-py3.6   "/usr/bin/tini -- /.…"   3 minutes ago       Up 3 minutes        0.0.0.0:8786-8787->8786-8787/tcp, 0.0.0.0:8888->8888/tcp   unruffled_carson

この rapidsai/rapidsai:cuda10.0-runtime-ubuntu18.04-py3.6 を基にした unruffled_carson という名前のコンテナにvaexをインストールした。

vaexのインストールの準備

vaex をインストールするために必要なライブラリなどをインストールする。

build-essentialのインストール

gccなどのビルドに必要なコマンドをインストールする。利用した docker image には、/etc/apt/sources.list がなかったので、それを作成し、それに基づいて apt を update してから、 build-essential をインストールする。

# install build-essential
cat << COMMANDS > /etc/apt/sources.list
deb http://archive.ubuntu.com/ubuntu bionic main universe
deb http://archive.ubuntu.com/ubuntu bionic-security main universe
deb http://archive.ubuntu.com/ubuntu bionic-updates main universe
COMMANDS

apt update
apt install build-essential

pybind11のインストール

pythonとC++11の連携を図る pybind11をインストールする。

# install pybind11
conda install pybind11

string-view-liteのインストール

C++17で導入された文字列の参照機能と同等の機能をC++11で利用するために、string-view-liteをインストールする。ヘッダだけで利用できるものなので、ヘッダファイルをインストールする。

以下では、必要なディレクトリ nonstd を /usr/include に移動している。

# install string-view-lite
git clone https://github.com/martinmoene/string-view-lite.git
mv string-view-lite/include/nonstd /usr/include
# rm -r string-view-lite # 必要でないファイルを削除するなら

hopscotch-mapのインストール

ハッシュのライブラリ  hopscotch-map をインストールする。このライブラリもヘッダだけで利用できるものなので、ヘッダファイルをインストールする。

以下では、必要なディレクトリ tsl を /usr/include に移動している。

# install hopscotch-map
git clone https://github.com/Tessil/hopscotch-map.git
mv hopscotch-map/include/tsl /usr/include
# rm -r hopscotch-map # 必要でないファイルを削除するなら

Perl Compatible Regular Expressionsのインストール

Perl互換の正規表現ライブラリ pcre をインストールする。

conda install -c conda-forge pcre

vaexのインストール

コマンドなどの準備ができたら、vaex をインストールする。

# install vaex
git clone --recursive https://github.com/vaexio/vaex
cd vaex
pip install -e .
python setup.py install

インストールの確認

目的としたバージョンのvaex がインストールされているか確認する。 vaex-core のバージョンが 2.0.0a5 となっており、2.0.0 の alpha5 がインストールされている。

# pip list | grep vaex
vaex                   3.0.0.dev0                  
vaex-arrow             0.5.0.dev0                  
vaex-astro             0.7.0.dev0                  
vaex-core              2.0.0a5                     
vaex-distributed       0.3.0                       
vaex-graphql           0.1.0.dev0                  
vaex-hdf5              0.6.0a1                     
vaex-jupyter           0.5.0a2                     
vaex-ml                0.9.0.dev0                  
vaex-server            0.3.0a2                     
vaex-ui                0.3.0                       
vaex-viz               0.4.0a1

JupyterLabを起動

Web browser から http://localhost:8888 にアクセスして Docker Image の JupyterLab を起動する。

次のようにビルドが勧められるので、「Build」をクリックしてビルドしておく。docker commit 前にしておかないと、JupyterLab を起動するたびに buildが必要になる。

ビルドが完了したら次のメッセージが表示されるので、「Reload」をクリックする。

ビルドが完了したらJupyterLabは終了させて構わない。

更新したDocker Imageの作成

docker commit で新しいイメージを作成する。ここでは、新しいイメージをxgboost-vaex という名前にした。unruffled_carsonは、docker image を起動した際につけられた名前で起動のたびに変わる。

docker commit unruffled_carson xgboost-vaex

作成できたか docker images で確かめた。次のようにできていた。

$ docker images
REPOSITORY          TAG                                  IMAGE ID            CREATED              SIZE
xgboost-vaex        latest                               6b9b6ede3efe        About a minute ago   8.8GB

新しいDocker Image が作成できていることの確認ができたら、unruffled_carson を終了させて構わない。

動作確認

新しいイメージ xgboost-vaex を起動する。以下のようなコマンドを実行する。

docker run --gpus all --rm -it -p 8888:8888 -p 8787:8787 -p 8786:8786 \
                  xgboost-vaex

JupyterLabなどで、vaexが使えることを確認する。