OpenAIのLambdaレイヤーを作成した際にレイヤーの構造は正しいのに上手く動かないという事象に遭遇しました。ローカルでは上手く動くのにLambdaレイヤーにすると動かないという困った事象について解説します。
2024/8/9に原因と対応方法を修正しました。
発生したエラー
OpenAIのLambdaレイヤーを作成してLambda関数を動かしたところ、以下のエラーが発生しました。
Response
{
"errorMessage": "Unable to import module 'lambda_function': No module named 'pydantic_core._pydantic_core'",
"errorType": "Runtime.ImportModuleError",
"requestId": "de568349-a66b-4867-a69c-921c5f995bb3",
"stackTrace": []
}
エラーの原因
Windows環境でLambdaレイヤーを構築したために発生した事象でした。Windows環境でopenaiライブラリをインストールするとpydantic_coreに_pydantic_core.cp312-win_amd64.pyd
というファイルが含まれます。拡張子.pyd(Python Dynamic module)はwindows環境専用のファイルであるため、Lambdaが実行されるLinux環境では動かすことができません。Linux環境でインストールスト _pydantic_core.cpython-39-x86_64-linux-gnu.so
というファイルになります。拡張子.so(Shared Object)はLinux環境で動かすことができるのでエラーが解消されます。
対応方法
恒久対応
Linux環境でLambdaレイヤーを作成して下さい。
暫定対応
Linux環境が準備できずどうしてもWindows環境でLambdaレイヤーを作成する必要がある場合はFastAPIの0.99.0をインストールすることで回避できます。FastAPIの0.99.0をインストールすることでpydantic_coreを使用しないpydantic1.10.17がインストールされエラーが解消します。
Windowsであれば以下のコマンドでレイヤーを作成することで動きます。
py -m venv .python-openai-layer
cd .python-openai-layer
Scripts\activate
mkdir python\lib\python3.12\site-packages
pip install fastapi==0.99.0 -t python\lib\python3.12\site-packages
pip install openai -t python\lib\python3.12\site-packages
zip -r openai-layer.zip python
pydanticはpydantic_coreを使用することで高速化を図っています。
暫定対応では処理速度に影響が出る可能性があります。
極力Linux環境で構築することをお勧めします。
まとめ
OpenAIのLambdaレイヤーを作成する際のはまりポイントについて解説しました。構築する環境で動きが異なるとは思ってもみませんでした。ネットで調べるとFastAPIをダウングレードする方法はたくさん見つかりますが、詳細な原因と副作用まで書いているサイトは見たことがありません。この記事が皆さんの役に立つことを期待しています。
コメント