医療職からデータサイエンティストへ医療職からデータサイエンティストへ統計学、機械学習に関する記事をまとめています。FastAPI+AWSlambdaでサーバレスな機械学習推論APIを作成する2022-06-11FastAPI+AWSlambdaでサーバレスな機械学習推論APIを作成するPython機械学習モデルの予測結果を返す簡単なAPIサーバーを作成する機会があったので、勉強も兼ねてPythonのFastAPIと、AWSのlambdaを使ってサーバレスな推論APIを作成してみました。今回のコードはこちらになります。上記のような構成で作成しました。APIgatewayをトリガーにして、lambdaを起動します。lambdaはECRから、dockerイメージをpullし、機械学習モデルをS3から取得します。リクエストがあったタイミングのみ実行されるため、常にサーバーを立ち上げておく必要がなく、サーバーレスな機械学習推論APIとなっています。学習モデルの作成とS3へのアップロードまずは、肝心の機械学習モデルを作成します。今回はシンプルに、部屋の広さ(RM)と築年数(AGE)から家賃を予測する重回帰モデルを作成しました。モデルをpickle形式で保存し、S3へアップロードしています。実行には、AWSのアカウントとawscliの事前設定が必要です。バケットがすでにあればエラーになる。続いて、PyhotnでAPIを作成するためのライブラリFastAPIを使って、APIを作っていきます。FastAPIの使い方は公式チュートリアルがわかりやすいです!FastAPI動作確認のためのgetメソッドhealthと、家賃予測のためのpostメソッドpredictを作成しました。Mangum(app)FastAPIの良いところは、APIのドキュメントを自動で作成してくれるところにあります。uvicornを使って以下のコマンドを実行し、http://127.0.0.1:8000/docsへアクセスすると、APIのドキュメントを見ることができます。ドキュメントだけでなく、動作の確認を行うこともできます。続いて、lambdaで、pythonを動作させるためにdockerイメージを作成します。lambda-pythonのベースイメージもありますが、機械学習関連のライブラリーが動かないことがあるので、独自イメージを作成しました。イメージサイズを小さくするため、マルチステージビルドを採用しています。マルチステージビルドを使う。]dockerファイルを作成したら、ECRにプッシュします。ECRには予め、api-lambdaというリポジトリを作成しておきました。「プッシュコマンドの表示」というところから、コマンドの実行方法が確認できますので、その通りに実行します。{userid}.dkr.ecr.ap-northeast-1.amazonaws.com/api-lambda:latestlambdaとAPIgatewayの作成ここまでできたら、あと一息です。lambdaをECRのコンテナイメージから作成し、APIgatewayをトリガーにします。lambdaの作成や、APIgatewayの作成については、いろいろなところで解説がされているので省きます。(すみません、、)ちなみに、、APIgatewayは、どこからでもアクセスできてしまうので、必要であれば、IAMや送信元IPアドレスで制限をかけることもできます。EC2などとの連携を考える場合は、IAMでの制限が適切ですね。実行テストpythonからrequestsを使って、実行テストしてみます。144.2419374598331}]うまくできていそうです!ちなみに、、lambdaには起動時間があり、初めの一回目のリクエストは少し時間がかかります。数分でリセットされるため、たまにしかリクエストされない場合は、毎回応答に時間がかかることになります。解決策としては、3~5分毎に自動でリクエストを投げる設定をしておくと良いようです。まとめ今回は、サーバレスな推論APIを作ってみました。簡単なAPIであれば、エンジニアでなくても簡単にできてしまうのがクラウドサービスを使うメリットですね!※本記事は筆者が個人的に学んだこと感じたことをまとめた記事になります。所属する組織の意見・見解とは無関係です。学んだこと、日々の所感をまとめていきます。※本ブログは筆者が個人的に学んだこと感じたことをまとめたブログになります。所属する組織の意見・見解とは無関係です。medi_data0826引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。