はじめに

最近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。

image.png

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=''
广告
将在 10 秒后关闭
bannerAds