はじめに
この記事はデータサイエンスに関して By データミックスコミュニティ Advent Calendar 2019の15日目の記事です。
毎週お世話になっているデータミックスのカレンダーということで参加。
Cloud Datalabとは
最近、業務でCloud Datalabを使い始めた。
Cloud Datalabとは、
データの探索、分析、可視化と機械学習のための使いやすいインタラクティブなツール
Cloud Datalab は、Google Cloud Platform でデータを探索、分析、変換、可視化し、機械学習モデルを構築するために作成された、高度なインタラクティブ ツールです。Compute Engine 上で動作し、さまざまなクラウド サービスに簡単に接続できるため、データ サイエンティストが本来の仕事に専念することを可能にします。
とのこと。
Compute Engine上にJupyter NotebookのDockerコンテナを立ててくれて、ローカルマシンから簡単にアクセスできる。
Compute Engineのインスタンスなので、お金で殴ればメモリやCPUを自由に変えられるところもいいところ。
始め方もすごく簡単で以下を打つとすぐにアクセスできる。
$ gcloud components install datalab
$ datalab create datalab-instance-name
すると
こんな感じの画面が開かれる。
ノートブックはこんな感じ
Juliaを使う
このノートブックは
Cloud Datalab は、豊富なモジュール エコシステムと強固なナレッジベースを誇る Jupyter(旧 IPython)上に構築されています。Cloud Datalab を活用することにより、Python、SQL、JavaScript(BigQuery のユーザー定義関数用)を使った BigQuery、Cloud Machine Learning Engine、Compute Engine、Cloud Storage のデータ分析が可能になります。
つまり、Juliaは使えない!
kernelから選べる言語を見てもpythonしか対応していない。
最近1日目の立川先生の記事でもあったのを見てJuliaを使ってみたいな〜と思っていたので入れてみる。
やること
- Datalabのインスタンスに入る
- それっぽいDockerfileを探す
- コンテナに入る
- JuliaをインストールしてJuputerで使えるパッケージを入れる
まずSSHしてインスタンスに入り、rootユーザになりDockerfileを探す。
$ sudo su
$ cd /
$ find ./ -name Dockerfile
./usr/share/docker/contrib/nnp-test/Dockerfile
./usr/share/docker/contrib/httpserver/Dockerfile
./usr/share/docker/contrib/syscall-test/Dockerfile
./usr/share/docker/contrib/desktop-integration/gparted/Dockerfile
./usr/share/docker/contrib/desktop-integration/chromium/Dockerfile
./mnt/stateful_partition/var/lib/docker/overlay2/0a2eef30ccfab906380374ebfe640fe5e9da75796598baecb20b041ce7a518fc/diff/tools/google-cloud-sdk/.install/.backup/platform/ext-runtime/nodejs/data/Dockerfile
./mnt/stateful_partition/var/lib/docker/overlay2/0a2eef30ccfab906380374ebfe640fe5e9da75796598baecb20b041ce7a518fc/diff/tools/google-cloud-sdk/.install/.backup/platform/ext-runtime/go/data/Dockerfile
./mnt/stateful_partition/var/lib/docker/overlay2/0a2eef30ccfab906380374ebfe640fe5e9da75796598baecb20b041ce7a518fc/diff/tools/google-cloud-sdk/platform/ext-runtime/nodejs/data/Dockerfile
./mnt/stateful_partition/var/lib/docker/overlay2/0a2eef30ccfab906380374ebfe640fe5e9da75796598baecb20b041ce7a518fc/diff/tools/google-cloud-sdk/platform/ext-runtime/go/data/Dockerfile
./var/lib/docker/overlay2/0a2eef30ccfab906380374ebfe640fe5e9da75796598baecb20b041ce7a518fc/diff/tools/google-cloud-sdk/.install/.backup/platform/ext-runtime/nodejs/data/Dockerfile
./var/lib/docker/overlay2/0a2eef30ccfab906380374ebfe640fe5e9da75796598baecb20b041ce7a518fc/diff/tools/google-cloud-sdk/.install/.backup/platform/ext-runtime/go/data/Dockerfile
./var/lib/docker/overlay2/0a2eef30ccfab906380374ebfe640fe5e9da75796598baecb20b041ce7a518fc/diff/tools/google-cloud-sdk/platform/ext-runtime/nodejs/data/Dockerfile
./var/lib/docker/overlay2/0a2eef30ccfab906380374ebfe640fe5e9da75796598baecb20b041ce7a518fc/diff/tools/google-cloud-sdk/platform/ext-runtime/go/data/Dockerfile
./var/lib/docker/overlay2/e7104b73a79e5676bd3e91fe8211a7bdf16d662be55b2344700abafd222dfbb1/merged/tools/google-cloud-sdk/.install/.backup/platform/ext-runtime/nodejs/data/Dockerfile
./var/lib/docker/overlay2/e7104b73a79e5676bd3e91fe8211a7bdf16d662be55b2344700abafd222dfbb1/merged/tools/google-cloud-sdk/.install/.backup/platform/ext-runtime/go/data/Dockerfile
./var/lib/docker/overlay2/e7104b73a79e5676bd3e91fe8211a7bdf16d662be55b2344700abafd222dfbb1/merged/tools/google-cloud-sdk/platform/ext-runtime/nodejs/data/Dockerfile
./var/lib/docker/overlay2/e7104b73a79e5676bd3e91fe8211a7bdf16d662be55b2344700abafd222dfbb1/merged/tools/google-cloud-sdk/platform/ext-runtime/go/data/Dockerfile
怪しそうな./usr/share/docker/contrib/httpserver/Dockerfile
を見に行ってコンテナを確かめる
$ cd /usr/share/docker/contrib/httpserver/
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7852ff2c96ac gcr.io/google-containers/fluentd-gcp:2.0.17 "/bin/sh -c '/run.sh…" 12 minutes ago Up 11 minutes 80/tcp logger
916f949d7331 gcr.io/cloud-datalab/datalab:latest "/datalab/run.sh" 12 minutes ago Up 11 minutes 127.0.0.1:8080->8080/tcp datalab
まさにそれっぽいコンテナ発見!
そのコンテナに入ってJuliaを入れる。
$ docker exec -it datalab bash
# ここからコンテナ内
# Juliaの公式サイトから落としてくる
$ wget https://julialang-s3.julialang.org/bin/linux/x64/1.3/julia-1.3.0-linux-x86_64.tar.gz
# 解凍
$ tar -zxvf julia-1.3.0-linux-x86_64.tar.gz
$ ls julia*
julia-1.3.0-linux-x86_64.tar.gz
julia-1.3.0:
bin etc include lib libexec LICENSE.md share
無事juliaが入ったので、pathを通して呼び出せるようにする
# pathを通す
$ echo "alias julia='/julia-1.3.0/bin/julia'" >> ~/.bashrc
# shell実行
$ exec $SHELL
# 呼び出し
$ julia
_
_ _ _(_)_ | Documentation: https://docs.julialang.org
(_) | (_) (_) |
_ _ _| |_ __ _ | Type "?" for help, "]?" for Pkg help.
| | | | | | |/ _` | |
| | |_| | | | (_| | | Version 1.3.0 (2019-11-26)
_/ |\__'_|_|_|\__'_| | Official https://julialang.org/ release
|__/ |
julia>
無事呼び出せた!
ここにIJuliaを入れてJupyter Notebookで使えるようにしていく。
julia> ]
(v1.3) pkg> add IJulia
# パッケージモードを抜けます
^C
julia> using IJulia
[ Info: Precompiling IJulia [7073ff75-c697-5162-941a-fcdaad2a7d2a]
julia> notebook(detached=true)
install Jupyter via Conda, y/n? [y]: y
# 色々あってちょっと長い
> julia
これで完了したらノートブックを読み込み直す。
ここにjuliaが追加されて入れば成功!
juliaが使えるようになった!