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
3
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
570
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
hiroisojp
0
28
オンライン広告入札システムとZGC ( JJUG CCC 2021 Spring )
hiroisojp
0
12
200,000 Req/sec をさばく広告入札システムを支えるパフォーマンスチューニング術 #jjug_ccc #ccc_g6
hiroisojp
0
4
Logicadの秒間16万リクエストをさばく広告入札システムにおける、gRPCの活用事例 ( JJUG CCC 2018 Spring )
hiroisojp
0
3
Other Decks in Programming
See All in Programming
Revisiting the Hotwire Landscape after Turbo 8 @ RailsConf 2024, Detroit
marcoroth
3
590
Timeline エディター拡張入門
yucchiy
0
440
Namespace, What and Why
tagomoris
3
590
Fast JSX: Don't clone props object #28768
yossydev
1
230
Criando a Woovi em uma semana
daniloab
0
120
酒飲んでたらテックリードになった話
spbaya0141
0
200
TypeScriptでもLLMアプリケーション開発 / LLM Application In Typescript
rkaga
5
1.3k
CREってこういうこと? 体験入社 - 提案資料 - / what-is-cre-trial-employment
shinden
1
620
Try creating your own orderedmap
kazamori
1
280
ペパボOpenTelemetry革命
pyama86
2
220
freeeのエンジニアが 就活で出そうな コーディングテストを 解説してみる
freee
0
140
Sheets API使ってみた
toshi0383
2
180
Featured
See All Featured
Embracing the Ebb and Flow
colly
80
4.2k
The Language of Interfaces
destraynor
151
23k
Debugging Ruby Performance
tmm1
70
11k
Designing for humans not robots
tammielis
247
25k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
67
14k
Web Components: a chance to create the future
zenorocha
306
41k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
34
8.9k
The MySQL Ecosystem @ GitHub 2015
samlambert
244
12k
5 minutes of I Can Smell Your CMS
philhawksworth
199
19k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
81
44k
How STYLIGHT went responsive
nonsquared
92
4.8k
A Philosophy of Restraint
colly
197
16k
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/