【Modal】ModuleNotFoundError【分割したい】

こんにちは、フリーランスエンジニアの太田雅昭です。

Modal

Modalはクラウド上でGPUが使えるサービスです。Pythonで簡単にイメージを作ったりできるのが売りのようです。

https://modal.com

ModuleNotFoundError

ローカルのソースファイルは、クラウドにアップロードされる際に自動選別されます。そのため、下記のような場合

- /
  - __init__.py
  - /common
    - __init__.py
    - xx.py
  - /train
    - __init__.py
    - main.py

main.pyには@app.entrypointがあります。こうした場合、下記を実行すると

modal run train/main.py

ロードされるのはtrainモジュールのみとなります。

Created mount PythonPackage:train

commonが含まれていません。そのため、エラーとなります。

ModuleNotFoundError

ModalのExampleコードはそれぞれが1ファイルにまとめられているため、今回のような分割タイプのサンプルがありません。かなり吸ったんもん出した挙句、下記のようにすればいいことがわかりました。

image = modal.Image.debian_slim(python_version="3.11").pip_install(
    ...
).add_local_python_source(
    "common",
    "train",
)

app = modal.App("dreambooth-test-train-generate",
                image=image, include_source=True)

add_local_python_sourceでモジュール名を指定すれば、イメージに含まれてばんばんざいです。