自作の fastf1-libs の実行環境を docker compose で構築する
自作の fastf1 便利ライブラリ を紹介しましたが、こちらも docker compose で簡単・確実に環境を作れるようにします。ついでにいろいろ試すには便利な、JuputerLab を起動するようにします。
準備
WSL2 の Docker で CUDA する を参考に、GPU を使えるように設定済みのコンテナを使います。
fastf1-libs 用に以下の内容を記述したファイルを、compose.yml のファイル名で作成します。
services:
fastf1-libs:
image: jupyter/base-notebook
volumes:
- ./fastf1-libs:/fastf1-libs/
- ./data:/data/
- ./cache:/data/cache/
command:
- /bin/bash
- -c
- |
cd /fastf1-libs/
pip install -r requirements-dev.txt
pip install fastf1_lib/
start-notebook.py --ip=0.0.0.0 --notebook-dir=/data
ports:
- "8888:8888"
特段 GPU の支援は必要ないので、設定がすっきりしていますね。コンテナイメージも、JupyterLab のイメージを使っているので、自作のライブラリをインストールすれば環境としては完成です。
別マシンから接続する形になるので、JupyterLab の起動オプションに --ip=0.0.0.0
をつけないと接続を拒否してしまうのと、ノートブックの初期ディレクトリを指定するようにしています。
さらに同じディレクトリに fastf1-libs のリポジトリをクローンしておきます。これは、compose.yml を作成したディレクトリで以下コマンドを実行することで可能です。
git clone https://github.com/android-pokoten/fastf1-libs.git
また、ノートブックを保存しておくパス (./data
) と、セッションデータをキャッシュするディレクトリ (./cache
) を作成しておきます。
この状態で、以下のディレクトリ構成になっているはずです。
.
|- fastf1-libs/
|- cache/
|- data/
|- fastf1-libs/
|- ...
-- compose.yml
cache
と data
の中は、最初は空です。コンテナイメージの更新などで作り直しても、データは残せるようにします。
起動
ファイル、ディレクトリの準備ができたら、以下のコマンドを実行します。
docker compose up
しばらく待つとターミナルに http://127.0.0.1/lab?token=xxx
と表示されるので、その URL をブラウザにコピーして開きます。
これで JupyterLab を開くことができます。/data
ディレクトリを開いているので、そこでファイルを作成していくことが可能です。
コードの実行に関して2点ほど。fastf1-libs のリポジトリを /fastf1-libs
にマウントしているので、ライブラリの読み込みは以下のようにパスを指定すれば OK です。
import sys
import importlib
sys.path.append("/fastf1-libs/fastf1_lib")
from fastf1lib import myFastf1
ff1 = myFastf1()
キャッシュは /data/cache
にマウントしているので、セッションをロードする load_session_o
は以下のように実行できます。
session_fp1 = ff1.load_session_o(
name="singapore",
year=2024,
s='FP1',
cache='/data/cache/'
)
仮に JupyterLab の更新をするなど、コンテナイメージを更新を指定場合は、docker compose down
でコンテナを削除し、docker pull jupyter/base-notebook
でイメージを最新化します。そのうえで docker compose up
で起動するだけです。作成したノートブックやキャッシュデータはそのままです。