はじめに
以前、 Google Colaboratory 上で Livebook を動かす方法について記事を書きました
ただし、上記の記事の方法では apt でインストールできる Elixir のバージョンが現状 1.13 までに限定されます
その結果、 Livebook のバージョンは 0.6.3 以下になってしまいます
やはり最新を使いたいですよね
というわけで今回はできるだけ簡単に最新版をインストールします
準備
以前と同様、以下の二つのアカウントが必要になります
- Google アカウント
- ngrok アカウント
ngrok はローカルで起動した Web サービスを外部に公開できるサービスです
ngrok にサインインしたら、左メニューの「Your Authtoken」を開き、
認証トークンを出しておいてください
Google Colaboratory への Erlang インストール
Google Colaboratory で「ノートブックを新規作成」をクリックしてください
GPU を使いたい場合、ラインタイムを変更します
上メニューの「ランタイム」から「ラインタイムのタイプを変更」をクリックしてください
開いたモーダルで「GPU」を選択し、「保存」をクリックします
再生マークの右にある入力エリア(セル)に以下のコードを貼り付けてください
!echo 'debconf debconf/frontend select Noninteractive' | sudo debconf-set-selections
再生ボタンをクリック(=セルのコードを実行)して、しばらくすると左側に緑色のチェックマークが表示されます
先ほどのセルの下辺あたりにマウスカーソルを持っていくと、「+コード」というボタンが出てくるのでこれをクリックします
(上に表示されている「+コード」ボタンでも良い)
すると、セルが一つ下に追加されるので、以下のコードを貼り付けてから、新しいセルを実行してください
ここまでは以前の記事と同じです
ここから手順が変わります
apt-get
で必要なライブラリをインストールします
!wget https://packages.erlang-solutions.com/erlang-solutions_2.0_all.deb && sudo dpkg -i erlang-solutions_2.0_all.deb
!sudo apt-get update -y
!sudo apt-get install -y erlang-base
!sudo apt-get install -y build-essential
!sudo apt-get install -y erlang-dev
!sudo apt-get install -y erlang-inets
!sudo apt-get install -y erlang-parsetools
!sudo apt-get install -y erlang-os-mon
!sudo apt-get install -y erlang-ssl
!sudo apt-get install -y erlang-xmerl
elixir を apt-get
でインストールせずに、以下の二つを追加でインストールしています
- erlang-inets
- erlang-ssl
これらは HTTPS 通信に必要なモジュールで、これを入れていないと mix local.hex --force
実行時に ssl.app
が見つからない、というようなエラーが発生します
インストールが完了したら Erlang のバージョンを確認してみましょう
Erlang シェルを起動して即終了させる
!erl -run halt
実行結果は以下のようになる
Erlang/OTP 25 [erts-13.0.4] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:1] [jit:ns]
{"init terminating in do_boot",{undef,[{halt,start,[],[]},{init,start_em,1,[]},{init,do_boot,3,[]}]}}
init terminating in do_boot ({undef,[{halt,start,[],[]},{init,start_em,1,[]},{init,do_boot,3,[]}]})
Crash dump is being written to: erl_crash.dump...done
1行目に出ている通り、 OTP 25 がインストールされている
asdf のインストール
Elixir をインストールするために asdf をインストールします
asdf は様々な開発言語、開発ツールの多数バージョンを共存したままインストールできるツールです
ただし、 Windows では使えません
.tool-versions
というファイルに各言語のバージョン番号を書いておけば、 .tool-versions
の存在するディレクトリー以下では自動的にそのバージョンが使われるため、非常に便利です
私の開発環境には欠かせない存在ですね
そして、 Elixir も asdf を使えば超簡単に任意のバージョンをインストールできます
asdf 自体のインストールも超簡単です
GitHub から ~/.asdf
(実行ユーザーのホームディレクトリー直下の .asdf)にクローンしてきます
!git clone https://github.com/asdf-vm/asdf.git ~/.asdf
もし asdf のバージョンを指定したい場合は末尾に --branch v0.11.1
というように指定を入れてください
asdf や asdf によってインストールしたもののパスを通すため、環境変数を設定します
Google Colaboratory 上では Python の力を借りて環境変数を設定します
(通常の環境では公式サイトを参考に設定してください)
import os
os.environ['PATH'] = "/root/.asdf/shims:/root/.asdf/bin:" + os.environ['PATH']
これで asdf が使えるようになったので、以下のコマンドで asdf に Elixir プラグインを追加します
!asdf plugin add elixir
以下のコマンドで Elixir の最新版をインストールします
!asdf install elixir latest
もしバージョン番号を指定したい場合は latest
の部分を 1.14.3-otp-25
というように指定してください
指定可能なバージョン番号の一覧は !asdf list all elixir
で取得できます
どこでも Elixir の最新版を使いたい場合、以下のコマンドを実行します
!asdf global elixir latest
今いるディレクトリーだけ最新版にしたい場合は !asdf local elixir latest
になります
インストールがうまくいっているか、バージョンを確認してみます
!elixir -v
実行結果は以下のようになります
Erlang/OTP 25 [erts-13.0.4] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:1] [jit:ns]
Elixir 1.14.3 (compiled with Erlang/OTP 25)
2023年2月5日現在最新版の 1.14.3 がインストールされました
asdf を使えば Elixir 以外にも、思いつく大抵の開発言語、 AWS CLI や Terraform なんかも任意のバージョンがインストール可能なので、まだまだ応用範囲は広そうです
それなら Erlang も asdf でインストールすれば良かったのでは?という疑問があるかと思いますが、 Google Colaboratory 上ではうまくいきませんでした
!asdf install erlang latest
を実行すると Kerl を使った Erlang のビルドが実行されるのですが、これが途中でエラーになってしまいます(しかも Jupyter のメッセージにエラーが表示されず、実行も止まらないのでエラーになったことに気付かず待ち続けてしまう)
Livebook のインストール
以下のコマンドを実行してください
!mix local.hex --force
!mix local.rebar --force
!mix escript.install hex livebook --force
以前の記事では Elixir のバージョンが低いため !mix escript.install hex livebook 0.6.3 --force
というように古いバージョンを指定していましたが、今回は最新版なので指定しません
しばらくしてインストールが終わったら、 Livebook にパスを通します
!asdf reshim elixir
asdf reshim <言語>
で、対象言語でインストールしたツール群のパスを通します(最初だけでOKです)
この状態で Livebook のバージョンを確認します
!livebook -v
実行結果は以下のようになります
Erlang/OTP 25 [erts-13.0.4] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:1] [jit:ns]
Elixir 1.14.3 (compiled with Erlang/OTP 25)
Livebook 0.8.1
Erlang Elixir Livebook それぞれ最新になっています
Livebook 上で evision 等を使う場合、必要なモジュールを追加でインストールしておいてください
ngrok のインストール
ngrok のクライアントツールをインストールします
!curl -O https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
!unzip ngrok-stable-linux-amd64.zip
次のコードで、準備しておいた ngrok の認証トークンを設定します
※ <ngrokの認証トークン>
の部分を自分の ngrok アカウントで発行した認証トークンに置き換えてください
!./ngrok authtoken <ngrokの認証トークン>
Livebook の起動
次のコードを実行し、 ngrok でコンテナ内の http://localhost:8888
を外部公開します
get_ipython().system_raw('./ngrok http 8888 &')
!sleep 5s
次のコードを実行すると、公開された URL が表示されます
(ここでエラーが出る場合、 ngrok の認証トークンが誤っています)
!curl -s http://localhost:4040/api/tunnels | python3 -c "import sys, json; print(json.load(sys.stdin)['tunnels'][0]['public_url'])"
次のコードを実行し、 Livebook を 8888 ポートで起動します
!livebook server --port 8888 --no-token
まとめ
やっぱり asdf は便利ですね
これで最新版の Livebook で GPU が使えます