Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
JVMパラメータチューニングにおけるOptunaの活用事例 ( Optuna Meetup #1 )
Search
hiroisojp
June 26, 2021
Programming
0
32
JVMパラメータチューニングにおけるOptunaの活用事例 ( Optuna Meetup #1 )
Optuna Meetup #1 の発表資料です。
(SlideShareより移行)
hiroisojp
June 26, 2021
Tweet
Share
More Decks by hiroisojp
See All by hiroisojp
Foreign Function & Memory API ( FFM API )を用いたNativeライブラリ呼び出しと既存ライブラリの比較 ( JJUG CCC 2023 Fall )
hiroisojp
1
910
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
hiroisojp
0
110
オンライン広告入札システムとZGC ( JJUG CCC 2021 Spring )
hiroisojp
0
26
200,000 Req/sec をさばく広告入札システムを支えるパフォーマンスチューニング術 #jjug_ccc #ccc_g6
hiroisojp
0
12
Logicadの秒間16万リクエストをさばく広告入札システムにおける、gRPCの活用事例 ( JJUG CCC 2018 Spring )
hiroisojp
0
17
Other Decks in Programming
See All in Programming
Defying Front-End Inertia: Inertia.js on Rails
skryukov
0
480
Preact、HooksとSignalsの両立 / Preact: Harmonizing Hooks and Signals
ssssota
1
1.5k
リアクティブシステムの変遷から理解するalien-signals / Learning alien-signals from the evolution of reactive systems
yamanoku
3
1.2k
AHC045_解説
shun_pi
0
520
AIコーディングの理想と現実
tomohisa
19
22k
スモールスタートで始めるためのLambda×モノリス(Lambdalith)
akihisaikeda
2
270
KawaiiLT 登壇資料 キャリアとモチベーション
hiiragi
0
110
Strategic Design (DDD)for the Frontend @DDD Meetup Stuttgart
manfredsteyer
PRO
0
140
Do Dumb Things
mitsuhiko
0
430
Sharing features among Android applications: experience feedback
jbvincey
0
110
API for docs
soutaro
2
1.2k
Dissecting and Reconstructing Ruby Syntactic Structures
ydah
0
630
Featured
See All Featured
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
For a Future-Friendly Web
brad_frost
176
9.7k
How GitHub (no longer) Works
holman
314
140k
Code Review Best Practice
trishagee
67
18k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
Build The Right Thing And Hit Your Dates
maggiecrowley
35
2.6k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.4k
Scaling GitHub
holman
459
140k
Making Projects Easy
brettharned
116
6.1k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
60k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
30k
Transcript
ULS Copyright © 2011-2021 UL Systems, Inc. All rights reserved.
Proprietary & Confidential JVMパラメータチューニングにおける Optunaの活用事例
ULS Copyright © 2011-2021 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 1 この資料について - JJUG CCC 2021 Springの発表内容のうち、Optunaにフォーカスした内容になります - フォーカス=Optuna部分のサンプルコードを拡充 - Optunaの内容は主に利用者目線の話が中心です - チューニングの背景やGCログの話にも興味があれば以下のスライドを参照ください https://www.slideshare.net/hiroiso/zgc
ULS Copyright © 2011-2021 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 2 アジェンダ 1.自己紹介 2.チューニング対象について(ZGC) 3.Optunaを用いたZGCパラメータチューニング 4.利用した感想
ULS 3 Copyright © 2011-2021 UL Systems, Inc. All rights
reserved. Proprietary & Confidential 自己紹介
ULS Copyright © 2011-2021 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 4 磯田 浩靖 - 所属:ウルシステムズ株式会社 - 連絡先:
[email protected]
- twitter:hiroisojp - Javaエンジニア、認定スクラムマスタ - AWS DeepRacer(強化学習)の大会とか出てます 栗原 秀馬 - 所属:SMN株式会社 - 連絡先:
[email protected]
- 競技プログラミングにハマっている。Atcoderで青色です 自己紹介
ULS 5 Copyright © 2011-2021 UL Systems, Inc. All rights
reserved. Proprietary & Confidential チューニング対象について(ZGC)
ULS Copyright © 2011-2021 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 6 ZGC = Javaのガベージ・コレクション(GC)のうちの一つ ZGCが対象システムにマッチするかを検証する過程において、 JVMパラメータチューニングを行い、Optunaを用いた ZGCは次の目標を達成するように設計されたGC - サブミリ秒(1ミリ秒以下)の最大一時停止時間 - 一時停止時間がヒープサイズに応じて増加しない - 8MBから16TBのヒープを処理 チューニング対象であるZGCは低レイテンシなGC https://wiki.openjdk.java.net/display/zgc/Main
ULS Copyright © 2011-2021 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 7 Logicad = オンライン広告入札システム - 秒間40万件のリクエストを処理 - 3〜5ms以内のレスポンスが求められる - 99thだとスパイクして75msかかる時がある(これをZGCで解決できないか) 対象システムにおけるZGCへの期待
ULS 8 Copyright © 2011-2021 UL Systems, Inc. All rights
reserved. Proprietary & Confidential Optunaを用いたZGCパラメータチューニング
ULS Copyright © 2011-2021 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 9 課題: JVMパラメータの最適な組み合わせがわからない ZGC用のJVMパラメータはそこそこあるため膨大な組み合わせ から良さそうな組み合わせを見つけるのは大変 https://wiki.openjdk.java.net/display/zgc/Main
ULS Copyright © 2011-2021 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 10 - Python製のハイパーパラメータ最適化フレームワーク - パラメータ値の試行錯誤を自動化し、良い性能が出る値を自動的に発見 - 枝刈り機能 - 見込みのない組み合わせは処理を打ち切り、効率的に探索を進める機能 - https://github.com/optuna/optuna 課題: JVMパラメータの最適な組み合わせがわからない 良い組み合わせを探索するために今回はOptunaを利用
ULS Copyright © 2011-2021 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 11 Optuna ハイパーパラメータ最適化 手動で値の組み合わせを指定するのではなく、 自動で組み合わせを試して最適なものを探索する https://www.slideshare.net/pfi/optuna 人が1つ1つ組み合わせを決める Optunaが組み合わせを決めてくれる
ULS Copyright © 2011-2021 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 12 Optuna 枝刈り機能 見込みのない組み合わせは処理を途中で打ち切られ、 短時間で効率的に探索を進めることができる 性能がでないと予測 される組み合わせも 長時間実施 性能がでないと予測 される組み合わせは 途中で打ち切られる 枝刈りなし 枝刈りあり
ULS Copyright © 2011-2021 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 13 組み合わせ検証サイクルのイメージ OptunaでJVMパラメータの組み合わせ、範囲を指定して ベンチマークを自動化 Trial 1 Xmx=32GB ParallelGCThreads=5 . . Trial 2 Xmx=40GB ParallelGCThreads=3 . . Trial 99 Xmx=80GB ParallelGCThreads=10 . . ・・・
ULS Copyright © 2011-2021 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 14 OptunaでJVMパラメータの組み合わせを決める OptunaでJVMパラメータの組み合わせを 決定し、起動スクリプトに渡す 利用するJVMパラメータの値を範囲指定 しておくとOptunaが選択してくれる 選択されたJVMパラメータの組み合わせで Javaアプリケーションを起動、メトリクスを 収集する(次ページで詳細化)
ULS Copyright © 2011-2021 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 15 アプリサーバを起動、メトリクスを取得 OptunaでJVMパラメータの組み合わせを 決定し、起動スクリプトに渡す 起動したらメトリクスを定期的に収集 (次ページで詳細化) Optunaで選択されたJVMパラメータの 組み合わせでJavaアプリケーションを起動
ULS Copyright © 2011-2021 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 16 Optunaへのメトリクスを受け渡す 定期的にアプリサーバからメトリクスを 取得してOptunaに渡す メトリクスをJMX経由で取得 枝刈りする場合 Optuna側で判断してほしい場合は trial.should_prune()を用いる メトリクスをOptunaに渡す 例はQPS 5分間平均
ULS Copyright © 2011-2021 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 17 Javaからメトリクスを取得する例 Javaのメトリクス収集ライブラリを用いて JMXなど外部サービスで取得できるようにする (メトリクス収集=Micrometerなど) スループット計測用 処理時間計測用 QPS1分間平均、5分間平均など
ULS Copyright © 2011-2021 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 18 Optunaへのメトリクスの受け渡しの仕組み アプリ起動〜メトリクス取得を繰り返して、 JVMパラメータの組み合わせごとの結果を記録 結果はRDBに保存され、グラフでも確認できる 繰り返し
ULS Copyright © 2011-2021 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 19 OptunaでJVMパラメータの組み合わせを探索する どのJVMパラメータの影響が大きいかを可視化したり、 組み合わせの結果をまとめてみれる どのJVMパラメータ が寄与しているか 5分間平均の変遷 (途中経過)がわかる QPS 5分間平均の性能の例
ULS Copyright © 2011-2021 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 20 1つのパラメータに着目した例 例えば、このアプリケーションでは ヒープは単純に増やせば増やすほど効果がありそう 32GB〜80GB 縦軸:QPS チューニング対象の指標 高いほどよい
ULS Copyright © 2011-2021 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 21 例えば、このアプリケーションでは -XX:ZFragmentationLimitはデフォルト値(25)近辺が良さそう 1つのパラメータに着目した例 1〜100 縦軸:QPS チューニング対象の指標 高いほどよい
ULS Copyright © 2011-2021 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 22 パラメータ間の関連を確認したい場合 等高線としてみることができる パラメータ間の関連に着目した例 色が濃い=性能が悪い部分 色が薄い=性能が良い部分 点=あるTrialでの値
ULS Copyright © 2011-2021 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 23 -XX:ZMarkStackSpaceLimit、-XX:ZFragmentationLimitは ともに低い値の組み合わせのときに性能が良さそう パラメータ間の関連に着目した例 色が濃い=性能が悪い部分 色が薄い=性能が良い部分
ULS Copyright © 2011-2021 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 24 ヒープサイズ、-XX:ZMarkStackSpaceLimitは あまり相関がなく、ヒープサイズが大きければ大きいほど性能が良さそう パラメータ間の関連に着目した例 色が薄い=性能が良い部分がヒ ープが大きい時にまんべんなく 現れている
ULS Copyright © 2011-2021 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 25 今回実施したパラメータチューニングのおさらい OptunaでJVMパラメータの組み合わせ・検証を自動化 グラフ、数値からめぼしい組み合わせを探索 Trial 1 Xmx=32GB ParallelGCThreads=5 . . Trial N Xmx=80GB ParallelGCThreads=20 . . ・・・ ・・・ グラフ・数値から めぼしい組み合わせを探す
ULS Copyright © 2011-2021 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 26 ZGCのパラメータチューニングによる効果 デフォルトのJVMパラメータと各種JVMパラメータを設定した ものはきちんと性能が変わる = JVMパラメータをチューニングする意味はある JVMパラメータ設定あり デフォルト設定
ULS 27 Copyright © 2011-2021 UL Systems, Inc. All rights
reserved. Proprietary & Confidential 利用した感想
ULS Copyright © 2011-2021 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 28 - APIがわかりやすく、深く悩まずとも利用できる - メンバーにコードを見せてもだいたいどんなチューニングをしたか理解して もらえた - 試験の自動化ツールとして使い勝手がよい - 結果のDBへの保存や、並列実行時の面倒さをOptunaが吸収してくれた - 周辺ツールが整っているのも嬉しい - ダッシュボードでブラウザから試験の進捗確認 - ビジュアライザーで図表ベースの結果判断 - いろいろ応用が効きそう、アプリのチューニングにも使えそう - 不要な入札を防ぐ枝刈りロジックの順序入れ替えにも適用できそう 利用した感想
ULS Copyright © 2011-2021 UL Systems, Inc. All rights reserved.
Proprietary & Confidential 29 お問い合わせ先 mailto:
[email protected]
https://www.ulsystems.co.jp/