こんにちは!データサイエンティストの青木和也(https://twitter.com/kaizen_oni)です!
今回の記事では、Hugging Face Spacesでアプリを動かしたいときに、なぜかModuleNotFoundErrorが出てしまう場合の対処法を紹介いたします!
分かってしまえば解決は非常に簡単なので、解決法を噛み砕いてご説明いたします!
エラーの内容
私が直面したシチュエーションは以下の通りです。
- Hugging Face Spacesで新しいSpaceを作成し、手順に従ってgitの構築を行う
- Spaceにアップロードするプログラムapp.pyを作成し、gitを使ってpushする
- ModuleNotFoundエラー発生!
エラーの内容を読み解いてみると、「fastaiモジュールが見つからないよ」と言われていることが分かります。
「ローカル環境のときには問題なかったのになんでだろう。。。」と疑問に駆られました。
ちなみに、私がこのときにpushしたプログラムはPractical Deep Learning for CodersのLesson2で学んでいた「犬か猫か識別プログラム」です。
# AUTOGENERATED! DO NOT EDIT! File to edit: app.ipynb.
# %% auto 0
__all__ = ['learn', 'categories', 'examples', 'intf', 'is_cat', 'classify_image']
# %% app.ipynb 1
import gradio as gr
from fastai.vision.all import *
def is_cat(x): return x[0].isupper()
# %% app.ipynb 3
learn = load_learner('model.pkl')
# %% app.ipynb 5
categories = ('Dog', 'Cat')
def classify_image(img):
pred, idx, probs = learn.predict(img)
return dict(zip(categories, map(float, probs)))
# %% app.ipynb 7
examples = ['dog.jpg', 'cat.jpg', 'dunno.jpg']
intf = gr.Interface(fn = classify_image, inputs = 'image', outputs = 'label', examples= examples)
intf.launch(inline=False)
ModuleNotFoundErrorの解決方法
解決方法としては、app.pyと同じ階層のディレクトリにrequirements.txtを配置し、その中に必要なライブラリ名をつらつらと記載すればOKです。
例えば、以下のrequirements.txtファイルでは、app.pyで使用しているライブラリのfastaiとgradioを記載しています。
※厳密に言えば、Hugging Face SpacesのSpace作成時、実行環境に「Gradio」を指定しているので、gradioライブラリのインストールは必要ありません。
fastai
gradio
app.pyと同じ階層の上記を記載したrequirements.txtがある状態でgit pushをすれば、ModuleNotFoundErrorは解消されます。
ModuleNotFoundErrorの原因は?
ModuleNotFoundErrorの原因は何だったのでしょうか。
原因は非常に単純で、Hugging Face上の実行環境に必要なライブラリ(Module)がなかったことです。
それでは、なぜrequirements.txtに必要なライブラリを記載することによって、ModuleNotFoundErrorが解消したのでしょうか。
それは、Hugging Face Spaceは実行環境を構築(Build)するときに、requirements.txtに記載されているライブラリをインストールする仕様になっているからです。
実際に環境構築時のログを見てみると、以下の部分でrequirements.txtに記載されているライブラリをインストールしていることが分かります。
--> RUN --mount=target=requirements.txt,source=requirements.txt pip install --no-cache-dir -r requirements.txt
CACHED
まとめ
今回の記事では、Hugging Face SpacesでNotFoundModuleErrorが発生する場合の対処方法について解説をいたしました!
Hugging Face Spacesはデータサイエンティストが自身の作成したモデルをポートフォリオ的に披露する場所としては、軽量・無料と魅力が非常に大きいので、ぜひ皆さんも使いこなしてみてください!
コメント