AWS Lambdaでopenai apiを使用する際の詰まりどころ
AWS Lambdaでopenai apiを使用したかったのですが、色々とエラーが起こったので備忘録を残しておきます。自分用のメモですが一応。
他に何か思い出したら追記します。
参考サイト様ありがとうございます。何か問題や間違い等ございましたらお手数ですがご指摘ください。
①ランタイムのタイムアウトを3秒→1分程度にしておく
Lambdaは最初、タイムアウトまでの時間が3秒に設定されています。
openai apiを用いてリクエストを送った場合、結果が返ってくるまでに3秒以上の時間がかかる場合がほとんどです。(UI上でChatGPTに質問をした時も3秒以上かかることがほとんどですよね、そういうものです🙃)
そのため、「設定」→「一般設定」からタイムアウトまでの時間をある程度伸ばしておき、生成に時間がかかる場合に対応する必要があります。
②fast APIのバージョンを昔のものに変更しておく
参考サイト様
openaiのライブラリをlambda上で利用しようとすると、以下のようなエラーが起こることがあります。
Unable to import module 'lambda_function': No module named 'pydantic_core._pydantic_core
openaiと依存関係のあるfastapiのバージョンが新すぎる?ことが問題らしいです。
解決策としては、fastapiのバージョンを下げることみたいです。
mkdir python
pip install -t ./python fastapi==0.99.0
zip -r fastapi.zip ./python
上記のzipをレイヤーにしてください。
③(場合による)Lambdaと同じ環境下でpip installしたライブラリをレイヤーに追加する
参考サイト様
Lambda関数はAmazon Linux2で動いているため、その環境下でpip installしたopenaiのパッケージをレイヤーに登録しなければ、環境が異なる故のエラーが起きてしまいます。
Unable to import module 'なんとか': cannot import name 'かんとか' from 'うんとか'
Docker Desktopを用いてLambdaに近い環境を作り、その中でpip installを行い、ライブラリのzipファイルを作成してレイヤーにすればいいかと思います。(それかCloud9等で行うか?)
④(場合による)urllibのバージョンをv1に戻し、requestsのエラーを防ぐ
参考サイト様
Lambdaでrequestsを使おうとした時、以下のようなエラーが生じる場合があります。
[ERROR] Runtime.ImportModuleError:
Unable to import module 'lambda_function':
cannot import name 'DEFAULT_CIPHERS' from 'urllib3.util.ssl_' (/var/task/urllib3/util/ssl_.py)
Traceback (most recent call last):
botocoreを使用した時に問題が生じる模様。
urllib3のバージョンをv2以降からv1以前のものに変更(ダウングレード?)すればいいらしい。
mkdir python
pip install -t ./python urllib3==1.26.16
zip -r fastapi.zip ./python
上記のzipをレイヤーにしてください。
その他
何かありましたらコメント等で教えてください。
この記事が気に入ったらサポートをしてみませんか?