LoginSignup
9
5

More than 1 year has passed since last update.

Google Colaboratory 上に最新の Elixir と Livebook をインストールする

Last updated at Posted at 2023-02-05

はじめに

以前、 Google Colaboratory 上で Livebook を動かす方法について記事を書きました

ただし、上記の記事の方法では apt でインストールできる Elixir のバージョンが現状 1.13 までに限定されます

その結果、 Livebook のバージョンは 0.6.3 以下になってしまいます

やはり最新を使いたいですよね

というわけで今回はできるだけ簡単に最新版をインストールします

準備

以前と同様、以下の二つのアカウントが必要になります

  • Google アカウント
  • ngrok アカウント

ngrok はローカルで起動した Web サービスを外部に公開できるサービスです

ngrok にサインインしたら、左メニューの「Your Authtoken」を開き、
認証トークンを出しておいてください

スクリーンショット 2022-10-26 18.15.13.png

Google Colaboratory への Erlang インストール

Google Colaboratory で「ノートブックを新規作成」をクリックしてください

スクリーンショット 2022-10-26 18.21.30.png

GPU を使いたい場合、ラインタイムを変更します

上メニューの「ランタイム」から「ラインタイムのタイプを変更」をクリックしてください

スクリーンショット 2022-10-26 18.23.26.png

開いたモーダルで「GPU」を選択し、「保存」をクリックします

スクリーンショット 2022-10-26 18.23.37.png

再生マークの右にある入力エリア(セル)に以下のコードを貼り付けてください

!echo 'debconf debconf/frontend select Noninteractive' | sudo debconf-set-selections

再生ボタンをクリック(=セルのコードを実行)して、しばらくすると左側に緑色のチェックマークが表示されます

スクリーンショット 2022-10-26 18.26.34.png

先ほどのセルの下辺あたりにマウスカーソルを持っていくと、「+コード」というボタンが出てくるのでこれをクリックします

(上に表示されている「+コード」ボタンでも良い)

スクリーンショット 2022-10-26 18.28.24.png

すると、セルが一つ下に追加されるので、以下のコードを貼り付けてから、新しいセルを実行してください

ここまでは以前の記事と同じです

ここから手順が変わります

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 のメッセージにエラーが表示されず、実行も止まらないのでエラーになったことに気付かず待ち続けてしまう)

https://github.com/kerl/kerl

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'])"

スクリーンショット 2022-10-26 18.42.45.png

次のコードを実行し、 Livebook を 8888 ポートで起動します

!livebook server --port 8888 --no-token

まとめ

やっぱり asdf は便利ですね

これで最新版の Livebook で GPU が使えます

9
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
5