はじめに
最近Macを買いまして、せっかくなのでSwiftを学習しようと
思い立ちました。
で、jupyterで使えれば便利よねと思い、
普段使っているdocker版jupyterにswiftを突っ込んでみました。
※うまく動かなかったのでちゃんと最新版のSwift for TensorFlowを
使うようにしました。
レシピ
-
- debian 10
-
- jupyter-minimalから育て上げたdockerイメージ(jupyter/mylangs)
-
- Swift for TensorFlow
- swift-jupyter
参考
How to Install Swift in Debian 10
GitHub – tensorflow/swift: Swift for TensorFlow
GitHub – google/swift-jupyter
手順
Swift for TensorFlowのインストール
稼働中のdockerコンテナのプロンプトに入る
以下のコマンドでコンテナのプロンプトに入れます。
コンテナ名は既定で jupyter_notebook_1 となっているはずです。
$ docker exec -it -e GRANT_SUDO=yes --user root jupyter_notebook_1 bash
依存パッケージのインストール
うちの子の環境ではPython3.9が入っていますが、
Swift for TensorFlow はPython3.6のライブラリを要求します。
とりあえずaptで入れられるものはaptでインストールし、
Python3.6関連のライブラリは個別にダウンロードして
dpkg -i で突っ込みます!
Ubuntu18.04のパッケージですがまあdebianでもいけます。
というかいけました。
# wget http://archive.ubuntu.com/ubuntu/pool/main/libf/libffi/libffi6_3.2.1-8_amd64.deb
# wget http://archive.ubuntu.com/ubuntu/pool/main/r/readline/libreadline7_7.0-3_amd64.deb
# wget http://archive.ubuntu.com/ubuntu/pool/main/p/python3.6/libpython3.6-minimal_3.6.5-3_amd64.deb
# wget http://archive.ubuntu.com/ubuntu/pool/main/p/python3.6/libpython3.6-stdlib_3.6.5-3_amd64.deb
# wget http://archive.ubuntu.com/ubuntu/pool/main/p/python3.6/libpython3.6_3.6.5-3_amd64.deb
# apt update
# apt install libncurses5 libncursesw5 clang libcurl4 libpython2.7
# dpkg -i libffi6_3.2.1-8_amd64.deb
# dpkg -i libreadline7_7.0-3_amd64.deb
# dpkg -i libpython3.6-minimal_3.6.5-3_amd64.deb
# dpkg -i libpython3.6-stdlib_3.6.5-3_amd64.deb
# dpkg -i libpython3.6_3.6.5-3_amd64.deb
と順にインストールします。
依存関係があるので順番に注意です。
Swift for TensorFlowをインストールする
以下のコマンドを順次実行。ダウンロードして解凍するだけ。
# cd /opt
# wget https://storage.googleapis.com/swift-tensorflow-artifacts/releases/v0.13/swift-tensorflow-RELEASE-0.13-ubuntu18.04.tar.gz
# tar xzf swift-tensorflow-RELEASE-0.13-ubuntu18.04.tar.gz
# mkdir swift
# mv usr swift
環境変数の設定
.bashrc ファイルを編集し、
環境変数PATHにSwiftのパスを追加しておく。
export PATH=${PATH}:/opt/swift/usr/bin
.bashrc の内容を反映する。
# source ~/.bashrc
ひとまずSwiftの動作確認
以下のようになればOK
# swift --version
Swift version 5.3-dev (LLVM e86f8c8c72a2a82, Swift 6a6f972f7fcf51d)
Target: x86_64-unknown-linux-gnu
swift-jupyterのインストール
swift-jupyterをインストールする
以下のコマンドを実行。
# cd /opt
# git clone https://github.com/google/swift-jupyter.git
# cd swift-jupyter
# python3 -m venv venv
# . venv/bin/activate
# pip install -r requirements.txt
# python register.py --sys-prefix --swift-toolchain /opt/swift
最後までコマンドを実行すると以下のようなjsonが吐かれる。
{
"argv": [
"/opt/swift-jupyter/venv/bin/python",
"/opt/swift-jupyter/swift_kernel.py",
"-f",
"{connection_file}"
],
"display_name": "Swift",
"language": "swift",
"env": {
"PYTHONPATH": "/opt/swift/usr/lib/python3/dist-packages",
"LD_LIBRARY_PATH": "/opt/swift/usr/lib/swift/linux",
"REPL_SWIFT_PATH": "/opt/swift/usr/bin/repl_swift",
"SWIFT_BUILD_PATH": "/opt/swift/usr/bin/swift-build",
"SWIFT_PACKAGE_PATH": "/opt/swift/usr/bin/swift-package"
}
}
/home/jovyan/.local/share/jupyter/kernels に
swift フォルダを作成し、
その中に kernel.json というファイル名で
先ほど吐かれたjsonを保存する。
まあ、
$ mkdir /home/jovyan/.local/share/jupyter/kernels/swift
$ python register.py --sys-prefix --swift-toolchain /opt/swift > /home/jovyan/.local/share/jupyter/kernels/swift/kernel.json
でもいいような気もする。
swift-jupyterの動作確認
こんな感じでSwiftが追加されていればOK。
dokerイメージの作成
コンテナの停止
以下のコマンドでコンテナを停止。
うっかり down しちゃうとせっかく作ったコンテナが消えちゃうので注意。
docker-compose で楽してます。
$ docker-compose stop
イメージの作成
以下のコマンドで現在のコンテナの内容でイメージを作成
けっこう時間がかかるかも。
$ docker commit jupyter_notebook_1 jupyter/mylangs:latest
コンテナの削除
以下のコマンドでコンテナの削除を行う。
$ docker-compose down
コンテナの起動
以下のコマンドでコンテナを起動する。
$ docker-compose up -d
おまけ
ちなみに今運用している docker-compose.yml の中身はこんな感じです。
version: "3"
services:
notebook:
image: jupyter/mylangs
ports:
- "9999:8888"
environment:
- TZ=Asia/Tokyo
- JUPYTER_ENABLE_LAB=yes
volumes:
- ./work:/home/jovyan/work
privileged: true
command: start-notebook.sh --NotebookApp.token=''