Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Pythonで学ぶLambda パフォーマンスチューニング
Search
yasuaki9973
August 24, 2025
Programming
54
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Pythonで学ぶLambda パフォーマンスチューニング
Serverless LT初心者向け LT大会 #57 での発表資料
https://serverlesslt.connpass.com/event/364007/
yasuaki9973
August 24, 2025
More Decks by yasuaki9973
See All by yasuaki9973
ペアプログラミング向けMCPの構築と実践的学び
yasuaki9973
0
120
Other Decks in Programming
See All in Programming
Simple Storage Service(S3) is not simple
iwatsukayura
0
290
AI時代のコードレビューは人に向けるな、仕組みに向けろ
texmeijin
5
3.7k
作れる、でも消せるか?──安全に「枯らして消す」機能削除術 / Drain, Then Delete
chobishiba
2
630
なぜCTOを降りてFDEを選んだのか?〜なぜプロダクト企業がFDEで顧客の現場に踏み込むのか〜
gonta
1
210
外から家のPCの電源入れたい!をPHPで解決する
kawashimo0
1
130
[ハンズオン]AIへの指示だけで「五目並べ」を作ってみよう
satoshi256kbyte
1
380
Unity6 URPによる海底をテーマにしたVJシステムの解説 | Unity Shader 完全に理解した 勉強会
gam0022
0
370
[2026-09-26]空論ジェネリックプロセス~テスト資産とAIで紡ぐ、再現可能なパフォーマンスチューニングの話~
tosite
0
270
ActionController meets Protocol Buffers
sorah
0
520
見えないものを探る要求要件定義に必要な基本的思考 / invisible-requirement-thinking
minodriven
15
8.5k
Long Living Tokens, Die, Die, Die! (or: The One Ring is Banned in Modern)
sylph01
0
300
ChromeでローカルLLM
ryu1013
0
140
Featured
See All Featured
Are puppies a ranking factor?
jonoalderson
2
4.1k
Speed Design
sergeychernyshev
33
2.2k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.1k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
410
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
620
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
600
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
2
950
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
800
Navigating Team Friction
lara
192
16k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
480
New Earth Scene 8
popppiees
4
2.7k
Transcript
Pythonで学ぶLambdaパフォーマンスチューニング 1
自己紹介 氏名: 寺田 泰晃 職種: バックエンドエンジニア 得意領域: サーバーレスアーキテクチャ 好きなAWSサービス: AWS Lambda、AWS X-Ray Qiita: @yasuaki9973 2
今日のゴール AWS Lambdaのパフォーマンスチューニングの実践的な知見を共有 コールドスタートの仕組みと最適化手法 メモリサイズがパフォーマンスに与える影響 実測データに基づくチューニング指針 明日から使える最適化フローチャート 3
AWS Lambdaとは? AWSが提供するサーバーレスコンピューティングサービス サーバー管理不要でコードを実行 従量課金(実行時間 × メモリ使用量) 多言語対応(Python、Node.js、Java、Go等) 主な用途 REST
API処理、バッチ処理、イベント処理 4
コールドスタートとは? 5
典型的なコード例 (Python on Lambda) # handler外の処理(コールドスタート時のみ実行される) import boto3 s3_client =
boto3.client( 's3') def lambda_handler( event, context): # handler内の処理(常に実行される) return {} 6
Lambdaのチューニング要素 メモリサイズがLambdaの主要なチューニング要素です。 一般的に知られていること メモリサイズ ↑ → CPUスペック ↑ 疑問点 メモリサイズを大きくすることで、逆に時間がかかる部分はあるのか?
トレードオフは存在するのか? 7
Lambdaのライフサイクルを3つのフェーズに分割 「AWS管理フェーズ」 、 「Initフェーズ」 、 「Invokeフェーズ」の 3つのフェーズに分割して、それぞれのDurationを測定することを考えてみます。 8
各フェーズにおけるDurationの測定方法 参考: AWS X-Ray を使用した Lambda 関数呼び出しの視覚化 9
検証の前提条件 言語:Python3.12 Lambdaの形式:zip形式 VPC内/VPC外:VPC外 CPUアーキテクチャ:arm64 メモリサイズ:512MB 実行するプログラム: 【補足資料】検証で利用するプログラムを参照 ※ 傾向を見ることが目的の為、それぞれの条件で計測は1回のみ行っています。
※ 統計的信頼性の観点から言うと、複数回測定の平均値を取る方が好ましいです。 10
AWS管理フェーズのDuration 下のグラフから分かるように、AWS管理フェーズでは メモリサイズによってDurationは特に変化しません。 11
InitフェーズのDuration Initフェーズでは、メモリサイズによらずDurationは一定です。これはBoost Host CPUというLambdaの仕様で、Initフェーズの間はメモリサイズに連動するスペックの CPUではなく、Boost Host CPUが割り当てられるのでこのような結果になります。 12
InvokeフェーズのDuration Invokeフェーズは、メモリサイズの増加によってDurationが小さくなりました。グラ フをよく見ると、メモリサイズが1700MB付近で性能が頭打ちになっていることが分 かります。※1vCPU相当のメモリ(1769MB)がシングルスレッド処理での性能限界 13
ライブラリのimport時間による影響 ライブラリのimportがCPUバウンドな処理だと仮定して、handler内/外の両方で定義 した千万回のループ処理の実行時間を比較してみます。結果としては、1vCPU相当の メモリ(1769MB)付近でBoost Host CPUと同等の処理性能になりました。 14
主要ライブラリのimport時間と対策 ライブラリ名 バージョン import時間(ms) pandas 2.2.3 2209 Requests 2.32.3 328
boto3 1.35.66 603 実践的な対策 重いライブラリ: 軽量な代替手段を検討 urllib.request: Requestsの代替で50ms程度に短縮 バッチ処理: 重い処理の切り出し 15
Lambda最適化のフローチャート X-Ray測定 (現状把握) フェーズ判定 ボトルネック特定 → Initフェーズ問題 → • 不要ライブラリ削除
• 軽量ライブラリに置き換える Invokeフェーズ問題 (CPU依存) → • メモリサイズを256MB〜 1769MBの範囲で調整 Invokeフェーズ問題(IO 依存) → • WebSocketの利用など、別の対 策が必要 16
参考資料 参考: AWS Lambdaのコールドスタートを短くする為に、ユーザーに出来ること 参考: コンテナ形式のLambdaはPythonライブラリのimportが早いか検証してみる 17
【補足資料】検証で利用するプログラム import time from aws_lambda_powertools import Tracer tracer = Tracer()
def execute_loop(): start_time = time.time() for i in range( 10000000): pass elapsed_time = time.time() - start_time print( f'elapsed_time: {elapsed_time} ') execute_loop() @tracer.capture_lambda_handler def lambda_handler( event, context): execute_loop() return {} 18
【補足資料】Boost Host CPUについて 現象の観測事実 Initフェーズでメモリサイズに関係なく一定の高いCPU性能が観測される この現象はコミュニティで「Boost Host CPU」と呼ばれている AWS公式の説明 AWS公式ドキュメントでは明確な言及なし
参考: 詳解 AWS Lambdaコールドスタート 19