Upgrade to Pro — share decks privately, control downloads, hide ads and more …

JVMパラメータチューニングにおけるOptunaの活用事例 ( Optuna Meetup #1 )

JVMパラメータチューニングにおけるOptunaの活用事例 ( Optuna Meetup #1 )

Optuna Meetup #1 の発表資料です。
(SlideShareより移行)

hiroisojp

June 26, 2021
Tweet

More Decks by hiroisojp

Other Decks in Programming

Transcript

  1. ULS Copyright © 2011-2021 UL Systems, Inc. All rights reserved.

    Proprietary & Confidential JVMパラメータチューニングにおける Optunaの活用事例
  2. 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
  3. ULS Copyright © 2011-2021 UL Systems, Inc. All rights reserved.

    Proprietary & Confidential 2 アジェンダ 1.自己紹介 2.チューニング対象について(ZGC) 3.Optunaを用いたZGCパラメータチューニング 4.利用した感想
  4. ULS 3 Copyright © 2011-2021 UL Systems, Inc. All rights

    reserved. Proprietary & Confidential 自己紹介
  5. ULS Copyright © 2011-2021 UL Systems, Inc. All rights reserved.

    Proprietary & Confidential 4 磯田 浩靖 - 所属:ウルシステムズ株式会社 - 連絡先:[email protected] - twitter:hiroisojp - Javaエンジニア、認定スクラムマスタ - AWS DeepRacer(強化学習)の大会とか出てます 栗原 秀馬 - 所属:SMN株式会社 - 連絡先:[email protected] - 競技プログラミングにハマっている。Atcoderで青色です 自己紹介
  6. ULS 5 Copyright © 2011-2021 UL Systems, Inc. All rights

    reserved. Proprietary & Confidential チューニング対象について(ZGC)
  7. 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
  8. ULS Copyright © 2011-2021 UL Systems, Inc. All rights reserved.

    Proprietary & Confidential 7 Logicad = オンライン広告入札システム - 秒間40万件のリクエストを処理 - 3〜5ms以内のレスポンスが求められる - 99thだとスパイクして75msかかる時がある(これをZGCで解決できないか) 対象システムにおけるZGCへの期待
  9. ULS 8 Copyright © 2011-2021 UL Systems, Inc. All rights

    reserved. Proprietary & Confidential Optunaを用いたZGCパラメータチューニング
  10. ULS Copyright © 2011-2021 UL Systems, Inc. All rights reserved.

    Proprietary & Confidential 9 課題: JVMパラメータの最適な組み合わせがわからない ZGC用のJVMパラメータはそこそこあるため膨大な組み合わせ から良さそうな組み合わせを見つけるのは大変 https://wiki.openjdk.java.net/display/zgc/Main
  11. ULS Copyright © 2011-2021 UL Systems, Inc. All rights reserved.

    Proprietary & Confidential 10 - Python製のハイパーパラメータ最適化フレームワーク - パラメータ値の試行錯誤を自動化し、良い性能が出る値を自動的に発見 - 枝刈り機能 - 見込みのない組み合わせは処理を打ち切り、効率的に探索を進める機能 - https://github.com/optuna/optuna 課題: JVMパラメータの最適な組み合わせがわからない 良い組み合わせを探索するために今回はOptunaを利用
  12. ULS Copyright © 2011-2021 UL Systems, Inc. All rights reserved.

    Proprietary & Confidential 11 Optuna ハイパーパラメータ最適化 手動で値の組み合わせを指定するのではなく、 自動で組み合わせを試して最適なものを探索する https://www.slideshare.net/pfi/optuna 人が1つ1つ組み合わせを決める Optunaが組み合わせを決めてくれる
  13. ULS Copyright © 2011-2021 UL Systems, Inc. All rights reserved.

    Proprietary & Confidential 12 Optuna 枝刈り機能 見込みのない組み合わせは処理を途中で打ち切られ、 短時間で効率的に探索を進めることができる 性能がでないと予測 される組み合わせも 長時間実施 性能がでないと予測 される組み合わせは 途中で打ち切られる 枝刈りなし 枝刈りあり
  14. 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 . . ・・・
  15. ULS Copyright © 2011-2021 UL Systems, Inc. All rights reserved.

    Proprietary & Confidential 14 OptunaでJVMパラメータの組み合わせを決める OptunaでJVMパラメータの組み合わせを 決定し、起動スクリプトに渡す 利用するJVMパラメータの値を範囲指定 しておくとOptunaが選択してくれる 選択されたJVMパラメータの組み合わせで Javaアプリケーションを起動、メトリクスを 収集する(次ページで詳細化)
  16. ULS Copyright © 2011-2021 UL Systems, Inc. All rights reserved.

    Proprietary & Confidential 15 アプリサーバを起動、メトリクスを取得 OptunaでJVMパラメータの組み合わせを 決定し、起動スクリプトに渡す 起動したらメトリクスを定期的に収集 (次ページで詳細化) Optunaで選択されたJVMパラメータの 組み合わせでJavaアプリケーションを起動
  17. ULS Copyright © 2011-2021 UL Systems, Inc. All rights reserved.

    Proprietary & Confidential 16 Optunaへのメトリクスを受け渡す 定期的にアプリサーバからメトリクスを 取得してOptunaに渡す メトリクスをJMX経由で取得 枝刈りする場合 Optuna側で判断してほしい場合は trial.should_prune()を用いる メトリクスをOptunaに渡す 例はQPS 5分間平均
  18. ULS Copyright © 2011-2021 UL Systems, Inc. All rights reserved.

    Proprietary & Confidential 17 Javaからメトリクスを取得する例 Javaのメトリクス収集ライブラリを用いて JMXなど外部サービスで取得できるようにする (メトリクス収集=Micrometerなど) スループット計測用 処理時間計測用 QPS1分間平均、5分間平均など
  19. ULS Copyright © 2011-2021 UL Systems, Inc. All rights reserved.

    Proprietary & Confidential 18 Optunaへのメトリクスの受け渡しの仕組み アプリ起動〜メトリクス取得を繰り返して、 JVMパラメータの組み合わせごとの結果を記録 結果はRDBに保存され、グラフでも確認できる 繰り返し
  20. ULS Copyright © 2011-2021 UL Systems, Inc. All rights reserved.

    Proprietary & Confidential 19 OptunaでJVMパラメータの組み合わせを探索する どのJVMパラメータの影響が大きいかを可視化したり、 組み合わせの結果をまとめてみれる どのJVMパラメータ が寄与しているか 5分間平均の変遷 (途中経過)がわかる QPS 5分間平均の性能の例
  21. ULS Copyright © 2011-2021 UL Systems, Inc. All rights reserved.

    Proprietary & Confidential 20 1つのパラメータに着目した例 例えば、このアプリケーションでは ヒープは単純に増やせば増やすほど効果がありそう 32GB〜80GB 縦軸:QPS チューニング対象の指標 高いほどよい
  22. ULS Copyright © 2011-2021 UL Systems, Inc. All rights reserved.

    Proprietary & Confidential 21 例えば、このアプリケーションでは -XX:ZFragmentationLimitはデフォルト値(25)近辺が良さそう 1つのパラメータに着目した例 1〜100 縦軸:QPS チューニング対象の指標 高いほどよい
  23. ULS Copyright © 2011-2021 UL Systems, Inc. All rights reserved.

    Proprietary & Confidential 22 パラメータ間の関連を確認したい場合 等高線としてみることができる パラメータ間の関連に着目した例 色が濃い=性能が悪い部分 色が薄い=性能が良い部分 点=あるTrialでの値
  24. ULS Copyright © 2011-2021 UL Systems, Inc. All rights reserved.

    Proprietary & Confidential 23 -XX:ZMarkStackSpaceLimit、-XX:ZFragmentationLimitは ともに低い値の組み合わせのときに性能が良さそう パラメータ間の関連に着目した例 色が濃い=性能が悪い部分 色が薄い=性能が良い部分
  25. ULS Copyright © 2011-2021 UL Systems, Inc. All rights reserved.

    Proprietary & Confidential 24 ヒープサイズ、-XX:ZMarkStackSpaceLimitは あまり相関がなく、ヒープサイズが大きければ大きいほど性能が良さそう パラメータ間の関連に着目した例 色が薄い=性能が良い部分がヒ ープが大きい時にまんべんなく 現れている
  26. 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 . . ・・・ ・・・ グラフ・数値から めぼしい組み合わせを探す
  27. ULS Copyright © 2011-2021 UL Systems, Inc. All rights reserved.

    Proprietary & Confidential 26 ZGCのパラメータチューニングによる効果 デフォルトのJVMパラメータと各種JVMパラメータを設定した ものはきちんと性能が変わる = JVMパラメータをチューニングする意味はある JVMパラメータ設定あり デフォルト設定
  28. ULS 27 Copyright © 2011-2021 UL Systems, Inc. All rights

    reserved. Proprietary & Confidential 利用した感想
  29. ULS Copyright © 2011-2021 UL Systems, Inc. All rights reserved.

    Proprietary & Confidential 28 - APIがわかりやすく、深く悩まずとも利用できる - メンバーにコードを見せてもだいたいどんなチューニングをしたか理解して もらえた - 試験の自動化ツールとして使い勝手がよい - 結果のDBへの保存や、並列実行時の面倒さをOptunaが吸収してくれた - 周辺ツールが整っているのも嬉しい - ダッシュボードでブラウザから試験の進捗確認 - ビジュアライザーで図表ベースの結果判断 - いろいろ応用が効きそう、アプリのチューニングにも使えそう - 不要な入札を防ぐ枝刈りロジックの順序入れ替えにも適用できそう 利用した感想
  30. ULS Copyright © 2011-2021 UL Systems, Inc. All rights reserved.

    Proprietary & Confidential 29 お問い合わせ先 mailto: [email protected] https://www.ulsystems.co.jp/