見出し画像

MOAIで推奨される計算機のスペック

ソルバー比較のブログのコメント欄に、推奨スペックを聞いてくれた方がいたので、今回は簡単に説明しようと思います、

例として、数理最適化ソルバー Gurobi を用いて大規模な施設配置問題(例:15,000顧客と1,000施設)を解くために推奨される計算機のスペックと構成について、以下に詳細を記載します。この種の問題は計算負荷が非常に高いため、適切なハードウェア選定が重要です。

推奨される計算機スペック

1. CPU

  • 高クロック周波数のプロセッサ: Gurobiはシングルスレッド性能が重要であり、高クロック周波数のCPUが推奨されます[4][5]。

  • コア数: Gurobiは並列処理をサポートしていますが、モデル依存でスケーリング効果が異なるため、16~32コア程度が現実的です[4][5]。

    • 推奨CPU例:

      • AMD EPYC 7003シリーズ (例: EPYC 7313P, 16コア)

      • Intel Xeon Scalable Processors (例: Xeon Gold 6348, 24コア)

2. メモリ (RAM)

  • 問題サイズに応じて大容量メモリが必要です。特にMIP(混合整数計画)では、ノード探索中に大量のメモリを消費することがあります[4][5]。

  • 推奨容量: 最低256GB、可能であれば512GB以上。

  • メモリ帯域幅: 高速なDDR5メモリや複数チャンネル構成(例: AMD EPYCは最大8チャンネル)を活用するとパフォーマンス向上が期待できます[5][13]。

3. ストレージ

  • 高速ストレージ: 大規模な問題では一時ファイル(ノードファイル)への書き込みが発生するため、高速なNVMe SSDを推奨します[4]。

  • 容量は1TB以上を確保。

4. OS

  • Linux (例: Ubuntu 22.04) が推奨されます。GurobiはLinux環境での動作が最適化されており、安定性とパフォーマンス面で有利です[2][4]。

5. その他

  • 冷却性能: 長時間の高負荷計算に耐えられる冷却システム。

  • 専用マシン: 他のプロセスによるリソース競合を避けるため、専用ハードウェアで運用することを推奨します[4]。

推奨構成例

構成1: 高性能ワークステーション

  • CPU: AMD Ryzen Threadripper PRO 5975WX (32コア, 高クロック)

  • RAM: 512GB DDR4 ECC

  • ストレージ: 2TB NVMe SSD

  • OS: Ubuntu 22.04

構成2: サーバーグレードシステム

  • CPU: AMD EPYC 7313P (16コア) ×2

  • RAM: 1TB DDR5

  • ストレージ: RAID構成のNVMe SSD (合計4TB)

  • OS: Ubuntu Server 22.04

構成3: クラウドベース (オンデマンド利用)

クラウドプロバイダー(AWS, Azure, Google Cloud)で以下のインスタンスを使用:

  • AWS EC2インスタンス例:

    • インスタンスタイプ: m6i.metal (Intel Xeon Platinum, 最大128 vCPU, 512GB RAM)

    • ストレージ: EBS最適化ボリューム

注意事項

  1. ベンチマークテスト:
    問題に特化したハードウェア要件を確認するため、実際のモデルでベンチマークテストを行うことが重要です[5][19]。

  2. Gurobiパラメータ調整:
    ハードウェア性能を最大限活用するために、Gurobiのパラメータ(並列スレッド数やノードファイル設定など)を調整してください[23][31]。

  3. エネルギー効率:
    NVIDIA Grace Hopper Superchipなど、省エネルギーかつ高性能なCPUも選択肢として検討可能です[2]。

Citations:
[1] https://www.gurobi.com/jupyter_models/facility-location-problem/
[2] https://developer.nvidia.com/blog/boosting-mathematical-optimization-performance-and-energy-efficiency-on-the-nvidia-grace-cpu/
[3] https://www.gurobi.com/resources/beyond-speed-understanding-the-true-meaning-of-solver-performance/
[4] https://support.gurobi.com/hc/en-us/articles/8172407217041-What-hardware-should-I-select-when-running-Gurobi
[5] https://support.gurobi.com/hc/en-us/articles/360013196532-How-does-Gurobi-perform-on-different-computer-hardware
[6] https://www.gurobi.com/resources/facility-location-problem-demo/
[7] https://www.gurobi.com/news/gurobi-12-0-brings-new-performance-improvements-innovative-nonlinear-capabilities-and-smarter-resource-management/
[8] https://stackoverflow.com/questions/65969365/gurobi-solving-capacity-location-problem
[9] https://nitc.trec.pdx.edu/sites/default/files/Chauhan 2019 - Maximum coverage capacitated facility location problem with range constrained drones.pdf
[10] https://www.solver.com/gurobi-solver-engine-lpmip-software
[11] https://assets.gurobi.com/pdfs/benchmarks.pdf
[12] https://gurobi.github.io/modeling-examples/
[13] https://www.gurobi.com/resources/better-hardware-for-solving-mathematical-optimization-problems-the-future-is-looking-bright/
[14] https://github.com/HarshavardhanV/Warehouse-location-and-optimization-Case-Study-Using-Gurobi-and-python-/blob/master/Problem description.txt
[15] https://support.gurobi.com/hc/en-us/articles/26993681729681-Gurobi-in-Embedded-Systems
[16] https://qiita.com/osaphex/items/ea20f17855ca25da402e
[17] https://stackoverflow.com/questions/502102/best-open-source-mixed-integer-optimization-solver
[18] https://www.hexaly.com/how-does-hexaly-perform-compared-to-gurobi-optimizer
[19] https://www.researchgate.net/post/What-are-the-best-specifications-of-a-computer-for-solving-integer-problems-with-solver-cplex
[20] https://www.solver.com/gurobi-solver-engine-lpmip
[21] https://www.youtube.com/watch?v=pVQjjzxKdvM
[22] https://mobook.github.io/MO-book/notebooks/03/06-facility-location.html
[23] https://www.youtube.com/watch?v=BzOso3QrF4Q
[24] https://www.gurobi.com/jupyter_models/facility-location-problem/
[25] https://www.linkedin.com/advice/1/how-can-gurobi-optimize-your-operations-research-nb9oe
[26] https://www.gurobi.com/resources/facility-location-problem-demo/
[27] https://towardsai.net/p/machine-learning/solving-facility-location
[28] https://www.gurobi.com/solutions/gurobi-optimizer/
[29] https://www.hexaly.com/example/capacitated-facility-location-problem-cflp
[30] https://stackoverflow.com/questions/65969365/gurobi-solving-capacity-location-problem
[31] https://www.youtube.com/watch?v=Jvgg2kBewp8
[32] https://support.gurobi.com/hc/en-us/articles/360013417211-Where-do-I-place-the-Gurobi-license-file-gurobi-lic

実際に線形計画緩和問題を解くために必要なメモリ量を計算しておきましょう。
15,000顧客と1,000施設の施設配置問題をGurobiで解く場合、メモリ使用量はモデルの具体的な構造や制約の数に依存しますが、以下の情報を基に概算を示します。

メモリ使用量の計算要素

1. 問題サイズ

  • 変数数: 各顧客がどの施設に割り当てられるかを決定するバイナリ変数( x[i,j], i = 1, ..., 15000; j = 1, ..., 1000)が存在します。この場合、変数の総数は約15,000,000個です。

  • 制約数:

    • 各顧客が1つの施設に割り当てられる制約(15,000本)。

    • 各施設の容量制約(最大1,000本)。

    • その他の制約(例えば距離やコスト関連)が追加される場合があります。

2. メモリ消費要因

  • 行列の密度: Gurobiは内部で係数行列(通常は疎行列)を扱います。行列が密になるほどメモリ使用量が増加します。

  • 非ゼロ要素数: 制約行列内の非ゼロ要素数がメモリ消費の主要因です。例えば、各顧客がすべての施設にアクセス可能な場合、非ゼロ要素数は最大で 15000 × 1000 = 15,000,000になります。

  • モデルデータ構造: Gurobiはモデルデータを効率的に管理しますが、大規模な問題ではこれもメモリ消費に影響します。

3. 実例からの参考

  • 大規模MIP問題(例: 約281万列、582万行、1億以上の非ゼロ要素)の場合、16GB RAMではメモリ不足となるケースが報告されています[2][5]。

  • 他の事例では、約34万行、53万列、800万非ゼロ要素で数十GBのRAMを必要とすることもあります[5]。

推定メモリ使用量

以下は一般的な計算式と推定値です:

  • 基本メモリ消費量: 非ゼロ要素数 × 8バイト(浮動小数点表現)+ モデル構造データ

  • 仮に非ゼロ要素数が 15,000,000とすると、基本的な行列データだけで約120MB(15 × 10^6  × 8バイト)となります。

  • モデル構造や探索ノードデータなどを含めると、少なくとも 16GB〜32GB のRAMが推奨されます。

実務的な推奨

  • RAM容量: 問題サイズや探索プロセス中に生成される補助データを考慮すると、64GB以上を備えたシステムが望ましいです。

  • 設定調整:

    • NodefileStart パラメータを設定し、一時的なノードデータをディスクに書き出すことでメモリ消費を抑えられます[5]。

    • SoftMemLimit を設定してソフトな終了条件を設定することも有効です[2]。

これに分枝限定法のメモリが加わるのですが、これは双対ギャップに依存します。
容量制約なしなら、ギャップは小さいので 64GBでも足りそうですが、複数品目、多段階、容量制約などがつくと128GBの方が安全でしょう。

Citations:
[1] https://www.gurobi.com/jupyter_models/facility-location-problem/
[2] https://support.gurobi.com/hc/en-us/community/posts/17033516216209-Please-help-me-with-out-of-memory
[3] https://docs.alliancecan.ca/wiki/Gurobi
[4] https://estudogeral.uc.pt/bitstream/10316/21298/3/Thesis JT.pdf
[5] https://stackoverflow.com/questions/78413301/out-of-memory-while-running-mip-model-in-python-with-gurobi-package
[6] https://stackoverflow.com/questions/65969365/gurobi-solving-capacity-location-problem
[7] https://www.mdpi.com/1999-4893/17/4/135
[8] https://www.gurobi.com/news/gurobi-12-0-brings-new-performance-improvements-innovative-nonlinear-capabilities-and-smarter-resource-management/
[9] https://discourse.julialang.org/t/does-gurobi-support-a-different-precision-other-than-float64/117658
[10] https://webperso.info.ucl.ac.be/~pschaus/assets/publi/JOC2023-caching.pdf
[11] https://support.gurobi.com/hc/en-us/community/posts/5062292199825-Facility-Location-Optimization-with-capacity-constraints-Customers-1000-Potential-facilities-1000-not-reaching-solutions
[12] https://support.gurobi.com/hc/en-us/community/posts/360075289172-Large-scale-optimization-with-Gurobi
[13] https://support.gurobi.com/hc/ja/community/posts?after=ZERFUmcAAAAAZDlmAGEAAAAAaREKNosBBAAA&filter_by=not_planned&sort_by=recent_activity
[14] https://theses.hal.science/tel-04473412v1/file/120451_DURAN_MATELUNA_2024_archivage.pdf
[15] https://support.gurobi.com/hc/en-us/community/posts/5700214943121--Restarting-kernel-for-large-scale-linear-programming-problem
[16] https://www.researchgate.net/publication/349859576_A_branch-and-Benders-cut_algorithm_for_a_bi-objective_stochastic_facility_location_problem
[17] https://www.researchgate.net/publication/361963357_Multi-level_multi-capacitated_facility_location_problem_formulation_and_resolution
[18] https://support.gurobi.com/hc/en-us/community/posts?before=ZB6O3mIAAAAAaZEw2GkuBwAA&page=54
[19] https://scholar.smu.edu/cgi/viewcontent.cgi?article=1026&context=engineering_managment_etds
[20] https://discourse.julialang.org/t/high-memory-usage-with-convex-jl-when-solving-optimization-problem-with-sparse-matrices/115896
[21] https://support.gurobi.com/hc/ja/community/posts?after=ZLO83GMAAAAAaZGpSguMCwAA&filter_by=answered

MOAIでは、深層学習を用いて最適化の高速化を行います。そのためには、GPU付きのマシンが必要になります(数理最適化ソルバーにはGPUは今のところ無意味です;メタヒューリスティクスにはGPUを用いた近傍計算の高速化の研究があります)。

例として、深層学習を用いて10,000程度の複数出力を予測するために必要な計算機のスペックと構成について、以下に詳細を示します。特にGPUの選択が重要であり、モデルの規模やデータセットのサイズに応じた適切な構成が必要です。

推奨される計算機スペック

1. GPU

  • VRAM容量: モデルのサイズやバッチサイズに応じてVRAMが必要です。少なくとも24GB以上を推奨します。

    • 推奨GPU例:

      • NVIDIA RTX 4090 (24GB VRAM): 高性能かつコストパフォーマンスが良い。

      • NVIDIA A100 (40GBまたは80GB HBM2eメモリ): 大規模モデルや高いメモリ帯域幅が必要な場合に最適。

      • NVIDIA H100 (80GB HBM3メモリ): 最新世代で、FP8対応により高速化が可能[4][6][8]。

  • 性能指標:

    • Tensorコア数、FLOPS(Floating Point Operations per Second)、およびメモリ帯域幅が重要[8]。

    • 例えば、H100はFP8でA100の約4.6倍の性能を発揮可能[6]。

2. CPU

  • コア数とスレッド数: データローディングや前処理のため、GPU1枚あたり2〜4スレッドを推奨[9]。

  • 推奨CPU例:

    • AMD Ryzen Threadripper PROシリーズ(高コア数・高スレッド数)。

    • Intel Xeon Scalable Processors(PCIeレーン数が多く、多GPU構成に適している)。

3. メモリ (RAM)

  • モデルとデータセットサイズに応じて十分なRAMが必要です。一般的にはGPUのVRAM合計の1〜2倍を推奨[9]。

    • 推奨容量: 最低128GB、可能なら256GB以上。

4. ストレージ

  • 高速ストレージ: NVMe SSDを使用し、データローディング速度を向上させる。

    • 容量: データセットサイズに応じて1TB以上を推奨。

5. ネットワーク

  • 複数GPUやクラスタ構成の場合、高速ネットワーク(例: InfiniBand)を推奨[7]。

推奨構成例

構成1: 高性能ワークステーション

  • GPU: NVIDIA RTX 4090 ×2

  • CPU: AMD Ryzen Threadripper PRO 5975WX (32コア)

  • RAM: 256GB DDR4

  • ストレージ: 2TB NVMe SSD

  • OS: Ubuntu 22.04

構成2: サーバーグレードシステム

  • GPU: NVIDIA A100 (80GB) ×4

  • CPU: Intel Xeon Gold 6348 (24コア) ×2

  • RAM: 512GB DDR5

  • ストレージ: RAID構成のNVMe SSD (合計4TB)

  • ネットワーク: InfiniBand対応

  • OS: Ubuntu Server 22.04

構成3: クラウドベース(オンデマンド利用)

クラウドプロバイダー(AWS, GCP, Azure)で以下のインスタンスを利用:

  • AWS EC2インスタンス例:

    • p4d.24xlarge (8×NVIDIA A100, 96 vCPU, 1.1TB RAM)

    • p5インスタンス(NVIDIA H100搭載)

注意事項

  1. モデル規模とデータ依存:
    モデルの複雑さ(FLOPs)やデータセットサイズによって必要なハードウェアリソースが変わります。事前にプロファイリングを行い、リソース要件を見積もることが重要です[2][6]。

  2. 冷却と電力供給:
    高性能GPUは発熱と消費電力が大きいため、適切な冷却システムと電源ユニット(PSU)が必要です。例えば、RTX 4090は450W、H100は700W程度消費します[5][9]。

  3. スケーラビリティ:
    将来的な拡張性を考慮し、複数GPU対応のマザーボードや高速ネットワーク接続を備えた構成がおすすめです[5][7]。

これらの構成は、10,000出力予測など大規模な深層学習タスクに適しており、高いパフォーマンスと柔軟性を提供します。

Citations:
[1] https://www.reddit.com/r/pytorch/comments/1bsadcw/10000_budget_to_build_optimal_gputpu_setup_for/
[2] https://www.usenix.org/system/files/hotcloud20_paper_yeung.pdf
[3] https://community.juniper.net/blogs/sharada-yeluri/2023/10/03/large-language-models-the-hardware-connection
[4] https://www.nvidia.com/en-us/data-center/h100/
[5] https://towardsdatascience.com/how-to-build-a-multi-gpu-system-for-deep-learning-in-2023-e5bbb905d935?gi=dd0db3395d84
[6] https://nvidia.github.io/TensorRT-LLM/blogs/H100vsA100.html
[7] https://d2l.ai/chapter_computational-performance/hardware.html
[8] https://timdettmers.com/2023/01/30/which-gpu-for-deep-learning/comment-page-1/
[9] https://timdettmers.com/2018/12/16/deep-learning-hardware-guide/
[10] https://www.machinelearningmastery.com/deep-learning-models-for-multi-output-regression/
[11] https://learnopencv.com/demystifying-gpu-architectures-for-deep-learning/
[12] https://arxiv.org/pdf/1811.11880.pdf
[13] https://kth.diva-portal.org/smash/get/diva2:1886212/FULLTEXT01.pdf

おわりに

数理最適化と深層学習では、必要な計算機のスペックがだいぶ異なります。何事もそうなのですが、世の中に万能薬はなく、適材適所が大切だということです。MOAI Labでは、問題に応じて、最適な手法の組み合わせを提案しています。お問い合わせはお気軽にこちらまでお願いします。

いいなと思ったら応援しよう!